diff --git a/changelog.d/467-cgt-band-targets.added.md b/changelog.d/467-cgt-band-targets.added.md new file mode 100644 index 0000000000..3db92ea7a6 --- /dev/null +++ b/changelog.d/467-cgt-band-targets.added.md @@ -0,0 +1 @@ +Bind the HMRC CGT 2024-25 individual observations by size of gain (Table 2.1a, twelve bands from GBP 3,000 under the incumbent `hmrc/cgt_taxpayers_band_` and `hmrc/capital_gains_band_` names, closing #467), by age band (Table 6: taxpayers, gains and liability for the eight adult bands) and by country and region (Table 5 over the twelve-area region tier, restated on the individuals basis by the Table 1 share through `scaled_by_ratio`) as UK calibration targets, alongside the three national totals. The 0-2,999 gain band (below the 2024 annual exempt amount) and the 0-15 age band (no under-16 gainers on the frame) are signed out row by row; the Table 3 fence stays in place and records the promotion. diff --git a/changelog.d/725-cgt-age-region-conditioning.changed.md b/changelog.d/725-cgt-age-region-conditioning.changed.md new file mode 100644 index 0000000000..c288f7e472 --- /dev/null +++ b/changelog.d/725-cgt-age-region-conditioning.changed.md @@ -0,0 +1 @@ +The UK CGT amounts redraw (`hmrc_cgt_gains` and its spine projection) now conditions on age and household region as well as the taxable-income proxy: the allocation targets are raked to the Table 6 age and Table 5 region margins (the latter on the individuals basis via the Table 1 share) from the vendored `hmrc_cgt_conditioning_facts.json`, and gainers are walked inside income x age x region cells with a pooled per-income-band fallback where a cell lacks support. The stage summary reports achieved against published at the Table 6 and Table 5 grain and the age x gain-band joint microcosm#725 measured, plus the rake and fallback receipts. The rake also holds Table 6 gains by age as one linear constraint per age group (an exponential tilt of the group's cells that keeps its count), so each age group carries its published gains as well as its taxpayers, and the youngest group is 16-24 on its own (seven age groups) so its rows are no longer ranked under the 25-34 carriers. Each cell walk's signed rounding error is carried into the next cell's boundaries for the same gain band, so a band's walked total within an income band stays within one person's weight of its raked total instead of accumulating the overshoot of many cell walks. diff --git a/changelog.d/725-cgt-asset-type-stage.added.md b/changelog.d/725-cgt-asset-type-stage.added.md new file mode 100644 index 0000000000..aeebeda130 --- /dev/null +++ b/changelog.d/725-cgt-asset-type-stage.added.md @@ -0,0 +1 @@ +Add the `hmrc_cgt_asset_type_spine` UK spine stage after the CGT amounts redraw. Every liable gainer (net gains above the annual exempt amount) carries a main asset type in the new person column `capital_gains_asset_type` and, where flagged as a residential property disposer, its net gain in `capital_gains_residential_property`. The residential flag is a logistic in log gains solved so the household-weighted count and gains of flagged persons equal HMRC Table 8a 2024-25 restated on the individuals basis by the Table 8b individuals/all share, realised by seeded systematic sampling; the non-residential remainder draws one of the five Table 7 asset types from a size-tilted categorical whose type weights reproduce the fenced Table 7 2023-24 gains shares (diagnostic only). The rows come from the new vendored `hmrc_cgt_asset_type_facts.json`; the stage declares its operations in the manifests, a stage-health gate holds the realised residential totals within 5 percent, an enum-domain gate holds the column to the declared values, and the graph parity fixture carries synthetic facts sized to its frame. diff --git a/changelog.d/725-cgt-donor-vintage.changed.md b/changelog.d/725-cgt-donor-vintage.changed.md new file mode 100644 index 0000000000..a031fff741 --- /dev/null +++ b/changelog.d/725-cgt-donor-vintage.changed.md @@ -0,0 +1 @@ +The CGT size-band donor stage (`cgt_band_donors`) now takes its nine retained HMRC Table 2.1a bands from the vendored 2024-25 conditioning facts (392,000 individuals, GBP 118.2bn from GBP 12,300 upward) instead of the retired hand-extracted 2023-24 copy `hmrc_cgt_size_bands.json`, so donor starting weights sit on the same vintage as the size-of-gain calibration targets; the reviewed retained-mass pins are asserted at stage time. diff --git a/changelog.d/725-cgt-residential-property-targets.added.md b/changelog.d/725-cgt-residential-property-targets.added.md new file mode 100644 index 0000000000..99922ecd7e --- /dev/null +++ b/changelog.d/725-cgt-residential-property-targets.added.md @@ -0,0 +1 @@ +Bind HMRC Table 8a 2024-25 residential property taxpayers and gains (UK residents, all reporting channels, restated on the individuals basis by the Table 8b share through `scaled_by_ratio`) as UK calibration targets `hmrc.cgt.residential_property_taxpayers` and `hmrc.cgt.residential_property_gains`, measured over the liable gainers the asset-type stage flags residential. Table 7's asset-type rows stay fenced. diff --git a/changelog.d/725-cgt-table3-joint-2024-25.changed.md b/changelog.d/725-cgt-table3-joint-2024-25.changed.md new file mode 100644 index 0000000000..0a12835b9b --- /dev/null +++ b/changelog.d/725-cgt-table3-joint-2024-25.changed.md @@ -0,0 +1 @@ +The UK CGT amounts redraw now draws from HMRC Table 3 for 2024-25 (the 2026 release's joint of individuals and gains by size of gain and taxable income, with the taxable-income bands moved onto the GBP 125,140 Personal Allowance taper edge) copied verbatim from the pinned Chronicle feed into `hmrc_cgt_conditioning_facts.json`, instead of the 2025 release's 2023-24 ODS rescaled onto the 2024-25 band levels. The pinned `Table_3_2025_Size_of_gain_by_income.ods` input, its `verify_pinned_cgt_ods` operation, the `cgt_published_fact_surface` artifact and the `--cgt-ods` build argument are retired; both CGT manifests declare a `verify_vendored_fact_resource` operation that checks the resource's recorded feed against `chronicle_feed.json` before a row is read, and the loader refuses a Table 3 row set whose band totals disagree with the Table 2.1a bands folded onto them beyond publication rounding. diff --git a/changelog.d/725-chronicle-feed-repin-c5e5bf8.changed.md b/changelog.d/725-chronicle-feed-repin-c5e5bf8.changed.md new file mode 100644 index 0000000000..b912ade128 --- /dev/null +++ b/changelog.d/725-chronicle-feed-repin-c5e5bf8.changed.md @@ -0,0 +1 @@ +Re-pin the UK Chronicle consumer feed to `c5e5bf8` (PolicyEngine/chronicle#271 and #273: DESNZ subnational energy and NEED 2024 packages; HMRC CGT Tables 7, 8 and 9), 276,205 rows. Every national and local reference, membership register, census, validation-level block, vendored resource and compile-parity receipt regenerates from the new artifact; no compiled target value moved on either surface, and the `need_energy_facts.json` selection now carries both NEED vintages (456 rows). diff --git a/changelog.d/725-filter-aware-gated-provider.changed.md b/changelog.d/725-filter-aware-gated-provider.changed.md new file mode 100644 index 0000000000..06c22545e5 --- /dev/null +++ b/changelog.d/725-filter-aware-gated-provider.changed.md @@ -0,0 +1 @@ +`parameter_gated_threshold` bindings now honour their `filters`, `household_conditions` and a declared `groupby_variable` band after the gate, and accept a geography fan-out predicate, so a gated measure (the AEA-gated CGT taxpayer proxy) can be sliced into published age, region and size-of-gain rows instead of publishing the national population on every row. Numeric universe constraints on a Chronicle fact (`cgt_gain >= 3000`, `age >= 16`) are stamped as `ledger_filter__lower_bound` / `_upper_bound` metadata so banded measures can read edges that publishers state as constraints rather than dimensions. diff --git a/changelog.d/725-scaled-by-ratio-value-operation.added.md b/changelog.d/725-scaled-by-ratio-value-operation.added.md new file mode 100644 index 0000000000..333e43780e --- /dev/null +++ b/changelog.d/725-scaled-by-ratio-value-operation.added.md @@ -0,0 +1 @@ +Add the `scaled_by_ratio` value operation for Ledger target references: a published cell is translated by the quotient of two other facts (`base * numerator / denominator`, ratio in (0, 1]), with the base, numerator, denominator, ratio and member fact keys recorded on the compiled spec. It restates HMRC CGT Table 5 country/region cells, which include trusts, on the individuals basis of the national targets using the Table 1 individuals/total share. The runtime candidate prefilter and the authoring compile now keep the facts an operand selector reaches outside the cell's own selector. diff --git a/docs/evidence/uk-cgt-725/calibration-comparison-round1.json b/docs/evidence/uk-cgt-725/calibration-comparison-round1.json new file mode 100644 index 0000000000..c2e83ba00e --- /dev/null +++ b/docs/evidence/uk-cgt-725/calibration-comparison-round1.json @@ -0,0 +1,745 @@ +{ + "control": { + "targets": 560, + "cgt_targets": 3, + "skipped": 0, + "initial_loss": 0.3131629526615143, + "final_loss": 0.011216285929440852, + "fraction_within_10pct": 0.9696428571428571, + "effective_sample_size": 10542.493176428226, + "realized_max_weight_ratio": 10.0, + "top_1pct_weight_share": 0.1552455511037512, + "non_cgt_within_10pct": 540, + "non_cgt_outside_25pct": [ + "hmrc/self_employment_income_income_band_20_000_to_30_000@2025" + ], + "cgt_within_10pct": 3, + "cgt_within_25pct": 3, + "cgt_outside_25pct": [] + }, + "candidate": { + "targets": 634, + "cgt_targets": 77, + "skipped": 0, + "initial_loss": 0.3085462749004364, + "final_loss": 0.011204213042148744, + "fraction_within_10pct": 0.9621451104100947, + "effective_sample_size": 10482.578410789618, + "realized_max_weight_ratio": 10.0, + "top_1pct_weight_share": 0.15565981680366497, + "non_cgt_within_10pct": 540, + "non_cgt_outside_25pct": [ + "hmrc/self_employment_income_income_band_20_000_to_30_000@2025" + ], + "cgt_within_10pct": 70, + "cgt_within_25pct": 75, + "cgt_outside_25pct": [ + "hmrc.cgt.gains_by_age_band.age_16_to_24@2025", + "hmrc.cgt.tax_by_age_band.age_16_to_24@2025" + ] + }, + "non_cgt_shared_targets": 557, + "non_cgt_crossed_10pct": { + "worse": [], + "better": [] + }, + "non_cgt_crossed_25pct": { + "worse": [], + "better": [] + }, + "cgt_rows": [ + { + "name": "hmrc.cgt.gains_by_age_band.age_16_to_24@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 319000000.0, + "candidate_estimate": 93908318.06642029, + "candidate_relative_error": -0.7056165577855164 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_25_to_34@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2499000000.0, + "candidate_estimate": 2264711938.653756, + "candidate_relative_error": -0.09375272562874905 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_35_to_44@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11775000000.0, + "candidate_estimate": 11756694044.570152, + "candidate_relative_error": -0.0015546458963777254 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_45_to_54@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 28422000000.0, + "candidate_estimate": 28564262780.701237, + "candidate_relative_error": 0.005005375438084467 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_55_to_64@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 38118000000.0, + "candidate_estimate": 38112477377.60352, + "candidate_relative_error": -0.000144882270750741 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_65_to_74@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 24260000000.0, + "candidate_estimate": 24235467443.831024, + "candidate_relative_error": -0.0010112347967426146 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_75_to_84@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11736000000.0, + "candidate_estimate": 11714316556.84219, + "candidate_relative_error": -0.0018476008144010065 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_85_plus@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2076000000.0, + "candidate_estimate": 2038613306.6853666, + "candidate_relative_error": -0.018009004486817616 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000001@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 1497797150.3974364, + "candidate_estimate": 1497152683.5495627, + "candidate_relative_error": -0.0004302764547940822 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 8790074083.38308, + "candidate_estimate": 8756234355.975298, + "candidate_relative_error": -0.0038497658935267515 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 6970985861.949795, + "candidate_estimate": 6966113198.937089, + "candidate_relative_error": -0.0006989919516696469 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 6299365751.358824, + "candidate_estimate": 6301285595.220215, + "candidate_relative_error": 0.00030476780316763505 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000005@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5890960774.765152, + "candidate_estimate": 5891921359.129771, + "candidate_relative_error": 0.00016306073004832553 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000006@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11545870966.728456, + "candidate_estimate": 11523829363.024897, + "candidate_relative_error": -0.0019090464259540745 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000007@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 32519714615.602127, + "candidate_estimate": 32186918327.256603, + "candidate_relative_error": -0.01023367800976509 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000008@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 25606804690.69088, + "candidate_estimate": 25566605585.54138, + "candidate_relative_error": -0.0015698602631242001 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000009@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 10341263627.509504, + "candidate_estimate": 10295403185.765337, + "candidate_relative_error": -0.00443470386173802 + }, + { + "name": "hmrc.cgt.gains_by_region@N92000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 1757265449.747086, + "candidate_estimate": 1766411686.0498238, + "candidate_relative_error": 0.005204812001541419 + }, + { + "name": "hmrc.cgt.gains_by_region@S92000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5680201325.83493, + "candidate_estimate": 5672412469.308121, + "candidate_relative_error": -0.0013712289547527282 + }, + { + "name": "hmrc.cgt.gains_by_region@W92000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2358632410.6946497, + "candidate_estimate": 2356163957.1955605, + "candidate_relative_error": -0.0010465613411808614 + }, + { + "name": "hmrc.cgt.gains_total@2025", + "control_target": 119258000000.0, + "control_estimate": 107931956702.93329, + "control_relative_error": -0.09497093106598058, + "candidate_target": 119258000000.0, + "candidate_estimate": 118780451766.95367, + "candidate_relative_error": -0.004004328707896541 + }, + { + "name": "hmrc.cgt.liability_total@2025", + "control_target": 22503000000.0, + "control_estimate": 22629780697.062336, + "control_relative_error": 0.005633946454354351, + "candidate_target": 22503000000.0, + "candidate_estimate": 25065767241.866356, + "candidate_relative_error": 0.11388558156096325 + }, + { + "name": "hmrc.cgt.residential_property_gains.ty2024@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 12242481474.688189, + "candidate_estimate": 12238960600.728003, + "candidate_relative_error": -0.00028759479583167434 + }, + { + "name": "hmrc.cgt.residential_property_taxpayers.ty2024@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 202630.0578034682, + "candidate_estimate": 202661.28561019897, + "candidate_relative_error": 0.00015411241090927363 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_16_to_24@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 59000000.0, + "candidate_estimate": 12050655.492611237, + "candidate_relative_error": -0.7957516018201485 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_25_to_34@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 456000000.0, + "candidate_estimate": 458723389.79726875, + "candidate_relative_error": 0.005972346046641992 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_35_to_44@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2246000000.0, + "candidate_estimate": 2486943171.444068, + "candidate_relative_error": 0.10727656787358324 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_45_to_54@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5522000000.0, + "candidate_estimate": 6110400482.883022, + "candidate_relative_error": 0.10655568324574834 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_55_to_64@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 7152000000.0, + "candidate_estimate": 8111413789.799624, + "candidate_relative_error": 0.13414622340598775 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_65_to_74@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 4409000000.0, + "candidate_estimate": 5081912631.686146, + "candidate_relative_error": 0.15262250661967472 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_75_to_84@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2260000000.0, + "candidate_estimate": 2411014837.104593, + "candidate_relative_error": 0.06682072438256319 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_85_plus@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 390000000.0, + "candidate_estimate": 393308283.65903914, + "candidate_relative_error": 0.008482778612920872 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_16_to_24@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 4000.0, + "candidate_estimate": 4012.647476196289, + "candidate_relative_error": 0.0031618690490722657 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_25_to_34@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 27000.0, + "candidate_estimate": 27078.57518386841, + "candidate_relative_error": 0.0029101919951262296 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_35_to_44@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 65000.0, + "candidate_estimate": 64942.10457229614, + "candidate_relative_error": -0.0008906988877516527 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_45_to_54@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 98000.0, + "candidate_estimate": 97889.81784439087, + "candidate_relative_error": -0.0011243077102972537 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_55_to_64@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 144000.0, + "candidate_estimate": 143422.31245231628, + "candidate_relative_error": -0.004011719081136915 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_65_to_74@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 125000.0, + "candidate_estimate": 124932.23085594177, + "candidate_relative_error": -0.0005421531524658203 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_75_to_84@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 68000.0, + "candidate_estimate": 67895.72945785522, + "candidate_relative_error": -0.0015333903256584617 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_85_plus@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 19000.0, + "candidate_estimate": 19019.399349212646, + "candidate_relative_error": 0.0010210183796129728 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000001@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11321.91780821918, + "candidate_estimate": 11346.488628387451, + "candidate_relative_error": 0.0021701994824970938 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 41513.69863013699, + "candidate_estimate": 41387.560134887695, + "candidate_relative_error": -0.0030384788494303124 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 32078.767123287675, + "candidate_estimate": 32046.018800258636, + "candidate_relative_error": -0.0010208722455940149 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 31135.273972602743, + "candidate_estimate": 31117.72386932373, + "candidate_relative_error": -0.0005636726785977741 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000005@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 33022.260273972606, + "candidate_estimate": 32994.58889770508, + "candidate_relative_error": -0.0008379613036160959 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000006@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 58496.57534246576, + "candidate_estimate": 58293.886348724365, + "candidate_relative_error": -0.003464971967243554 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000007@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 106614.72602739726, + "candidate_estimate": 106568.08265209198, + "candidate_relative_error": -0.0004374946786741085 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000008@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 114162.67123287672, + "candidate_estimate": 114015.95173072815, + "candidate_relative_error": -0.0012851793021668122 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000009@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 60383.56164383562, + "candidate_estimate": 60122.20346212387, + "candidate_relative_error": -0.004328300196224567 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@N92000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 9434.931506849316, + "candidate_estimate": 9489.673076629639, + "candidate_relative_error": 0.00580201029976559 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@S92000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 34909.24657534247, + "candidate_estimate": 34843.238636016846, + "candidate_relative_error": -0.0018908439969669035 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@W92000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 16982.87671232877, + "candidate_estimate": 16967.400955200195, + "candidate_relative_error": -0.0009112565197708191 + }, + { + "name": "hmrc.cgt.taxpayers_total@2025", + "control_target": 551000.0, + "control_estimate": 550625.616733551, + "control_relative_error": -0.0006794614636097542, + "candidate_target": 551000.0, + "candidate_estimate": 549192.8171920776, + "candidate_relative_error": -0.0032798236078445796 + }, + { + "name": "hmrc/capital_gains_band_1000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 12806000000.0, + "candidate_estimate": 12828156004.771564, + "candidate_relative_error": 0.0017301268758054414 + }, + { + "name": "hmrc/capital_gains_band_100000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 9487000000.0, + "candidate_estimate": 9490842339.38142, + "candidate_relative_error": 0.00040501100257406297 + }, + { + "name": "hmrc/capital_gains_band_10000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 289000000.0, + "candidate_estimate": 288232751.16344905, + "candidate_relative_error": -0.0026548402648821834 + }, + { + "name": "hmrc/capital_gains_band_12300@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 1747000000.0, + "candidate_estimate": 1742762763.4591463, + "candidate_relative_error": -0.002425435913482392 + }, + { + "name": "hmrc/capital_gains_band_2000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 16477000000.0, + "candidate_estimate": 16450541419.762945, + "candidate_relative_error": -0.0016057886895099122 + }, + { + "name": "hmrc/capital_gains_band_250000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 8820000000.0, + "candidate_estimate": 8802024947.038269, + "candidate_relative_error": -0.0020379878641418317 + }, + { + "name": "hmrc/capital_gains_band_25000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 3516000000.0, + "candidate_estimate": 3514018121.244543, + "candidate_relative_error": -0.0005636742762960536 + }, + { + "name": "hmrc/capital_gains_band_3000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 311000000.0, + "candidate_estimate": 310319001.087522, + "candidate_relative_error": -0.002189707114077266 + }, + { + "name": "hmrc/capital_gains_band_5000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 48474000000.0, + "candidate_estimate": 48051623955.84032, + "candidate_relative_error": -0.00871345554647199 + }, + { + "name": "hmrc/capital_gains_band_500000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11372000000.0, + "candidate_estimate": 11337989333.8238, + "candidate_relative_error": -0.002990737440749285 + }, + { + "name": "hmrc/capital_gains_band_50000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5510000000.0, + "candidate_estimate": 5516355665.250963, + "candidate_relative_error": 0.0011534782669624702 + }, + { + "name": "hmrc/capital_gains_band_6000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 448000000.0, + "candidate_estimate": 447585464.12971497, + "candidate_relative_error": -0.000925303281886237 + }, + { + "name": "hmrc/cgt_taxpayers_band_1000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 9000.0, + "candidate_estimate": 9019.947410583496, + "candidate_relative_error": 0.0022163789537217884 + }, + { + "name": "hmrc/cgt_taxpayers_band_100000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 61000.0, + "candidate_estimate": 61114.00471687317, + "candidate_relative_error": 0.0018689297848060483 + }, + { + "name": "hmrc/cgt_taxpayers_band_10000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 26000.0, + "candidate_estimate": 25944.814949035645, + "candidate_relative_error": -0.002122501960167518 + }, + { + "name": "hmrc/cgt_taxpayers_band_12300@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 97000.0, + "candidate_estimate": 96963.66179656982, + "candidate_relative_error": -0.00037462065391933794 + }, + { + "name": "hmrc/cgt_taxpayers_band_2000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5000.0, + "candidate_estimate": 4993.589327812195, + "candidate_relative_error": -0.0012821344375610352 + }, + { + "name": "hmrc/cgt_taxpayers_band_250000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 25000.0, + "candidate_estimate": 24967.479124069214, + "candidate_relative_error": -0.0013008350372314453 + }, + { + "name": "hmrc/cgt_taxpayers_band_25000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 98000.0, + "candidate_estimate": 98987.91841125488, + "candidate_relative_error": 0.010080800114845743 + }, + { + "name": "hmrc/cgt_taxpayers_band_3000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 73000.0, + "candidate_estimate": 72994.23070144653, + "candidate_relative_error": -7.903148703379174e-05 + }, + { + "name": "hmrc/cgt_taxpayers_band_5000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 3000.0, + "candidate_estimate": 2996.490288734436, + "candidate_relative_error": -0.0011699037551879882 + }, + { + "name": "hmrc/cgt_taxpayers_band_500000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 16000.0, + "candidate_estimate": 15968.293199539185, + "candidate_relative_error": -0.0019816750288009642 + }, + { + "name": "hmrc/cgt_taxpayers_band_50000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 78000.0, + "candidate_estimate": 78235.93495750427, + "candidate_relative_error": 0.0030248071474906725 + }, + { + "name": "hmrc/cgt_taxpayers_band_6000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 57000.0, + "candidate_estimate": 57006.452308654785, + "candidate_relative_error": 0.00011319839745237117 + } + ] +} diff --git a/docs/evidence/uk-cgt-725/calibration-comparison-tilt.json b/docs/evidence/uk-cgt-725/calibration-comparison-tilt.json new file mode 100644 index 0000000000..2fa94afdb7 --- /dev/null +++ b/docs/evidence/uk-cgt-725/calibration-comparison-tilt.json @@ -0,0 +1,745 @@ +{ + "control": { + "targets": 560, + "cgt_targets": 3, + "skipped": 0, + "initial_loss": 0.3131629526615143, + "final_loss": 0.011216285929440852, + "fraction_within_10pct": 0.9696428571428571, + "effective_sample_size": 10542.493176428226, + "realized_max_weight_ratio": 10.0, + "top_1pct_weight_share": 0.1552455511037512, + "non_cgt_within_10pct": 540, + "non_cgt_outside_25pct": [ + "hmrc/self_employment_income_income_band_20_000_to_30_000@2025" + ], + "cgt_within_10pct": 3, + "cgt_within_25pct": 3, + "cgt_outside_25pct": [] + }, + "candidate": { + "targets": 634, + "cgt_targets": 77, + "skipped": 0, + "initial_loss": 0.3040948808193207, + "final_loss": 0.010388974046192831, + "fraction_within_10pct": 0.9605678233438486, + "effective_sample_size": 10771.382293868124, + "realized_max_weight_ratio": 10.0, + "top_1pct_weight_share": 0.15330272321054658, + "non_cgt_within_10pct": 538, + "non_cgt_outside_25pct": [], + "cgt_within_10pct": 71, + "cgt_within_25pct": 77, + "cgt_outside_25pct": [] + }, + "non_cgt_shared_targets": 557, + "non_cgt_crossed_10pct": { + "worse": [ + "hmrc/self_employment_income_income_band_50_000_to_70_000@2025", + "obr.esa@2025" + ], + "better": [] + }, + "non_cgt_crossed_25pct": { + "worse": [], + "better": [ + "hmrc/self_employment_income_income_band_20_000_to_30_000@2025" + ] + }, + "cgt_rows": [ + { + "name": "hmrc.cgt.gains_by_age_band.age_16_to_24@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 319000000.0, + "candidate_estimate": 313274407.3495134, + "candidate_relative_error": -0.017948566302465795 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_25_to_34@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2499000000.0, + "candidate_estimate": 2246548814.2205887, + "candidate_relative_error": -0.10102088266483046 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_35_to_44@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11775000000.0, + "candidate_estimate": 11738863982.227863, + "candidate_relative_error": -0.0030688762439181902 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_45_to_54@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 28422000000.0, + "candidate_estimate": 28440843331.359566, + "candidate_relative_error": 0.0006629840039253301 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_55_to_64@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 38118000000.0, + "candidate_estimate": 38190316941.65641, + "candidate_relative_error": 0.0018971861497562889 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_65_to_74@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 24260000000.0, + "candidate_estimate": 24262504428.675697, + "candidate_relative_error": 0.00010323283906419318 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_75_to_84@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11736000000.0, + "candidate_estimate": 11683267337.722862, + "candidate_relative_error": -0.004493239798665453 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_85_plus@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2076000000.0, + "candidate_estimate": 2015978020.169549, + "candidate_relative_error": -0.028912321690968697 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000001@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 1497797150.3974364, + "candidate_estimate": 1497707525.19249, + "candidate_relative_error": -5.98380127258873e-05 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 8790074083.38308, + "candidate_estimate": 8789751152.81278, + "candidate_relative_error": -3.673809426812711e-05 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 6970985861.949795, + "candidate_estimate": 6954829103.814346, + "candidate_relative_error": -0.002317714948130649 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 6299365751.358824, + "candidate_estimate": 6287460441.570799, + "candidate_relative_error": -0.001889921979122554 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000005@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5890960774.765152, + "candidate_estimate": 5884458490.792638, + "candidate_relative_error": -0.001103773089165302 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000006@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11545870966.728456, + "candidate_estimate": 11552234029.857738, + "candidate_relative_error": 0.0005511115746588828 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000007@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 32519714615.602127, + "candidate_estimate": 32287223978.520866, + "candidate_relative_error": -0.0071492213209558 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000008@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 25606804690.69088, + "candidate_estimate": 25520321939.54021, + "candidate_relative_error": -0.003377334743452357 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000009@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 10341263627.509504, + "candidate_estimate": 10312847172.271683, + "candidate_relative_error": -0.00274787069176237 + }, + { + "name": "hmrc.cgt.gains_by_region@N92000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 1757265449.747086, + "candidate_estimate": 1753138324.8926606, + "candidate_relative_error": -0.0023486063844363556 + }, + { + "name": "hmrc.cgt.gains_by_region@S92000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5680201325.83493, + "candidate_estimate": 5693778946.240842, + "candidate_relative_error": 0.002390341402893088 + }, + { + "name": "hmrc.cgt.gains_by_region@W92000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2358632410.6946497, + "candidate_estimate": 2357846157.8750157, + "candidate_relative_error": -0.0003333511470752657 + }, + { + "name": "hmrc.cgt.gains_total@2025", + "control_target": 119258000000.0, + "control_estimate": 107931956702.93329, + "control_relative_error": -0.09497093106598058, + "candidate_target": 119258000000.0, + "candidate_estimate": 118891597263.38205, + "candidate_relative_error": -0.003072353524442389 + }, + { + "name": "hmrc.cgt.liability_total@2025", + "control_target": 22503000000.0, + "control_estimate": 22629780697.062336, + "control_relative_error": 0.005633946454354351, + "candidate_target": 22503000000.0, + "candidate_estimate": 25110092875.9396, + "candidate_relative_error": 0.11585534710659032 + }, + { + "name": "hmrc.cgt.residential_property_gains.ty2024@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 12242481474.688189, + "candidate_estimate": 12242213972.671858, + "candidate_relative_error": -2.1850310076743015e-05 + }, + { + "name": "hmrc.cgt.residential_property_taxpayers.ty2024@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 202630.0578034682, + "candidate_estimate": 202703.15572023392, + "candidate_relative_error": 0.0003607456739543478 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_16_to_24@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 59000000.0, + "candidate_estimate": 59482781.277098626, + "candidate_relative_error": 0.008182733510146202 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_25_to_34@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 456000000.0, + "candidate_estimate": 456432815.89975315, + "candidate_relative_error": 0.0009491576748972661 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_35_to_44@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2246000000.0, + "candidate_estimate": 2483803072.700427, + "candidate_relative_error": 0.1058784829476523 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_45_to_54@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5522000000.0, + "candidate_estimate": 6086206839.756372, + "candidate_relative_error": 0.10217436431661943 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_55_to_64@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 7152000000.0, + "candidate_estimate": 8120283411.955905, + "candidate_relative_error": 0.13538638310345427 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_65_to_74@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 4409000000.0, + "candidate_estimate": 5089767444.843525, + "candidate_relative_error": 0.1544040473675493 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_75_to_84@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2260000000.0, + "candidate_estimate": 2424100402.852166, + "candidate_relative_error": 0.07261079772219742 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_85_plus@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 390000000.0, + "candidate_estimate": 390016106.65436184, + "candidate_relative_error": 4.129911374831811e-05 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_16_to_24@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 4000.0, + "candidate_estimate": 4006.0354080200195, + "candidate_relative_error": 0.0015088520050048828 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_25_to_34@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 27000.0, + "candidate_estimate": 27033.607704162598, + "candidate_relative_error": 0.0012447297837999132 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_35_to_44@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 65000.0, + "candidate_estimate": 64883.4488363266, + "candidate_relative_error": -0.001793094825744629 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_45_to_54@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 98000.0, + "candidate_estimate": 97938.79466875394, + "candidate_relative_error": -0.0006245441963883979 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_55_to_64@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 144000.0, + "candidate_estimate": 144118.04681539536, + "candidate_relative_error": 0.0008197695513566336 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_65_to_74@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 125000.0, + "candidate_estimate": 125080.28143501282, + "candidate_relative_error": 0.000642251480102539 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_75_to_84@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 68000.0, + "candidate_estimate": 67951.48524284363, + "candidate_relative_error": -0.0007134523111231186 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_85_plus@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 19000.0, + "candidate_estimate": 18943.77908706665, + "candidate_relative_error": -0.002958995417544716 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000001@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11321.91780821918, + "candidate_estimate": 11352.421562194824, + "candidate_relative_error": 0.0026942214642735394 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 41513.69863013699, + "candidate_estimate": 41440.0089263916, + "candidate_relative_error": -0.0017750695837034831 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 32078.767123287675, + "candidate_estimate": 32103.746509552002, + "candidate_relative_error": 0.0007786890988772905 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 31135.273972602743, + "candidate_estimate": 31136.994695663452, + "candidate_relative_error": 5.5266032417870196e-05 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000005@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 33022.260273972606, + "candidate_estimate": 33038.048599243164, + "candidate_relative_error": 0.00047811158714056385 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000006@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 58496.57534246576, + "candidate_estimate": 58431.856536865234, + "candidate_relative_error": -0.0011063691373662762 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000007@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 106614.72602739726, + "candidate_estimate": 106644.96109636624, + "candidate_relative_error": 0.000283591864797437 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000008@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 114162.67123287672, + "candidate_estimate": 114160.20513677597, + "candidate_relative_error": -2.1601597738687674e-05 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000009@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 60383.56164383562, + "candidate_estimate": 60367.02329349518, + "candidate_relative_error": -0.0002738882883059109 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@N92000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 9434.931506849316, + "candidate_estimate": 9361.172931671143, + "candidate_relative_error": -0.007817605790209313 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@S92000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 34909.24657534247, + "candidate_estimate": 34927.127197265625, + "candidate_relative_error": 0.0005122030314966815 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@W92000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 16982.87671232877, + "candidate_estimate": 16991.912712097168, + "candidate_relative_error": 0.0005320653221158546 + }, + { + "name": "hmrc.cgt.taxpayers_total@2025", + "control_target": 551000.0, + "control_estimate": 550625.616733551, + "control_relative_error": -0.0006794614636097542, + "candidate_target": 551000.0, + "candidate_estimate": 549955.4791975815, + "candidate_relative_error": -0.0018956820370571116 + }, + { + "name": "hmrc/capital_gains_band_1000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 12806000000.0, + "candidate_estimate": 12772190365.84588, + "candidate_relative_error": -0.0026401401026174835 + }, + { + "name": "hmrc/capital_gains_band_100000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 9487000000.0, + "candidate_estimate": 9478771295.636398, + "candidate_relative_error": -0.0008673663290399161 + }, + { + "name": "hmrc/capital_gains_band_10000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 289000000.0, + "candidate_estimate": 289094558.7278524, + "candidate_relative_error": 0.0003271928299391146 + }, + { + "name": "hmrc/capital_gains_band_12300@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 1747000000.0, + "candidate_estimate": 1747764462.5677238, + "candidate_relative_error": 0.0004375859002425593 + }, + { + "name": "hmrc/capital_gains_band_2000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 16477000000.0, + "candidate_estimate": 16446650395.020588, + "candidate_relative_error": -0.0018419375480616665 + }, + { + "name": "hmrc/capital_gains_band_250000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 8820000000.0, + "candidate_estimate": 8823195174.01934, + "candidate_relative_error": 0.0003622646280431423 + }, + { + "name": "hmrc/capital_gains_band_25000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 3516000000.0, + "candidate_estimate": 3518882168.4532347, + "candidate_relative_error": 0.0008197293666765281 + }, + { + "name": "hmrc/capital_gains_band_3000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 311000000.0, + "candidate_estimate": 311520424.6444865, + "candidate_relative_error": 0.0016733911398279322 + }, + { + "name": "hmrc/capital_gains_band_5000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 48474000000.0, + "candidate_estimate": 48189087247.14931, + "candidate_relative_error": -0.005877640649640895 + }, + { + "name": "hmrc/capital_gains_band_500000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11372000000.0, + "candidate_estimate": 11359377903.628479, + "candidate_relative_error": -0.0011099275739993842 + }, + { + "name": "hmrc/capital_gains_band_50000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5510000000.0, + "candidate_estimate": 5506713997.879043, + "candidate_relative_error": -0.0005963706208634074 + }, + { + "name": "hmrc/capital_gains_band_6000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 448000000.0, + "candidate_estimate": 448349269.809736, + "candidate_relative_error": 0.0007796201110178871 + }, + { + "name": "hmrc/cgt_taxpayers_band_1000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 9000.0, + "candidate_estimate": 8989.644360303879, + "candidate_relative_error": -0.0011506266329023573 + }, + { + "name": "hmrc/cgt_taxpayers_band_100000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 61000.0, + "candidate_estimate": 61054.725732803345, + "candidate_relative_error": 0.0008971431607105693 + }, + { + "name": "hmrc/cgt_taxpayers_band_10000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 26000.0, + "candidate_estimate": 26025.944984436035, + "candidate_relative_error": 0.0009978840167705828 + }, + { + "name": "hmrc/cgt_taxpayers_band_12300@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 97000.0, + "candidate_estimate": 97229.84968566895, + "candidate_relative_error": 0.0023695843883396422 + }, + { + "name": "hmrc/cgt_taxpayers_band_2000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5000.0, + "candidate_estimate": 4996.310457229614, + "candidate_relative_error": -0.0007379085540771484 + }, + { + "name": "hmrc/cgt_taxpayers_band_250000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 25000.0, + "candidate_estimate": 25014.41899871826, + "candidate_relative_error": 0.0005767599487304688 + }, + { + "name": "hmrc/cgt_taxpayers_band_25000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 98000.0, + "candidate_estimate": 99109.49285125732, + "candidate_relative_error": 0.011321355625074737 + }, + { + "name": "hmrc/cgt_taxpayers_band_3000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 73000.0, + "candidate_estimate": 73261.0242729187, + "candidate_relative_error": 0.003575674971489057 + }, + { + "name": "hmrc/cgt_taxpayers_band_5000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 3000.0, + "candidate_estimate": 3005.328713417053, + "candidate_relative_error": 0.0017762378056844076 + }, + { + "name": "hmrc/cgt_taxpayers_band_500000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 16000.0, + "candidate_estimate": 15998.13650894165, + "candidate_relative_error": -0.00011646819114685058 + }, + { + "name": "hmrc/cgt_taxpayers_band_50000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 78000.0, + "candidate_estimate": 78174.07342656453, + "candidate_relative_error": 0.0022317105969811494 + }, + { + "name": "hmrc/cgt_taxpayers_band_6000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 57000.0, + "candidate_estimate": 57096.529205322266, + "candidate_relative_error": 0.0016934948302151863 + } + ] +} diff --git a/docs/evidence/uk-cgt-725/calibration-comparison.json b/docs/evidence/uk-cgt-725/calibration-comparison.json new file mode 100644 index 0000000000..5f05d5aa3a --- /dev/null +++ b/docs/evidence/uk-cgt-725/calibration-comparison.json @@ -0,0 +1,742 @@ +{ + "control": { + "targets": 560, + "cgt_targets": 3, + "skipped": 0, + "initial_loss": 0.3131629526615143, + "final_loss": 0.011216285929440852, + "fraction_within_10pct": 0.9696428571428571, + "effective_sample_size": 10542.493176428226, + "realized_max_weight_ratio": 10.0, + "top_1pct_weight_share": 0.1552455511037512, + "non_cgt_within_10pct": 540, + "non_cgt_outside_25pct": [ + "hmrc/self_employment_income_income_band_20_000_to_30_000@2025" + ], + "cgt_within_10pct": 3, + "cgt_within_25pct": 3, + "cgt_outside_25pct": [] + }, + "candidate": { + "targets": 634, + "cgt_targets": 77, + "skipped": 0, + "initial_loss": 0.31101059913635254, + "final_loss": 0.010303560729595374, + "fraction_within_10pct": 0.9684542586750788, + "effective_sample_size": 10530.399043895894, + "realized_max_weight_ratio": 10.0, + "top_1pct_weight_share": 0.1551798578187937, + "non_cgt_within_10pct": 540, + "non_cgt_outside_25pct": [ + "hmrc/self_employment_income_income_band_20_000_to_30_000@2025" + ], + "cgt_within_10pct": 74, + "cgt_within_25pct": 77, + "cgt_outside_25pct": [] + }, + "non_cgt_shared_targets": 557, + "non_cgt_crossed_10pct": { + "worse": [], + "better": [] + }, + "non_cgt_crossed_25pct": { + "worse": [], + "better": [] + }, + "cgt_rows": [ + { + "name": "hmrc.cgt.gains_by_age_band.age_16_to_24@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 319000000.0, + "candidate_estimate": 304602353.6742637, + "candidate_relative_error": -0.04513368754149306 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_25_to_34@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2499000000.0, + "candidate_estimate": 2290143470.954356, + "candidate_relative_error": -0.08357604203507155 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_35_to_44@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11775000000.0, + "candidate_estimate": 10711327435.452766, + "candidate_relative_error": -0.09033312650082663 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_45_to_54@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 28422000000.0, + "candidate_estimate": 28195536126.994263, + "candidate_relative_error": -0.007967907712537376 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_55_to_64@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 38118000000.0, + "candidate_estimate": 38142003324.4962, + "candidate_relative_error": 0.0006297110156933879 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_65_to_74@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 24260000000.0, + "candidate_estimate": 24211980961.303123, + "candidate_relative_error": -0.0019793503172661387 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_75_to_84@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11736000000.0, + "candidate_estimate": 11636013296.167141, + "candidate_relative_error": -0.008519657790802576 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_85_plus@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2076000000.0, + "candidate_estimate": 2035725469.179367, + "candidate_relative_error": -0.01940006301571914 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000001@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 1497797150.3974364, + "candidate_estimate": 1493263594.0932355, + "candidate_relative_error": -0.0030268159496751085 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 8790074083.38308, + "candidate_estimate": 8803463095.75986, + "candidate_relative_error": 0.00152319676145738 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 6970985861.949795, + "candidate_estimate": 6989230782.923229, + "candidate_relative_error": 0.002617265525242554 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 6299365751.358824, + "candidate_estimate": 6286858187.580633, + "candidate_relative_error": -0.0019855274756022273 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000005@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5890960774.765152, + "candidate_estimate": 5878302102.455937, + "candidate_relative_error": -0.0021488298417195353 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000006@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11545870966.728456, + "candidate_estimate": 11539937745.176668, + "candidate_relative_error": -0.000513882544581175 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000007@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 32519714615.602127, + "candidate_estimate": 32460304784.91821, + "candidate_relative_error": -0.0018268865943680418 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000008@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 25606804690.69088, + "candidate_estimate": 23986323102.863785, + "candidate_relative_error": -0.06328324081825822 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000009@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 10341263627.509504, + "candidate_estimate": 10281757357.499504, + "candidate_relative_error": -0.005754255200660732 + }, + { + "name": "hmrc.cgt.gains_by_region@N92000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 1757265449.747086, + "candidate_estimate": 1758948684.7626376, + "candidate_relative_error": 0.000957871797794594 + }, + { + "name": "hmrc.cgt.gains_by_region@S92000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5680201325.83493, + "candidate_estimate": 5683153778.657366, + "candidate_relative_error": 0.0005197796086921971 + }, + { + "name": "hmrc.cgt.gains_by_region@W92000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2358632410.6946497, + "candidate_estimate": 2365789221.530397, + "candidate_relative_error": 0.003034305304758982 + }, + { + "name": "hmrc.cgt.gains_total@2025", + "control_target": 119258000000.0, + "control_estimate": 107931956702.93329, + "control_relative_error": -0.09497093106598058, + "candidate_target": 119258000000.0, + "candidate_estimate": 117527332438.22148, + "candidate_relative_error": -0.01451196197972898 + }, + { + "name": "hmrc.cgt.liability_total@2025", + "control_target": 22503000000.0, + "control_estimate": 22629780697.062336, + "control_relative_error": 0.005633946454354351, + "candidate_target": 22503000000.0, + "candidate_estimate": 24827795323.58284, + "candidate_relative_error": 0.10331046187543172 + }, + { + "name": "hmrc.cgt.residential_property_gains.ty2024@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 12242481474.688189, + "candidate_estimate": 12283753934.687431, + "candidate_relative_error": 0.003371249536670749 + }, + { + "name": "hmrc.cgt.residential_property_taxpayers.ty2024@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 202630.0578034682, + "candidate_estimate": 202611.6247985363, + "candidate_relative_error": -9.096875918465289e-05 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_16_to_24@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 59000000.0, + "candidate_estimate": 59065527.34412755, + "candidate_relative_error": 0.001110632951314419 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_25_to_34@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 456000000.0, + "candidate_estimate": 465121807.0894269, + "candidate_relative_error": 0.020003962915409814 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_35_to_44@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2246000000.0, + "candidate_estimate": 2259400826.222906, + "candidate_relative_error": 0.00596652993005615 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_45_to_54@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5522000000.0, + "candidate_estimate": 6035210595.748004, + "candidate_relative_error": 0.09293926036725896 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_55_to_64@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 7152000000.0, + "candidate_estimate": 8116240058.089855, + "candidate_relative_error": 0.1348210372049574 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_65_to_74@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 4409000000.0, + "candidate_estimate": 5080986794.054556, + "candidate_relative_error": 0.15241251849729098 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_75_to_84@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 2260000000.0, + "candidate_estimate": 2417650409.489393, + "candidate_relative_error": 0.0697568183581386 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_85_plus@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 390000000.0, + "candidate_estimate": 394119305.54456615, + "candidate_relative_error": 0.010562321909143985 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_16_to_24@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 4000.0, + "candidate_estimate": 3998.1095790863037, + "candidate_relative_error": -0.00047260522842407227 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_25_to_34@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 27000.0, + "candidate_estimate": 27025.803797721863, + "candidate_relative_error": 0.0009556962119208442 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_35_to_44@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 65000.0, + "candidate_estimate": 64929.79407930374, + "candidate_relative_error": -0.001080091087634747 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_45_to_54@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 98000.0, + "candidate_estimate": 98029.69796689351, + "candidate_relative_error": 0.0003030404785051954 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_55_to_64@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 144000.0, + "candidate_estimate": 143696.47997426987, + "candidate_relative_error": -0.002107777956459257 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_65_to_74@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 125000.0, + "candidate_estimate": 125049.99305605888, + "candidate_relative_error": 0.0003999444484710693 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_75_to_84@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 68000.0, + "candidate_estimate": 67937.12657165527, + "candidate_relative_error": -0.0009246092403636259 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_85_plus@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 19000.0, + "candidate_estimate": 19025.52571105957, + "candidate_relative_error": 0.0013434584768194902 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000001@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11321.91780821918, + "candidate_estimate": 11281.408515930176, + "candidate_relative_error": -0.003577953220928318 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 41513.69863013699, + "candidate_estimate": 41690.90408325195, + "candidate_relative_error": 0.004268601906415528 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 32078.767123287675, + "candidate_estimate": 32090.545795440674, + "candidate_relative_error": 0.00036717970200445904 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 31135.273972602743, + "candidate_estimate": 31095.106538772583, + "candidate_relative_error": -0.0012900941185070363 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000005@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 33022.260273972606, + "candidate_estimate": 33058.8409614563, + "candidate_relative_error": 0.0011077584387076214 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000006@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 58496.57534246576, + "candidate_estimate": 58546.18591308594, + "candidate_relative_error": 0.000848093590603123 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000007@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 106614.72602739726, + "candidate_estimate": 106434.68193133672, + "candidate_relative_error": -0.001688735719437872 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000008@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 114162.67123287672, + "candidate_estimate": 113806.9841632843, + "candidate_relative_error": -0.003115616214575611 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000009@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 60383.56164383562, + "candidate_estimate": 60343.198436021805, + "candidate_relative_error": -0.0006684469533595087 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@N92000002@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 9434.931506849316, + "candidate_estimate": 9450.702218055725, + "candidate_relative_error": 0.0016715236559968919 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@S92000003@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 34909.24657534247, + "candidate_estimate": 34896.79920005798, + "candidate_relative_error": -0.00035656384785107413 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@W92000004@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 16982.87671232877, + "candidate_estimate": 16997.17297935486, + "candidate_relative_error": 0.0008418047936314031 + }, + { + "name": "hmrc.cgt.taxpayers_total@2025", + "control_target": 551000.0, + "control_estimate": 550625.616733551, + "control_relative_error": -0.0006794614636097542, + "candidate_target": 551000.0, + "candidate_estimate": 549692.5307360489, + "candidate_relative_error": -0.0023729024754102746 + }, + { + "name": "hmrc/capital_gains_band_1000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 12806000000.0, + "candidate_estimate": 12813693020.64206, + "candidate_relative_error": 0.0006007356428283091 + }, + { + "name": "hmrc/capital_gains_band_100000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 9487000000.0, + "candidate_estimate": 9476736932.984034, + "candidate_relative_error": -0.001081803206067926 + }, + { + "name": "hmrc/capital_gains_band_10000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 289000000.0, + "candidate_estimate": 289753998.038674, + "candidate_relative_error": 0.002608989753197221 + }, + { + "name": "hmrc/capital_gains_band_12300@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 1747000000.0, + "candidate_estimate": 1746958708.7930079, + "candidate_relative_error": -2.363549341279299e-05 + }, + { + "name": "hmrc/capital_gains_band_2000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 16477000000.0, + "candidate_estimate": 16515791555.92095, + "candidate_relative_error": 0.002354285119921705 + }, + { + "name": "hmrc/capital_gains_band_250000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 8820000000.0, + "candidate_estimate": 8857378911.53825, + "candidate_relative_error": 0.004237971829733556 + }, + { + "name": "hmrc/capital_gains_band_25000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 3516000000.0, + "candidate_estimate": 3514667820.6709023, + "candidate_relative_error": -0.00037889059416887025 + }, + { + "name": "hmrc/capital_gains_band_3000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 311000000.0, + "candidate_estimate": 310684830.39308655, + "candidate_relative_error": -0.0010134070961847182 + }, + { + "name": "hmrc/capital_gains_band_5000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 48474000000.0, + "candidate_estimate": 46635373586.566216, + "candidate_relative_error": -0.03793015664962216 + }, + { + "name": "hmrc/capital_gains_band_500000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 11372000000.0, + "candidate_estimate": 11395521863.061935, + "candidate_relative_error": 0.002068401605868398 + }, + { + "name": "hmrc/capital_gains_band_50000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5510000000.0, + "candidate_estimate": 5522647898.41343, + "candidate_relative_error": 0.0022954443581543037 + }, + { + "name": "hmrc/capital_gains_band_6000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 448000000.0, + "candidate_estimate": 448123311.1989345, + "candidate_relative_error": 0.00027524821190735594 + }, + { + "name": "hmrc/cgt_taxpayers_band_1000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 9000.0, + "candidate_estimate": 9013.119789361954, + "candidate_relative_error": 0.0014577543735504151 + }, + { + "name": "hmrc/cgt_taxpayers_band_100000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 61000.0, + "candidate_estimate": 60972.89083003998, + "candidate_relative_error": -0.00044441262229544216 + }, + { + "name": "hmrc/cgt_taxpayers_band_10000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 26000.0, + "candidate_estimate": 26098.53924846649, + "candidate_relative_error": 0.0037899710948650655 + }, + { + "name": "hmrc/cgt_taxpayers_band_12300@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 97000.0, + "candidate_estimate": 97161.79539616902, + "candidate_relative_error": 0.0016679937749383695 + }, + { + "name": "hmrc/cgt_taxpayers_band_2000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 5000.0, + "candidate_estimate": 5004.2957191467285, + "candidate_relative_error": 0.0008591438293457032 + }, + { + "name": "hmrc/cgt_taxpayers_band_250000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 25000.0, + "candidate_estimate": 25068.264560699463, + "candidate_relative_error": 0.0027305824279785155 + }, + { + "name": "hmrc/cgt_taxpayers_band_25000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 98000.0, + "candidate_estimate": 98939.71691703796, + "candidate_relative_error": 0.009588948133040448 + }, + { + "name": "hmrc/cgt_taxpayers_band_3000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 73000.0, + "candidate_estimate": 73002.65979003906, + "candidate_relative_error": 3.6435479987157536e-05 + }, + { + "name": "hmrc/cgt_taxpayers_band_5000000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 3000.0, + "candidate_estimate": 3026.4593048095703, + "candidate_relative_error": 0.008819768269856771 + }, + { + "name": "hmrc/cgt_taxpayers_band_500000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 16000.0, + "candidate_estimate": 16021.13005399704, + "candidate_relative_error": 0.0013206283748149871 + }, + { + "name": "hmrc/cgt_taxpayers_band_50000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 78000.0, + "candidate_estimate": 78313.82939147949, + "candidate_relative_error": 0.004023453736916567 + }, + { + "name": "hmrc/cgt_taxpayers_band_6000@2025", + "control_target": null, + "control_estimate": null, + "control_relative_error": null, + "candidate_target": 57000.0, + "candidate_estimate": 57069.829734802246, + "candidate_relative_error": 0.0012250830667060717 + } + ] +} diff --git a/docs/evidence/uk-cgt-725/candidate-age_bands-carry.csv b/docs/evidence/uk-cgt-725/candidate-age_bands-carry.csv new file mode 100644 index 0000000000..8320981e6d --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_bands-carry.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,5159.108303432562,655887314.9048431,4000.0,319000000.0 +25,29867.88049878151,2747249999.18133,27000.0,2499000000.0 +35,67519.40468137375,18286127725.325806,65000.0,11775000000.0 +45,96565.46918856239,28059879730.18966,98000.0,28422000000.0 +55,143344.12694212678,32715162499.307556,144000.0,38118000000.0 +65,126410.12415933031,16079443827.141155,125000.0,24260000000.0 +75,66085.17523508037,13286007303.970837,68000.0,11736000000.0 +85,22468.344140664172,2235057677.8380356,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/candidate-age_bands-f010.csv b/docs/evidence/uk-cgt-725/candidate-age_bands-f010.csv new file mode 100644 index 0000000000..8fb0371098 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_bands-f010.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,1866.666666666667,1427630412.755806,4000.0,319000000.0 +25,18392.864626878458,1357543266.644085,27000.0,2499000000.0 +35,72208.23457456204,8409447504.874822,65000.0,11775000000.0 +45,101014.78377935756,12412443790.795176,98000.0,28422000000.0 +55,147268.3524006765,13316052579.23403,144000.0,38118000000.0 +65,122569.61785355708,8148564375.638966,125000.0,24260000000.0 +75,62001.96974426769,3997204620.218169,68000.0,11736000000.0 +85,25966.071130821474,1458115877.6999488,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/candidate-age_bands-full.csv b/docs/evidence/uk-cgt-725/candidate-age_bands-full.csv new file mode 100644 index 0000000000..0d132c07e5 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_bands-full.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,1468.5769841269841,27527457.683879428,4000.0,319000000.0 +25,35674.59363750517,8898647557.142519,27000.0,2499000000.0 +35,65857.86193486801,16812802167.009678,65000.0,11775000000.0 +45,95091.54138804725,34916993358.82396,98000.0,28422000000.0 +55,143684.97523512645,33314728939.516693,144000.0,38118000000.0 +65,124355.09741177564,16432168886.461489,125000.0,24260000000.0 +75,64463.95010749208,5300332117.232738,68000.0,11736000000.0 +85,21011.087997267485,2126079044.291538,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/candidate-age_bands-tilt.csv b/docs/evidence/uk-cgt-725/candidate-age_bands-tilt.csv new file mode 100644 index 0000000000..9efc29985f --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_bands-tilt.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,4591.106683062192,303442299.52077776,4000.0,319000000.0 +25,29043.84217850492,3503538555.224461,27000.0,2499000000.0 +35,68727.39311133263,13667976657.630095,65000.0,11775000000.0 +45,99327.43261964028,25127464986.391624,98000.0,28422000000.0 +55,147240.2102754601,35208165541.64761,144000.0,38118000000.0 +65,127153.67847855797,18773222887.034874,125000.0,24260000000.0 +75,63764.95439293682,21867574595.025024,68000.0,11736000000.0 +85,22238.145895527192,1958541495.100905,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/candidate-age_bands-weighted.csv b/docs/evidence/uk-cgt-725/candidate-age_bands-weighted.csv new file mode 100644 index 0000000000..afd0df1f80 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_bands-weighted.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,5159.108303432562,659091134.844988,4000.0,319000000.0 +25,29867.88049878151,2809378256.535582,27000.0,2499000000.0 +35,67519.40468137375,21880028892.146782,65000.0,11775000000.0 +45,96565.46918856239,29187125440.47267,98000.0,28422000000.0 +55,143344.12694212678,36207366605.21582,144000.0,38118000000.0 +65,126410.12415933031,16558245142.944328,125000.0,24260000000.0 +75,66085.17523508037,24692652076.221214,68000.0,11736000000.0 +85,22468.344140664172,2298444156.732935,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-carry.csv b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-carry.csv new file mode 100644 index 0000000000..fe605492c8 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-carry.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,1689.3078982597056,5873340.354113438 +11,16,10000,826.0016203703703,8549880.808991386 +12,16,25000,514.0,12855779.249942236 +13,16,50000,468.25,29451079.399022292 +14,16,100000,1000.3269841269841,120206630.29714446 +15,16,250000,485.22018030513175,125023082.91377573 +16,16,500000,0.0,0.0 +17,16,1000000,0.0,0.0 +18,16,2000000,176.00162037037038,353927521.88185364 +19,16,5000000,0.0,0.0 +20,25,0,6464.721613545817,54102967.62608368 +21,25,10000,6579.816309905373,140951776.640386 +22,25,25000,5758.559518630076,252913591.51806253 +23,25,50000,6683.149643238706,531728300.07222664 +24,25,100000,2677.466746794872,483116950.92049754 +25,25,250000,433.3333333333333,205906470.60995796 +26,25,500000,1004.1666666666666,571531099.3238587 +27,25,1000000,266.66666666666663,506998842.47025716 +28,25,2000000,0.0,0.0 +29,25,5000000,0.0,0.0 +30,35,0,15553.43180834492,123000081.69250111 +31,35,10000,14185.373869672581,290286210.45378435 +32,35,25000,11463.520805108676,499588280.6271249 +33,35,50000,6758.163894994827,585822891.143846 +34,35,100000,8301.576893187506,1455544957.127164 +35,35,250000,4501.615796519411,1422072347.3380673 +36,35,500000,3088.2216135458166,2312371922.386242 +37,35,1000000,2106.5,2715590225.20431 +38,35,2000000,754.9166666666666,2632762487.4181333 +39,35,5000000,806.0833333333334,6249088321.9346285 +40,45,0,23531.55184145305,161960034.18554705 +41,45,10000,21400.818748858037,418516775.6020316 +42,45,25000,16178.8855654671,626859437.5618786 +43,45,50000,13209.954785484557,1017928846.3860545 +44,45,100000,11345.333080051272,1906485225.4981778 +45,45,250000,3960.454986943253,1470578673.123698 +46,45,500000,2531.9166666666665,1650591539.1318643 +47,45,1000000,1578.75,2240224798.4245663 +48,45,2000000,2042.5833333333333,5879146726.905525 +49,45,5000000,785.2201803051317,12687587673.370316 +50,55,0,33437.54645287425,168120198.20984054 +51,55,10000,31081.823946566135,492148955.3517739 +52,55,25000,24129.190026113865,847123379.4510751 +53,55,50000,19437.990586153355,1366760929.9765239 +54,55,100000,16100.31222247168,2502031566.6605334 +55,55,250000,6757.057898259705,2481721812.488784 +56,55,500000,6048.1526402640275,3787418542.019485 +57,55,1000000,3556.551549053356,3963848625.6574826 +58,55,2000000,1572.0,3734692960.724217 +59,55,5000000,1223.5016203703703,13371295528.76784 +60,65,0,28560.596586417807,117113252.59258646 +61,65,10000,31310.641408828764,404771849.70825773 +62,65,25000,23111.207616244676,676321610.6477175 +63,65,50000,18171.39130533331,1113523074.757136 +64,65,100000,12632.197765775722,1587054023.5719461 +65,65,250000,4789.00162037037,1702847674.605901 +66,65,500000,2359.666666666667,1391714137.259096 +67,65,1000000,4570.421189692982,4894760803.415506 +68,65,2000000,600.0,1465305303.433736 +69,65,5000000,305.0,2726032097.149271 +70,75,0,16513.093342654323,88883191.4619092 +71,75,10000,17119.865191829762,283371452.9415174 +72,75,25000,9199.161175091856,319721856.73775727 +73,75,50000,10024.423842522825,677463748.1758658 +74,75,100000,6646.345140160439,1101172073.0051475 +75,75,250000,3339.291271657142,1154223447.4460185 +76,75,500000,1776.0016203703703,1030069317.5034158 +77,75,1000000,366.66666666666663,446183896.6984081 +78,75,2000000,1000.3269841269841,2086298452.8943677 +79,75,5000000,100.0,6098619867.10643 +80,85,0,5170.694050326243,29933298.750455957 +81,85,10000,3627.338996763754,61671279.591434784 +82,85,25000,7329.329106441938,276460151.58776915 +83,85,50000,2369.506143396686,160733435.78238273 +84,85,100000,1965.5535136384651,310071348.69280934 +85,85,250000,1405.9223300970875,571444900.4525301 +86,85,500000,300.0,168230277.98480162 +87,85,1000000,100.0,144899508.33107442 +88,85,2000000,200.0,511613476.6647776 +89,85,5000000,0.0,0.0 diff --git a/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-f010.csv b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-f010.csv new file mode 100644 index 0000000000..62afede215 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-f010.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,0.0,0.0 +11,16,10000,0.0,0.0 +12,16,25000,0.0,0.0 +13,16,50000,833.3333333333334,47184591.87652004 +14,16,100000,0.0,0.0 +15,16,250000,533.3333333333334,188945129.2190324 +16,16,500000,400.0,322011658.5906596 +17,16,1000000,0.0,0.0 +18,16,2000000,0.0,0.0 +19,16,5000000,100.0,869489033.0695938 +20,25,0,8018.2359906391575,36451218.64866604 +21,25,10000,0.0,0.0 +22,25,25000,5574.628636239299,170813747.1584927 +23,25,50000,2666.666666666667,202682402.52617925 +24,25,100000,1000.0,173170675.05261984 +25,25,250000,700.0,229017770.91805124 +26,25,500000,166.66666666666666,130116584.95087552 +27,25,1000000,266.66666666666663,415290867.3892 +28,25,2000000,0.0,0.0 +29,25,5000000,0.0,0.0 +30,35,0,12201.138196260536,55709321.749111354 +31,35,10000,16535.39310832891,246460890.3262994 +32,35,25000,9045.670154500442,324948304.8940843 +33,35,50000,9528.943210270949,699157164.4024543 +34,35,100000,20863.756571867867,3559138699.449029 +35,35,250000,1000.0,392422271.14150494 +36,35,500000,1433.3333333333335,865081781.920081 +37,35,1000000,1333.3333333333335,1561212072.9966478 +38,35,2000000,266.66666666666663,705316997.995611 +39,35,5000000,0.0,0.0 +40,45,0,25125.945505019165,151087517.12646157 +41,45,10000,6783.965770617153,115663052.72987124 +42,45,25000,38840.28895168863,1287058671.394631 +43,45,50000,18605.3526555642,1252458974.9750135 +44,45,100000,4566.666666666667,806345047.90322 +45,45,250000,833.3333333333334,378061415.377562 +46,45,500000,5092.564229801747,4197083077.838733 +47,45,1000000,366.66666666666663,489936022.38052046 +48,45,2000000,533.3333333333333,1705077595.3562834 +49,45,5000000,266.66666666666663,2029672415.7128797 +50,55,0,51243.20848511458,325262827.41172564 +51,55,10000,27359.43136639541,402867000.93720895 +52,55,25000,11793.587994118085,431933262.2340981 +53,55,50000,32111.267118635416,2409705338.010435 +54,55,100000,15360.857436413007,2283755040.478514 +55,55,250000,5300.0,2068047977.7413893 +56,55,500000,2633.3333333333335,1894167246.2585661 +57,55,1000000,600.0,790646291.5621586 +58,55,2000000,766.6666666666666,2045655733.1431768 +59,55,5000000,100.0,664011861.4567546 +60,65,0,25082.46400047627,138726639.56332612 +61,65,10000,24329.12794200136,442624820.96241635 +62,65,25000,32005.932898199728,1156920581.8427155 +63,65,50000,31859.179364063923,2518690507.308217 +64,65,100000,5226.2469821491295,996839728.3290665 +65,65,250000,2066.666666666667,655931442.5555874 +66,65,500000,933.3333333333333,602017202.5839465 +67,65,1000000,966.6666666666666,1432294880.7826843 +68,65,2000000,100.0,204518571.71100524 +69,65,5000000,0.0,0.0 +70,75,0,19348.949518818335,99487562.86178903 +71,75,10000,19466.345955056484,321782127.3212888 +72,75,25000,1666.6666666666667,54379084.855660215 +73,75,50000,19120.0076037262,1120620239.0675266 +74,75,100000,533.3333333333334,86825686.92884052 +75,75,250000,866.6666666666666,272654946.57543117 +76,75,500000,300.0,173278297.24729073 +77,75,1000000,300.0,400712840.4064568 +78,75,2000000,400.0,1467463834.9538853 +79,75,5000000,0.0,0.0 +80,85,0,3670.655323672659,16364604.358472882 +81,85,10000,4904.925543694665,120157320.22577268 +82,85,25000,9015.861627214854,285913186.3231597 +83,85,50000,6407.961969572632,347386461.61622596 +84,85,100000,1066.6666666666667,116623038.19754434 +85,85,250000,533.3333333333334,235462018.68385935 +86,85,500000,266.66666666666663,166932623.11544967 +87,85,1000000,100.0,169276625.1794641 +88,85,2000000,0.0,0.0 +89,85,5000000,0.0,0.0 diff --git a/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-full.csv b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-full.csv new file mode 100644 index 0000000000..d2ce04a4fa --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-full.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,468.25,3959645.2902857983 +11,16,10000,1000.3269841269841,23567812.393593628 +12,16,25000,0.0,0.0 +13,16,50000,0.0,0.0 +14,16,100000,0.0,0.0 +15,16,250000,0.0,0.0 +16,16,500000,0.0,0.0 +17,16,1000000,0.0,0.0 +18,16,2000000,0.0,0.0 +19,16,5000000,0.0,0.0 +20,25,0,9464.460538523732,73323902.33949387 +21,25,10000,4065.8183271011394,92367320.49955097 +22,25,25000,6727.068910105296,299958299.8769608 +23,25,50000,7190.207541498411,545413261.2998979 +24,25,100000,2200.8167067307695,348556309.8179033 +25,25,250000,1449.0833333333335,486494080.3214338 +26,25,500000,1198.4166666666667,734376158.9381167 +27,25,1000000,1619.6382802124833,2130876618.0155392 +28,25,2000000,1759.0833333333335,4187281606.033622 +29,25,5000000,0.0,0.0 +30,35,0,14168.167448293378,108658212.18114264 +31,35,10000,15926.272289366314,321513859.1762024 +32,35,25000,8595.63625124303,357772873.68941516 +33,35,50000,11575.188540049407,960010074.4370313 +34,35,100000,8080.042459036733,1494964530.5014088 +35,35,250000,2342.1666666666665,966129021.9596653 +36,35,500000,2120.75,1505024196.9783354 +37,35,1000000,1189.5833333333333,1365092927.4573565 +38,35,2000000,833.3333333333334,2782757165.9025707 +39,35,5000000,1026.7216135458166,6950879304.726551 +40,45,0,22395.189174273786,149920850.65436283 +41,45,10000,16386.836948855485,332062401.7851114 +42,45,25000,16712.05818451472,640201664.3192226 +43,45,50000,14606.7464852846,1068717907.6799092 +44,45,100000,11517.182516553825,1724336814.4393332 +45,45,250000,6133.057898259705,2190515059.9436994 +46,45,500000,3440.4701803051316,2254127788.8737407 +47,45,1000000,1654.5833333333335,2052304477.0176725 +48,45,2000000,1445.4166666666667,4674366935.312673 +49,45,5000000,800.0,19830439458.79824 +50,55,0,34098.29115210727,169193608.81092024 +51,55,10000,32505.900822973606,483272631.5509962 +52,55,25000,25054.186499521347,906396794.611126 +53,55,50000,17506.934640681633,1176972800.0533214 +54,55,100000,17518.338495695236,2610327176.889395 +55,55,250000,8011.078352983324,2823692099.0589867 +56,55,500000,4221.833333333333,2669165853.067488 +57,55,1000000,1628.918287037037,2196586223.5409484 +58,55,2000000,1666.9936507936509,4500967167.630607 +59,55,5000000,1472.5,15778154584.30291 +60,65,0,33577.9530336257,134335140.98696527 +61,65,10000,27151.617562202788,362006387.6794957 +62,65,25000,21460.591655179676,641957483.5602186 +63,65,50000,18207.238998718185,1082753573.4613836 +64,65,100000,13816.603331660746,1807181883.2922893 +65,65,250000,4158.33668699187,1363408698.5600107 +66,65,500000,2486.0878563596493,1446129933.2519128 +67,65,1000000,1004.0016203703702,1133071450.2844138 +68,65,2000000,2121.0,4471211551.454566 +69,65,5000000,371.66666666666663,3990112783.930231 +70,75,0,15863.643650139653,91466512.22372854 +71,75,10000,18177.85613797852,294554858.98596644 +72,75,25000,10479.023731280178,359066379.64776003 +73,75,50000,7638.614372617359,517747272.2570654 +74,75,100000,7475.5876505499855,1257641774.7496128 +75,75,250000,2200.0,678884809.3549371 +76,75,500000,2162.5578982597053,1184972798.177996 +77,75,1000000,366.66666666666663,442656226.31941104 +78,75,2000000,100.0,473341485.5162604 +79,75,5000000,0.0,0.0 +80,85,0,3097.8561939665938,19080285.579695463 +81,85,10000,3627.338996763754,59527163.28419197 +82,85,25000,6823.044763720754,244127008.713382 +83,85,50000,3638.842379385965,243573082.94983423 +84,85,100000,1818.0833333333335,288725345.01560855 +85,85,250000,1405.9223300970875,499708842.7379334 +86,85,500000,300.0,164620734.93303716 +87,85,1000000,200.0,338004475.66425765 +88,85,2000000,100.0,268712105.41359776 +89,85,5000000,0.0,0.0 diff --git a/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-tilt.csv b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-tilt.csv new file mode 100644 index 0000000000..8be8623c93 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-tilt.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,2461.3078982597053,12632630.132411812 +11,16,10000,0.0,0.0 +12,16,25000,953.4701803051317,31312444.548262328 +13,16,50000,1000.3269841269841,77234063.83562854 +14,16,100000,0.0,0.0 +15,16,250000,0.0,0.0 +16,16,500000,0.0,0.0 +17,16,1000000,176.00162037037038,182263161.0044751 +18,16,2000000,0.0,0.0 +19,16,5000000,0.0,0.0 +20,25,0,8551.67423941799,68535497.80291788 +21,25,10000,7287.960397588523,166167230.28596494 +22,25,25000,3244.6726190476193,155405278.44091952 +23,25,50000,6585.034922450792,504696824.15139484 +24,25,100000,1849.0833333333335,330334395.80818903 +25,25,250000,700.0,336246850.53934723 +26,25,500000,266.66666666666663,260964862.07343853 +27,25,1000000,0.0,0.0 +28,25,2000000,558.75,1681187616.12229 +29,25,5000000,0.0,0.0 +30,35,0,16448.602551743483,124615624.06515267 +31,35,10000,14315.693479059297,280422701.3422664 +32,35,25000,11156.465061550047,484639301.76776975 +33,35,50000,9455.819598489352,778276821.3156677 +34,35,100000,7303.5128852029575,1352489508.2716084 +35,35,250000,5313.14689502346,1875333822.9857256 +36,35,500000,1441.3333333333333,946256106.0615661 +37,35,1000000,2171.2359735973596,2368336293.587601 +38,35,2000000,588.25,2161650987.0754747 +39,35,5000000,533.3333333333334,3295955491.1572623 +40,45,0,25498.26670577162,171989803.5802155 +41,45,10000,19880.842750690983,376259476.8930146 +42,45,25000,16427.43894070049,651148787.824141 +43,45,50000,10318.646887224852,771225234.6671305 +44,45,100000,15714.85048828055,2348744482.3329134 +45,45,250000,3668.416666666667,1262962371.1550977 +46,45,500000,2683.0,1906780537.4997 +47,45,1000000,2950.7499999999995,4452385490.635573 +48,45,2000000,1418.5535136384651,3908251345.7258105 +49,45,5000000,766.6666666666666,9277717456.078026 +50,55,0,36752.31307947682,175300175.00787067 +51,55,10000,31552.05268401946,467778992.63081664 +52,55,25000,25203.439853179883,883234330.6242255 +53,55,50000,18139.746824386086,1252184262.5712876 +54,55,100000,16524.94912205414,2597821439.0154586 +55,55,250000,6804.087856359649,2404528890.044648 +56,55,500000,6515.293871857067,4043943643.7051034 +57,55,1000000,2675.9103174603174,3434135806.896396 +58,55,2000000,952.9166666666666,2154110177.566593 +59,55,5000000,2119.5,17795127823.585213 +60,65,0,33462.50754013387,144044575.59163883 +61,65,10000,25598.127839599,332585866.9193122 +62,65,25000,25002.048468152145,715264520.7659788 +63,65,50000,17146.14130533331,1013937304.1203458 +64,65,100000,12427.094279287014,1591755754.8358397 +65,65,250000,5081.754523026316,1807212207.5393338 +66,65,500000,2490.3333333333335,1465409382.4685707 +67,65,1000000,3245.6666666666665,3681654600.8051834 +68,65,2000000,2495.004523026316,6865801367.674121 +69,65,5000000,205.0,1155557306.314554 +70,75,0,15230.903599014822,89164991.17554791 +71,75,10000,17560.274959346265,275779045.59540373 +72,75,25000,8858.626836256719,293040852.3688427 +73,75,50000,9343.20789240743,669850394.3946185 +74,75,100000,7386.222890191557,1114330437.471431 +75,75,250000,1361.6666666666667,473670451.1944047 +76,75,500000,1330.0,775445741.2160058 +77,75,1000000,1366.9936507936509,1664376700.7540848 +78,75,2000000,0.0,0.0 +79,75,5000000,1327.0578982597056,16511915980.854683 +80,85,0,4324.9140922262995,23991672.007704698 +81,85,10000,4748.309177068886,77325596.78040291 +82,85,25000,7340.91243977527,275119890.0025425 +83,85,50000,1408.2545230263158,107025526.81160536 +84,85,100000,3815.755663430421,642618725.5348088 +85,85,250000,0.0,0.0 +86,85,500000,300.0,169046971.48965555 +87,85,1000000,100.0,164716052.67265835 +88,85,2000000,200.0,498697059.80152684 +89,85,5000000,0.0,0.0 diff --git a/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-weighted.csv b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-weighted.csv new file mode 100644 index 0000000000..0e344d205e --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-age_by_gain_band-weighted.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,1689.3078982597056,6041897.810593854 +11,16,10000,826.0016203703703,8518062.92909781 +12,16,25000,514.0,12854984.763790967 +13,16,50000,468.25,29511528.694167927 +14,16,100000,1000.3269841269841,122971149.56542675 +15,16,250000,485.22018030513175,124287539.91510083 +16,16,500000,0.0,0.0 +17,16,1000000,0.0,0.0 +18,16,2000000,176.00162037037038,354905971.1668099 +19,16,5000000,0.0,0.0 +20,25,0,6464.721613545817,54504508.78372228 +21,25,10000,6579.816309905373,140487025.351172 +22,25,25000,5758.559518630076,253434362.30769676 +23,25,50000,6683.149643238706,536120742.85053146 +24,25,100000,2677.466746794872,477020935.0701907 +25,25,250000,433.3333333333333,212895501.32732242 +26,25,500000,1004.1666666666666,615068666.4141777 +27,25,1000000,266.66666666666663,519846514.43076897 +28,25,2000000,0.0,0.0 +29,25,5000000,0.0,0.0 +30,35,0,15553.43180834492,122659376.15794292 +31,35,10000,14185.373869672581,291557866.43031096 +32,35,25000,11463.520805108676,497735011.45974743 +33,35,50000,6758.163894994827,578709989.3056127 +34,35,100000,8301.576893187506,1489699018.6349506 +35,35,250000,4501.615796519411,1482763660.723838 +36,35,500000,3088.2216135458166,2336473438.329837 +37,35,1000000,2106.5,2983040600.5169067 +38,35,2000000,754.9166666666666,2970013092.0964165 +39,35,5000000,806.0833333333334,9127376838.491219 +40,45,0,23531.55184145305,160938562.40785787 +41,45,10000,21400.818748858037,420970092.1709924 +42,45,25000,16178.8855654671,624116074.2690834 +43,45,50000,13209.954785484557,1026049983.5192575 +44,45,100000,11345.333080051272,1917961258.2044516 +45,45,250000,3960.454986943253,1522729184.8971443 +46,45,500000,2531.9166666666665,1754621578.7166905 +47,45,1000000,1578.75,2576746283.5303764 +48,45,2000000,2042.5833333333333,6495404749.3864975 +49,45,5000000,785.2201803051317,12687587673.370316 +50,55,0,33437.54645287425,168204197.03529787 +51,55,10000,31081.823946566135,487842556.26346254 +52,55,25000,24129.190026113865,852269029.4936154 +53,55,50000,19437.990586153355,1347665184.127625 +54,55,100000,16100.31222247168,2518291893.7912354 +55,55,250000,6757.057898259705,2522028215.9157076 +56,55,500000,6048.1526402640275,3960009277.052034 +57,55,1000000,3556.551549053356,4332936901.927364 +58,55,2000000,1572.0,4389849591.145952 +59,55,5000000,1223.5016203703703,15628269758.463531 +60,65,0,28560.596586417807,117554767.02077486 +61,65,10000,31310.641408828764,405179494.65389824 +62,65,25000,23111.207616244676,688880370.8697364 +63,65,50000,18171.39130533331,1118697939.6793964 +64,65,100000,12632.197765775722,1583365045.3983185 +65,65,250000,4789.00162037037,1805228218.3945887 +66,65,500000,2359.666666666667,1409139515.7885864 +67,65,1000000,4570.421189692982,5181849022.519027 +68,65,2000000,600.0,1567841165.087803 +69,65,5000000,305.0,2680509603.532201 +70,75,0,16513.093342654323,88094665.66495767 +71,75,10000,17119.865191829762,277597076.40338844 +72,75,25000,9199.161175091856,323128541.92663467 +73,75,50000,10024.423842522825,666277337.5194769 +74,75,100000,6646.345140160439,1089249191.4404345 +75,75,250000,3339.291271657142,1165663351.2655838 +76,75,500000,1776.0016203703703,1074331556.2337804 +77,75,1000000,366.66666666666663,491530643.1773982 +78,75,2000000,1000.3269841269841,2298097856.132065 +79,75,5000000,100.0,17218681856.45749 +80,85,0,5170.694050326243,30420498.075348217 +81,85,10000,3627.338996763754,59630743.07642249 +82,85,25000,7329.329106441938,275067347.14325374 +83,85,50000,2369.506143396686,157563794.03168306 +84,85,100000,1965.5535136384651,309726486.4508216 +85,85,250000,1405.9223300970875,604519594.5842562 +86,85,500000,300.0,183542134.6928604 +87,85,1000000,100.0,157202774.9971318 +88,85,2000000,200.0,520770783.68115747 +89,85,5000000,0.0,0.0 diff --git a/docs/evidence/uk-cgt-725/candidate-asset-types-carry.csv b/docs/evidence/uk-cgt-725/candidate-asset-types-carry.csv new file mode 100644 index 0000000000..d8ab5b0ec0 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-asset-types-carry.csv @@ -0,0 +1,7 @@ +asset_type,people,gains,published_people_individuals_basis,published_gains_individuals_basis,achieved_gains_share,table7_gains_share +residential_land_buildings,202672.64106333232,12934966224.820229,202630.0578034682,12242481474.688189,, +listed_shares,154279.34270748746,7760459130.514346,,,0.07673757196111512,0.0983647381090728 +unlisted_shares,39295.04838332011,60274103956.835396,,,0.5960070547363138,0.5530837552917739 +other_financial_assets,159790.71414824008,24311233607.409203,,,0.24039621973866346,0.26705403834979663 +agricultural_commercial_industrial_land_buildings,915.2201803051317,8105914262.577228,,,0.08015352810625816,0.033817547937245784 +other_non_financial_assets,466.66666666666663,678138895.7028271,,,0.006705625457649671,0.0476799203121109 diff --git a/docs/evidence/uk-cgt-725/candidate-asset-types-f010.csv b/docs/evidence/uk-cgt-725/candidate-asset-types-f010.csv new file mode 100644 index 0000000000..1bc1de9867 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-asset-types-f010.csv @@ -0,0 +1,7 @@ +asset_type,people,gains,published_people_individuals_basis,published_gains_individuals_basis,achieved_gains_share,table7_gains_share +residential_land_buildings,202668.63028441602,12049509559.556808,202630.0578034682,12242481474.688189,, +listed_shares,98243.97505552889,3472626346.9433374,,,0.09025084765343198,0.0983647381090728 +unlisted_shares,74538.61589300697,20603422745.62528,,,0.5354668719228672,0.5530837552917739 +other_financial_assets,171111.44198070053,10061175711.89168,,,0.26148210192196714,0.26705403834979663 +agricultural_commercial_industrial_land_buildings,3992.5642298017483,3711883921.4779544,,,0.0964689652255284,0.033817547937245784 +other_non_financial_assets,733.3333333333333,628384142.3659421,,,0.016331213276205247,0.0476799203121109 diff --git a/docs/evidence/uk-cgt-725/candidate-asset-types-full.csv b/docs/evidence/uk-cgt-725/candidate-asset-types-full.csv new file mode 100644 index 0000000000..2d1f775a64 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-asset-types-full.csv @@ -0,0 +1,7 @@ +asset_type,people,gains,published_people_individuals_basis,published_gains_individuals_basis,achieved_gains_share,table7_gains_share +residential_land_buildings,202688.5339341882,12445878091.791492,202630.0578034682,12242481474.688189,, +listed_shares,162582.76575477017,8983395561.881853,,,0.08524488144659005,0.0983647381090728 +unlisted_shares,34053.02817809981,65404568629.48858,,,0.6206344427872632,0.5530837552917739 +other_financial_assets,151307.3552087805,27556458226.721977,,,0.26148765224056825,0.26705403834979663 +agricultural_commercial_industrial_land_buildings,266.66666666666663,3136087316.6023626,,,0.0297588355837602,0.033817547937245784 +other_non_financial_assets,709.3349537037037,302891701.6762277,,,0.002874187941818422,0.0476799203121109 diff --git a/docs/evidence/uk-cgt-725/candidate-asset-types-tilt.csv b/docs/evidence/uk-cgt-725/candidate-asset-types-tilt.csv new file mode 100644 index 0000000000..eb52ff5613 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-asset-types-tilt.csv @@ -0,0 +1,7 @@ +asset_type,people,gains,published_people_individuals_basis,published_gains_individuals_basis,achieved_gains_share,table7_gains_share +residential_land_buildings,202612.97481160844,11644603589.419596,202630.0578034682,12242481474.688189,, +listed_shares,169175.6518999254,14042048861.29966,,,0.12910409695581923,0.0983647381090728 +unlisted_shares,39957.46376724959,72590290866.20761,,,0.6674028870438348,0.5530837552917739 +other_financial_assets,149384.67315623866,21634742538.801983,,,0.19891213354495904,0.26705403834979663 +agricultural_commercial_industrial_land_buildings,956.0,498241161.846527,,,0.004580882455386959,0.033817547937245784 +other_non_financial_assets,0.0,0.0,,,0.0,0.0476799203121109 diff --git a/docs/evidence/uk-cgt-725/candidate-asset-types-weighted.csv b/docs/evidence/uk-cgt-725/candidate-asset-types-weighted.csv new file mode 100644 index 0000000000..923dac1cc6 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-asset-types-weighted.csv @@ -0,0 +1,7 @@ +asset_type,people,gains,published_people_individuals_basis,published_gains_individuals_basis,achieved_gains_share,table7_gains_share +residential_land_buildings,202678.96748429956,12710160369.700691,202630.0578034682,12242481474.688189,, +listed_shares,164714.50136492576,9574785639.119093,,,0.07875155982125658,0.0983647381090728 +unlisted_shares,26080.21765382622,67227070158.66411,,,0.5529352652635401,0.5530837552917739 +other_financial_assets,162907.05979932845,36265039955.27424,,,0.2982759688937321,0.26705403834979663 +agricultural_commercial_industrial_land_buildings,938.8868469717984,8280309555.892511,,,0.06810463627145866,0.033817547937245784 +other_non_financial_assets,100.0,234966026.46367028,,,0.0019325697500126072,0.0476799203121109 diff --git a/docs/evidence/uk-cgt-725/candidate-regions-carry.csv b/docs/evidence/uk-cgt-725/candidate-regions-carry.csv new file mode 100644 index 0000000000..4984b03748 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-regions-carry.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,18561.66625916871,1657303882.4992783,11321.91780821918,1497797150.3974364 +NORTH_WEST,53648.99190938511,4224528431.0250587,41513.69863013699,8790074083.38308 +YORKSHIRE,32615.261904761912,5500514230.990979,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,26104.91501650165,4653199788.769486,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,37466.95,5668902142.194633,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,72219.13481570513,11520914061.936556,58496.57534246576,11545870966.728456 +LONDON,101525.8343373494,29479861857.173622,106614.72602739726,32519714615.602127 +SOUTH_EAST,103079.81400767545,14531017156.800095,114162.67123287672,25606804690.69088 +SOUTH_WEST,37397.47703252032,10545344902.903622,60383.56164383562,10341263627.509504 +WALES,22964.236939435967,9792731180.237427,16982.87671232877,2358632410.6946497 +SCOTLAND,42634.816899070385,6996609521.981648,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,9200.534027777778,9493888921.346813,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/candidate-regions-f010.csv b/docs/evidence/uk-cgt-725/candidate-regions-f010.csv new file mode 100644 index 0000000000..d5b54750e9 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-regions-f010.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,8441.075660275468,552832012.9569705,11321.91780821918,1497797150.3974364 +NORTH_WEST,90788.63570613608,5784861024.082651,41513.69863013699,8790074083.38308 +YORKSHIRE,37352.316282578984,3059450845.385226,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,18999.004072836793,1384817633.3426733,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,18736.67941403163,2010983635.975016,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,97589.79754202983,13728731268.469776,58496.57534246576,11545870966.728456 +LONDON,87361.98828729289,4137696213.2980413,106614.72602739726,32519714615.602127 +SOUTH_EAST,82421.16384725133,10137817370.21374,114162.67123287672,25606804690.69088 +SOUTH_WEST,48388.09680461142,3099587677.4088664,60383.56164383562,10341263627.509504 +WALES,9978.063539554376,2531461186.3864393,16982.87671232877,2358632410.6946497 +SCOTLAND,37925.63301796329,2214226476.2421556,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,13306.106602225367,1884537084.0994458,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/candidate-regions-full.csv b/docs/evidence/uk-cgt-725/candidate-regions-full.csv new file mode 100644 index 0000000000..ede69a738d --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-regions-full.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,18760.24959250204,2413980895.4392204,11321.91780821918,1497797150.3974364 +NORTH_WEST,54659.49190938511,5278722621.374959,41513.69863013699,8790074083.38308 +YORKSHIRE,34765.08928571429,4546569862.682542,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,26891.48432343234,4706951747.094108,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,39879.200000000004,5246110089.56066,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,73099.31810897434,16800821607.637775,58496.57534246576,11545870966.728456 +LONDON,104250.10977242302,36539941190.15812,106614.72602739726,32519714615.602127 +SOUTH_EAST,98626.89734100878,19846806513.98224,114162.67123287672,25606804690.69088 +SOUTH_WEST,37743.47703252033,8093957900.530428,60383.56164383562,10341263627.509504 +WALES,18861.85621821544,1642251568.5539286,16982.87671232877,2358632410.6946497 +SCOTLAND,35363.15023240372,8726373347.612616,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,8707.360879629628,3986792183.5359044,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/candidate-regions-tilt.csv b/docs/evidence/uk-cgt-725/candidate-regions-tilt.csv new file mode 100644 index 0000000000..8a5bd3311a --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-regions-tilt.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,18561.66625916871,1904898302.2627306,11321.91780821918,1497797150.3974364 +NORTH_WEST,54312.49190938511,4052882587.3368716,41513.69863013699,8790074083.38308 +YORKSHIRE,32820.76190476191,4704597902.393557,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,28860.553630363036,5001087738.955614,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,38840.45,4564880731.360875,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,74558.9515224359,15150554377.86792,58496.57534246576,11545870966.728456 +LONDON,110004.42469879519,34966159948.05541,106614.72602739726,32519714615.602127 +SOUTH_EAST,101333.7306743421,22915817113.406914,114162.67123287672,25606804690.69088 +SOUTH_WEST,38023.72703252033,15650290355.762867,60383.56164383562,10341263627.509504 +WALES,18991.326398520567,2665913782.65701,16982.87671232877,2358632410.6946497 +SCOTLAND,38359.90205843293,5525266793.062844,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,7418.777546296296,3307577384.452756,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/candidate-regions-weighted.csv b/docs/evidence/uk-cgt-725/candidate-regions-weighted.csv new file mode 100644 index 0000000000..6242f41355 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-regions-weighted.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,18561.66625916871,1707523915.3686948,11321.91780821918,1497797150.3974364 +NORTH_WEST,53648.99190938511,4326742592.990708,41513.69863013699,8790074083.38308 +YORKSHIRE,32615.261904761912,5607527002.690194,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,26104.91501650165,4794674955.826572,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,37466.95,6078094399.69057,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,72219.13481570513,12595231949.006302,58496.57534246576,11545870966.728456 +LONDON,101525.8343373494,32577351656.345314,106614.72602739726,32519714615.602127 +SOUTH_EAST,103079.81400767545,15541117666.53226,114162.67123287672,25606804690.69088 +SOUTH_WEST,37397.47703252032,22114901012.32714,60383.56164383562,10341263627.509504 +WALES,22964.236939435967,9835944626.48921,16982.87671232877,2358632410.6946497 +SCOTLAND,42634.816899070385,7194747172.036149,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,9200.534027777778,11918474755.811193,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/candidate-size_bands-carry.csv b/docs/evidence/uk-cgt-725/candidate-size_bands-carry.csv new file mode 100644 index 0000000000..6aa14b0d7f --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-size_bands-carry.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,76630.01575901185,326553007.2164087,73000.0,311000000.0 +6000,54290.927834864284,422433357.6566287,57000.0,448000000.0 +10000,26239.452681840365,292558599.6901787,26000.0,289000000.0 +12300,99892.22741095442,1807709581.4079986,97000.0,1747000000.0 +25000,97683.8538130982,3511844087.381327,98000.0,3516000000.0 +50000,77122.83020112425,5483412305.693058,78000.0,5510000000.0 +100000,60669.11234620694,9465682775.773422,61000.0,9487000000.0 +250000,25671.89741748543,9133818408.978733,25000.0,8820000000.0 +500000,17108.125874180216,10911926835.608763,16000.0,11372000000.0 +1000000,12545.556072079671,14912506700.201605,9000.0,12806000000.0 +2000000,6345.828604497356,16663746929.92261,5000.0,16477000000.0 +5000000,3219.8051340088355,41132623488.32849,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/candidate-size_bands-f010.csv b/docs/evidence/uk-cgt-725/candidate-size_bands-f010.csv new file mode 100644 index 0000000000..af000272a0 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-size_bands-f010.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,84095.04093766623,398832800.3966703,73000.0,311000000.0 +6000,60595.55608233448,424256891.3228824,57000.0,448000000.0 +10000,12737.056387362218,135214610.93249217,26000.0,289000000.0 +12300,86642.13329873177,1514340601.5703654,97000.0,1747000000.0 +25000,107942.63692862767,3711966838.7028413,98000.0,3516000000.0 +50000,121132.71192183331,8597885679.782572,78000.0,5510000000.0 +100000,48617.52765709668,8022697916.338835,61000.0,9487000000.0 +250000,11833.333333333334,4420542972.212419,25000.0,8820000000.0 +500000,11225.89756313508,8350688472.505602,16000.0,11372000000.0 +1000000,3933.333333333333,5259369600.697132,9000.0,12806000000.0 +2000000,2066.6666666666665,6128032733.159962,5000.0,16477000000.0 +5000000,466.66666666666663,3563173310.239228,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/candidate-size_bands-full.csv b/docs/evidence/uk-cgt-725/candidate-size_bands-full.csv new file mode 100644 index 0000000000..c9f3232854 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-size_bands-full.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,80847.96858065377,345200064.5403408,73000.0,311000000.0 +6000,52285.842610276355,404738093.5262539,57000.0,448000000.0 +10000,26849.650056310962,298263466.15320027,26000.0,289000000.0 +12300,91992.31801305764,1670608969.201908,97000.0,1747000000.0 +25000,95851.609995565,3449480504.418085,98000.0,3516000000.0 +50000,80363.77295823558,5595187972.138443,78000.0,5510000000.0 +100000,62426.65449356063,9531733834.705553,61000.0,9487000000.0 +250000,25699.64526833199,9008832611.936666,25000.0,8820000000.0 +500000,15930.115934924486,9958417464.220625,16000.0,11372000000.0 +1000000,7663.391520953224,9658592398.299599,9000.0,12806000000.0 +2000000,8025.826984126984,21358638017.263897,5000.0,16477000000.0 +5000000,3670.888280212483,46549586131.75793,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/candidate-size_bands-tilt.csv b/docs/evidence/uk-cgt-725/candidate-size_bands-tilt.csv new file mode 100644 index 0000000000..a2d7160d89 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-size_bands-tilt.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,84686.03282127476,360790973.69885945,73000.0,311000000.0 +6000,58044.456884769854,449483995.6646006,57000.0,448000000.0 +10000,28302.212777154353,314794053.3159856,26000.0,289000000.0 +12300,92641.04851021807,1661524857.1311958,97000.0,1747000000.0 +25000,98187.0743989673,3489165406.3426824,98000.0,3516000000.0 +50000,73397.1789374451,5174430431.86768,78000.0,5510000000.0 +100000,65021.46866177997,9978094743.270247,61000.0,9487000000.0 +250000,22929.07260774276,8159954593.458556,25000.0,8820000000.0 +500000,15026.627205190398,9567847244.51404,16000.0,11372000000.0 +1000000,12686.558228888363,15947868106.355972,9000.0,12806000000.0 +2000000,6213.474703331448,17269698553.965813,5000.0,16477000000.0 +5000000,4951.557898259706,48036274057.98974,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/candidate-size_bands-weighted.csv b/docs/evidence/uk-cgt-725/candidate-size_bands-weighted.csv new file mode 100644 index 0000000000..58bd5d9299 --- /dev/null +++ b/docs/evidence/uk-cgt-725/candidate-size_bands-weighted.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,78479.68837805948,341714025.0159826,73000.0,311000000.0 +6000,52441.255215816665,406704447.94051296,57000.0,448000000.0 +10000,24408.698158814048,270436052.3161697,26000.0,289000000.0 +12300,101722.98193398074,1821346864.9625752,97000.0,1747000000.0 +25000,97683.8538130982,3527485722.2335587,98000.0,3516000000.0 +50000,77122.83020112425,5460596499.727752,78000.0,5510000000.0 +100000,60669.11234620694,9508284978.55583,61000.0,9487000000.0 +250000,25671.89741748543,9440115267.02354,25000.0,8820000000.0 +500000,17108.125874180216,11333186167.227966,16000.0,11372000000.0 +1000000,12545.556072079671,16243152741.098972,9000.0,12806000000.0 +2000000,6345.828604497356,18596883208.6967,5000.0,16477000000.0 +5000000,3219.8051340088355,57342425730.31476,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/control-age_bands-carry.csv b/docs/evidence/uk-cgt-725/control-age_bands-carry.csv new file mode 100644 index 0000000000..b580f85866 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_bands-carry.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,2663.826984126984,97125257.11897437,4000.0,319000000.0 +25,47220.07007957737,4943057694.400851,27000.0,2499000000.0 +35,75655.70130325622,15220465103.341812,65000.0,11775000000.0 +45,78822.62133695064,15722774642.557777,98000.0,28422000000.0 +55,70868.15931222704,9278643277.280626,144000.0,38118000000.0 +65,41267.695514523024,4964089546.032998,125000.0,24260000000.0 +75,28970.858482877546,11897419410.635767,68000.0,11736000000.0 +85,12318.896160195673,1638590270.858641,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/control-age_bands-f010.csv b/docs/evidence/uk-cgt-725/control-age_bands-f010.csv new file mode 100644 index 0000000000..ac6d99eae2 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_bands-f010.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,15789.907709377141,1160250989.4926524,4000.0,319000000.0 +25,27632.328215518097,2174194419.769333,27000.0,2499000000.0 +35,74258.77317139189,10697987431.390568,65000.0,11775000000.0 +45,83476.95953532624,7697587575.874386,98000.0,28422000000.0 +55,53814.66697971242,8082691022.848651,144000.0,38118000000.0 +65,51638.955624374525,5045135617.711441,125000.0,24260000000.0 +75,17982.851023514897,2761149462.142979,68000.0,11736000000.0 +85,27492.890845763402,1887548594.0510533,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/control-age_bands-full.csv b/docs/evidence/uk-cgt-725/control-age_bands-full.csv new file mode 100644 index 0000000000..b580f85866 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_bands-full.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,2663.826984126984,97125257.11897437,4000.0,319000000.0 +25,47220.07007957737,4943057694.400851,27000.0,2499000000.0 +35,75655.70130325622,15220465103.341812,65000.0,11775000000.0 +45,78822.62133695064,15722774642.557777,98000.0,28422000000.0 +55,70868.15931222704,9278643277.280626,144000.0,38118000000.0 +65,41267.695514523024,4964089546.032998,125000.0,24260000000.0 +75,28970.858482877546,11897419410.635767,68000.0,11736000000.0 +85,12318.896160195673,1638590270.858641,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/control-age_bands-tilt.csv b/docs/evidence/uk-cgt-725/control-age_bands-tilt.csv new file mode 100644 index 0000000000..b580f85866 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_bands-tilt.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,2663.826984126984,97125257.11897437,4000.0,319000000.0 +25,47220.07007957737,4943057694.400851,27000.0,2499000000.0 +35,75655.70130325622,15220465103.341812,65000.0,11775000000.0 +45,78822.62133695064,15722774642.557777,98000.0,28422000000.0 +55,70868.15931222704,9278643277.280626,144000.0,38118000000.0 +65,41267.695514523024,4964089546.032998,125000.0,24260000000.0 +75,28970.858482877546,11897419410.635767,68000.0,11736000000.0 +85,12318.896160195673,1638590270.858641,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/control-age_bands-weighted.csv b/docs/evidence/uk-cgt-725/control-age_bands-weighted.csv new file mode 100644 index 0000000000..b580f85866 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_bands-weighted.csv @@ -0,0 +1,10 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,1000.0,54000000.0 +16,2663.826984126984,97125257.11897437,4000.0,319000000.0 +25,47220.07007957737,4943057694.400851,27000.0,2499000000.0 +35,75655.70130325622,15220465103.341812,65000.0,11775000000.0 +45,78822.62133695064,15722774642.557777,98000.0,28422000000.0 +55,70868.15931222704,9278643277.280626,144000.0,38118000000.0 +65,41267.695514523024,4964089546.032998,125000.0,24260000000.0 +75,28970.858482877546,11897419410.635767,68000.0,11736000000.0 +85,12318.896160195673,1638590270.858641,19000.0,2076000000.0 diff --git a/docs/evidence/uk-cgt-725/control-age_by_gain_band-carry.csv b/docs/evidence/uk-cgt-725/control-age_by_gain_band-carry.csv new file mode 100644 index 0000000000..afaa444953 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_by_gain_band-carry.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,0.0,0.0 +11,16,10000,891.5,17305544.877126195 +12,16,25000,772.0,28082345.67320475 +13,16,50000,1000.3269841269841,51737366.56864342 +14,16,100000,0.0,0.0 +15,16,250000,0.0,0.0 +16,16,500000,0.0,0.0 +17,16,1000000,0.0,0.0 +18,16,2000000,0.0,0.0 +19,16,5000000,0.0,0.0 +20,25,0,7081.257876684852,59426112.04403874 +21,25,10000,12324.803578697027,216462760.96534514 +22,25,25000,11804.031996829794,425918238.94019437 +23,25,50000,8822.826587301588,642168284.7581878 +24,25,100000,4201.916666666667,673272762.3839524 +25,25,250000,1070.733373397436,461648827.4552523 +26,25,500000,1314.5,990093737.0482846 +27,25,1000000,233.33333333333337,289645486.6575246 +28,25,2000000,300.0,624799421.8173444 +29,25,5000000,66.66666666666667,559622062.330727 +30,35,0,10801.493749462828,91338095.17402042 +31,35,10000,24383.89435564351,404040910.6625041 +32,35,25000,15077.271649506765,500401425.0679684 +33,35,50000,10256.922594574997,710374009.8321012 +34,35,100000,6109.0749703611145,1000343757.5193366 +35,35,250000,3611.1500400641025,1231460259.128938 +36,35,500000,3188.388280212483,1996341610.667419 +37,35,1000000,721.5833333333333,1194053462.950285 +38,35,2000000,1239.2556634304208,5099633175.38704 +39,35,5000000,266.6666666666667,2992478396.9521985 +40,45,0,15896.22795425338,117636389.32803479 +41,45,10000,21098.192031761155,332857995.1367154 +42,45,25000,15821.389795807652,527460624.51924336 +43,45,50000,11394.961106402434,806425007.0124855 +44,45,100000,7549.433782059361,1133727625.6749704 +45,45,250000,2748.666666666666,875099550.841802 +46,45,500000,2002.5000000000005,1180289572.2752073 +47,45,1000000,1144.5833333333333,2045723624.9705155 +48,45,2000000,700.0,2057379490.9933314 +49,45,5000000,466.6666666666667,6646174761.805472 +50,55,0,12116.900264946735,93989368.7038295 +51,55,10000,14003.328860085981,246230663.67975572 +52,55,25000,14730.313969570178,486253138.7157395 +53,55,50000,14081.057156317762,882148850.4057767 +54,55,100000,9023.969584576364,1589077913.833521 +55,55,250000,3054.5,1168368857.7058706 +56,55,500000,1523.6666666666665,910439181.9550005 +57,55,1000000,1934.422810063353,2310816214.8015647 +58,55,2000000,233.33333333333331,562710617.0218797 +59,55,5000000,166.66666666666669,1028608470.4576898 +60,65,0,9822.82241325063,84362820.7936335 +61,65,10000,13697.428443962297,237456805.4557333 +62,65,25000,7688.845848675683,262779039.55446023 +63,65,50000,3219.598808634429,203323374.95529455 +64,65,100000,3365.416666666667,570423378.3649831 +65,65,250000,1740.2500000000002,686265530.6224444 +66,65,500000,600.0,337705456.8425759 +67,65,1000000,733.3333333333333,1039237423.085965 +68,65,2000000,300.0,765559683.6991436 +69,65,5000000,100.0,776976032.6587636 +70,75,0,5930.813025407028,44859287.33154913 +71,75,10000,6514.89133712188,106607260.54855134 +72,75,25000,6801.474570378957,232790679.37742335 +73,75,50000,1858.588996763754,118393643.16520205 +74,75,100000,5236.4302357456145,812857534.3708515 +75,75,250000,1533.6603174603176,437138310.5169027 +76,75,500000,600.0,350560904.1820662 +77,75,1000000,133.33333333333334,178198554.61432394 +78,75,2000000,0.0,0.0 +79,75,5000000,361.6666666666667,9616013236.528898 +80,85,0,66.75,417972.3967778565 +81,85,10000,6480.293594352976,94404339.46040852 +82,85,25000,1875.2545230263158,55008216.34618607 +83,85,50000,2483.5980428163857,175726311.89945453 +84,85,100000,779.6666666666667,123851008.83698042 +85,85,250000,266.6666666666667,81138109.19164546 +86,85,500000,166.66666666666666,104581970.45674108 +87,85,1000000,0.0,0.0 +88,85,2000000,133.33333333333334,440904614.09201 +89,85,5000000,66.66666666666667,562557728.1784371 diff --git a/docs/evidence/uk-cgt-725/control-age_by_gain_band-f010.csv b/docs/evidence/uk-cgt-725/control-age_by_gain_band-f010.csv new file mode 100644 index 0000000000..fdc62f7995 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_by_gain_band-f010.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,0.0,0.0 +11,16,10000,14756.57437604381,292708417.646747 +12,16,25000,0.0,0.0 +13,16,50000,0.0,0.0 +14,16,100000,633.3333333333334,137175360.35278165 +15,16,250000,266.6666666666667,93076847.21442306 +16,16,500000,0.0,0.0 +17,16,1000000,0.0,0.0 +18,16,2000000,66.66666666666667,156440330.39913645 +19,16,5000000,66.66666666666667,480850033.8795643 +20,25,0,0.0,0.0 +21,25,10000,12097.214949261403,248923485.1307183 +22,25,25000,8083.543942284201,269575584.9101335 +23,25,50000,4751.5693239724915,396952681.23098665 +24,25,100000,1866.6666666666667,285464891.7559252 +25,25,250000,266.6666666666667,70597261.92583105 +26,25,500000,100.0,51809192.80643013 +27,25,1000000,100.0,101640339.95023167 +28,25,2000000,366.6666666666667,749230982.0590763 +29,25,5000000,0.0,0.0 +30,35,0,27034.277496290793,218330833.2707319 +31,35,10000,8793.247759876214,107575064.00800896 +32,35,25000,8083.543942284201,343011719.8136009 +33,35,50000,14748.508897785649,1117441921.2948537 +34,35,100000,9016.877275617533,1346427340.4627225 +35,35,250000,966.6666666666667,300442829.2737443 +36,35,500000,4382.317799537479,2354428398.3859706 +37,35,1000000,500.0,626829898.6483536 +38,35,2000000,333.33333333333337,1025925371.4684104 +39,35,5000000,400.00000000000006,3257574054.7641726 +40,45,0,4439.909909698398,20573961.49201618 +41,45,10000,13564.14598550308,244699607.15717682 +42,45,25000,35822.822048227325,1168847782.2968643 +43,45,50000,16075.564289525872,962426579.8333882 +44,45,100000,10774.517302371547,1483422599.8989842 +45,45,250000,800.0,277090765.0533468 +46,45,500000,666.6666666666666,383949890.7048999 +47,45,1000000,499.99999999999994,550203812.7808088 +48,45,2000000,700.0,1609633055.8004518 +49,45,5000000,133.33333333333334,996739520.8564496 +50,55,0,3457.9354059935154,28654071.497516986 +51,55,10000,14183.6194060166,259440737.4705754 +52,55,25000,0.0,0.0 +53,55,50000,22604.00262952803,1285363637.5777493 +54,55,100000,9135.776204840946,1346728022.4177914 +55,55,250000,2766.6666666666665,988289751.4807953 +56,55,500000,699.9999999999999,453156837.5806059 +57,55,1000000,533.3333333333333,878155297.9388485 +58,55,2000000,166.66666666666669,375743936.445823 +59,55,5000000,266.6666666666667,2467158730.438945 +60,65,0,10780.180214885926,58006564.90166324 +61,65,10000,24414.064842699736,462274298.6919294 +62,65,25000,3697.86368523627,148569774.88703832 +63,65,50000,0.0,0.0 +64,65,100000,466.6666666666667,57325269.75323879 +65,65,250000,10846.846881552592,3112287214.179237 +66,65,500000,1166.6666666666665,700662238.3894302 +67,65,1000000,66.66666666666667,103432055.05700852 +68,65,2000000,200.0,402578201.8518944 +69,65,5000000,0.0,0.0 +70,75,0,2384.441867938304,20643639.14927009 +71,75,10000,13265.075822243256,223812928.02981302 +72,75,25000,0.0,0.0 +73,75,50000,0.0,0.0 +74,75,100000,1100.0,195155256.5609185 +75,75,250000,266.6666666666667,130016905.02713755 +76,75,500000,266.66666666666663,149579056.2886585 +77,75,1000000,233.33333333333331,263587280.59268832 +78,75,2000000,400.00000000000006,1215796668.316056 +79,75,5000000,66.66666666666667,562557728.1784371 +80,85,0,6497.475038614581,54807944.2097446 +81,85,10000,4904.925543694665,94632795.47741568 +82,85,25000,9015.861627214854,363272635.27065563 +83,85,50000,5574.628636239299,522990544.27678514 +84,85,100000,466.6666666666667,76046473.97900248 +85,85,250000,800.0,334278267.72989386 +86,85,500000,0.0,0.0 +87,85,1000000,166.66666666666669,302060778.89834297 +88,85,2000000,66.66666666666667,139459154.2092131 +89,85,5000000,0.0,0.0 diff --git a/docs/evidence/uk-cgt-725/control-age_by_gain_band-full.csv b/docs/evidence/uk-cgt-725/control-age_by_gain_band-full.csv new file mode 100644 index 0000000000..afaa444953 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_by_gain_band-full.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,0.0,0.0 +11,16,10000,891.5,17305544.877126195 +12,16,25000,772.0,28082345.67320475 +13,16,50000,1000.3269841269841,51737366.56864342 +14,16,100000,0.0,0.0 +15,16,250000,0.0,0.0 +16,16,500000,0.0,0.0 +17,16,1000000,0.0,0.0 +18,16,2000000,0.0,0.0 +19,16,5000000,0.0,0.0 +20,25,0,7081.257876684852,59426112.04403874 +21,25,10000,12324.803578697027,216462760.96534514 +22,25,25000,11804.031996829794,425918238.94019437 +23,25,50000,8822.826587301588,642168284.7581878 +24,25,100000,4201.916666666667,673272762.3839524 +25,25,250000,1070.733373397436,461648827.4552523 +26,25,500000,1314.5,990093737.0482846 +27,25,1000000,233.33333333333337,289645486.6575246 +28,25,2000000,300.0,624799421.8173444 +29,25,5000000,66.66666666666667,559622062.330727 +30,35,0,10801.493749462828,91338095.17402042 +31,35,10000,24383.89435564351,404040910.6625041 +32,35,25000,15077.271649506765,500401425.0679684 +33,35,50000,10256.922594574997,710374009.8321012 +34,35,100000,6109.0749703611145,1000343757.5193366 +35,35,250000,3611.1500400641025,1231460259.128938 +36,35,500000,3188.388280212483,1996341610.667419 +37,35,1000000,721.5833333333333,1194053462.950285 +38,35,2000000,1239.2556634304208,5099633175.38704 +39,35,5000000,266.6666666666667,2992478396.9521985 +40,45,0,15896.22795425338,117636389.32803479 +41,45,10000,21098.192031761155,332857995.1367154 +42,45,25000,15821.389795807652,527460624.51924336 +43,45,50000,11394.961106402434,806425007.0124855 +44,45,100000,7549.433782059361,1133727625.6749704 +45,45,250000,2748.666666666666,875099550.841802 +46,45,500000,2002.5000000000005,1180289572.2752073 +47,45,1000000,1144.5833333333333,2045723624.9705155 +48,45,2000000,700.0,2057379490.9933314 +49,45,5000000,466.6666666666667,6646174761.805472 +50,55,0,12116.900264946735,93989368.7038295 +51,55,10000,14003.328860085981,246230663.67975572 +52,55,25000,14730.313969570178,486253138.7157395 +53,55,50000,14081.057156317762,882148850.4057767 +54,55,100000,9023.969584576364,1589077913.833521 +55,55,250000,3054.5,1168368857.7058706 +56,55,500000,1523.6666666666665,910439181.9550005 +57,55,1000000,1934.422810063353,2310816214.8015647 +58,55,2000000,233.33333333333331,562710617.0218797 +59,55,5000000,166.66666666666669,1028608470.4576898 +60,65,0,9822.82241325063,84362820.7936335 +61,65,10000,13697.428443962297,237456805.4557333 +62,65,25000,7688.845848675683,262779039.55446023 +63,65,50000,3219.598808634429,203323374.95529455 +64,65,100000,3365.416666666667,570423378.3649831 +65,65,250000,1740.2500000000002,686265530.6224444 +66,65,500000,600.0,337705456.8425759 +67,65,1000000,733.3333333333333,1039237423.085965 +68,65,2000000,300.0,765559683.6991436 +69,65,5000000,100.0,776976032.6587636 +70,75,0,5930.813025407028,44859287.33154913 +71,75,10000,6514.89133712188,106607260.54855134 +72,75,25000,6801.474570378957,232790679.37742335 +73,75,50000,1858.588996763754,118393643.16520205 +74,75,100000,5236.4302357456145,812857534.3708515 +75,75,250000,1533.6603174603176,437138310.5169027 +76,75,500000,600.0,350560904.1820662 +77,75,1000000,133.33333333333334,178198554.61432394 +78,75,2000000,0.0,0.0 +79,75,5000000,361.6666666666667,9616013236.528898 +80,85,0,66.75,417972.3967778565 +81,85,10000,6480.293594352976,94404339.46040852 +82,85,25000,1875.2545230263158,55008216.34618607 +83,85,50000,2483.5980428163857,175726311.89945453 +84,85,100000,779.6666666666667,123851008.83698042 +85,85,250000,266.6666666666667,81138109.19164546 +86,85,500000,166.66666666666666,104581970.45674108 +87,85,1000000,0.0,0.0 +88,85,2000000,133.33333333333334,440904614.09201 +89,85,5000000,66.66666666666667,562557728.1784371 diff --git a/docs/evidence/uk-cgt-725/control-age_by_gain_band-tilt.csv b/docs/evidence/uk-cgt-725/control-age_by_gain_band-tilt.csv new file mode 100644 index 0000000000..afaa444953 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_by_gain_band-tilt.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,0.0,0.0 +11,16,10000,891.5,17305544.877126195 +12,16,25000,772.0,28082345.67320475 +13,16,50000,1000.3269841269841,51737366.56864342 +14,16,100000,0.0,0.0 +15,16,250000,0.0,0.0 +16,16,500000,0.0,0.0 +17,16,1000000,0.0,0.0 +18,16,2000000,0.0,0.0 +19,16,5000000,0.0,0.0 +20,25,0,7081.257876684852,59426112.04403874 +21,25,10000,12324.803578697027,216462760.96534514 +22,25,25000,11804.031996829794,425918238.94019437 +23,25,50000,8822.826587301588,642168284.7581878 +24,25,100000,4201.916666666667,673272762.3839524 +25,25,250000,1070.733373397436,461648827.4552523 +26,25,500000,1314.5,990093737.0482846 +27,25,1000000,233.33333333333337,289645486.6575246 +28,25,2000000,300.0,624799421.8173444 +29,25,5000000,66.66666666666667,559622062.330727 +30,35,0,10801.493749462828,91338095.17402042 +31,35,10000,24383.89435564351,404040910.6625041 +32,35,25000,15077.271649506765,500401425.0679684 +33,35,50000,10256.922594574997,710374009.8321012 +34,35,100000,6109.0749703611145,1000343757.5193366 +35,35,250000,3611.1500400641025,1231460259.128938 +36,35,500000,3188.388280212483,1996341610.667419 +37,35,1000000,721.5833333333333,1194053462.950285 +38,35,2000000,1239.2556634304208,5099633175.38704 +39,35,5000000,266.6666666666667,2992478396.9521985 +40,45,0,15896.22795425338,117636389.32803479 +41,45,10000,21098.192031761155,332857995.1367154 +42,45,25000,15821.389795807652,527460624.51924336 +43,45,50000,11394.961106402434,806425007.0124855 +44,45,100000,7549.433782059361,1133727625.6749704 +45,45,250000,2748.666666666666,875099550.841802 +46,45,500000,2002.5000000000005,1180289572.2752073 +47,45,1000000,1144.5833333333333,2045723624.9705155 +48,45,2000000,700.0,2057379490.9933314 +49,45,5000000,466.6666666666667,6646174761.805472 +50,55,0,12116.900264946735,93989368.7038295 +51,55,10000,14003.328860085981,246230663.67975572 +52,55,25000,14730.313969570178,486253138.7157395 +53,55,50000,14081.057156317762,882148850.4057767 +54,55,100000,9023.969584576364,1589077913.833521 +55,55,250000,3054.5,1168368857.7058706 +56,55,500000,1523.6666666666665,910439181.9550005 +57,55,1000000,1934.422810063353,2310816214.8015647 +58,55,2000000,233.33333333333331,562710617.0218797 +59,55,5000000,166.66666666666669,1028608470.4576898 +60,65,0,9822.82241325063,84362820.7936335 +61,65,10000,13697.428443962297,237456805.4557333 +62,65,25000,7688.845848675683,262779039.55446023 +63,65,50000,3219.598808634429,203323374.95529455 +64,65,100000,3365.416666666667,570423378.3649831 +65,65,250000,1740.2500000000002,686265530.6224444 +66,65,500000,600.0,337705456.8425759 +67,65,1000000,733.3333333333333,1039237423.085965 +68,65,2000000,300.0,765559683.6991436 +69,65,5000000,100.0,776976032.6587636 +70,75,0,5930.813025407028,44859287.33154913 +71,75,10000,6514.89133712188,106607260.54855134 +72,75,25000,6801.474570378957,232790679.37742335 +73,75,50000,1858.588996763754,118393643.16520205 +74,75,100000,5236.4302357456145,812857534.3708515 +75,75,250000,1533.6603174603176,437138310.5169027 +76,75,500000,600.0,350560904.1820662 +77,75,1000000,133.33333333333334,178198554.61432394 +78,75,2000000,0.0,0.0 +79,75,5000000,361.6666666666667,9616013236.528898 +80,85,0,66.75,417972.3967778565 +81,85,10000,6480.293594352976,94404339.46040852 +82,85,25000,1875.2545230263158,55008216.34618607 +83,85,50000,2483.5980428163857,175726311.89945453 +84,85,100000,779.6666666666667,123851008.83698042 +85,85,250000,266.6666666666667,81138109.19164546 +86,85,500000,166.66666666666666,104581970.45674108 +87,85,1000000,0.0,0.0 +88,85,2000000,133.33333333333334,440904614.09201 +89,85,5000000,66.66666666666667,562557728.1784371 diff --git a/docs/evidence/uk-cgt-725/control-age_by_gain_band-weighted.csv b/docs/evidence/uk-cgt-725/control-age_by_gain_band-weighted.csv new file mode 100644 index 0000000000..afaa444953 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-age_by_gain_band-weighted.csv @@ -0,0 +1,91 @@ +,age_lower,gain_lower,people,gains +0,0,0,0.0,0.0 +1,0,10000,0.0,0.0 +2,0,25000,0.0,0.0 +3,0,50000,0.0,0.0 +4,0,100000,0.0,0.0 +5,0,250000,0.0,0.0 +6,0,500000,0.0,0.0 +7,0,1000000,0.0,0.0 +8,0,2000000,0.0,0.0 +9,0,5000000,0.0,0.0 +10,16,0,0.0,0.0 +11,16,10000,891.5,17305544.877126195 +12,16,25000,772.0,28082345.67320475 +13,16,50000,1000.3269841269841,51737366.56864342 +14,16,100000,0.0,0.0 +15,16,250000,0.0,0.0 +16,16,500000,0.0,0.0 +17,16,1000000,0.0,0.0 +18,16,2000000,0.0,0.0 +19,16,5000000,0.0,0.0 +20,25,0,7081.257876684852,59426112.04403874 +21,25,10000,12324.803578697027,216462760.96534514 +22,25,25000,11804.031996829794,425918238.94019437 +23,25,50000,8822.826587301588,642168284.7581878 +24,25,100000,4201.916666666667,673272762.3839524 +25,25,250000,1070.733373397436,461648827.4552523 +26,25,500000,1314.5,990093737.0482846 +27,25,1000000,233.33333333333337,289645486.6575246 +28,25,2000000,300.0,624799421.8173444 +29,25,5000000,66.66666666666667,559622062.330727 +30,35,0,10801.493749462828,91338095.17402042 +31,35,10000,24383.89435564351,404040910.6625041 +32,35,25000,15077.271649506765,500401425.0679684 +33,35,50000,10256.922594574997,710374009.8321012 +34,35,100000,6109.0749703611145,1000343757.5193366 +35,35,250000,3611.1500400641025,1231460259.128938 +36,35,500000,3188.388280212483,1996341610.667419 +37,35,1000000,721.5833333333333,1194053462.950285 +38,35,2000000,1239.2556634304208,5099633175.38704 +39,35,5000000,266.6666666666667,2992478396.9521985 +40,45,0,15896.22795425338,117636389.32803479 +41,45,10000,21098.192031761155,332857995.1367154 +42,45,25000,15821.389795807652,527460624.51924336 +43,45,50000,11394.961106402434,806425007.0124855 +44,45,100000,7549.433782059361,1133727625.6749704 +45,45,250000,2748.666666666666,875099550.841802 +46,45,500000,2002.5000000000005,1180289572.2752073 +47,45,1000000,1144.5833333333333,2045723624.9705155 +48,45,2000000,700.0,2057379490.9933314 +49,45,5000000,466.6666666666667,6646174761.805472 +50,55,0,12116.900264946735,93989368.7038295 +51,55,10000,14003.328860085981,246230663.67975572 +52,55,25000,14730.313969570178,486253138.7157395 +53,55,50000,14081.057156317762,882148850.4057767 +54,55,100000,9023.969584576364,1589077913.833521 +55,55,250000,3054.5,1168368857.7058706 +56,55,500000,1523.6666666666665,910439181.9550005 +57,55,1000000,1934.422810063353,2310816214.8015647 +58,55,2000000,233.33333333333331,562710617.0218797 +59,55,5000000,166.66666666666669,1028608470.4576898 +60,65,0,9822.82241325063,84362820.7936335 +61,65,10000,13697.428443962297,237456805.4557333 +62,65,25000,7688.845848675683,262779039.55446023 +63,65,50000,3219.598808634429,203323374.95529455 +64,65,100000,3365.416666666667,570423378.3649831 +65,65,250000,1740.2500000000002,686265530.6224444 +66,65,500000,600.0,337705456.8425759 +67,65,1000000,733.3333333333333,1039237423.085965 +68,65,2000000,300.0,765559683.6991436 +69,65,5000000,100.0,776976032.6587636 +70,75,0,5930.813025407028,44859287.33154913 +71,75,10000,6514.89133712188,106607260.54855134 +72,75,25000,6801.474570378957,232790679.37742335 +73,75,50000,1858.588996763754,118393643.16520205 +74,75,100000,5236.4302357456145,812857534.3708515 +75,75,250000,1533.6603174603176,437138310.5169027 +76,75,500000,600.0,350560904.1820662 +77,75,1000000,133.33333333333334,178198554.61432394 +78,75,2000000,0.0,0.0 +79,75,5000000,361.6666666666667,9616013236.528898 +80,85,0,66.75,417972.3967778565 +81,85,10000,6480.293594352976,94404339.46040852 +82,85,25000,1875.2545230263158,55008216.34618607 +83,85,50000,2483.5980428163857,175726311.89945453 +84,85,100000,779.6666666666667,123851008.83698042 +85,85,250000,266.6666666666667,81138109.19164546 +86,85,500000,166.66666666666666,104581970.45674108 +87,85,1000000,0.0,0.0 +88,85,2000000,133.33333333333334,440904614.09201 +89,85,5000000,66.66666666666667,562557728.1784371 diff --git a/docs/evidence/uk-cgt-725/control-regions-carry.csv b/docs/evidence/uk-cgt-725/control-regions-carry.csv new file mode 100644 index 0000000000..5765576f6d --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-regions-carry.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,16246.221882640588,1738565868.3978448,11321.91780821918,1497797150.3974364 +NORTH_WEST,41198.440938511325,9448973594.023867,41513.69863013699,8790074083.38308 +YORKSHIRE,25935.89880952381,4221379217.087904,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,24017.067656765677,3379920733.0812225,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,30876.975396825394,2050420551.3530655,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,36450.66726762821,5969286619.328253,58496.57534246576,11545870966.728456 +LONDON,49760.34303882195,9251010043.463926,106614.72602739726,32519714615.602127 +SOUTH_EAST,51292.4373629386,10336318319.841694,114162.67123287672,25606804690.69088 +SOUTH_WEST,31859.473678861792,10454839292.156452,60383.56164383562,10341263627.509504 +WALES,13331.451803051315,1537202885.4575856,16982.87671232877,2358632410.6946497 +SCOTLAND,29486.40388446215,4028656350.0258083,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,7332.447453703705,1345591728.0098226,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/control-regions-f010.csv b/docs/evidence/uk-cgt-725/control-regions-f010.csv new file mode 100644 index 0000000000..a95ad346ff --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-regions-f010.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,700.0,271484629.8164493,11321.91780821918,1497797150.3974364 +NORTH_WEST,95110.5109347672,6368329621.504228,41513.69863013699,8790074083.38308 +YORKSHIRE,23176.77525237682,2816400943.5351534,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,15871.78739675174,1108200635.484969,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,16528.657991679924,1456422911.6908014,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,35055.20242442852,4950079818.992885,58496.57534246576,11545870966.728456 +LONDON,24339.593989550667,1705524343.3839157,106614.72602739726,32519714615.602127 +SOUTH_EAST,49530.87263493748,6417616707.602153,114162.67123287672,25606804690.69088 +SOUTH_WEST,46291.72743090297,6523838814.548808,60383.56164383562,10341263627.509504 +WALES,12430.813922057567,1872931890.166297,16982.87671232877,2358632410.6946497 +SCOTLAND,28119.483024565106,2154889416.8142076,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,4931.908102960605,3860825379.741199,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/control-regions-full.csv b/docs/evidence/uk-cgt-725/control-regions-full.csv new file mode 100644 index 0000000000..5765576f6d --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-regions-full.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,16246.221882640588,1738565868.3978448,11321.91780821918,1497797150.3974364 +NORTH_WEST,41198.440938511325,9448973594.023867,41513.69863013699,8790074083.38308 +YORKSHIRE,25935.89880952381,4221379217.087904,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,24017.067656765677,3379920733.0812225,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,30876.975396825394,2050420551.3530655,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,36450.66726762821,5969286619.328253,58496.57534246576,11545870966.728456 +LONDON,49760.34303882195,9251010043.463926,106614.72602739726,32519714615.602127 +SOUTH_EAST,51292.4373629386,10336318319.841694,114162.67123287672,25606804690.69088 +SOUTH_WEST,31859.473678861792,10454839292.156452,60383.56164383562,10341263627.509504 +WALES,13331.451803051315,1537202885.4575856,16982.87671232877,2358632410.6946497 +SCOTLAND,29486.40388446215,4028656350.0258083,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,7332.447453703705,1345591728.0098226,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/control-regions-tilt.csv b/docs/evidence/uk-cgt-725/control-regions-tilt.csv new file mode 100644 index 0000000000..5765576f6d --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-regions-tilt.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,16246.221882640588,1738565868.3978448,11321.91780821918,1497797150.3974364 +NORTH_WEST,41198.440938511325,9448973594.023867,41513.69863013699,8790074083.38308 +YORKSHIRE,25935.89880952381,4221379217.087904,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,24017.067656765677,3379920733.0812225,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,30876.975396825394,2050420551.3530655,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,36450.66726762821,5969286619.328253,58496.57534246576,11545870966.728456 +LONDON,49760.34303882195,9251010043.463926,106614.72602739726,32519714615.602127 +SOUTH_EAST,51292.4373629386,10336318319.841694,114162.67123287672,25606804690.69088 +SOUTH_WEST,31859.473678861792,10454839292.156452,60383.56164383562,10341263627.509504 +WALES,13331.451803051315,1537202885.4575856,16982.87671232877,2358632410.6946497 +SCOTLAND,29486.40388446215,4028656350.0258083,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,7332.447453703705,1345591728.0098226,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/control-regions-weighted.csv b/docs/evidence/uk-cgt-725/control-regions-weighted.csv new file mode 100644 index 0000000000..5765576f6d --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-regions-weighted.csv @@ -0,0 +1,13 @@ +key,people,gains,published_people_individuals_basis,published_gains_individuals_basis +NORTH_EAST,16246.221882640588,1738565868.3978448,11321.91780821918,1497797150.3974364 +NORTH_WEST,41198.440938511325,9448973594.023867,41513.69863013699,8790074083.38308 +YORKSHIRE,25935.89880952381,4221379217.087904,32078.767123287675,6970985861.949795 +EAST_MIDLANDS,24017.067656765677,3379920733.0812225,31135.273972602743,6299365751.358824 +WEST_MIDLANDS,30876.975396825394,2050420551.3530655,33022.260273972606,5890960774.765152 +EAST_OF_ENGLAND,36450.66726762821,5969286619.328253,58496.57534246576,11545870966.728456 +LONDON,49760.34303882195,9251010043.463926,106614.72602739726,32519714615.602127 +SOUTH_EAST,51292.4373629386,10336318319.841694,114162.67123287672,25606804690.69088 +SOUTH_WEST,31859.473678861792,10454839292.156452,60383.56164383562,10341263627.509504 +WALES,13331.451803051315,1537202885.4575856,16982.87671232877,2358632410.6946497 +SCOTLAND,29486.40388446215,4028656350.0258083,34909.24657534247,5680201325.83493 +NORTHERN_IRELAND,7332.447453703705,1345591728.0098226,9434.931506849316,1757265449.747086 diff --git a/docs/evidence/uk-cgt-725/control-size_bands-carry.csv b/docs/evidence/uk-cgt-725/control-size_bands-carry.csv new file mode 100644 index 0000000000..a96d08a288 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-size_bands-carry.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,10218.690772333108,50537350.55706927,73000.0,311000000.0 +6000,51497.574511672334,441492695.2148147,57000.0,448000000.0 +10000,20446.686670105486,227086954.07763878,26000.0,289000000.0 +12300,78947.64553151935,1428279326.7085009,97000.0,1747000000.0 +25000,74570.58235379534,2518693708.19442,98000.0,3516000000.0 +50000,53117.88027693833,3590296848.5971456,78000.0,5510000000.0 +100000,36265.90857274244,5903553980.984594,61000.0,9487000000.0 +250000,14025.627064255188,4941119445.462856,25000.0,8820000000.0 +500000,9395.721613545815,5870012433.427295,16000.0,11372000000.0 +1000000,4900.589476730021,7057674767.080178,9000.0,12806000000.0 +2000000,2905.922330097087,9550987003.01075,5000.0,16477000000.0 +5000000,1495.0,22182430688.912186,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/control-size_bands-f010.csv b/docs/evidence/uk-cgt-725/control-size_bands-f010.csv new file mode 100644 index 0000000000..4758b804a6 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-size_bands-f010.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,14953.423457917657,76707055.02980883,73000.0,311000000.0 +6000,39640.79647550385,324309959.4911341,57000.0,448000000.0 +10000,13873.790910026915,169501054.8521166,26000.0,289000000.0 +12300,92105.07777531185,1764566278.7602677,97000.0,1747000000.0 +25000,64703.635245246856,2293277497.1782928,98000.0,3516000000.0 +50000,63754.27377705134,4285175364.213763,78000.0,5510000000.0 +100000,33460.504116163356,4927745215.181365,61000.0,9487000000.0 +250000,16980.180214885928,5306079841.88441,25000.0,8820000000.0 +500000,7282.317799537478,4093585614.155995,16000.0,11372000000.0 +1000000,2100.0,2825909463.8662825,9000.0,12806000000.0 +2000000,2300.0,5674807700.550061,5000.0,16477000000.0 +5000000,933.3333333333331,7764880068.117569,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/control-size_bands-full.csv b/docs/evidence/uk-cgt-725/control-size_bands-full.csv new file mode 100644 index 0000000000..a96d08a288 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-size_bands-full.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,10218.690772333108,50537350.55706927,73000.0,311000000.0 +6000,51497.574511672334,441492695.2148147,57000.0,448000000.0 +10000,20446.686670105486,227086954.07763878,26000.0,289000000.0 +12300,78947.64553151935,1428279326.7085009,97000.0,1747000000.0 +25000,74570.58235379534,2518693708.19442,98000.0,3516000000.0 +50000,53117.88027693833,3590296848.5971456,78000.0,5510000000.0 +100000,36265.90857274244,5903553980.984594,61000.0,9487000000.0 +250000,14025.627064255188,4941119445.462856,25000.0,8820000000.0 +500000,9395.721613545815,5870012433.427295,16000.0,11372000000.0 +1000000,4900.589476730021,7057674767.080178,9000.0,12806000000.0 +2000000,2905.922330097087,9550987003.01075,5000.0,16477000000.0 +5000000,1495.0,22182430688.912186,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/control-size_bands-tilt.csv b/docs/evidence/uk-cgt-725/control-size_bands-tilt.csv new file mode 100644 index 0000000000..a96d08a288 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-size_bands-tilt.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,10218.690772333108,50537350.55706927,73000.0,311000000.0 +6000,51497.574511672334,441492695.2148147,57000.0,448000000.0 +10000,20446.686670105486,227086954.07763878,26000.0,289000000.0 +12300,78947.64553151935,1428279326.7085009,97000.0,1747000000.0 +25000,74570.58235379534,2518693708.19442,98000.0,3516000000.0 +50000,53117.88027693833,3590296848.5971456,78000.0,5510000000.0 +100000,36265.90857274244,5903553980.984594,61000.0,9487000000.0 +250000,14025.627064255188,4941119445.462856,25000.0,8820000000.0 +500000,9395.721613545815,5870012433.427295,16000.0,11372000000.0 +1000000,4900.589476730021,7057674767.080178,9000.0,12806000000.0 +2000000,2905.922330097087,9550987003.01075,5000.0,16477000000.0 +5000000,1495.0,22182430688.912186,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/control-size_bands-weighted.csv b/docs/evidence/uk-cgt-725/control-size_bands-weighted.csv new file mode 100644 index 0000000000..a96d08a288 --- /dev/null +++ b/docs/evidence/uk-cgt-725/control-size_bands-weighted.csv @@ -0,0 +1,14 @@ +key,people,gains,published_people,published_gains +0,0.0,0.0,3000.0,1000000.0 +3000,10218.690772333108,50537350.55706927,73000.0,311000000.0 +6000,51497.574511672334,441492695.2148147,57000.0,448000000.0 +10000,20446.686670105486,227086954.07763878,26000.0,289000000.0 +12300,78947.64553151935,1428279326.7085009,97000.0,1747000000.0 +25000,74570.58235379534,2518693708.19442,98000.0,3516000000.0 +50000,53117.88027693833,3590296848.5971456,78000.0,5510000000.0 +100000,36265.90857274244,5903553980.984594,61000.0,9487000000.0 +250000,14025.627064255188,4941119445.462856,25000.0,8820000000.0 +500000,9395.721613545815,5870012433.427295,16000.0,11372000000.0 +1000000,4900.589476730021,7057674767.080178,9000.0,12806000000.0 +2000000,2905.922330097087,9550987003.01075,5000.0,16477000000.0 +5000000,1495.0,22182430688.912186,3000.0,48474000000.0 diff --git a/docs/evidence/uk-cgt-725/receipt-carry.json b/docs/evidence/uk-cgt-725/receipt-carry.json new file mode 100644 index 0000000000..04e4a99645 --- /dev/null +++ b/docs/evidence/uk-cgt-725/receipt-carry.json @@ -0,0 +1,2316 @@ +{ + "label": "-carry", + "inputs": { + "control": "control.h5", + "candidate": "candidate-tilt2.h5" + }, + "control_provenance": { + "h5": "control.h5", + "build_commit": "d69a543e5d7f0ac01e73c9c6eb4645b0d4b8b9b6", + "h5_sha256": "c6909bdaa9d264e6b052ff7bb4d2e2a16fc5c8766038a2e298cb7ee8cb4a7c90", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": null, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "759e22ba7afdaad9b0411e051508d550e7f24c03898db8829d32f28b2a06039e", + "source_vintages": { + "frs": "2024_25" + } + }, + "control_headline": { + "liable_taxpayers": 357787.8291737345, + "liable_gains": 63762165202.22745, + "share_65_plus_of_taxpayers": 0.23074415456851116, + "share_65_plus_of_gains": 0.29014226804959764, + "share_65_plus_of_2m_plus_gainers": 0.21851480088389827, + "share_65_plus_of_2m_plus_gains": 0.38325563962979103, + "top_2m_plus_taxpayers": 4400.922330097088, + "top_2m_plus_gains": 31733417691.922935 + }, + "control_stage_evidence": { + "hmrc_cgt_gains_spine": { + "published_taxpayer_mass": 359000.0, + "remainder_mass": 11695599.172629325, + "rows": [ + { + "achieved_gains": 492030045.77188396, + "achieved_people": 61716.26528400545, + "gain_lower_bound": 0, + "published_gains": 462000000.0, + "published_people": 63000.0 + }, + { + "achieved_gains": 1655366280.7861395, + "achieved_people": 99394.33220162481, + "gain_lower_bound": 10000, + "published_gains": 1669000000.0, + "published_people": 101000.0 + }, + { + "achieved_gains": 2518693708.19442, + "achieved_people": 74570.58235379534, + "gain_lower_bound": 25000, + "published_gains": 2645000000.0, + "published_people": 74000.0 + }, + { + "achieved_gains": 3590296848.5971456, + "achieved_people": 53117.88027693833, + "gain_lower_bound": 50000, + "published_gains": 3731000000.0, + "published_people": 53000.0 + }, + { + "achieved_gains": 5903553980.984594, + "achieved_people": 36265.90857274244, + "gain_lower_bound": 100000, + "published_gains": 5649000000.0, + "published_people": 37000.0 + }, + { + "achieved_gains": 4941119445.462856, + "achieved_people": 14025.627064255188, + "gain_lower_bound": 250000, + "published_gains": 4766000000.0, + "published_people": 14000.0 + }, + { + "achieved_gains": 5870012433.427295, + "achieved_people": 9395.721613545815, + "gain_lower_bound": 500000, + "published_gains": 5705000000.0, + "published_people": 8000.0 + }, + { + "achieved_gains": 7057674767.080178, + "achieved_people": 4900.589476730021, + "gain_lower_bound": 1000000, + "published_gains": 6390000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 9550987003.01075, + "achieved_people": 2905.922330097087, + "gain_lower_bound": 2000000, + "published_gains": 9189000000.0, + "published_people": 3000.0 + }, + { + "achieved_gains": 22182430688.912186, + "achieved_people": 1495.0, + "gain_lower_bound": 5000000, + "published_gains": 22714000000.0, + "published_people": 2000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 357787.8291737345 + } + }, + "candidate_provenance": { + "h5": "candidate-tilt2.h5", + "build_commit": "93c5b185f9cb524182a3e3661972701aee8a04cc", + "h5_sha256": "0ddca9b6ad8a46fe6d1141c921d8e2d4752d5897c85b5d13fda65fdc8c01d35a", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_asset_type_spine": { + "assign_main_asset_type": 554, + "assign_residential_property_flag": 553 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": null, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "9ca4920daad762b9815c3f2757f2e0abf3b6893b35f129d167e46e58d031e9b4", + "source_vintages": { + "frs": "2024_25" + }, + "chronicle_feed": { + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797" + } + }, + "candidate_headline": { + "liable_taxpayers": 557419.6331493518, + "liable_gains": 114064816077.85922, + "share_65_plus_of_taxpayers": 0.3856406031494745, + "share_65_plus_of_gains": 0.2770399312911697, + "share_65_plus_of_2m_plus_gainers": 0.23054687691517, + "share_65_plus_of_2m_plus_gains": 0.22298751814316026, + "top_2m_plus_taxpayers": 9565.633738506189, + "top_2m_plus_gains": 57796370418.251114 + }, + "candidate_stage_evidence": { + "hmrc_cgt_gains_spine": { + "age_by_band_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 5873340.354113438, + "achieved_people": 1689.3078982597056, + "age_lower_bound": 16, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 8549880.808991386, + "achieved_people": 826.0016203703703, + "age_lower_bound": 16, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 12855779.249942236, + "achieved_people": 514.0, + "age_lower_bound": 16, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 29451079.399022292, + "achieved_people": 468.25, + "age_lower_bound": 16, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 120206630.29714446, + "achieved_people": 1000.3269841269841, + "age_lower_bound": 16, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 125023082.91377573, + "achieved_people": 485.22018030513175, + "age_lower_bound": 16, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 353927521.88185364, + "achieved_people": 176.00162037037038, + "age_lower_bound": 16, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 54102967.62608368, + "achieved_people": 6464.721613545817, + "age_lower_bound": 25, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 140951776.640386, + "achieved_people": 6579.816309905373, + "age_lower_bound": 25, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 252913591.51806253, + "achieved_people": 5758.559518630076, + "age_lower_bound": 25, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 531728300.07222664, + "achieved_people": 6683.149643238706, + "age_lower_bound": 25, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 483116950.92049754, + "achieved_people": 2677.466746794872, + "age_lower_bound": 25, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 205906470.60995796, + "achieved_people": 433.3333333333333, + "age_lower_bound": 25, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 571531099.3238587, + "achieved_people": 1004.1666666666666, + "age_lower_bound": 25, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 506998842.47025716, + "achieved_people": 266.66666666666663, + "age_lower_bound": 25, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 123000081.69250111, + "achieved_people": 15553.43180834492, + "age_lower_bound": 35, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 290286210.45378435, + "achieved_people": 14185.373869672581, + "age_lower_bound": 35, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 499588280.6271249, + "achieved_people": 11463.520805108676, + "age_lower_bound": 35, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 585822891.143846, + "achieved_people": 6758.163894994827, + "age_lower_bound": 35, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1455544957.127164, + "achieved_people": 8301.576893187506, + "age_lower_bound": 35, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1422072347.3380673, + "achieved_people": 4501.615796519411, + "age_lower_bound": 35, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 2312371922.386242, + "achieved_people": 3088.2216135458166, + "age_lower_bound": 35, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 2715590225.20431, + "achieved_people": 2106.5, + "age_lower_bound": 35, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 2632762487.4181333, + "achieved_people": 754.9166666666666, + "age_lower_bound": 35, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 6249088321.9346285, + "achieved_people": 806.0833333333334, + "age_lower_bound": 35, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 161960034.18554705, + "achieved_people": 23531.55184145305, + "age_lower_bound": 45, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 418516775.6020316, + "achieved_people": 21400.818748858037, + "age_lower_bound": 45, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 626859437.5618786, + "achieved_people": 16178.8855654671, + "age_lower_bound": 45, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1017928846.3860545, + "achieved_people": 13209.954785484557, + "age_lower_bound": 45, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1906485225.4981778, + "achieved_people": 11345.333080051272, + "age_lower_bound": 45, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1470578673.123698, + "achieved_people": 3960.454986943253, + "age_lower_bound": 45, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1650591539.1318643, + "achieved_people": 2531.9166666666665, + "age_lower_bound": 45, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 2240224798.4245663, + "achieved_people": 1578.75, + "age_lower_bound": 45, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 5879146726.905525, + "achieved_people": 2042.5833333333333, + "age_lower_bound": 45, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 12687587673.370316, + "achieved_people": 785.2201803051317, + "age_lower_bound": 45, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 168120198.20984054, + "achieved_people": 33437.54645287425, + "age_lower_bound": 55, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 492148955.3517739, + "achieved_people": 31081.823946566135, + "age_lower_bound": 55, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 847123379.4510751, + "achieved_people": 24129.190026113865, + "age_lower_bound": 55, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1366760929.9765239, + "achieved_people": 19437.990586153355, + "age_lower_bound": 55, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 2502031566.6605334, + "achieved_people": 16100.31222247168, + "age_lower_bound": 55, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 2481721812.488784, + "achieved_people": 6757.057898259705, + "age_lower_bound": 55, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 3787418542.019485, + "achieved_people": 6048.1526402640275, + "age_lower_bound": 55, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 3963848625.6574826, + "achieved_people": 3556.551549053356, + "age_lower_bound": 55, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 3734692960.724217, + "achieved_people": 1572.0, + "age_lower_bound": 55, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 13371295528.76784, + "achieved_people": 1223.5016203703703, + "age_lower_bound": 55, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 117113252.59258646, + "achieved_people": 28560.596586417807, + "age_lower_bound": 65, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 404771849.70825773, + "achieved_people": 31310.641408828764, + "age_lower_bound": 65, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 676321610.6477175, + "achieved_people": 23111.207616244676, + "age_lower_bound": 65, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1113523074.757136, + "achieved_people": 18171.39130533331, + "age_lower_bound": 65, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1587054023.5719461, + "achieved_people": 12632.197765775722, + "age_lower_bound": 65, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1702847674.605901, + "achieved_people": 4789.00162037037, + "age_lower_bound": 65, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1391714137.259096, + "achieved_people": 2359.666666666667, + "age_lower_bound": 65, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 4894760803.415506, + "achieved_people": 4570.421189692982, + "age_lower_bound": 65, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 1465305303.433736, + "achieved_people": 600.0, + "age_lower_bound": 65, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 2726032097.149271, + "achieved_people": 305.0, + "age_lower_bound": 65, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 88883191.4619092, + "achieved_people": 16513.093342654323, + "age_lower_bound": 75, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 283371452.9415174, + "achieved_people": 17119.865191829762, + "age_lower_bound": 75, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 319721856.73775727, + "achieved_people": 9199.161175091856, + "age_lower_bound": 75, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 677463748.1758658, + "achieved_people": 10024.423842522825, + "age_lower_bound": 75, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1101172073.0051475, + "achieved_people": 6646.345140160439, + "age_lower_bound": 75, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1154223447.4460185, + "achieved_people": 3339.291271657142, + "age_lower_bound": 75, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1030069317.5034158, + "achieved_people": 1776.0016203703703, + "age_lower_bound": 75, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 446183896.6984081, + "achieved_people": 366.66666666666663, + "age_lower_bound": 75, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 2086298452.8943677, + "achieved_people": 1000.3269841269841, + "age_lower_bound": 75, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 6098619867.10643, + "achieved_people": 100.0, + "age_lower_bound": 75, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 29933298.750455957, + "achieved_people": 5170.694050326243, + "age_lower_bound": 85, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 61671279.591434784, + "achieved_people": 3627.338996763754, + "age_lower_bound": 85, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 276460151.58776915, + "achieved_people": 7329.329106441938, + "age_lower_bound": 85, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 160733435.78238273, + "achieved_people": 2369.506143396686, + "age_lower_bound": 85, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 310071348.69280934, + "achieved_people": 1965.5535136384651, + "age_lower_bound": 85, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 571444900.4525301, + "achieved_people": 1405.9223300970875, + "age_lower_bound": 85, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 168230277.98480162, + "achieved_people": 300.0, + "age_lower_bound": 85, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 144899508.33107442, + "achieved_people": 100.0, + "age_lower_bound": 85, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 511613476.6647776, + "achieved_people": 200.0, + "age_lower_bound": 85, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 85, + "gain_lower_bound": 5000000 + } + ], + "age_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "published_gains": 54000000.0, + "published_people": 1000.0 + }, + { + "achieved_gains": 655887314.9048431, + "achieved_people": 5159.108303432562, + "age_lower_bound": 16, + "published_gains": 319000000.0, + "published_people": 4000.0 + }, + { + "achieved_gains": 2747249999.18133, + "achieved_people": 29867.88049878151, + "age_lower_bound": 25, + "published_gains": 2499000000.0, + "published_people": 27000.0 + }, + { + "achieved_gains": 18286127725.325806, + "achieved_people": 67519.40468137375, + "age_lower_bound": 35, + "published_gains": 11775000000.0, + "published_people": 65000.0 + }, + { + "achieved_gains": 28059879730.18966, + "achieved_people": 96565.46918856239, + "age_lower_bound": 45, + "published_gains": 28422000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 32715162499.307556, + "achieved_people": 143344.12694212678, + "age_lower_bound": 55, + "published_gains": 38118000000.0, + "published_people": 144000.0 + }, + { + "achieved_gains": 16079443827.141155, + "achieved_people": 126410.12415933031, + "age_lower_bound": 65, + "published_gains": 24260000000.0, + "published_people": 125000.0 + }, + { + "achieved_gains": 13286007303.970837, + "achieved_people": 66085.17523508037, + "age_lower_bound": 75, + "published_gains": 11736000000.0, + "published_people": 68000.0 + }, + { + "achieved_gains": 2235057677.8380356, + "achieved_people": 22468.344140664172, + "age_lower_bound": 85, + "published_gains": 2076000000.0, + "published_people": 19000.0 + } + ], + "allocation": { + "band_rows": [ + { + "gain_lower_bound": 0, + "gains_difference": -1000000.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 759000000.0, + "published_people": 133000.0, + "table2_1a_gains": 760000000.0, + "table2_1a_people": 133000.0, + "target_gains_at_cell_means": 758976349.1549579, + "target_people": 132976.11086837502 + }, + { + "gain_lower_bound": 10000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 2036000000.0, + "published_people": 123000.0, + "table2_1a_gains": 2036000000.0, + "table2_1a_people": 123000.0, + "target_gains_at_cell_means": 2033975331.6882389, + "target_people": 122932.62720850299 + }, + { + "gain_lower_bound": 25000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 3516000000.0, + "published_people": 98000.0, + "table2_1a_gains": 3516000000.0, + "table2_1a_people": 98000.0, + "target_gains_at_cell_means": 3514051553.988366, + "target_people": 96927.5289296759 + }, + { + "gain_lower_bound": 50000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 5510000000.0, + "published_people": 78000.0, + "table2_1a_gains": 5510000000.0, + "table2_1a_people": 78000.0, + "target_gains_at_cell_means": 5508271180.542232, + "target_people": 77967.24136638598 + }, + { + "gain_lower_bound": 100000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 9487000000.0, + "published_people": 61000.0, + "table2_1a_gains": 9487000000.0, + "table2_1a_people": 61000.0, + "target_gains_at_cell_means": 9489202603.948486, + "target_people": 60975.20777135002 + }, + { + "gain_lower_bound": 250000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 8820000000.0, + "published_people": 25000.0, + "table2_1a_gains": 8820000000.0, + "table2_1a_people": 25000.0, + "target_gains_at_cell_means": 8823899082.660036, + "target_people": 24000.083759788773 + }, + { + "gain_lower_bound": 500000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 11372000000.0, + "published_people": 16000.0, + "table2_1a_gains": 11372000000.0, + "table2_1a_people": 16000.0, + "target_gains_at_cell_means": 11376054216.655891, + "target_people": 17000.440850376017 + }, + { + "gain_lower_bound": 1000000, + "gains_difference": 0.0, + "means_repaired": 2, + "people_difference": 0.0, + "published_gains": 12806000000.0, + "published_people": 9000.0, + "table2_1a_gains": 12806000000.0, + "table2_1a_people": 9000.0, + "target_gains_at_cell_means": 13002442818.185097, + "target_people": 9979.510578547051 + }, + { + "gain_lower_bound": 2000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 16477000000.0, + "published_people": 5000.0, + "table2_1a_gains": 16477000000.0, + "table2_1a_people": 5000.0, + "target_gains_at_cell_means": 16475121641.489286, + "target_people": 5580.580680186042 + }, + { + "gain_lower_bound": 5000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 48474000000.0, + "published_people": 3000.0, + "table2_1a_gains": 48474000000.0, + "table2_1a_people": 3000.0, + "target_gains_at_cell_means": 48072120949.95949, + "target_people": 2660.6679868122214 + } + ], + "conditioning": { + "age_group_lower_bounds": [ + 16, + 25, + 35, + 45, + 55, + 65, + 75 + ], + "fallback_policy": "pooled_income_band_rank_walk", + "joint_record_set_prefix": "hmrc.cgt_table3_2026.ty2024.", + "joint_resource": "hmrc_cgt_conditioning_facts.json", + "joint_resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "joint_source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "joint_source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "joint_vintage": "2024-25", + "region_groups": { + "EAST_MIDLANDS": "rest_of_england", + "EAST_OF_ENGLAND": "south_east_and_east_of_england", + "LONDON": "london", + "NORTHERN_IRELAND": "wales_scotland_northern_ireland", + "NORTH_EAST": "rest_of_england", + "NORTH_WEST": "rest_of_england", + "SCOTLAND": "wales_scotland_northern_ireland", + "SOUTH_EAST": "south_east_and_east_of_england", + "SOUTH_WEST": "rest_of_england", + "WALES": "wales_scotland_northern_ireland", + "WEST_MIDLANDS": "rest_of_england", + "YORKSHIRE": "rest_of_england" + }, + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "vintage_tax_year": 2024 + }, + "fallback_released_mass": 1860.5, + "fallback_share_by_band": { + "0": 0.0, + "10000": 0.0, + "100000": 0.013186281602981395, + "1000000": 0.0, + "2000000": 0.0, + "25000": 0.00907775405438701, + "250000": 0.0, + "50000": 0.0, + "500000": 0.0, + "5000000": 0.05396289302255744 + }, + "joint_rows": [ + { + "achieved_fallback": 0.0, + "achieved_pass1": 70956.62129168297, + "gain_lower_bound": 0, + "income_lower_bound": 0, + "mean": 5830.985915492958, + "mean_repaired": false, + "residual": 11.971724241695483, + "target_people": 70968.59301592466 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 12816.327648268583, + "gain_lower_bound": 0, + "income_lower_bound": 37700, + "mean": 5461.538461538462, + "mean_repaired": false, + "residual": -146.5855898217833, + "target_people": 12669.7420584468 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 23113.557341034364, + "gain_lower_bound": 0, + "income_lower_bound": 50000, + "mean": 5565.217391304348, + "mean_repaired": false, + "residual": 85.22398661773695, + "target_people": 23198.7813276521 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4960.392799352751, + "gain_lower_bound": 0, + "income_lower_bound": 100000, + "mean": 5600.0, + "mean_repaired": false, + "residual": -54.18619857237536, + "target_people": 4906.206600780376 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 8498.738134005318, + "gain_lower_bound": 0, + "income_lower_bound": 125140, + "mean": 5750.0, + "mean_repaired": false, + "residual": -59.60106208504294, + "target_people": 8439.137071920275 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 10575.306379532127, + "gain_lower_bound": 0, + "income_lower_bound": 200000, + "mean": 5538.461538461538, + "mean_repaired": false, + "residual": 2218.3444141186665, + "target_people": 12793.650793650793 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 72356.61245760461, + "gain_lower_bound": 10000, + "income_lower_bound": 0, + "mean": 16597.222222222223, + "mean_repaired": false, + "residual": -388.46179356833454, + "target_people": 71968.15066403628 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 11274.28857036622, + "gain_lower_bound": 10000, + "income_lower_bound": 37700, + "mean": 16272.727272727272, + "mean_repaired": false, + "residual": -553.7375978343116, + "target_people": 10720.550972531908 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 19284.06523763772, + "gain_lower_bound": 10000, + "income_lower_bound": 50000, + "mean": 16736.842105263157, + "mean_repaired": false, + "residual": -119.85457566424157, + "target_people": 19164.210661973477 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4508.321229757085, + "gain_lower_bound": 10000, + "income_lower_bound": 100000, + "mean": 16250.0, + "mean_repaired": false, + "residual": -583.3559491327846, + "target_people": 3924.9652806243007 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 6132.639900582853, + "gain_lower_bound": 10000, + "income_lower_bound": 125140, + "mean": 16333.333333333334, + "mean_repaired": false, + "residual": 196.71290335735284, + "target_people": 6329.352803940206 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 12575.752696846283, + "gain_lower_bound": 10000, + "income_lower_bound": 200000, + "mean": 16363.636363636364, + "mean_repaired": false, + "residual": -1750.3558714494575, + "target_people": 10825.396825396825 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 59590.82225172085, + "gain_lower_bound": 25000, + "income_lower_bound": 0, + "mean": 35866.666666666664, + "mean_repaired": false, + "residual": 382.6366349760574, + "target_people": 59973.458886696906 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 7709.6004290047995, + "gain_lower_bound": 25000, + "income_lower_bound": 37700, + "mean": 37875.0, + "mean_repaired": false, + "residual": 87.16391465476954, + "target_people": 7796.764343659569 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 14095.803414000613, + "gain_lower_bound": 25000, + "income_lower_bound": 50000, + "mean": 37071.42857142857, + "mean_repaired": false, + "residual": 25.193915874579034, + "target_people": 14120.997329875192 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3301.076984126984, + "gain_lower_bound": 25000, + "income_lower_bound": 100000, + "mean": 33666.666666666664, + "mean_repaired": false, + "residual": -357.3530236587585, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4498.952720392232, + "gain_lower_bound": 25000, + "income_lower_bound": 125140, + "mean": 39250.0, + "mean_repaired": false, + "residual": -279.3841844320941, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 886.75, + "achieved_pass1": 7600.848013852711, + "gain_lower_bound": 25000, + "income_lower_bound": 200000, + "mean": 35500.0, + "mean_repaired": false, + "residual": -614.5821408368383, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 44193.335718191476, + "gain_lower_bound": 50000, + "income_lower_bound": 0, + "mean": 70204.54545454546, + "mean_repaired": false, + "residual": -212.79920128040976, + "target_people": 43980.53651691107 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 6841.299035424199, + "gain_lower_bound": 50000, + "income_lower_bound": 37700, + "mean": 69285.71428571429, + "mean_repaired": false, + "residual": -19.13023472207624, + "target_people": 6822.168800702123 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 13211.887605772112, + "gain_lower_bound": 50000, + "income_lower_bound": 50000, + "mean": 71307.69230769231, + "mean_repaired": false, + "residual": -99.53294231657674, + "target_people": 13112.354663455535 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3002.0667067307695, + "gain_lower_bound": 50000, + "income_lower_bound": 100000, + "mean": 65333.333333333336, + "mean_repaired": false, + "residual": -58.3427462625441, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4211.1532786460675, + "gain_lower_bound": 50000, + "income_lower_bound": 125140, + "mean": 76000.0, + "mean_repaired": false, + "residual": 8.415257314070004, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5663.087856359649, + "gain_lower_bound": 50000, + "income_lower_bound": 200000, + "mean": 72571.42857142857, + "mean_repaired": false, + "residual": 1225.8010325292398, + "target_people": 6888.888888888889 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 27931.881017286236, + "gain_lower_bound": 100000, + "income_lower_bound": 0, + "mean": 154750.0, + "mean_repaired": false, + "residual": 55.733129838987225, + "target_people": 27987.614147125223 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5903.9866262365895, + "gain_lower_bound": 100000, + "income_lower_bound": 37700, + "mean": 152166.66666666666, + "mean_repaired": false, + "residual": -56.41336849191248, + "target_people": 5847.573257744677 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 12062.992408552705, + "gain_lower_bound": 100000, + "income_lower_bound": 50000, + "mean": 153666.66666666666, + "mean_repaired": false, + "residual": 40.71958848317445, + "target_people": 12103.71199703588 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3056.058036664781, + "gain_lower_bound": 100000, + "income_lower_bound": 100000, + "mean": 143666.66666666666, + "mean_repaired": false, + "residual": -112.33407619655554, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4539.048502847275, + "gain_lower_bound": 100000, + "income_lower_bound": 125140, + "mean": 179000.0, + "mean_repaired": false, + "residual": -319.4799668871374, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 800.0, + "achieved_pass1": 6375.145754619355, + "gain_lower_bound": 100000, + "income_lower_bound": 200000, + "mean": 156250.0, + "mean_repaired": false, + "residual": 697.8701183965177, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 9030.333025443988, + "gain_lower_bound": 250000, + "income_lower_bound": 0, + "mean": 343444.44444444444, + "mean_repaired": false, + "residual": -34.31419243945311, + "target_people": 8996.018833004535 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2671.9073238648934, + "gain_lower_bound": 250000, + "income_lower_bound": 37700, + "mean": 410500.0, + "mean_repaired": false, + "residual": -722.7162379500012, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4987.057898259705, + "gain_lower_bound": 250000, + "income_lower_bound": 50000, + "mean": 383200.0, + "mean_repaired": false, + "residual": 56.155433838577665, + "target_people": 5043.213332098283 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1136.5833333333335, + "gain_lower_bound": 250000, + "income_lower_bound": 100000, + "mean": 486000.0, + "mean_repaired": false, + "residual": -155.3420131772583, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2653.8167067307695, + "gain_lower_bound": 250000, + "income_lower_bound": 125140, + "mean": 420000.0, + "mean_repaired": false, + "residual": -544.0324387507007, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5192.199129852745, + "gain_lower_bound": 250000, + "income_lower_bound": 200000, + "mean": 333000.0, + "mean_repaired": false, + "residual": -271.5642092178241, + "target_people": 4920.6349206349205 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4933.333333333334, + "gain_lower_bound": 500000, + "income_lower_bound": 0, + "mean": 639000.0, + "mean_repaired": false, + "residual": 64.45490722474096, + "target_people": 4997.788240558075 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1969.25, + "gain_lower_bound": 500000, + "income_lower_bound": 37700, + "mean": 543500.0, + "mean_repaired": false, + "residual": -20.058914085107745, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3165.654260634397, + "gain_lower_bound": 500000, + "income_lower_bound": 50000, + "mean": 830333.3333333334, + "mean_repaired": false, + "residual": -139.72626137542693, + "target_people": 3025.92799925897 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1035.75, + "gain_lower_bound": 500000, + "income_lower_bound": 100000, + "mean": 715000.0, + "mean_repaired": false, + "residual": -54.508679843924824, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2056.4166666666665, + "gain_lower_bound": 500000, + "income_lower_bound": 125140, + "mean": 612000.0, + "mean_repaired": false, + "residual": 53.36760131340225, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3947.7216135458166, + "gain_lower_bound": 500000, + "income_lower_bound": 200000, + "mean": 665000.0, + "mean_repaired": false, + "residual": -11.213677037880188, + "target_people": 3936.5079365079364 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1900.0, + "gain_lower_bound": 1000000, + "income_lower_bound": 0, + "mean": 1357500.0, + "mean_repaired": false, + "residual": 99.11529622323019, + "target_people": 1999.1152962232302 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1427.0578982597056, + "gain_lower_bound": 1000000, + "income_lower_bound": 37700, + "mean": 1020000.0, + "mean_repaired": true, + "residual": -452.4623553022594, + "target_people": 974.5955429574461 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1951.0, + "gain_lower_bound": 1000000, + "income_lower_bound": 50000, + "mean": 1427000.0, + "mean_repaired": false, + "residual": 66.28533283931324, + "target_people": 2017.2853328393132 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1496.6711896929824, + "gain_lower_bound": 1000000, + "income_lower_bound": 100000, + "mean": 1020000.0, + "mean_repaired": true, + "residual": -515.4298695369072, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1246.6666666666665, + "gain_lower_bound": 1000000, + "income_lower_bound": 125140, + "mean": 1507000.0, + "mean_repaired": false, + "residual": -191.77453267663213, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4524.160317460317, + "gain_lower_bound": 1000000, + "income_lower_bound": 200000, + "mean": 1295666.6666666667, + "mean_repaired": false, + "residual": -1571.7793650793647, + "target_people": 2952.3809523809523 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 942.668287037037, + "gain_lower_bound": 2000000, + "income_lower_bound": 0, + "mean": 2279000.0, + "mean_repaired": false, + "residual": 56.88936107457812, + "target_people": 999.5576481116151 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 200.0, + "gain_lower_bound": 2000000, + "income_lower_bound": 37700, + "mean": 3295400.0, + "mean_repaired": false, + "residual": 38.07410696144447, + "target_people": 238.07410696144447 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1900.3269841269841, + "gain_lower_bound": 2000000, + "income_lower_bound": 50000, + "mean": 2882000.0, + "mean_repaired": false, + "residual": -891.6843177073275, + "target_people": 1008.6426664196566 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 353.41666666666663, + "gain_lower_bound": 2000000, + "income_lower_bound": 100000, + "mean": 3295400.0, + "mean_repaired": false, + "residual": -42.256510217343816, + "target_people": 311.1601564493228 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1055.8333333333333, + "gain_lower_bound": 2000000, + "income_lower_bound": 125140, + "mean": 2325000.0, + "mean_repaired": false, + "residual": -0.9411993432988766, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1893.5833333333333, + "gain_lower_bound": 2000000, + "income_lower_bound": 200000, + "mean": 3570500.0, + "mean_repaired": false, + "residual": 74.67063492063494, + "target_people": 1968.2539682539682 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 485.22018030513175, + "gain_lower_bound": 5000000, + "income_lower_bound": 0, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -356.053428896724, + "target_people": 129.16675140840775 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 100.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 37700, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -67.85125483374682, + "target_people": 32.14874516625317 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 300.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 50000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -95.12531060840988, + "target_people": 204.87468939159012 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 100000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 82.7721202730988, + "target_people": 82.7721202730988 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 275.00162037037035, + "gain_lower_bound": 5000000, + "income_lower_bound": 125140, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -31.549908051467156, + "target_people": 243.4517123189032 + }, + { + "achieved_fallback": 173.75, + "achieved_pass1": 1885.8333333333335, + "gain_lower_bound": 5000000, + "income_lower_bound": 200000, + "mean": 18739500.0, + "mean_repaired": false, + "residual": -91.32936507936529, + "target_people": 1968.2539682539682 + } + ], + "rake": { + "age_margin": { + "16": { + "normalised": 4007.272727272728, + "published": 4000.0, + "raked": 4007.27272840189 + }, + "25": { + "normalised": 27049.09090909091, + "published": 27000.0, + "raked": 27049.090911107716 + }, + "35": { + "normalised": 65118.18181818182, + "published": 65000.0, + "raked": 65118.18181331646 + }, + "45": { + "normalised": 98178.18181818182, + "published": 98000.0, + "raked": 98178.18180242073 + }, + "55": { + "normalised": 144261.8181818182, + "published": 144000.0, + "raked": 144261.81817521903 + }, + "65": { + "normalised": 125227.27272727275, + "published": 125000.0, + "raked": 125227.27273548905 + }, + "75": { + "normalised": 87158.18181818182, + "published": 87000.0, + "raked": 87158.18183404508 + } + }, + "gains_margin": { + "16": { + "attainable": true, + "normalised": 318596224.2969573, + "published": 319000000.0, + "raked": 318596224.3558943, + "raked_mean": 79504.5024257561, + "target_mean": 79504.50243345123, + "tilt_lambda": -4.4257345128760575 + }, + "25": { + "attainable": true, + "normalised": 2495836879.3670735, + "published": 2499000000.0, + "raked": 2495836879.2296968, + "raked_mean": 92270.6381309392, + "target_mean": 92270.63814289778, + "tilt_lambda": -6.041919161022214 + }, + "35": { + "attainable": true, + "normalised": 11760095740.114962, + "published": 11775000000.0, + "raked": 11760095738.732988, + "raked_mean": 180596.1931254058, + "target_mean": 180596.19313313495, + "tilt_lambda": -1.2141554059004156 + }, + "45": { + "attainable": true, + "normalised": 28386024724.038, + "published": 28422000000.0, + "raked": 28386024722.85784, + "raked_mean": 289127.62695059343, + "target_mean": 289127.6269161987, + "tilt_lambda": -0.07648477374735435 + }, + "55": { + "attainable": true, + "normalised": 38069751967.87279, + "published": 38118000000.0, + "raked": 38069751968.00012, + "raked_mean": 263893.4712562749, + "target_mean": 263893.4712433206, + "tilt_lambda": 0.3534790756321525 + }, + "65": { + "attainable": true, + "normalised": 24229292794.495876, + "published": 24260000000.0, + "raked": 24229292795.126102, + "raked_mean": 193482.55588304918, + "target_mean": 193482.55589071114, + "tilt_lambda": 0.21316023112280014 + }, + "75": { + "attainable": true, + "normalised": 13794517398.086441, + "published": 13812000000.0, + "raked": 13794517399.969437, + "raked_mean": 158269.9077664918, + "target_mean": 158269.90777369344, + "tilt_lambda": 0.5739417512797743 + } + }, + "gains_margin_max_abs_error": 1.8498967864204015e-10, + "income_bands_without_gainers": [], + "ipf_max_abs_margin_error": 2.817782330918425e-10, + "ipf_unattainable_margin_mass": { + "age": 0.0, + "gains": 0.0, + "joint": 0.0, + "region": 0.0 + }, + "ipf_zero_seed_cells": 0, + "joint_total_gains_at_cell_means": 119054115728.2721, + "joint_total_people": 551000.0000000001, + "rake_rounds": 500, + "rake_rounds_used": 9, + "rake_tolerance": 1e-09, + "region_margin": { + "london": { + "normalised": 106797.59862778733, + "published_individuals_basis": 106614.72602739726, + "raked": 106797.59861620239 + }, + "rest_of_england": { + "normalised": 209814.75128644946, + "published_individuals_basis": 209455.47945205483, + "raked": 209814.75130484806 + }, + "south_east_and_east_of_england": { + "normalised": 172955.4030874786, + "published_individuals_basis": 172659.2465753425, + "raked": 172955.40307525013 + }, + "wales_scotland_northern_ireland": { + "normalised": 61432.24699828475, + "published_individuals_basis": 61327.054794520554, + "raked": 61432.247003699486 + } + } + }, + "rounding_carry_out": { + "0": { + "0": -11.971724241680704, + "10000": 388.461793568345, + "100000": -55.73312983898904, + "1000000": -99.11529622323025, + "2000000": -56.88936107457822, + "25000": -382.63663497604966, + "250000": 34.31419243945379, + "50000": 212.79920128040453, + "500000": -64.45490722474102, + "5000000": 356.05342889672403 + }, + "100000": { + "0": 56.269609265125894, + "10000": 583.3559491327843, + "100000": 115.07955147452768, + "1000000": 515.4298695369073, + "2000000": 42.25651021734384, + "25000": 357.35302365875833, + "250000": 155.3420131772581, + "50000": 58.342746262544146, + "500000": 55.21780605278688, + "5000000": -82.29398076777588 + }, + "125140": { + "0": 59.60106208504294, + "10000": -196.71290335735185, + "100000": 319.4799668871366, + "1000000": 191.77453267663248, + "2000000": 0.9411993432987167, + "25000": 279.38418443209366, + "250000": 544.0324387507004, + "50000": -8.415257314070608, + "500000": -53.36760131340198, + "5000000": 31.549908051467206 + }, + "200000": { + "0": 60.448135458961616, + "10000": 1929.6360438565644, + "100000": 73.51128867313201, + "1000000": 1679.778714421369, + "2000000": -40.95289537325906, + "25000": 329.12357818036423, + "250000": 917.2549629084091, + "50000": -193.5064475096264, + "500000": 49.86226815750109, + "5000000": 36.600202358773934 + }, + "37700": { + "0": 146.58558982178306, + "10000": 553.7375978343116, + "100000": 56.41336849191222, + "1000000": 452.46235530225937, + "2000000": -38.07410696144448, + "25000": -87.16391465477176, + "250000": 722.7162379500015, + "50000": 19.1302347220751, + "500000": 20.058914085107887, + "5000000": 67.85125483374682 + }, + "50000": { + "0": -85.2239866177359, + "10000": 119.85457566424478, + "100000": -40.71958848317516, + "1000000": -66.28533283931367, + "2000000": 891.6843177073276, + "25000": -25.193915874577556, + "250000": -56.15543383857729, + "50000": 99.53294231657397, + "500000": 139.7262613754273, + "5000000": 95.12531060840993 + } + } + }, + "published_taxpayer_mass": 551000.0, + "region_rows": [ + { + "achieved_gains": 1657303882.4992783, + "achieved_people": 18561.66625916871, + "geography_id": "E12000001", + "published_gains_individuals_basis": 1497797150.3974364, + "published_people_individuals_basis": 11321.91780821918, + "region": "NORTH_EAST" + }, + { + "achieved_gains": 4224528431.0250587, + "achieved_people": 53648.99190938511, + "geography_id": "E12000002", + "published_gains_individuals_basis": 8790074083.38308, + "published_people_individuals_basis": 41513.69863013699, + "region": "NORTH_WEST" + }, + { + "achieved_gains": 5500514230.990979, + "achieved_people": 32615.261904761912, + "geography_id": "E12000003", + "published_gains_individuals_basis": 6970985861.949795, + "published_people_individuals_basis": 32078.767123287675, + "region": "YORKSHIRE" + }, + { + "achieved_gains": 4653199788.769486, + "achieved_people": 26104.91501650165, + "geography_id": "E12000004", + "published_gains_individuals_basis": 6299365751.358824, + "published_people_individuals_basis": 31135.273972602743, + "region": "EAST_MIDLANDS" + }, + { + "achieved_gains": 5668902142.194633, + "achieved_people": 37466.95, + "geography_id": "E12000005", + "published_gains_individuals_basis": 5890960774.765152, + "published_people_individuals_basis": 33022.260273972606, + "region": "WEST_MIDLANDS" + }, + { + "achieved_gains": 11520914061.936556, + "achieved_people": 72219.13481570513, + "geography_id": "E12000006", + "published_gains_individuals_basis": 11545870966.728456, + "published_people_individuals_basis": 58496.57534246576, + "region": "EAST_OF_ENGLAND" + }, + { + "achieved_gains": 29479861857.173622, + "achieved_people": 101525.8343373494, + "geography_id": "E12000007", + "published_gains_individuals_basis": 32519714615.602127, + "published_people_individuals_basis": 106614.72602739726, + "region": "LONDON" + }, + { + "achieved_gains": 14531017156.800095, + "achieved_people": 103079.81400767545, + "geography_id": "E12000008", + "published_gains_individuals_basis": 25606804690.69088, + "published_people_individuals_basis": 114162.67123287672, + "region": "SOUTH_EAST" + }, + { + "achieved_gains": 10545344902.903622, + "achieved_people": 37397.47703252032, + "geography_id": "E12000009", + "published_gains_individuals_basis": 10341263627.509504, + "published_people_individuals_basis": 60383.56164383562, + "region": "SOUTH_WEST" + }, + { + "achieved_gains": 9792731180.237427, + "achieved_people": 22964.236939435967, + "geography_id": "W92000004", + "published_gains_individuals_basis": 2358632410.6946497, + "published_people_individuals_basis": 16982.87671232877, + "region": "WALES" + }, + { + "achieved_gains": 6996609521.981648, + "achieved_people": 42634.816899070385, + "geography_id": "S92000003", + "published_gains_individuals_basis": 5680201325.83493, + "published_people_individuals_basis": 34909.24657534247, + "region": "SCOTLAND" + }, + { + "achieved_gains": 9493888921.346813, + "achieved_people": 9200.534027777778, + "geography_id": "N92000002", + "published_gains_individuals_basis": 1757265449.747086, + "published_people_individuals_basis": 9434.931506849316, + "region": "NORTHERN_IRELAND" + } + ], + "remainder_mass": 11612967.368653707, + "rows": [ + { + "achieved_gains": 748986364.8730376, + "achieved_people": 130920.9435938761, + "gain_lower_bound": 0, + "published_gains": 760000000.0, + "published_people": 133000.0 + }, + { + "achieved_gains": 2100268181.0981772, + "achieved_people": 126131.68009279478, + "gain_lower_bound": 10000, + "published_gains": 2036000000.0, + "published_people": 123000.0 + }, + { + "achieved_gains": 3511844087.381327, + "achieved_people": 97683.8538130982, + "gain_lower_bound": 25000, + "published_gains": 3516000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 5483412305.693058, + "achieved_people": 77122.83020112425, + "gain_lower_bound": 50000, + "published_gains": 5510000000.0, + "published_people": 78000.0 + }, + { + "achieved_gains": 9465682775.773422, + "achieved_people": 60669.11234620694, + "gain_lower_bound": 100000, + "published_gains": 9487000000.0, + "published_people": 61000.0 + }, + { + "achieved_gains": 9133818408.978733, + "achieved_people": 25671.89741748543, + "gain_lower_bound": 250000, + "published_gains": 8820000000.0, + "published_people": 25000.0 + }, + { + "achieved_gains": 10911926835.608763, + "achieved_people": 17108.125874180216, + "gain_lower_bound": 500000, + "published_gains": 11372000000.0, + "published_people": 16000.0 + }, + { + "achieved_gains": 14912506700.201605, + "achieved_people": 12545.556072079671, + "gain_lower_bound": 1000000, + "published_gains": 12806000000.0, + "published_people": 9000.0 + }, + { + "achieved_gains": 16663746929.92261, + "achieved_people": 6345.828604497356, + "gain_lower_bound": 2000000, + "published_gains": 16477000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 41132623488.32849, + "achieved_people": 3219.8051340088355, + "gain_lower_bound": 5000000, + "published_gains": 48474000000.0, + "published_people": 3000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 557419.6331493518 + }, + "hmrc_cgt_asset_type_spine": { + "asset_type": { + "achieved_gains": { + "agricultural_commercial_industrial_land_buildings": 8105914262.577228, + "listed_shares": 7760459130.514346, + "other_financial_assets": 24311233607.409203, + "other_non_financial_assets": 678138895.7028271, + "unlisted_shares": 60274103956.835396 + }, + "achieved_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.08015352810625814, + "listed_shares": 0.07673757196111511, + "other_financial_assets": 0.24039621973866343, + "other_non_financial_assets": 0.0067056254576496705, + "unlisted_shares": 0.5960070547363137 + }, + "achieved_people": { + "agricultural_commercial_industrial_land_buildings": 915.2201803051317, + "listed_shares": 154279.34270748746, + "other_financial_assets": 159790.71414824008, + "other_non_financial_assets": 466.66666666666663, + "unlisted_shares": 39295.04838332011 + }, + "log_sigma": 1.5, + "median_anchor_gbp": { + "agricultural_commercial_industrial_land_buildings": 156692.3076923077, + "listed_shares": 5501.392757660167, + "other_financial_assets": 14663.62807657247, + "other_non_financial_assets": 143600.0, + "unlisted_shares": 114879.31034482758 + }, + "non_residential_gains_mass": 101129849853.039, + "share_fit_iterations": 17, + "target_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.033817547937245784, + "listed_shares": 0.0983647381090728, + "other_financial_assets": 0.26705403834979663, + "other_non_financial_assets": 0.0476799203121109, + "unlisted_shares": 0.5530837552917739 + }, + "type_weights": { + "agricultural_commercial_industrial_land_buildings": 0.0008669306792281503, + "listed_shares": 0.6198938098341481, + "other_financial_assets": 0.3538001791514822, + "other_non_financial_assets": 0.001417263931779158, + "unlisted_shares": 0.024021816403362567 + } + }, + "composition_by_band": [ + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 0, + "listed_shares_gains": 239170443.23469737, + "listed_shares_people": 40775.34331458868, + "other_financial_assets_gains": 100895909.26450965, + "other_financial_assets_people": 16820.697474926783, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 408920012.37383044, + "residential_land_buildings_people": 73324.90280436062, + "unlisted_shares_gains": 0.0, + "unlisted_shares_people": 0.0 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 10000, + "listed_shares_gains": 651552495.0756634, + "listed_shares_people": 39581.772962390394, + "other_financial_assets_gains": 566611872.7764726, + "other_financial_assets_people": 32503.5710450631, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 882103813.246041, + "residential_land_buildings_people": 54046.33608534128, + "unlisted_shares_gains": 0.0, + "unlisted_shares_people": 0.0 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 25000, + "listed_shares_gains": 1053115293.0317141, + "listed_shares_people": 27800.102393256533, + "other_financial_assets_gains": 1230772173.7974083, + "other_financial_assets_people": 35226.77073934226, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1183868827.792951, + "residential_land_buildings_people": 33522.4806804994, + "unlisted_shares_gains": 44087792.75925342, + "unlisted_shares_people": 1134.5 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 50000, + "listed_shares_gains": 2015760157.1699502, + "listed_shares_people": 29832.777981845433, + "other_financial_assets_gains": 1618966934.612063, + "other_financial_assets_people": 21834.649078154733, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1518028139.2819438, + "residential_land_buildings_people": 21633.313664394074, + "unlisted_shares_gains": 330657074.62910104, + "unlisted_shares_people": 3822.0894767300197 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 100000, + "listed_shares_gains": 1889538881.3326173, + "listed_shares_people": 13055.679388739747, + "other_financial_assets_gains": 4186209299.821094, + "other_financial_assets_people": 27052.524547943183, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1892941931.2646105, + "residential_land_buildings_people": 12459.57507619067, + "unlisted_shares_gains": 1496992663.3550992, + "unlisted_shares_people": 8101.333333333334 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 250000, + "listed_shares_gains": 432759409.1046277, + "listed_shares_people": 1166.6666666666667, + "other_financial_assets_gains": 4638079664.239997, + "other_financial_assets_people": 12956.683782059363, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1257618828.0000439, + "residential_land_buildings_people": 3758.864465509226, + "unlisted_shares_gains": 2805360507.6340647, + "unlisted_shares_people": 7789.682503250179 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 265726589.20691046, + "agricultural_commercial_industrial_land_buildings_people": 430.0, + "gain_lower_bound": 500000, + "listed_shares_gains": 1056511662.6264782, + "listed_shares_people": 1900.3333333333337, + "other_financial_assets_gains": 4610409477.8319, + "other_financial_assets_people": 7449.069306930693, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1547652936.9047368, + "residential_land_buildings_people": 2385.5, + "unlisted_shares_gains": 3431626169.0387383, + "unlisted_shares_people": 4943.2232339161865 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 1000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 6052820253.91853, + "other_financial_assets_people": 5380.0815071533, + "other_non_financial_assets_gains": 306924841.6520426, + "other_non_financial_assets_people": 300.0, + "residential_land_buildings_gains": 1157831256.7458332, + "residential_land_buildings_people": 966.6666666666666, + "unlisted_shares_gains": 7394930347.885199, + "unlisted_shares_people": 5898.807898259705 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 2000000, + "listed_shares_gains": 422050788.9385988, + "listed_shares_people": 166.66666666666666, + "other_financial_assets_gains": 1306468021.147228, + "other_financial_assets_people": 566.6666666666666, + "other_non_financial_assets_gains": 371214054.05078447, + "other_non_financial_assets_people": 166.66666666666666, + "residential_land_buildings_gains": 852586885.0525038, + "residential_land_buildings_people": 376.00162037037035, + "unlisted_shares_gains": 13711427180.733494, + "unlisted_shares_people": 5069.826984126984 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 7840187673.370317, + "agricultural_commercial_industrial_land_buildings_people": 485.22018030513175, + "gain_lower_bound": 5000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 0.0, + "other_financial_assets_people": 0.0, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 2233413594.1577325, + "residential_land_buildings_people": 199.0, + "unlisted_shares_gains": 31059022220.800438, + "unlisted_shares_people": 2535.584953703704 + } + ], + "facts": { + "annual_exempt_amount": 3000.0, + "resource": "hmrc_cgt_asset_type_facts.json", + "resource_sha256": "99123735ad0bc54cc5d8cf7b156f4feaa4bcf3ccf46d7b69377e1036b7251dcb", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f" + }, + "residential": { + "achieved_count": 202672.64106333232, + "achieved_gains": 12934966224.820229, + "achieved_rows": 324, + "count_bernoulli_sigma": 9527.199715590119, + "count_target_individuals_basis": 202630.0578034682, + "expected_count": 202630.0578034682, + "expected_gains": 12242481474.160141, + "gains_bernoulli_sigma": 3170804684.474446, + "gains_target_individuals_basis": 12242481474.688189, + "liable_gains_mass": 114064816077.85922, + "liable_taxpayer_mass": 557419.6331493518, + "log_gain_centre": 10.458203244931743, + "logistic_intercept": -0.6418528706385951, + "logistic_slope": -0.4693082721205428, + "max_liable_weight": 3266.6666666666665, + "table8a_gains_total": 12914000000.0, + "table8a_taxpayers_total": 205000.0, + "table8b_individuals_gains_share": 0.9480007336757154, + "table8b_individuals_taxpayer_share": 0.9884393063583815 + }, + "seeds": { + "asset_type": 554, + "residential_flag": 553 + }, + "stage": "hmrc_cgt_asset_type_spine", + "value_counts": { + "agricultural_commercial_industrial_land_buildings": 2, + "listed_shares": 283, + "none": 91945, + "other_financial_assets": 297, + "other_non_financial_assets": 2, + "residential_land_buildings": 324, + "sub_aea": 20642, + "unlisted_shares": 95 + } + } + } +} diff --git a/docs/evidence/uk-cgt-725/receipt-f010.json b/docs/evidence/uk-cgt-725/receipt-f010.json new file mode 100644 index 0000000000..eb3012861d --- /dev/null +++ b/docs/evidence/uk-cgt-725/receipt-f010.json @@ -0,0 +1,2202 @@ +{ + "label": "-f010", + "inputs": { + "control": "control-f010.h5", + "candidate": "candidate-f010.h5" + }, + "control_provenance": { + "h5": "control-f010.h5", + "build_commit": "d69a543e5d7f0ac01e73c9c6eb4645b0d4b8b9b6", + "h5_sha256": "489fd6df5fac3777a2cb7f04f0959e929d53410e06cc0d9f3bd19ba10dcaf928", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": { + "fraction": 0.1, + "normalization_factor": 9.893949659495037, + "post_household_count": 1628, + "pre_household_count": 16288, + "receipt": { + "eligible_household_count": 16288, + "exact_count_rule": "floor(fraction * eligible)", + "fraction": 0.1, + "incoming_household_mass": 28972433.0, + "realized_household_count": 1628, + "requested_household_count": 1628, + "sampled_household_mass": 2928298.0, + "seed": 42, + "selected_household_ids_sha256": "30f3e97baec71e576e325a52629639643e18c2ec9e3a3926f323fc01201e22ef" + }, + "rung_token": "f010", + "seed": 42 + }, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "0bfeebecb94c9fafb36fa286ba3b8952d9bba43c070ed627c76761a24a550f1c", + "source_vintages": { + "frs": "2024_25" + } + }, + "control_headline": { + "liable_taxpayers": 352087.3331049785, + "liable_gains": 39506545113.28106, + "share_65_plus_of_taxpayers": 0.2758255931482121, + "share_65_plus_of_gains": 0.24537285267819242, + "share_65_plus_of_2m_plus_gainers": 0.22680412371134018, + "share_65_plus_of_2m_plus_gains": 0.172652206844061, + "top_2m_plus_taxpayers": 3233.333333333334, + "top_2m_plus_gains": 13439687768.66763 + }, + "control_stage_evidence": { + "hmrc_cgt_gains_spine": { + "published_taxpayer_mass": 359000.0, + "remainder_mass": 11661404.637625739, + "rows": [ + { + "achieved_gains": 401017014.52094287, + "achieved_people": 54594.219933421504, + "gain_lower_bound": 0, + "published_gains": 462000000.0, + "published_people": 63000.0 + }, + { + "achieved_gains": 1934067333.6123843, + "achieved_people": 105978.86868533876, + "gain_lower_bound": 10000, + "published_gains": 1669000000.0, + "published_people": 101000.0 + }, + { + "achieved_gains": 2293277497.1782928, + "achieved_people": 64703.635245246856, + "gain_lower_bound": 25000, + "published_gains": 2645000000.0, + "published_people": 74000.0 + }, + { + "achieved_gains": 4285175364.213763, + "achieved_people": 63754.27377705134, + "gain_lower_bound": 50000, + "published_gains": 3731000000.0, + "published_people": 53000.0 + }, + { + "achieved_gains": 4927745215.181365, + "achieved_people": 33460.504116163356, + "gain_lower_bound": 100000, + "published_gains": 5649000000.0, + "published_people": 37000.0 + }, + { + "achieved_gains": 5306079841.88441, + "achieved_people": 16980.180214885928, + "gain_lower_bound": 250000, + "published_gains": 4766000000.0, + "published_people": 14000.0 + }, + { + "achieved_gains": 4093585614.155995, + "achieved_people": 7282.317799537478, + "gain_lower_bound": 500000, + "published_gains": 5705000000.0, + "published_people": 8000.0 + }, + { + "achieved_gains": 2825909463.8662825, + "achieved_people": 2100.0, + "gain_lower_bound": 1000000, + "published_gains": 6390000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 5674807700.550061, + "achieved_people": 2300.0, + "gain_lower_bound": 2000000, + "published_gains": 9189000000.0, + "published_people": 3000.0 + }, + { + "achieved_gains": 7764880068.117569, + "achieved_people": 933.3333333333331, + "gain_lower_bound": 5000000, + "published_gains": 22714000000.0, + "published_people": 2000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 352087.3331049785 + } + }, + "candidate_provenance": { + "h5": "candidate-f010.h5", + "build_commit": "d7ec3ea1eb6fb30e92b03cab8d76b1950703d7a6", + "h5_sha256": "0588b7a66209ede5c746749894b90d62c5500417d82ea7e36eb9f77e328587b9", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_asset_type_spine": { + "assign_main_asset_type": 554, + "assign_residential_property_flag": 553 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": { + "fraction": 0.1, + "normalization_factor": 9.893949659495037, + "post_household_count": 1628, + "pre_household_count": 16288, + "receipt": { + "eligible_household_count": 16288, + "exact_count_rule": "floor(fraction * eligible)", + "fraction": 0.1, + "incoming_household_mass": 28972433.0, + "realized_household_count": 1628, + "requested_household_count": 1628, + "sampled_household_mass": 2928298.0, + "seed": 42, + "selected_household_ids_sha256": "30f3e97baec71e576e325a52629639643e18c2ec9e3a3926f323fc01201e22ef" + }, + "rung_token": "f010", + "seed": 42 + }, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "0d4ed98f38286ff32d0f04c22078954ffeb25d9f035241791f5f76829a4cda9a", + "source_vintages": { + "frs": "2024_25" + }, + "chronicle_feed": { + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797" + } + }, + "candidate_headline": { + "liable_taxpayers": 551288.5607767875, + "liable_gains": 50527002427.86101, + "share_65_plus_of_taxpayers": 0.38190101102767365, + "share_65_plus_of_gains": 0.26923989589486885, + "share_65_plus_of_2m_plus_gainers": 0.1973684210526316, + "share_65_plus_of_2m_plus_gains": 0.17252573097480473, + "top_2m_plus_taxpayers": 2533.333333333333, + "top_2m_plus_gains": 9691206043.39919 + }, + "candidate_stage_evidence": { + "hmrc_cgt_gains_spine": { + "age_by_band_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 47184591.87652004, + "achieved_people": 833.3333333333334, + "age_lower_bound": 16, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 188945129.2190324, + "achieved_people": 533.3333333333334, + "age_lower_bound": 16, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 322011658.5906596, + "achieved_people": 400.0, + "age_lower_bound": 16, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 869489033.0695938, + "achieved_people": 100.0, + "age_lower_bound": 16, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 36451218.64866604, + "achieved_people": 8018.2359906391575, + "age_lower_bound": 25, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 170813747.1584927, + "achieved_people": 5574.628636239299, + "age_lower_bound": 25, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 202682402.52617925, + "achieved_people": 2666.666666666667, + "age_lower_bound": 25, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 173170675.05261984, + "achieved_people": 1000.0, + "age_lower_bound": 25, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 229017770.91805124, + "achieved_people": 700.0, + "age_lower_bound": 25, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 130116584.95087552, + "achieved_people": 166.66666666666666, + "age_lower_bound": 25, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 415290867.3892, + "achieved_people": 266.66666666666663, + "age_lower_bound": 25, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 55709321.749111354, + "achieved_people": 12201.138196260536, + "age_lower_bound": 35, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 246460890.3262994, + "achieved_people": 16535.39310832891, + "age_lower_bound": 35, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 324948304.8940843, + "achieved_people": 9045.670154500442, + "age_lower_bound": 35, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 699157164.4024543, + "achieved_people": 9528.943210270949, + "age_lower_bound": 35, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 3559138699.449029, + "achieved_people": 20863.756571867867, + "age_lower_bound": 35, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 392422271.14150494, + "achieved_people": 1000.0, + "age_lower_bound": 35, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 865081781.920081, + "achieved_people": 1433.3333333333335, + "age_lower_bound": 35, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 1561212072.9966478, + "achieved_people": 1333.3333333333335, + "age_lower_bound": 35, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 705316997.995611, + "achieved_people": 266.66666666666663, + "age_lower_bound": 35, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 35, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 151087517.12646157, + "achieved_people": 25125.945505019165, + "age_lower_bound": 45, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 115663052.72987124, + "achieved_people": 6783.965770617153, + "age_lower_bound": 45, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 1287058671.394631, + "achieved_people": 38840.28895168863, + "age_lower_bound": 45, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1252458974.9750135, + "achieved_people": 18605.3526555642, + "age_lower_bound": 45, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 806345047.90322, + "achieved_people": 4566.666666666667, + "age_lower_bound": 45, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 378061415.377562, + "achieved_people": 833.3333333333334, + "age_lower_bound": 45, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 4197083077.838733, + "achieved_people": 5092.564229801747, + "age_lower_bound": 45, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 489936022.38052046, + "achieved_people": 366.66666666666663, + "age_lower_bound": 45, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 1705077595.3562834, + "achieved_people": 533.3333333333333, + "age_lower_bound": 45, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 2029672415.7128797, + "achieved_people": 266.66666666666663, + "age_lower_bound": 45, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 325262827.41172564, + "achieved_people": 51243.20848511458, + "age_lower_bound": 55, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 402867000.93720895, + "achieved_people": 27359.43136639541, + "age_lower_bound": 55, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 431933262.2340981, + "achieved_people": 11793.587994118085, + "age_lower_bound": 55, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 2409705338.010435, + "achieved_people": 32111.267118635416, + "age_lower_bound": 55, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 2283755040.478514, + "achieved_people": 15360.857436413007, + "age_lower_bound": 55, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 2068047977.7413893, + "achieved_people": 5300.0, + "age_lower_bound": 55, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1894167246.2585661, + "achieved_people": 2633.3333333333335, + "age_lower_bound": 55, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 790646291.5621586, + "achieved_people": 600.0, + "age_lower_bound": 55, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 2045655733.1431768, + "achieved_people": 766.6666666666666, + "age_lower_bound": 55, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 664011861.4567546, + "achieved_people": 100.0, + "age_lower_bound": 55, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 138726639.56332612, + "achieved_people": 25082.46400047627, + "age_lower_bound": 65, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 442624820.96241635, + "achieved_people": 24329.12794200136, + "age_lower_bound": 65, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 1156920581.8427155, + "achieved_people": 32005.932898199728, + "age_lower_bound": 65, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 2518690507.308217, + "achieved_people": 31859.179364063923, + "age_lower_bound": 65, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 996839728.3290665, + "achieved_people": 5226.2469821491295, + "age_lower_bound": 65, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 655931442.5555874, + "achieved_people": 2066.666666666667, + "age_lower_bound": 65, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 602017202.5839465, + "achieved_people": 933.3333333333333, + "age_lower_bound": 65, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 1432294880.7826843, + "achieved_people": 966.6666666666666, + "age_lower_bound": 65, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 204518571.71100524, + "achieved_people": 100.0, + "age_lower_bound": 65, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 65, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 99487562.86178903, + "achieved_people": 19348.949518818335, + "age_lower_bound": 75, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 321782127.3212888, + "achieved_people": 19466.345955056484, + "age_lower_bound": 75, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 54379084.855660215, + "achieved_people": 1666.6666666666667, + "age_lower_bound": 75, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1120620239.0675266, + "achieved_people": 19120.0076037262, + "age_lower_bound": 75, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 86825686.92884052, + "achieved_people": 533.3333333333334, + "age_lower_bound": 75, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 272654946.57543117, + "achieved_people": 866.6666666666666, + "age_lower_bound": 75, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 173278297.24729073, + "achieved_people": 300.0, + "age_lower_bound": 75, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 400712840.4064568, + "achieved_people": 300.0, + "age_lower_bound": 75, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 1467463834.9538853, + "achieved_people": 400.0, + "age_lower_bound": 75, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 75, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 16364604.358472882, + "achieved_people": 3670.655323672659, + "age_lower_bound": 85, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 120157320.22577268, + "achieved_people": 4904.925543694665, + "age_lower_bound": 85, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 285913186.3231597, + "achieved_people": 9015.861627214854, + "age_lower_bound": 85, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 347386461.61622596, + "achieved_people": 6407.961969572632, + "age_lower_bound": 85, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 116623038.19754434, + "achieved_people": 1066.6666666666667, + "age_lower_bound": 85, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 235462018.68385935, + "achieved_people": 533.3333333333334, + "age_lower_bound": 85, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 166932623.11544967, + "achieved_people": 266.66666666666663, + "age_lower_bound": 85, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 169276625.1794641, + "achieved_people": 100.0, + "age_lower_bound": 85, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 85, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 85, + "gain_lower_bound": 5000000 + } + ], + "age_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "published_gains": 54000000.0, + "published_people": 1000.0 + }, + { + "achieved_gains": 1427630412.755806, + "achieved_people": 1866.666666666667, + "age_lower_bound": 16, + "published_gains": 319000000.0, + "published_people": 4000.0 + }, + { + "achieved_gains": 1357543266.644085, + "achieved_people": 18392.864626878458, + "age_lower_bound": 25, + "published_gains": 2499000000.0, + "published_people": 27000.0 + }, + { + "achieved_gains": 8409447504.874822, + "achieved_people": 72208.23457456204, + "age_lower_bound": 35, + "published_gains": 11775000000.0, + "published_people": 65000.0 + }, + { + "achieved_gains": 12412443790.795176, + "achieved_people": 101014.78377935756, + "age_lower_bound": 45, + "published_gains": 28422000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 13316052579.23403, + "achieved_people": 147268.3524006765, + "age_lower_bound": 55, + "published_gains": 38118000000.0, + "published_people": 144000.0 + }, + { + "achieved_gains": 8148564375.638966, + "achieved_people": 122569.61785355708, + "age_lower_bound": 65, + "published_gains": 24260000000.0, + "published_people": 125000.0 + }, + { + "achieved_gains": 3997204620.218169, + "achieved_people": 62001.96974426769, + "age_lower_bound": 75, + "published_gains": 11736000000.0, + "published_people": 68000.0 + }, + { + "achieved_gains": 1458115877.6999488, + "achieved_people": 25966.071130821474, + "age_lower_bound": 85, + "published_gains": 2076000000.0, + "published_people": 19000.0 + } + ], + "allocation": { + "band_rows": [ + { + "gain_lower_bound": 0, + "gains_difference": -1000000.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 759000000.0, + "published_people": 133000.0, + "table2_1a_gains": 760000000.0, + "table2_1a_people": 133000.0, + "target_gains_at_cell_means": 758976349.1549579, + "target_people": 132976.11086837502 + }, + { + "gain_lower_bound": 10000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 2036000000.0, + "published_people": 123000.0, + "table2_1a_gains": 2036000000.0, + "table2_1a_people": 123000.0, + "target_gains_at_cell_means": 2033975331.6882389, + "target_people": 122932.62720850299 + }, + { + "gain_lower_bound": 25000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 3516000000.0, + "published_people": 98000.0, + "table2_1a_gains": 3516000000.0, + "table2_1a_people": 98000.0, + "target_gains_at_cell_means": 3514051553.988366, + "target_people": 96927.5289296759 + }, + { + "gain_lower_bound": 50000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 5510000000.0, + "published_people": 78000.0, + "table2_1a_gains": 5510000000.0, + "table2_1a_people": 78000.0, + "target_gains_at_cell_means": 5508271180.542232, + "target_people": 77967.24136638598 + }, + { + "gain_lower_bound": 100000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 9487000000.0, + "published_people": 61000.0, + "table2_1a_gains": 9487000000.0, + "table2_1a_people": 61000.0, + "target_gains_at_cell_means": 9489202603.948486, + "target_people": 60975.20777135002 + }, + { + "gain_lower_bound": 250000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 8820000000.0, + "published_people": 25000.0, + "table2_1a_gains": 8820000000.0, + "table2_1a_people": 25000.0, + "target_gains_at_cell_means": 8823899082.660036, + "target_people": 24000.083759788773 + }, + { + "gain_lower_bound": 500000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 11372000000.0, + "published_people": 16000.0, + "table2_1a_gains": 11372000000.0, + "table2_1a_people": 16000.0, + "target_gains_at_cell_means": 11376054216.655891, + "target_people": 17000.440850376017 + }, + { + "gain_lower_bound": 1000000, + "gains_difference": 0.0, + "means_repaired": 2, + "people_difference": 0.0, + "published_gains": 12806000000.0, + "published_people": 9000.0, + "table2_1a_gains": 12806000000.0, + "table2_1a_people": 9000.0, + "target_gains_at_cell_means": 13002442818.185097, + "target_people": 9979.510578547051 + }, + { + "gain_lower_bound": 2000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 16477000000.0, + "published_people": 5000.0, + "table2_1a_gains": 16477000000.0, + "table2_1a_people": 5000.0, + "target_gains_at_cell_means": 16475121641.489286, + "target_people": 5580.580680186042 + }, + { + "gain_lower_bound": 5000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 48474000000.0, + "published_people": 3000.0, + "table2_1a_gains": 48474000000.0, + "table2_1a_people": 3000.0, + "target_gains_at_cell_means": 48072120949.95949, + "target_people": 2660.6679868122214 + } + ], + "conditioning": { + "age_group_lower_bounds": [ + 16, + 35, + 45, + 55, + 65, + 75 + ], + "fallback_policy": "pooled_income_band_rank_walk", + "joint_record_set_prefix": "hmrc.cgt_table3_2026.ty2024.", + "joint_resource": "hmrc_cgt_conditioning_facts.json", + "joint_resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "joint_source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "joint_source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "joint_vintage": "2024-25", + "region_groups": { + "EAST_MIDLANDS": "rest_of_england", + "EAST_OF_ENGLAND": "south_east_and_east_of_england", + "LONDON": "london", + "NORTHERN_IRELAND": "wales_scotland_northern_ireland", + "NORTH_EAST": "rest_of_england", + "NORTH_WEST": "rest_of_england", + "SCOTLAND": "wales_scotland_northern_ireland", + "SOUTH_EAST": "south_east_and_east_of_england", + "SOUTH_WEST": "rest_of_england", + "WALES": "wales_scotland_northern_ireland", + "WEST_MIDLANDS": "rest_of_england", + "YORKSHIRE": "rest_of_england" + }, + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "vintage_tax_year": 2024 + }, + "fallback_released_mass": 50930.465976826985, + "fallback_share_by_band": { + "0": 0.0, + "10000": 0.06612644187499235, + "100000": 0.3619495016142098, + "1000000": 0.0, + "2000000": 0.0, + "25000": 0.16598250991340624, + "250000": 0.0, + "50000": 0.07164478738090879, + "500000": 0.0, + "5000000": 0.35714285714285715 + }, + "joint_rows": [ + { + "achieved_fallback": 0.0, + "achieved_pass1": 62936.969276133575, + "gain_lower_bound": 0, + "income_lower_bound": 0, + "mean": 5830.985915492958, + "mean_repaired": false, + "residual": 8031.623739791088, + "target_people": 70968.59301592466 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 19722.70905231051, + "gain_lower_bound": 0, + "income_lower_bound": 37700, + "mean": 5461.538461538462, + "mean_repaired": false, + "residual": -7052.966993863711, + "target_people": 12669.7420584468 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 28204.410503452706, + "gain_lower_bound": 0, + "income_lower_bound": 50000, + "mean": 5565.217391304348, + "mean_repaired": false, + "residual": -5005.629175800605, + "target_people": 23198.7813276521 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 9601.138196260536, + "gain_lower_bound": 0, + "income_lower_bound": 100000, + "mean": 5600.0, + "mean_repaired": false, + "residual": -4694.93159548016, + "target_people": 4906.206600780376 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 9764.141705281247, + "gain_lower_bound": 0, + "income_lower_bound": 125140, + "mean": 5750.0, + "mean_repaired": false, + "residual": -1325.0046333609716, + "target_people": 8439.137071920275 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 14461.228286562138, + "gain_lower_bound": 0, + "income_lower_bound": 200000, + "mean": 5538.461538461538, + "mean_repaired": false, + "residual": -1667.577492911345, + "target_people": 12793.650793650793 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 71594.8212963331, + "gain_lower_bound": 10000, + "income_lower_bound": 0, + "mean": 16597.222222222223, + "mean_repaired": false, + "residual": 373.3293677031761, + "target_people": 71968.15066403628 + }, + { + "achieved_fallback": 4904.925543694665, + "achieved_pass1": 7442.723631355142, + "gain_lower_bound": 10000, + "income_lower_bound": 37700, + "mean": 16272.727272727272, + "mean_repaired": false, + "residual": -1627.0982025178992, + "target_people": 10720.550972531908 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 7183.965770617153, + "gain_lower_bound": 10000, + "income_lower_bound": 50000, + "mean": 16736.842105263157, + "mean_repaired": false, + "residual": 11980.244891356324, + "target_people": 19164.210661973477 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 10000, + "income_lower_bound": 100000, + "mean": 16250.0, + "mean_repaired": false, + "residual": 3924.9652806243007, + "target_people": 3924.9652806243007 + }, + { + "achieved_fallback": 1666.6666666666667, + "achieved_pass1": 0.0, + "gain_lower_bound": 10000, + "income_lower_bound": 125140, + "mean": 16333.333333333334, + "mean_repaired": false, + "residual": 4662.686137273539, + "target_people": 6329.352803940206 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 6586.086777427252, + "gain_lower_bound": 10000, + "income_lower_bound": 200000, + "mean": 16363.636363636364, + "mean_repaired": false, + "residual": 4239.310047969573, + "target_people": 10825.396825396825 + }, + { + "achieved_fallback": 10046.846881552594, + "achieved_pass1": 55313.799392565285, + "gain_lower_bound": 25000, + "income_lower_bound": 0, + "mean": 35866.666666666664, + "mean_repaired": false, + "residual": -5387.187387420972, + "target_people": 59973.458886696906 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 25000, + "income_lower_bound": 37700, + "mean": 37875.0, + "mean_repaired": false, + "residual": 7796.764343659569, + "target_people": 7796.764343659569 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 22668.650438480166, + "gain_lower_bound": 25000, + "income_lower_bound": 50000, + "mean": 37071.42857142857, + "mean_repaired": false, + "residual": -8547.653108604974, + "target_people": 14120.997329875192 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3960.0533512128886, + "gain_lower_bound": 25000, + "income_lower_bound": 100000, + "mean": 33666.666666666664, + "mean_repaired": false, + "residual": -1016.3293907446632, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 7869.742922532564, + "achieved_pass1": 0.0, + "gain_lower_bound": 25000, + "income_lower_bound": 125140, + "mean": 39250.0, + "mean_repaired": false, + "residual": -3650.1743865724266, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 8083.543942284201, + "gain_lower_bound": 25000, + "income_lower_bound": 200000, + "mean": 35500.0, + "mean_repaired": false, + "residual": -210.52806926832818, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 65471.157968024796, + "gain_lower_bound": 50000, + "income_lower_bound": 0, + "mean": 70204.54545454546, + "mean_repaired": false, + "residual": -21490.62145111373, + "target_people": 43980.53651691107 + }, + { + "achieved_fallback": 7227.530226261125, + "achieved_pass1": 4904.579186271343, + "gain_lower_bound": 50000, + "income_lower_bound": 37700, + "mean": 69285.71428571429, + "mean_repaired": false, + "residual": -5309.940611830345, + "target_people": 6822.168800702123 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 19628.47016736329, + "gain_lower_bound": 50000, + "income_lower_bound": 50000, + "mean": 71307.69230769231, + "mean_repaired": false, + "residual": -6516.115503907757, + "target_people": 13112.354663455535 + }, + { + "achieved_fallback": 917.6638309181648, + "achieved_pass1": 833.3333333333334, + "gain_lower_bound": 50000, + "income_lower_bound": 100000, + "mean": 65333.333333333336, + "mean_repaired": false, + "residual": 1192.726796216727, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 533.3333333333334, + "achieved_pass1": 0.0, + "gain_lower_bound": 50000, + "income_lower_bound": 125140, + "mean": 76000.0, + "mean_repaired": false, + "residual": 3686.235202626804, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 21616.64387632793, + "gain_lower_bound": 50000, + "income_lower_bound": 200000, + "mean": 72571.42857142857, + "mean_repaired": false, + "residual": -14727.75498743904, + "target_people": 6888.888888888889 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 15859.580315482464, + "gain_lower_bound": 100000, + "income_lower_bound": 0, + "mean": 154750.0, + "mean_repaired": false, + "residual": 12128.033831642759, + "target_people": 27987.614147125223 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3466.666666666667, + "gain_lower_bound": 100000, + "income_lower_bound": 37700, + "mean": 152166.66666666666, + "mean_repaired": false, + "residual": 2380.90659107801, + "target_people": 5847.573257744677 + }, + { + "achieved_fallback": 6602.251275610585, + "achieved_pass1": 300.0, + "gain_lower_bound": 100000, + "income_lower_bound": 50000, + "mean": 153666.66666666666, + "mean_repaired": false, + "residual": 5201.460721425295, + "target_people": 12103.71199703588 + }, + { + "achieved_fallback": 2911.2946873064147, + "achieved_pass1": 166.66666666666666, + "gain_lower_bound": 100000, + "income_lower_bound": 100000, + "mean": 143666.66666666666, + "mean_repaired": false, + "residual": -134.23739350485585, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 8083.543942284201, + "achieved_pass1": 2600.0, + "gain_lower_bound": 100000, + "income_lower_bound": 125140, + "mean": 179000.0, + "mean_repaired": false, + "residual": -6463.975406324063, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 8627.524103079673, + "gain_lower_bound": 100000, + "income_lower_bound": 200000, + "mean": 156250.0, + "mean_repaired": false, + "residual": -754.5082300638005, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 6700.0, + "gain_lower_bound": 250000, + "income_lower_bound": 0, + "mean": 343444.44444444444, + "mean_repaired": false, + "residual": 2296.018833004535, + "target_people": 8996.018833004535 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 600.0, + "gain_lower_bound": 250000, + "income_lower_bound": 37700, + "mean": 410500.0, + "mean_repaired": false, + "residual": 1349.1910859148923, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2400.0000000000005, + "gain_lower_bound": 250000, + "income_lower_bound": 50000, + "mean": 383200.0, + "mean_repaired": false, + "residual": 2643.2133320982825, + "target_people": 5043.213332098283 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 100.0, + "gain_lower_bound": 250000, + "income_lower_bound": 100000, + "mean": 486000.0, + "mean_repaired": false, + "residual": 881.2413201560752, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2033.3333333333333, + "gain_lower_bound": 250000, + "income_lower_bound": 125140, + "mean": 420000.0, + "mean_repaired": false, + "residual": 76.4509346467355, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 250000, + "income_lower_bound": 200000, + "mean": 333000.0, + "mean_repaired": false, + "residual": 4920.6349206349205, + "target_people": 4920.6349206349205 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3300.0, + "gain_lower_bound": 500000, + "income_lower_bound": 0, + "mean": 639000.0, + "mean_repaired": false, + "residual": 1697.788240558075, + "target_people": 4997.788240558075 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1533.3333333333335, + "gain_lower_bound": 500000, + "income_lower_bound": 37700, + "mean": 543500.0, + "mean_repaired": false, + "residual": 415.85775258155877, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1766.6666666666667, + "gain_lower_bound": 500000, + "income_lower_bound": 50000, + "mean": 830333.3333333334, + "mean_repaired": false, + "residual": 1259.2613325923032, + "target_people": 3025.92799925897 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 300.0, + "gain_lower_bound": 500000, + "income_lower_bound": 100000, + "mean": 715000.0, + "mean_repaired": false, + "residual": 681.2413201560752, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 500000, + "income_lower_bound": 125140, + "mean": 612000.0, + "mean_repaired": false, + "residual": 2109.7842679800688, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4325.897563135081, + "gain_lower_bound": 500000, + "income_lower_bound": 200000, + "mean": 665000.0, + "mean_repaired": false, + "residual": -389.38962662714493, + "target_people": 3936.5079365079364 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1966.6666666666665, + "gain_lower_bound": 1000000, + "income_lower_bound": 0, + "mean": 1357500.0, + "mean_repaired": false, + "residual": 32.448629556563674, + "target_people": 1999.1152962232302 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 100.0, + "gain_lower_bound": 1000000, + "income_lower_bound": 37700, + "mean": 1020000.0, + "mean_repaired": true, + "residual": 874.5955429574461, + "target_people": 974.5955429574461 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 833.3333333333333, + "gain_lower_bound": 1000000, + "income_lower_bound": 50000, + "mean": 1427000.0, + "mean_repaired": false, + "residual": 1183.95199950598, + "target_people": 2017.2853328393132 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 533.3333333333334, + "gain_lower_bound": 1000000, + "income_lower_bound": 100000, + "mean": 1020000.0, + "mean_repaired": true, + "residual": 447.9079868227418, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 333.3333333333333, + "gain_lower_bound": 1000000, + "income_lower_bound": 125140, + "mean": 1507000.0, + "mean_repaired": false, + "residual": 721.5588006567011, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 166.66666666666666, + "gain_lower_bound": 1000000, + "income_lower_bound": 200000, + "mean": 1295666.6666666667, + "mean_repaired": false, + "residual": 2785.714285714286, + "target_people": 2952.3809523809523 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 566.6666666666666, + "gain_lower_bound": 2000000, + "income_lower_bound": 0, + "mean": 2279000.0, + "mean_repaired": false, + "residual": 432.89098144494847, + "target_people": 999.5576481116151 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 2000000, + "income_lower_bound": 37700, + "mean": 3295400.0, + "mean_repaired": false, + "residual": 238.07410696144447, + "target_people": 238.07410696144447 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 500.0, + "gain_lower_bound": 2000000, + "income_lower_bound": 50000, + "mean": 2882000.0, + "mean_repaired": false, + "residual": 508.6426664196566, + "target_people": 1008.6426664196566 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 166.66666666666666, + "gain_lower_bound": 2000000, + "income_lower_bound": 100000, + "mean": 3295400.0, + "mean_repaired": false, + "residual": 144.49348978265616, + "target_people": 311.1601564493228 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 433.33333333333326, + "gain_lower_bound": 2000000, + "income_lower_bound": 125140, + "mean": 2325000.0, + "mean_repaired": false, + "residual": 621.5588006567011, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 400.0, + "gain_lower_bound": 2000000, + "income_lower_bound": 200000, + "mean": 3570500.0, + "mean_repaired": false, + "residual": 1568.2539682539682, + "target_people": 1968.2539682539682 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 0, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 129.16675140840775, + "target_people": 129.16675140840775 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 37700, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 32.14874516625317, + "target_people": 32.14874516625317 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 50000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 204.87468939159012, + "target_people": 204.87468939159012 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 100000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 82.7721202730988, + "target_people": 82.7721202730988 + }, + { + "achieved_fallback": 166.66666666666666, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 125140, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 76.78504565223653, + "target_people": 243.4517123189032 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 300.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 200000, + "mean": 18739500.0, + "mean_repaired": false, + "residual": 1668.2539682539682, + "target_people": 1968.2539682539682 + } + ], + "rake": { + "age_margin": { + "16": { + "normalised": 32000.000000000007, + "published": 32000.0, + "raked": 32000.000000000007 + }, + "35": { + "normalised": 65000.000000000015, + "published": 65000.0, + "raked": 65000.00000000003 + }, + "45": { + "normalised": 98000.00000000001, + "published": 98000.0, + "raked": 98000.00000000001 + }, + "55": { + "normalised": 144000.00000000003, + "published": 144000.0, + "raked": 144000.0000000001 + }, + "65": { + "normalised": 125000.00000000003, + "published": 125000.0, + "raked": 125000.00000000004 + }, + "75": { + "normalised": 87000.00000000001, + "published": 87000.0, + "raked": 86999.99999999999 + } + }, + "income_bands_without_gainers": [], + "ipf_iterations": 200, + "ipf_max_abs_margin_error": 1.226312564496424e-15, + "ipf_unattainable_margin_mass": { + "age": 0.0, + "joint": 0.0, + "region": 0.0 + }, + "ipf_zero_seed_cells": 0, + "joint_total_people": 551000.0000000001, + "region_margin": { + "london": { + "normalised": 106797.59862778733, + "published_individuals_basis": 106614.72602739726, + "raked": 106797.5986277872 + }, + "rest_of_england": { + "normalised": 209814.75128644946, + "published_individuals_basis": 209455.47945205483, + "raked": 209814.75128644967 + }, + "south_east_and_east_of_england": { + "normalised": 172955.4030874786, + "published_individuals_basis": 172659.2465753425, + "raked": 172955.40308747863 + }, + "wales_scotland_northern_ireland": { + "normalised": 61432.24699828475, + "published_individuals_basis": 61327.054794520554, + "raked": 61432.24699828477 + } + } + } + }, + "published_taxpayer_mass": 551000.0, + "region_rows": [ + { + "achieved_gains": 552832012.9569705, + "achieved_people": 8441.075660275468, + "geography_id": "E12000001", + "published_gains_individuals_basis": 1497797150.3974364, + "published_people_individuals_basis": 11321.91780821918, + "region": "NORTH_EAST" + }, + { + "achieved_gains": 5784861024.082651, + "achieved_people": 90788.63570613608, + "geography_id": "E12000002", + "published_gains_individuals_basis": 8790074083.38308, + "published_people_individuals_basis": 41513.69863013699, + "region": "NORTH_WEST" + }, + { + "achieved_gains": 3059450845.385226, + "achieved_people": 37352.316282578984, + "geography_id": "E12000003", + "published_gains_individuals_basis": 6970985861.949795, + "published_people_individuals_basis": 32078.767123287675, + "region": "YORKSHIRE" + }, + { + "achieved_gains": 1384817633.3426733, + "achieved_people": 18999.004072836793, + "geography_id": "E12000004", + "published_gains_individuals_basis": 6299365751.358824, + "published_people_individuals_basis": 31135.273972602743, + "region": "EAST_MIDLANDS" + }, + { + "achieved_gains": 2010983635.975016, + "achieved_people": 18736.67941403163, + "geography_id": "E12000005", + "published_gains_individuals_basis": 5890960774.765152, + "published_people_individuals_basis": 33022.260273972606, + "region": "WEST_MIDLANDS" + }, + { + "achieved_gains": 13728731268.469776, + "achieved_people": 97589.79754202983, + "geography_id": "E12000006", + "published_gains_individuals_basis": 11545870966.728456, + "published_people_individuals_basis": 58496.57534246576, + "region": "EAST_OF_ENGLAND" + }, + { + "achieved_gains": 4137696213.2980413, + "achieved_people": 87361.98828729289, + "geography_id": "E12000007", + "published_gains_individuals_basis": 32519714615.602127, + "published_people_individuals_basis": 106614.72602739726, + "region": "LONDON" + }, + { + "achieved_gains": 10137817370.21374, + "achieved_people": 82421.16384725133, + "geography_id": "E12000008", + "published_gains_individuals_basis": 25606804690.69088, + "published_people_individuals_basis": 114162.67123287672, + "region": "SOUTH_EAST" + }, + { + "achieved_gains": 3099587677.4088664, + "achieved_people": 48388.09680461142, + "geography_id": "E12000009", + "published_gains_individuals_basis": 10341263627.509504, + "published_people_individuals_basis": 60383.56164383562, + "region": "SOUTH_WEST" + }, + { + "achieved_gains": 2531461186.3864393, + "achieved_people": 9978.063539554376, + "geography_id": "W92000004", + "published_gains_individuals_basis": 2358632410.6946497, + "published_people_individuals_basis": 16982.87671232877, + "region": "WALES" + }, + { + "achieved_gains": 2214226476.2421556, + "achieved_people": 37925.63301796329, + "geography_id": "S92000003", + "published_gains_individuals_basis": 5680201325.83493, + "published_people_individuals_basis": 34909.24657534247, + "region": "SCOTLAND" + }, + { + "achieved_gains": 1884537084.0994458, + "achieved_people": 13306.106602225367, + "geography_id": "N92000002", + "published_gains_individuals_basis": 1757265449.747086, + "published_people_individuals_basis": 9434.931506849316, + "region": "NORTHERN_IRELAND" + } + ], + "remainder_mass": 11579203.40995393, + "rows": [ + { + "achieved_gains": 823089691.7195526, + "achieved_people": 144690.59702000069, + "gain_lower_bound": 0, + "published_gains": 760000000.0, + "published_people": 133000.0 + }, + { + "achieved_gains": 1649555212.5028577, + "achieved_people": 99379.18968609397, + "gain_lower_bound": 10000, + "published_gains": 2036000000.0, + "published_people": 123000.0 + }, + { + "achieved_gains": 3711966838.7028413, + "achieved_people": 107942.63692862767, + "gain_lower_bound": 25000, + "published_gains": 3516000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 8597885679.782572, + "achieved_people": 121132.71192183331, + "gain_lower_bound": 50000, + "published_gains": 5510000000.0, + "published_people": 78000.0 + }, + { + "achieved_gains": 8022697916.338835, + "achieved_people": 48617.52765709668, + "gain_lower_bound": 100000, + "published_gains": 9487000000.0, + "published_people": 61000.0 + }, + { + "achieved_gains": 4420542972.212419, + "achieved_people": 11833.333333333334, + "gain_lower_bound": 250000, + "published_gains": 8820000000.0, + "published_people": 25000.0 + }, + { + "achieved_gains": 8350688472.505602, + "achieved_people": 11225.89756313508, + "gain_lower_bound": 500000, + "published_gains": 11372000000.0, + "published_people": 16000.0 + }, + { + "achieved_gains": 5259369600.697132, + "achieved_people": 3933.333333333333, + "gain_lower_bound": 1000000, + "published_gains": 12806000000.0, + "published_people": 9000.0 + }, + { + "achieved_gains": 6128032733.159962, + "achieved_people": 2066.6666666666665, + "gain_lower_bound": 2000000, + "published_gains": 16477000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 3563173310.239228, + "achieved_people": 466.66666666666663, + "gain_lower_bound": 5000000, + "published_gains": 48474000000.0, + "published_people": 3000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 551288.5607767875 + }, + "hmrc_cgt_asset_type_spine": { + "asset_type": { + "achieved_gains": { + "agricultural_commercial_industrial_land_buildings": 3711883921.4779544, + "listed_shares": 3472626346.9433374, + "other_financial_assets": 10061175711.89168, + "other_non_financial_assets": 628384142.3659421, + "unlisted_shares": 20603422745.62528 + }, + "achieved_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.0964689652255284, + "listed_shares": 0.09025084765343198, + "other_financial_assets": 0.26148210192196714, + "other_non_financial_assets": 0.016331213276205247, + "unlisted_shares": 0.5354668719228672 + }, + "achieved_people": { + "agricultural_commercial_industrial_land_buildings": 3992.5642298017483, + "listed_shares": 98243.97505552889, + "other_financial_assets": 171111.44198070053, + "other_non_financial_assets": 733.3333333333333, + "unlisted_shares": 74538.61589300697 + }, + "log_sigma": 1.5, + "median_anchor_gbp": { + "agricultural_commercial_industrial_land_buildings": 156692.3076923077, + "listed_shares": 5501.392757660167, + "other_financial_assets": 14663.62807657247, + "other_non_financial_assets": 143600.0, + "unlisted_shares": 114879.31034482758 + }, + "non_residential_gains_mass": 38477492868.30419, + "share_fit_iterations": 14, + "target_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.033817547937245784, + "listed_shares": 0.0983647381090728, + "other_financial_assets": 0.26705403834979663, + "other_non_financial_assets": 0.0476799203121109, + "unlisted_shares": 0.5530837552917739 + }, + "type_weights": { + "agricultural_commercial_industrial_land_buildings": 0.0057756767395963126, + "listed_shares": 0.4387952466650873, + "other_financial_assets": 0.42215761234564736, + "other_non_financial_assets": 0.008793287259118673, + "unlisted_shares": 0.12447817699055037 + } + }, + "composition_by_band": [ + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 0, + "listed_shares_gains": 216690890.66857845, + "listed_shares_people": 37041.03365576393, + "other_financial_assets_gains": 205077847.20067957, + "other_financial_assets_people": 36167.51695138704, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 379423085.6871224, + "residential_land_buildings_people": 68215.37974618307, + "unlisted_shares_gains": 21897868.163172208, + "unlisted_shares_people": 3266.6666666666665 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 10000, + "listed_shares_gains": 472862669.5807446, + "listed_shares_people": 27123.091117747124, + "other_financial_assets_gains": 515214750.52335733, + "other_financial_assets_people": 32055.19853754739, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 651267224.9920549, + "residential_land_buildings_people": 39367.566697466136, + "unlisted_shares_gains": 10210567.406700544, + "unlisted_shares_people": 833.3333333333334 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 25000, + "listed_shares_gains": 861769121.1836104, + "listed_shares_people": 27179.850282017844, + "other_financial_assets_gains": 1041620131.574393, + "other_financial_assets_people": 30438.267018232644, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1328207164.4491265, + "residential_land_buildings_people": 38616.99032846719, + "unlisted_shares_gains": 480370421.4957111, + "unlisted_shares_people": 11707.529299910024 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 50000, + "listed_shares_gains": 47688831.97949476, + "listed_shares_people": 833.3333333333334, + "other_financial_assets_gains": 3566929187.15716, + "other_financial_assets_people": 54483.677846019906, + "other_non_financial_assets_gains": 10141334.838713812, + "other_non_financial_assets_people": 166.66666666666666, + "residential_land_buildings_gains": 2754753393.7232037, + "residential_land_buildings_people": 39129.87472191354, + "unlisted_shares_gains": 2218372932.0839996, + "unlisted_shares_people": 26519.15935389987 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 100000, + "listed_shares_gains": 436568991.5384465, + "listed_shares_people": 3200.0, + "other_financial_assets_gains": 1803886177.023565, + "other_financial_assets_people": 12500.114960846857, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1749016824.8670053, + "residential_land_buildings_people": 12072.152123719423, + "unlisted_shares_gains": 4033225922.9098177, + "unlisted_shares_people": 20845.26057253039 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 250000, + "listed_shares_gains": 1046639308.6282197, + "listed_shares_people": 2333.333333333333, + "other_financial_assets_gains": 1320846961.0863461, + "other_financial_assets_people": 3600.0, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 761748806.6795254, + "residential_land_buildings_people": 1833.3333333333335, + "unlisted_shares_gains": 1291307895.8183262, + "unlisted_shares_people": 4066.666666666667 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 3339613640.948827, + "agricultural_commercial_industrial_land_buildings_people": 3792.5642298017483, + "gain_lower_bound": 500000, + "listed_shares_gains": 390406533.3642422, + "listed_shares_people": 533.3333333333334, + "other_financial_assets_gains": 820605238.5307701, + "other_financial_assets_people": 1300.0000000000002, + "other_non_financial_assets_gains": 210635933.77000862, + "other_non_financial_assets_people": 300.0, + "residential_land_buildings_gains": 951281151.1471767, + "residential_land_buildings_people": 1466.6666666666665, + "unlisted_shares_gains": 2638145974.744578, + "unlisted_shares_people": 3833.3333333333335 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 167751708.8181225, + "agricultural_commercial_industrial_land_buildings_people": 100.0, + "gain_lower_bound": 1000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 786995418.795408, + "other_financial_assets_people": 566.6666666666666, + "other_non_financial_assets_gains": 407606873.7572198, + "other_non_financial_assets_people": 266.66666666666663, + "residential_land_buildings_gains": 2001157343.8364, + "residential_land_buildings_people": 1666.6666666666667, + "unlisted_shares_gains": 1895858255.4899821, + "unlisted_shares_people": 1333.3333333333333 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 204518571.71100524, + "agricultural_commercial_industrial_land_buildings_people": 100.0, + "gain_lower_bound": 2000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 0.0, + "other_financial_assets_people": 0.0, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 702346829.9468987, + "residential_land_buildings_people": 200.0, + "unlisted_shares_gains": 5221167331.502058, + "unlisted_shares_people": 1766.6666666666667 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 5000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 0.0, + "other_financial_assets_people": 0.0, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 770307734.2282947, + "residential_land_buildings_people": 100.0, + "unlisted_shares_gains": 2792865576.010933, + "unlisted_shares_people": 366.66666666666663 + } + ], + "facts": { + "annual_exempt_amount": 3000.0, + "resource": "hmrc_cgt_asset_type_facts.json", + "resource_sha256": "99123735ad0bc54cc5d8cf7b156f4feaa4bcf3ccf46d7b69377e1036b7251dcb", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f" + }, + "residential": { + "achieved_count": 202668.63028441602, + "achieved_gains": 12049509559.556808, + "achieved_rows": 61, + "count_bernoulli_sigma": 27824.175486188597, + "count_target_individuals_basis": 202630.0578034682, + "expected_count": 202630.05780346817, + "expected_gains": 12242481480.826963, + "gains_bernoulli_sigma": 2395815242.6709313, + "gains_target_individuals_basis": 12242481474.688189, + "liable_gains_mass": 50527002427.86101, + "liable_taxpayer_mass": 551288.5607767875, + "log_gain_centre": 10.273075382248113, + "logistic_intercept": -0.5583824768917671, + "logistic_slope": -0.2480304763885215, + "max_liable_weight": 11036.463661442, + "table8a_gains_total": 12914000000.0, + "table8a_taxpayers_total": 205000.0, + "table8b_individuals_gains_share": 0.9480007336757154, + "table8b_individuals_taxpayer_share": 0.9884393063583815 + }, + "seeds": { + "asset_type": 554, + "residential_flag": 553 + }, + "stage": "hmrc_cgt_asset_type_spine", + "value_counts": { + "agricultural_commercial_industrial_land_buildings": 4, + "listed_shares": 31, + "none": 9253, + "other_financial_assets": 62, + "other_non_financial_assets": 4, + "residential_land_buildings": 61, + "sub_aea": 2175, + "unlisted_shares": 79 + } + } + } +} diff --git a/docs/evidence/uk-cgt-725/receipt-full.json b/docs/evidence/uk-cgt-725/receipt-full.json new file mode 100644 index 0000000000..8ce704b054 --- /dev/null +++ b/docs/evidence/uk-cgt-725/receipt-full.json @@ -0,0 +1,2166 @@ +{ + "label": "-full", + "inputs": { + "control": "control.h5", + "candidate": "candidate.h5" + }, + "control_provenance": { + "h5": "control.h5", + "build_commit": "d69a543e5d7f0ac01e73c9c6eb4645b0d4b8b9b6", + "h5_sha256": "c6909bdaa9d264e6b052ff7bb4d2e2a16fc5c8766038a2e298cb7ee8cb4a7c90", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": null, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "759e22ba7afdaad9b0411e051508d550e7f24c03898db8829d32f28b2a06039e", + "source_vintages": { + "frs": "2024_25" + } + }, + "control_headline": { + "liable_taxpayers": 357787.8291737345, + "liable_gains": 63762165202.22745, + "share_65_plus_of_taxpayers": 0.23074415456851116, + "share_65_plus_of_gains": 0.29014226804959764, + "share_65_plus_of_2m_plus_gainers": 0.21851480088389827, + "share_65_plus_of_2m_plus_gains": 0.38325563962979103, + "top_2m_plus_taxpayers": 4400.922330097088, + "top_2m_plus_gains": 31733417691.922935 + }, + "control_stage_evidence": { + "hmrc_cgt_gains_spine": { + "published_taxpayer_mass": 359000.0, + "remainder_mass": 11695599.172629325, + "rows": [ + { + "achieved_gains": 492030045.77188396, + "achieved_people": 61716.26528400545, + "gain_lower_bound": 0, + "published_gains": 462000000.0, + "published_people": 63000.0 + }, + { + "achieved_gains": 1655366280.7861395, + "achieved_people": 99394.33220162481, + "gain_lower_bound": 10000, + "published_gains": 1669000000.0, + "published_people": 101000.0 + }, + { + "achieved_gains": 2518693708.19442, + "achieved_people": 74570.58235379534, + "gain_lower_bound": 25000, + "published_gains": 2645000000.0, + "published_people": 74000.0 + }, + { + "achieved_gains": 3590296848.5971456, + "achieved_people": 53117.88027693833, + "gain_lower_bound": 50000, + "published_gains": 3731000000.0, + "published_people": 53000.0 + }, + { + "achieved_gains": 5903553980.984594, + "achieved_people": 36265.90857274244, + "gain_lower_bound": 100000, + "published_gains": 5649000000.0, + "published_people": 37000.0 + }, + { + "achieved_gains": 4941119445.462856, + "achieved_people": 14025.627064255188, + "gain_lower_bound": 250000, + "published_gains": 4766000000.0, + "published_people": 14000.0 + }, + { + "achieved_gains": 5870012433.427295, + "achieved_people": 9395.721613545815, + "gain_lower_bound": 500000, + "published_gains": 5705000000.0, + "published_people": 8000.0 + }, + { + "achieved_gains": 7057674767.080178, + "achieved_people": 4900.589476730021, + "gain_lower_bound": 1000000, + "published_gains": 6390000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 9550987003.01075, + "achieved_people": 2905.922330097087, + "gain_lower_bound": 2000000, + "published_gains": 9189000000.0, + "published_people": 3000.0 + }, + { + "achieved_gains": 22182430688.912186, + "achieved_people": 1495.0, + "gain_lower_bound": 5000000, + "published_gains": 22714000000.0, + "published_people": 2000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 357787.8291737345 + } + }, + "candidate_provenance": { + "h5": "candidate.h5", + "build_commit": "523f8f5b899941a26f9e0a783917d15a07310767", + "h5_sha256": "74922c6a3a403550e7f8580fad3661500755a50587c01f3b5e458d451f33230e", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_asset_type_spine": { + "assign_main_asset_type": 554, + "assign_residential_property_flag": 553 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": null, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "4dd3b0ccc9c06d0440d65c3e7537ae757a73f9d4df0d085059140ee4ed9b801e", + "source_vintages": { + "frs": "2024_25" + }, + "chronicle_feed": { + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797" + } + }, + "candidate_headline": { + "liable_taxpayers": 551607.6846962092, + "liable_gains": 117829279528.1625, + "share_65_plus_of_taxpayers": 0.3803974116714789, + "share_65_plus_of_gains": 0.2024843073260352, + "share_65_plus_of_2m_plus_gainers": 0.2302070800061256, + "share_65_plus_of_2m_plus_gains": 0.13552670595711966, + "top_2m_plus_taxpayers": 11696.715264339467, + "top_2m_plus_gains": 67908224149.02183 + }, + "candidate_stage_evidence": { + "hmrc_cgt_gains_spine": { + "age_by_band_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 3959645.2902857983, + "achieved_people": 468.25, + "age_lower_bound": 16, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 23567812.393593628, + "achieved_people": 1000.3269841269841, + "age_lower_bound": 16, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 73323902.33949387, + "achieved_people": 9464.460538523732, + "age_lower_bound": 25, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 92367320.49955097, + "achieved_people": 4065.8183271011394, + "age_lower_bound": 25, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 299958299.8769608, + "achieved_people": 6727.068910105296, + "age_lower_bound": 25, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 545413261.2998979, + "achieved_people": 7190.207541498411, + "age_lower_bound": 25, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 348556309.8179033, + "achieved_people": 2200.8167067307695, + "age_lower_bound": 25, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 486494080.3214338, + "achieved_people": 1449.0833333333335, + "age_lower_bound": 25, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 734376158.9381167, + "achieved_people": 1198.4166666666667, + "age_lower_bound": 25, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 2130876618.0155392, + "achieved_people": 1619.6382802124833, + "age_lower_bound": 25, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 4187281606.033622, + "achieved_people": 1759.0833333333335, + "age_lower_bound": 25, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 108658212.18114264, + "achieved_people": 14168.167448293378, + "age_lower_bound": 35, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 321513859.1762024, + "achieved_people": 15926.272289366314, + "age_lower_bound": 35, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 357772873.68941516, + "achieved_people": 8595.63625124303, + "age_lower_bound": 35, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 960010074.4370313, + "achieved_people": 11575.188540049407, + "age_lower_bound": 35, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1494964530.5014088, + "achieved_people": 8080.042459036733, + "age_lower_bound": 35, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 966129021.9596653, + "achieved_people": 2342.1666666666665, + "age_lower_bound": 35, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1505024196.9783354, + "achieved_people": 2120.75, + "age_lower_bound": 35, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 1365092927.4573565, + "achieved_people": 1189.5833333333333, + "age_lower_bound": 35, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 2782757165.9025707, + "achieved_people": 833.3333333333334, + "age_lower_bound": 35, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 6950879304.726551, + "achieved_people": 1026.7216135458166, + "age_lower_bound": 35, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 149920850.65436283, + "achieved_people": 22395.189174273786, + "age_lower_bound": 45, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 332062401.7851114, + "achieved_people": 16386.836948855485, + "age_lower_bound": 45, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 640201664.3192226, + "achieved_people": 16712.05818451472, + "age_lower_bound": 45, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1068717907.6799092, + "achieved_people": 14606.7464852846, + "age_lower_bound": 45, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1724336814.4393332, + "achieved_people": 11517.182516553825, + "age_lower_bound": 45, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 2190515059.9436994, + "achieved_people": 6133.057898259705, + "age_lower_bound": 45, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 2254127788.8737407, + "achieved_people": 3440.4701803051316, + "age_lower_bound": 45, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 2052304477.0176725, + "achieved_people": 1654.5833333333335, + "age_lower_bound": 45, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 4674366935.312673, + "achieved_people": 1445.4166666666667, + "age_lower_bound": 45, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 19830439458.79824, + "achieved_people": 800.0, + "age_lower_bound": 45, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 169193608.81092024, + "achieved_people": 34098.29115210727, + "age_lower_bound": 55, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 483272631.5509962, + "achieved_people": 32505.900822973606, + "age_lower_bound": 55, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 906396794.611126, + "achieved_people": 25054.186499521347, + "age_lower_bound": 55, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1176972800.0533214, + "achieved_people": 17506.934640681633, + "age_lower_bound": 55, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 2610327176.889395, + "achieved_people": 17518.338495695236, + "age_lower_bound": 55, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 2823692099.0589867, + "achieved_people": 8011.078352983324, + "age_lower_bound": 55, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 2669165853.067488, + "achieved_people": 4221.833333333333, + "age_lower_bound": 55, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 2196586223.5409484, + "achieved_people": 1628.918287037037, + "age_lower_bound": 55, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 4500967167.630607, + "achieved_people": 1666.9936507936509, + "age_lower_bound": 55, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 15778154584.30291, + "achieved_people": 1472.5, + "age_lower_bound": 55, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 134335140.98696527, + "achieved_people": 33577.9530336257, + "age_lower_bound": 65, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 362006387.6794957, + "achieved_people": 27151.617562202788, + "age_lower_bound": 65, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 641957483.5602186, + "achieved_people": 21460.591655179676, + "age_lower_bound": 65, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1082753573.4613836, + "achieved_people": 18207.238998718185, + "age_lower_bound": 65, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1807181883.2922893, + "achieved_people": 13816.603331660746, + "age_lower_bound": 65, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1363408698.5600107, + "achieved_people": 4158.33668699187, + "age_lower_bound": 65, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1446129933.2519128, + "achieved_people": 2486.0878563596493, + "age_lower_bound": 65, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 1133071450.2844138, + "achieved_people": 1004.0016203703702, + "age_lower_bound": 65, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 4471211551.454566, + "achieved_people": 2121.0, + "age_lower_bound": 65, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 3990112783.930231, + "achieved_people": 371.66666666666663, + "age_lower_bound": 65, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 91466512.22372854, + "achieved_people": 15863.643650139653, + "age_lower_bound": 75, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 294554858.98596644, + "achieved_people": 18177.85613797852, + "age_lower_bound": 75, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 359066379.64776003, + "achieved_people": 10479.023731280178, + "age_lower_bound": 75, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 517747272.2570654, + "achieved_people": 7638.614372617359, + "age_lower_bound": 75, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1257641774.7496128, + "achieved_people": 7475.5876505499855, + "age_lower_bound": 75, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 678884809.3549371, + "achieved_people": 2200.0, + "age_lower_bound": 75, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1184972798.177996, + "achieved_people": 2162.5578982597053, + "age_lower_bound": 75, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 442656226.31941104, + "achieved_people": 366.66666666666663, + "age_lower_bound": 75, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 473341485.5162604, + "achieved_people": 100.0, + "age_lower_bound": 75, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 75, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 19080285.579695463, + "achieved_people": 3097.8561939665938, + "age_lower_bound": 85, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 59527163.28419197, + "achieved_people": 3627.338996763754, + "age_lower_bound": 85, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 244127008.713382, + "achieved_people": 6823.044763720754, + "age_lower_bound": 85, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 243573082.94983423, + "achieved_people": 3638.842379385965, + "age_lower_bound": 85, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 288725345.01560855, + "achieved_people": 1818.0833333333335, + "age_lower_bound": 85, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 499708842.7379334, + "achieved_people": 1405.9223300970875, + "age_lower_bound": 85, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 164620734.93303716, + "achieved_people": 300.0, + "age_lower_bound": 85, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 338004475.66425765, + "achieved_people": 200.0, + "age_lower_bound": 85, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 268712105.41359776, + "achieved_people": 100.0, + "age_lower_bound": 85, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 85, + "gain_lower_bound": 5000000 + } + ], + "age_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "published_gains": 54000000.0, + "published_people": 1000.0 + }, + { + "achieved_gains": 27527457.683879428, + "achieved_people": 1468.5769841269841, + "age_lower_bound": 16, + "published_gains": 319000000.0, + "published_people": 4000.0 + }, + { + "achieved_gains": 8898647557.142519, + "achieved_people": 35674.59363750517, + "age_lower_bound": 25, + "published_gains": 2499000000.0, + "published_people": 27000.0 + }, + { + "achieved_gains": 16812802167.009678, + "achieved_people": 65857.86193486801, + "age_lower_bound": 35, + "published_gains": 11775000000.0, + "published_people": 65000.0 + }, + { + "achieved_gains": 34916993358.82396, + "achieved_people": 95091.54138804725, + "age_lower_bound": 45, + "published_gains": 28422000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 33314728939.516693, + "achieved_people": 143684.97523512645, + "age_lower_bound": 55, + "published_gains": 38118000000.0, + "published_people": 144000.0 + }, + { + "achieved_gains": 16432168886.461489, + "achieved_people": 124355.09741177564, + "age_lower_bound": 65, + "published_gains": 24260000000.0, + "published_people": 125000.0 + }, + { + "achieved_gains": 5300332117.232738, + "achieved_people": 64463.95010749208, + "age_lower_bound": 75, + "published_gains": 11736000000.0, + "published_people": 68000.0 + }, + { + "achieved_gains": 2126079044.291538, + "achieved_people": 21011.087997267485, + "age_lower_bound": 85, + "published_gains": 2076000000.0, + "published_people": 19000.0 + } + ], + "allocation": { + "band_rows": [ + { + "gain_lower_bound": 0, + "gains_difference": -1000000.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 759000000.0, + "published_people": 133000.0, + "table2_1a_gains": 760000000.0, + "table2_1a_people": 133000.0, + "target_gains_at_cell_means": 758976349.1549579, + "target_people": 132976.11086837502 + }, + { + "gain_lower_bound": 10000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 2036000000.0, + "published_people": 123000.0, + "table2_1a_gains": 2036000000.0, + "table2_1a_people": 123000.0, + "target_gains_at_cell_means": 2033975331.6882389, + "target_people": 122932.62720850299 + }, + { + "gain_lower_bound": 25000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 3516000000.0, + "published_people": 98000.0, + "table2_1a_gains": 3516000000.0, + "table2_1a_people": 98000.0, + "target_gains_at_cell_means": 3514051553.988366, + "target_people": 96927.5289296759 + }, + { + "gain_lower_bound": 50000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 5510000000.0, + "published_people": 78000.0, + "table2_1a_gains": 5510000000.0, + "table2_1a_people": 78000.0, + "target_gains_at_cell_means": 5508271180.542232, + "target_people": 77967.24136638598 + }, + { + "gain_lower_bound": 100000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 9487000000.0, + "published_people": 61000.0, + "table2_1a_gains": 9487000000.0, + "table2_1a_people": 61000.0, + "target_gains_at_cell_means": 9489202603.948486, + "target_people": 60975.20777135002 + }, + { + "gain_lower_bound": 250000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 8820000000.0, + "published_people": 25000.0, + "table2_1a_gains": 8820000000.0, + "table2_1a_people": 25000.0, + "target_gains_at_cell_means": 8823899082.660036, + "target_people": 24000.083759788773 + }, + { + "gain_lower_bound": 500000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 11372000000.0, + "published_people": 16000.0, + "table2_1a_gains": 11372000000.0, + "table2_1a_people": 16000.0, + "target_gains_at_cell_means": 11376054216.655891, + "target_people": 17000.440850376017 + }, + { + "gain_lower_bound": 1000000, + "gains_difference": 0.0, + "means_repaired": 2, + "people_difference": 0.0, + "published_gains": 12806000000.0, + "published_people": 9000.0, + "table2_1a_gains": 12806000000.0, + "table2_1a_people": 9000.0, + "target_gains_at_cell_means": 13002442818.185097, + "target_people": 9979.510578547051 + }, + { + "gain_lower_bound": 2000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 16477000000.0, + "published_people": 5000.0, + "table2_1a_gains": 16477000000.0, + "table2_1a_people": 5000.0, + "target_gains_at_cell_means": 16475121641.489286, + "target_people": 5580.580680186042 + }, + { + "gain_lower_bound": 5000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 48474000000.0, + "published_people": 3000.0, + "table2_1a_gains": 48474000000.0, + "table2_1a_people": 3000.0, + "target_gains_at_cell_means": 48072120949.95949, + "target_people": 2660.6679868122214 + } + ], + "conditioning": { + "age_group_lower_bounds": [ + 16, + 35, + 45, + 55, + 65, + 75 + ], + "fallback_policy": "pooled_income_band_rank_walk", + "joint_record_set_prefix": "hmrc.cgt_table3_2026.ty2024.", + "joint_resource": "hmrc_cgt_conditioning_facts.json", + "joint_resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "joint_source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "joint_source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "joint_vintage": "2024-25", + "region_groups": { + "EAST_MIDLANDS": "rest_of_england", + "EAST_OF_ENGLAND": "south_east_and_east_of_england", + "LONDON": "london", + "NORTHERN_IRELAND": "wales_scotland_northern_ireland", + "NORTH_EAST": "rest_of_england", + "NORTH_WEST": "rest_of_england", + "SCOTLAND": "wales_scotland_northern_ireland", + "SOUTH_EAST": "south_east_and_east_of_england", + "SOUTH_WEST": "rest_of_england", + "WALES": "wales_scotland_northern_ireland", + "WEST_MIDLANDS": "rest_of_england", + "YORKSHIRE": "rest_of_england" + }, + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "vintage_tax_year": 2024 + }, + "fallback_released_mass": 9936.022654974415, + "fallback_share_by_band": { + "0": 0.012774517345305256, + "10000": 0.005372442277067795, + "100000": 0.0156995170580899, + "1000000": 0.1895990319133644, + "2000000": 0.06961899391864083, + "25000": 0.016281096446923524, + "250000": 0.0, + "50000": 0.01211677804756691, + "500000": 0.05848984425513642, + "5000000": 0.31027139117398833 + }, + "joint_rows": [ + { + "achieved_fallback": 604.75, + "achieved_pass1": 68254.8720918038, + "gain_lower_bound": 0, + "income_lower_bound": 0, + "mean": 5830.985915492958, + "mean_repaired": false, + "residual": 2108.970924120862, + "target_people": 70968.59301592466 + }, + { + "achieved_fallback": 485.22018030513175, + "achieved_pass1": 10935.84424831601, + "gain_lower_bound": 0, + "income_lower_bound": 37700, + "mean": 5461.538461538462, + "mean_repaired": false, + "residual": 1248.6776298256577, + "target_people": 12669.7420584468 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 23187.99240769564, + "gain_lower_bound": 0, + "income_lower_bound": 50000, + "mean": 5565.217391304348, + "mean_repaired": false, + "residual": 10.788919956459722, + "target_people": 23198.7813276521 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 7051.3208329316885, + "gain_lower_bound": 0, + "income_lower_bound": 100000, + "mean": 5600.0, + "mean_repaired": false, + "residual": -2145.1142321513125, + "target_people": 4906.206600780376 + }, + { + "achieved_fallback": 610.75, + "achieved_pass1": 7382.989991502858, + "gain_lower_bound": 0, + "income_lower_bound": 125140, + "mean": 5750.0, + "mean_repaired": false, + "residual": 445.3970804174169, + "target_people": 8439.137071920275 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 14620.071438374978, + "gain_lower_bound": 0, + "income_lower_bound": 200000, + "mean": 5538.461538461538, + "mean_repaired": false, + "residual": -1826.420644724185, + "target_people": 12793.650793650793 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 73049.50329890719, + "gain_lower_bound": 10000, + "income_lower_bound": 0, + "mean": 16597.222222222223, + "mean_repaired": false, + "residual": -1081.3526348709129, + "target_people": 71968.15066403628 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 10827.259587251574, + "gain_lower_bound": 10000, + "income_lower_bound": 37700, + "mean": 16272.727272727272, + "mean_repaired": false, + "residual": -106.708614719666, + "target_people": 10720.550972531908 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 20257.21527381577, + "gain_lower_bound": 10000, + "income_lower_bound": 50000, + "mean": 16736.842105263157, + "mean_repaired": false, + "residual": -1093.0046118422943, + "target_people": 19164.210661973477 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2192.0, + "gain_lower_bound": 10000, + "income_lower_bound": 100000, + "mean": 16250.0, + "mean_repaired": false, + "residual": 1732.9652806243007, + "target_people": 3924.9652806243007 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5464.8167067307695, + "gain_lower_bound": 10000, + "income_lower_bound": 125140, + "mean": 16333.333333333334, + "mean_repaired": false, + "residual": 864.5360972094368, + "target_people": 6329.352803940206 + }, + { + "achieved_fallback": 638.4716135458167, + "achieved_pass1": 6412.701589117459, + "gain_lower_bound": 10000, + "income_lower_bound": 200000, + "mean": 16363.636363636364, + "mean_repaired": false, + "residual": 3774.2236227335497, + "target_people": 10825.396825396825 + }, + { + "achieved_fallback": 1560.569306930693, + "achieved_pass1": 58096.24148163652, + "gain_lower_bound": 25000, + "income_lower_bound": 0, + "mean": 35866.666666666664, + "mean_repaired": false, + "residual": 316.64809812969315, + "target_people": 59973.458886696906 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 8276.61736816517, + "gain_lower_bound": 25000, + "income_lower_bound": 37700, + "mean": 37875.0, + "mean_repaired": false, + "residual": -479.85302450560175, + "target_people": 7796.764343659569 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 13817.89403113474, + "gain_lower_bound": 25000, + "income_lower_bound": 50000, + "mean": 37071.42857142857, + "mean_repaired": false, + "residual": 303.1032987404524, + "target_people": 14120.997329875192 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3090.504523026316, + "gain_lower_bound": 25000, + "income_lower_bound": 100000, + "mean": 33666.666666666664, + "mean_repaired": false, + "residual": -146.78056255809042, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3502.877343595474, + "gain_lower_bound": 25000, + "income_lower_bound": 125140, + "mean": 39250.0, + "mean_repaired": false, + "residual": 716.6911923646635, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 7506.905941076091, + "gain_lower_bound": 25000, + "income_lower_bound": 200000, + "mean": 35500.0, + "mean_repaired": false, + "residual": 366.10993193978175, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 45389.27037614274, + "gain_lower_bound": 50000, + "income_lower_bound": 0, + "mean": 70204.54545454546, + "mean_repaired": false, + "residual": -1408.7338592316737, + "target_people": 43980.53651691107 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 8352.781757383455, + "gain_lower_bound": 50000, + "income_lower_bound": 37700, + "mean": 69285.71428571429, + "mean_repaired": false, + "residual": -1530.6129566813315, + "target_people": 6822.168800702123 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 14123.299833830733, + "gain_lower_bound": 50000, + "income_lower_bound": 50000, + "mean": 71307.69230769231, + "mean_repaired": false, + "residual": -1010.9451703751984, + "target_people": 13112.354663455535 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3052.0878563596493, + "gain_lower_bound": 50000, + "income_lower_bound": 100000, + "mean": 65333.333333333336, + "mean_repaired": false, + "residual": -108.36389589142391, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4472.49527815934, + "gain_lower_bound": 50000, + "income_lower_bound": 125140, + "mean": 76000.0, + "mean_repaired": false, + "residual": -252.92674219920264, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 973.75, + "achieved_pass1": 4000.0878563596493, + "gain_lower_bound": 50000, + "income_lower_bound": 200000, + "mean": 72571.42857142857, + "mean_repaired": false, + "residual": 1915.0510325292394, + "target_people": 6888.888888888889 + }, + { + "achieved_fallback": 176.00162037037038, + "achieved_pass1": 27070.351414541234, + "gain_lower_bound": 100000, + "income_lower_bound": 0, + "mean": 154750.0, + "mean_repaired": false, + "residual": 741.2611122136191, + "target_people": 27987.614147125223 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5295.719554135181, + "gain_lower_bound": 100000, + "income_lower_bound": 37700, + "mean": 152166.66666666666, + "mean_repaired": false, + "residual": 551.8537036094958, + "target_people": 5847.573257744677 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 11571.22435911671, + "gain_lower_bound": 100000, + "income_lower_bound": 50000, + "mean": 153666.66666666666, + "mean_repaired": false, + "residual": 532.4876379191701, + "target_people": 12103.71199703588 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2750.0833333333335, + "gain_lower_bound": 100000, + "income_lower_bound": 100000, + "mean": 143666.66666666666, + "mean_repaired": false, + "residual": 193.64062713489193, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 804.0667067307693, + "achieved_pass1": 2957.838996763754, + "gain_lower_bound": 100000, + "income_lower_bound": 125140, + "mean": 179000.0, + "mean_repaired": false, + "residual": 457.6628324656142, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 11801.368508569276, + "gain_lower_bound": 100000, + "income_lower_bound": 200000, + "mean": 156250.0, + "mean_repaired": false, + "residual": -3928.352635553403, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 9355.39123159304, + "gain_lower_bound": 250000, + "income_lower_bound": 0, + "mean": 343444.44444444444, + "mean_repaired": false, + "residual": -359.37239858850444, + "target_people": 8996.018833004535 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1848.838996763754, + "gain_lower_bound": 250000, + "income_lower_bound": 37700, + "mean": 410500.0, + "mean_repaired": false, + "residual": 100.35208915113822, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5206.157163290342, + "gain_lower_bound": 250000, + "income_lower_bound": 50000, + "mean": 383200.0, + "mean_repaired": false, + "residual": -162.9438311920594, + "target_people": 5043.213332098283 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 769.9166666666666, + "gain_lower_bound": 250000, + "income_lower_bound": 100000, + "mean": 486000.0, + "mean_repaired": false, + "residual": 211.32465348940855, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3106.254523026316, + "gain_lower_bound": 250000, + "income_lower_bound": 125140, + "mean": 420000.0, + "mean_repaired": false, + "residual": -996.4702550462471, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5413.08668699187, + "gain_lower_bound": 250000, + "income_lower_bound": 200000, + "mean": 333000.0, + "mean_repaired": false, + "residual": -492.4517663569495, + "target_people": 4920.6349206349205 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4351.886846971798, + "gain_lower_bound": 500000, + "income_lower_bound": 0, + "mean": 639000.0, + "mean_repaired": false, + "residual": 645.9013935862768, + "target_people": 4997.788240558075 + }, + { + "achieved_fallback": 931.75, + "achieved_pass1": 1028.75, + "gain_lower_bound": 500000, + "income_lower_bound": 37700, + "mean": 543500.0, + "mean_repaired": false, + "residual": -11.308914085107745, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2014.1666666666665, + "gain_lower_bound": 500000, + "income_lower_bound": 50000, + "mean": 830333.3333333334, + "mean_repaired": false, + "residual": 1011.7613325923035, + "target_people": 3025.92799925897 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 400.0, + "gain_lower_bound": 500000, + "income_lower_bound": 100000, + "mean": 715000.0, + "mean_repaired": false, + "residual": 581.2413201560752, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3735.5578982597053, + "gain_lower_bound": 500000, + "income_lower_bound": 125140, + "mean": 612000.0, + "mean_repaired": false, + "residual": -1625.7736302796366, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3468.004523026316, + "gain_lower_bound": 500000, + "income_lower_bound": 200000, + "mean": 665000.0, + "mean_repaired": false, + "residual": 468.50341348162056, + "target_people": 3936.5079365079364 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1666.6666666666665, + "gain_lower_bound": 1000000, + "income_lower_bound": 0, + "mean": 1357500.0, + "mean_repaired": false, + "residual": 332.4486295565637, + "target_people": 1999.1152962232302 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 542.668287037037, + "gain_lower_bound": 1000000, + "income_lower_bound": 37700, + "mean": 1020000.0, + "mean_repaired": true, + "residual": 431.92725592040915, + "target_people": 974.5955429574461 + }, + { + "achieved_fallback": 638.4716135458167, + "achieved_pass1": 1033.3333333333335, + "gain_lower_bound": 1000000, + "income_lower_bound": 50000, + "mean": 1427000.0, + "mean_repaired": false, + "residual": 345.48038596016306, + "target_people": 2017.2853328393132 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 756.25, + "gain_lower_bound": 1000000, + "income_lower_bound": 100000, + "mean": 1020000.0, + "mean_repaired": true, + "residual": 224.99132015607518, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1062.2516203703703, + "gain_lower_bound": 1000000, + "income_lower_bound": 125140, + "mean": 1507000.0, + "mean_repaired": false, + "residual": -7.359486380335966, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 814.5, + "achieved_pass1": 1149.25, + "gain_lower_bound": 1000000, + "income_lower_bound": 200000, + "mean": 1295666.6666666667, + "mean_repaired": false, + "residual": 988.6309523809523, + "target_people": 2952.3809523809523 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2033.3333333333335, + "gain_lower_bound": 2000000, + "income_lower_bound": 0, + "mean": 2279000.0, + "mean_repaired": false, + "residual": -1033.7756852217185, + "target_people": 999.5576481116151 + }, + { + "achieved_fallback": 558.75, + "achieved_pass1": 100.0, + "gain_lower_bound": 2000000, + "income_lower_bound": 37700, + "mean": 3295400.0, + "mean_repaired": false, + "residual": -420.6758930385555, + "target_people": 238.07410696144447 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1484.3333333333333, + "gain_lower_bound": 2000000, + "income_lower_bound": 50000, + "mean": 2882000.0, + "mean_repaired": false, + "residual": -475.69066691367664, + "target_people": 1008.6426664196566 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 166.66666666666666, + "gain_lower_bound": 2000000, + "income_lower_bound": 100000, + "mean": 3295400.0, + "mean_repaired": false, + "residual": 144.49348978265616, + "target_people": 311.1601564493228 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 636.6666666666666, + "gain_lower_bound": 2000000, + "income_lower_bound": 125140, + "mean": 2325000.0, + "mean_repaired": false, + "residual": 418.22546732336775, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3046.076984126984, + "gain_lower_bound": 2000000, + "income_lower_bound": 200000, + "mean": 3570500.0, + "mean_repaired": false, + "residual": -1077.8230158730157, + "target_people": 1968.2539682539682 + }, + { + "achieved_fallback": 638.4716135458167, + "achieved_pass1": 100.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 0, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -609.3048621374089, + "target_people": 129.16675140840775 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 37700, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 32.14874516625317, + "target_people": 32.14874516625317 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 50000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 204.87468939159012, + "target_people": 204.87468939159012 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 100000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 82.7721202730988, + "target_people": 82.7721202730988 + }, + { + "achieved_fallback": 500.5, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 125140, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -257.0482876810968, + "target_people": 243.4517123189032 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2431.9166666666665, + "gain_lower_bound": 5000000, + "income_lower_bound": 200000, + "mean": 18739500.0, + "mean_repaired": false, + "residual": -463.6626984126983, + "target_people": 1968.2539682539682 + } + ], + "rake": { + "age_margin": { + "16": { + "normalised": 32000.000000000007, + "published": 32000.0, + "raked": 32000.000000000015 + }, + "35": { + "normalised": 65000.000000000015, + "published": 65000.0, + "raked": 65000.000000000044 + }, + "45": { + "normalised": 98000.00000000001, + "published": 98000.0, + "raked": 98000.00000000001 + }, + "55": { + "normalised": 144000.00000000003, + "published": 144000.0, + "raked": 144000.00000000012 + }, + "65": { + "normalised": 125000.00000000003, + "published": 125000.0, + "raked": 125000.00000000007 + }, + "75": { + "normalised": 87000.00000000001, + "published": 87000.0, + "raked": 87000.00000000001 + } + }, + "income_bands_without_gainers": [], + "ipf_iterations": 200, + "ipf_max_abs_margin_error": 9.537986612749965e-16, + "ipf_unattainable_margin_mass": { + "age": 0.0, + "joint": 0.0, + "region": 0.0 + }, + "ipf_zero_seed_cells": 0, + "joint_total_people": 551000.0000000001, + "region_margin": { + "london": { + "normalised": 106797.59862778733, + "published_individuals_basis": 106614.72602739726, + "raked": 106797.59862778743 + }, + "rest_of_england": { + "normalised": 209814.75128644946, + "published_individuals_basis": 209455.47945205483, + "raked": 209814.75128644952 + }, + "south_east_and_east_of_england": { + "normalised": 172955.4030874786, + "published_individuals_basis": 172659.2465753425, + "raked": 172955.40308747863 + }, + "wales_scotland_northern_ireland": { + "normalised": 61432.24699828475, + "published_individuals_basis": 61327.054794520554, + "raked": 61432.24699828477 + } + } + } + }, + "published_taxpayer_mass": 551000.0, + "region_rows": [ + { + "achieved_gains": 2413980895.4392204, + "achieved_people": 18760.24959250204, + "geography_id": "E12000001", + "published_gains_individuals_basis": 1497797150.3974364, + "published_people_individuals_basis": 11321.91780821918, + "region": "NORTH_EAST" + }, + { + "achieved_gains": 5278722621.374959, + "achieved_people": 54659.49190938511, + "geography_id": "E12000002", + "published_gains_individuals_basis": 8790074083.38308, + "published_people_individuals_basis": 41513.69863013699, + "region": "NORTH_WEST" + }, + { + "achieved_gains": 4546569862.682542, + "achieved_people": 34765.08928571429, + "geography_id": "E12000003", + "published_gains_individuals_basis": 6970985861.949795, + "published_people_individuals_basis": 32078.767123287675, + "region": "YORKSHIRE" + }, + { + "achieved_gains": 4706951747.094108, + "achieved_people": 26891.48432343234, + "geography_id": "E12000004", + "published_gains_individuals_basis": 6299365751.358824, + "published_people_individuals_basis": 31135.273972602743, + "region": "EAST_MIDLANDS" + }, + { + "achieved_gains": 5246110089.56066, + "achieved_people": 39879.200000000004, + "geography_id": "E12000005", + "published_gains_individuals_basis": 5890960774.765152, + "published_people_individuals_basis": 33022.260273972606, + "region": "WEST_MIDLANDS" + }, + { + "achieved_gains": 16800821607.637775, + "achieved_people": 73099.31810897434, + "geography_id": "E12000006", + "published_gains_individuals_basis": 11545870966.728456, + "published_people_individuals_basis": 58496.57534246576, + "region": "EAST_OF_ENGLAND" + }, + { + "achieved_gains": 36539941190.15812, + "achieved_people": 104250.10977242302, + "geography_id": "E12000007", + "published_gains_individuals_basis": 32519714615.602127, + "published_people_individuals_basis": 106614.72602739726, + "region": "LONDON" + }, + { + "achieved_gains": 19846806513.98224, + "achieved_people": 98626.89734100878, + "geography_id": "E12000008", + "published_gains_individuals_basis": 25606804690.69088, + "published_people_individuals_basis": 114162.67123287672, + "region": "SOUTH_EAST" + }, + { + "achieved_gains": 8093957900.530428, + "achieved_people": 37743.47703252033, + "geography_id": "E12000009", + "published_gains_individuals_basis": 10341263627.509504, + "published_people_individuals_basis": 60383.56164383562, + "region": "SOUTH_WEST" + }, + { + "achieved_gains": 1642251568.5539286, + "achieved_people": 18861.85621821544, + "geography_id": "W92000004", + "published_gains_individuals_basis": 2358632410.6946497, + "published_people_individuals_basis": 16982.87671232877, + "region": "WALES" + }, + { + "achieved_gains": 8726373347.612616, + "achieved_people": 35363.15023240372, + "geography_id": "S92000003", + "published_gains_individuals_basis": 5680201325.83493, + "published_people_individuals_basis": 34909.24657534247, + "region": "SCOTLAND" + }, + { + "achieved_gains": 3986792183.5359044, + "achieved_people": 8707.360879629628, + "geography_id": "N92000002", + "published_gains_individuals_basis": 1757265449.747086, + "published_people_individuals_basis": 9434.931506849316, + "region": "NORTHERN_IRELAND" + } + ], + "remainder_mass": 11618779.31710685, + "rows": [ + { + "achieved_gains": 749938158.0665947, + "achieved_people": 133133.8111909301, + "gain_lower_bound": 0, + "published_gains": 760000000.0, + "published_people": 133000.0 + }, + { + "achieved_gains": 1968872435.3551085, + "achieved_people": 118841.9680693686, + "gain_lower_bound": 10000, + "published_gains": 2036000000.0, + "published_people": 123000.0 + }, + { + "achieved_gains": 3449480504.418085, + "achieved_people": 95851.609995565, + "gain_lower_bound": 25000, + "published_gains": 3516000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 5595187972.138443, + "achieved_people": 80363.77295823558, + "gain_lower_bound": 50000, + "published_gains": 5510000000.0, + "published_people": 78000.0 + }, + { + "achieved_gains": 9531733834.705553, + "achieved_people": 62426.65449356063, + "gain_lower_bound": 100000, + "published_gains": 9487000000.0, + "published_people": 61000.0 + }, + { + "achieved_gains": 9008832611.936666, + "achieved_people": 25699.64526833199, + "gain_lower_bound": 250000, + "published_gains": 8820000000.0, + "published_people": 25000.0 + }, + { + "achieved_gains": 9958417464.220625, + "achieved_people": 15930.115934924486, + "gain_lower_bound": 500000, + "published_gains": 11372000000.0, + "published_people": 16000.0 + }, + { + "achieved_gains": 9658592398.299599, + "achieved_people": 7663.391520953224, + "gain_lower_bound": 1000000, + "published_gains": 12806000000.0, + "published_people": 9000.0 + }, + { + "achieved_gains": 21358638017.263897, + "achieved_people": 8025.826984126984, + "gain_lower_bound": 2000000, + "published_gains": 16477000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 46549586131.75793, + "achieved_people": 3670.888280212483, + "gain_lower_bound": 5000000, + "published_gains": 48474000000.0, + "published_people": 3000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 551607.6846962092 + }, + "hmrc_cgt_asset_type_spine": { + "asset_type": { + "achieved_gains": { + "agricultural_commercial_industrial_land_buildings": 3136087316.6023626, + "listed_shares": 8983395561.881853, + "other_financial_assets": 27556458226.721977, + "other_non_financial_assets": 302891701.6762277, + "unlisted_shares": 65404568629.48858 + }, + "achieved_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.029758835583760194, + "listed_shares": 0.08524488144659005, + "other_financial_assets": 0.2614876522405682, + "other_non_financial_assets": 0.0028741879418184217, + "unlisted_shares": 0.6206344427872631 + }, + "achieved_people": { + "agricultural_commercial_industrial_land_buildings": 266.66666666666663, + "listed_shares": 162582.76575477017, + "other_financial_assets": 151307.3552087805, + "other_non_financial_assets": 709.3349537037037, + "unlisted_shares": 34053.02817809981 + }, + "log_sigma": 1.5, + "median_anchor_gbp": { + "agricultural_commercial_industrial_land_buildings": 156692.3076923077, + "listed_shares": 5501.392757660167, + "other_financial_assets": 14663.62807657247, + "other_non_financial_assets": 143600.0, + "unlisted_shares": 114879.31034482758 + }, + "non_residential_gains_mass": 105383401436.371, + "share_fit_iterations": 18, + "target_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.033817547937245784, + "listed_shares": 0.0983647381090728, + "other_financial_assets": 0.26705403834979663, + "other_non_financial_assets": 0.0476799203121109, + "unlisted_shares": 0.5530837552917739 + }, + "type_weights": { + "agricultural_commercial_industrial_land_buildings": 0.000657487592985042, + "listed_shares": 0.6312089885901834, + "other_financial_assets": 0.34779495303234864, + "other_non_financial_assets": 0.0010926748389066168, + "unlisted_shares": 0.019245895945576408 + } + }, + "composition_by_band": [ + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 0, + "listed_shares_gains": 256039587.9871281, + "listed_shares_people": 43344.05561466093, + "other_financial_assets_gains": 85621484.70371804, + "other_financial_assets_people": 15235.07412461442, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 408277085.37574846, + "residential_land_buildings_people": 74554.68145165476, + "unlisted_shares_gains": 0.0, + "unlisted_shares_people": 0.0 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 10000, + "listed_shares_gains": 706817147.2097293, + "listed_shares_people": 42458.18145695358, + "other_financial_assets_gains": 407516583.07497346, + "other_financial_assets_people": 23995.25654405557, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 833721938.697209, + "residential_land_buildings_people": 51555.1967350261, + "unlisted_shares_gains": 20816766.37319694, + "unlisted_shares_people": 833.3333333333334 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 25000, + "listed_shares_gains": 1217740552.1464796, + "listed_shares_people": 33251.05758417475, + "other_financial_assets_gains": 962941742.9568799, + "other_financial_assets_people": 27219.52500107479, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1183122007.4803026, + "residential_land_buildings_people": 33362.73648983895, + "unlisted_shares_gains": 85676201.83442295, + "unlisted_shares_people": 2018.2909204765097 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 50000, + "listed_shares_gains": 1836754599.9647877, + "listed_shares_people": 26265.516564118057, + "other_financial_assets_gains": 2177268239.108616, + "other_financial_assets_people": 31038.68408679044, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1545685000.744909, + "residential_land_buildings_people": 22504.82230732706, + "unlisted_shares_gains": 35480132.32013049, + "unlisted_shares_people": 554.75 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 100000, + "listed_shares_gains": 1512317474.0591853, + "listed_shares_people": 10634.728691127293, + "other_financial_assets_gains": 3982954445.3936195, + "other_financial_assets_people": 26203.44020739526, + "other_non_financial_assets_gains": 126832317.5248888, + "other_non_financial_assets_people": 533.3333333333334, + "residential_land_buildings_gains": 1961505719.5099933, + "residential_land_buildings_people": 13282.38188879127, + "unlisted_shares_gains": 1948123878.217864, + "unlisted_shares_people": 11772.770372913476 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 250000, + "listed_shares_gains": 1621256598.3483753, + "listed_shares_people": 4243.588996763754, + "other_financial_assets_gains": 5251643712.398767, + "other_financial_assets_people": 14965.007876684855, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1445926313.5782816, + "residential_land_buildings_people": 4236.715061550048, + "unlisted_shares_gains": 690005987.611241, + "unlisted_shares_people": 2254.3333333333335 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 500000, + "listed_shares_gains": 1139575227.7836719, + "listed_shares_people": 1818.9701803051316, + "other_financial_assets_gains": 4442226299.330441, + "other_financial_assets_people": 7267.729087952688, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1122102141.7950094, + "residential_land_buildings_people": 1797.3333333333335, + "unlisted_shares_gains": 3254513795.3115044, + "unlisted_shares_people": 5046.083333333333 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 1000000, + "listed_shares_gains": 692894374.3824961, + "listed_shares_people": 566.6666666666666, + "other_financial_assets_gains": 3835919611.5756893, + "other_financial_assets_people": 3236.2216135458166, + "other_non_financial_assets_gains": 176059384.1513389, + "other_non_financial_assets_people": 176.00162037037038, + "residential_land_buildings_gains": 894026897.024831, + "residential_land_buildings_people": 694.6666666666666, + "unlisted_shares_gains": 4059692131.1652427, + "unlisted_shares_people": 2989.8349537037034 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 221655807.4011114, + "agricultural_commercial_industrial_land_buildings_people": 100.0, + "gain_lower_bound": 2000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 4432654289.160226, + "other_financial_assets_people": 1846.4166666666667, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1517103624.789694, + "residential_land_buildings_people": 533.3333333333333, + "unlisted_shares_gains": 15187224295.912865, + "unlisted_shares_people": 5546.076984126984 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 2914431509.201251, + "agricultural_commercial_industrial_land_buildings_people": 166.66666666666666, + "gain_lower_bound": 5000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 1977711819.0190446, + "other_financial_assets_people": 300.0, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1534407362.7955139, + "residential_land_buildings_people": 166.66666666666666, + "unlisted_shares_gains": 40123035440.74212, + "unlisted_shares_people": 3037.55494687915 + } + ], + "facts": { + "annual_exempt_amount": 3000.0, + "resource": "hmrc_cgt_asset_type_facts.json", + "resource_sha256": "99123735ad0bc54cc5d8cf7b156f4feaa4bcf3ccf46d7b69377e1036b7251dcb", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f" + }, + "residential": { + "achieved_count": 202688.5339341882, + "achieved_gains": 12445878091.791492, + "achieved_rows": 325, + "count_bernoulli_sigma": 9530.707155947435, + "count_target_individuals_basis": 202630.0578034682, + "expected_count": 202630.05780346817, + "expected_gains": 12242481465.11322, + "gains_bernoulli_sigma": 3289021536.9281616, + "gains_target_individuals_basis": 12242481474.688189, + "liable_gains_mass": 117829279528.1625, + "liable_taxpayer_mass": 551607.6846962092, + "log_gain_centre": 10.438782759218476, + "logistic_intercept": -0.621440586542584, + "logistic_slope": -0.4647841601399705, + "max_liable_weight": 3233.3333333333335, + "table8a_gains_total": 12914000000.0, + "table8a_taxpayers_total": 205000.0, + "table8b_individuals_gains_share": 0.9480007336757154, + "table8b_individuals_taxpayer_share": 0.9884393063583815 + }, + "seeds": { + "asset_type": 554, + "residential_flag": 553 + }, + "stage": "hmrc_cgt_asset_type_spine", + "value_counts": { + "agricultural_commercial_industrial_land_buildings": 2, + "listed_shares": 284, + "none": 91945, + "other_financial_assets": 276, + "other_non_financial_assets": 2, + "residential_land_buildings": 325, + "sub_aea": 20671, + "unlisted_shares": 85 + } + } + } +} diff --git a/docs/evidence/uk-cgt-725/receipt-tilt.json b/docs/evidence/uk-cgt-725/receipt-tilt.json new file mode 100644 index 0000000000..d843388800 --- /dev/null +++ b/docs/evidence/uk-cgt-725/receipt-tilt.json @@ -0,0 +1,2242 @@ +{ + "label": "-tilt", + "inputs": { + "control": "control.h5", + "candidate": "candidate-tilt.h5" + }, + "control_provenance": { + "h5": "control.h5", + "build_commit": "d69a543e5d7f0ac01e73c9c6eb4645b0d4b8b9b6", + "h5_sha256": "c6909bdaa9d264e6b052ff7bb4d2e2a16fc5c8766038a2e298cb7ee8cb4a7c90", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": null, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "759e22ba7afdaad9b0411e051508d550e7f24c03898db8829d32f28b2a06039e", + "source_vintages": { + "frs": "2024_25" + } + }, + "control_headline": { + "liable_taxpayers": 357787.8291737345, + "liable_gains": 63762165202.22745, + "share_65_plus_of_taxpayers": 0.23074415456851116, + "share_65_plus_of_gains": 0.29014226804959764, + "share_65_plus_of_2m_plus_gainers": 0.21851480088389827, + "share_65_plus_of_2m_plus_gains": 0.38325563962979103, + "top_2m_plus_taxpayers": 4400.922330097088, + "top_2m_plus_gains": 31733417691.922935 + }, + "control_stage_evidence": { + "hmrc_cgt_gains_spine": { + "published_taxpayer_mass": 359000.0, + "remainder_mass": 11695599.172629325, + "rows": [ + { + "achieved_gains": 492030045.77188396, + "achieved_people": 61716.26528400545, + "gain_lower_bound": 0, + "published_gains": 462000000.0, + "published_people": 63000.0 + }, + { + "achieved_gains": 1655366280.7861395, + "achieved_people": 99394.33220162481, + "gain_lower_bound": 10000, + "published_gains": 1669000000.0, + "published_people": 101000.0 + }, + { + "achieved_gains": 2518693708.19442, + "achieved_people": 74570.58235379534, + "gain_lower_bound": 25000, + "published_gains": 2645000000.0, + "published_people": 74000.0 + }, + { + "achieved_gains": 3590296848.5971456, + "achieved_people": 53117.88027693833, + "gain_lower_bound": 50000, + "published_gains": 3731000000.0, + "published_people": 53000.0 + }, + { + "achieved_gains": 5903553980.984594, + "achieved_people": 36265.90857274244, + "gain_lower_bound": 100000, + "published_gains": 5649000000.0, + "published_people": 37000.0 + }, + { + "achieved_gains": 4941119445.462856, + "achieved_people": 14025.627064255188, + "gain_lower_bound": 250000, + "published_gains": 4766000000.0, + "published_people": 14000.0 + }, + { + "achieved_gains": 5870012433.427295, + "achieved_people": 9395.721613545815, + "gain_lower_bound": 500000, + "published_gains": 5705000000.0, + "published_people": 8000.0 + }, + { + "achieved_gains": 7057674767.080178, + "achieved_people": 4900.589476730021, + "gain_lower_bound": 1000000, + "published_gains": 6390000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 9550987003.01075, + "achieved_people": 2905.922330097087, + "gain_lower_bound": 2000000, + "published_gains": 9189000000.0, + "published_people": 3000.0 + }, + { + "achieved_gains": 22182430688.912186, + "achieved_people": 1495.0, + "gain_lower_bound": 5000000, + "published_gains": 22714000000.0, + "published_people": 2000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 357787.8291737345 + } + }, + "candidate_provenance": { + "h5": "candidate-tilt.h5", + "build_commit": "b88190e82cc9e7801bea88072a40c4e9260fd885", + "h5_sha256": "37dd81e04638f868afe75dae4e8e95cec618e84352a0a516b6e4f55168eb7242", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_asset_type_spine": { + "assign_main_asset_type": 554, + "assign_residential_property_flag": 553 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": null, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "1580babe0bd6d0a6bfe7c024382562f829845f799837d96f719eeef2b00f75cf", + "source_vintages": { + "frs": "2024_25" + }, + "chronicle_feed": { + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797" + } + }, + "candidate_headline": { + "liable_taxpayers": 562086.7636350221, + "liable_gains": 120409927017.57538, + "share_65_plus_of_taxpayers": 0.3792239784985052, + "share_65_plus_of_gains": 0.3537859380227253, + "share_65_plus_of_2m_plus_gainers": 0.3785983052735209, + "share_65_plus_of_2m_plus_gains": 0.3833029463228955, + "top_2m_plus_taxpayers": 11165.032601591154, + "top_2m_plus_gains": 65305972611.95554 + }, + "candidate_stage_evidence": { + "hmrc_cgt_gains_spine": { + "age_by_band_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 12632630.132411812, + "achieved_people": 2461.3078982597053, + "age_lower_bound": 16, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 31312444.548262328, + "achieved_people": 953.4701803051317, + "age_lower_bound": 16, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 77234063.83562854, + "achieved_people": 1000.3269841269841, + "age_lower_bound": 16, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 182263161.0044751, + "achieved_people": 176.00162037037038, + "age_lower_bound": 16, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 68535497.80291788, + "achieved_people": 8551.67423941799, + "age_lower_bound": 25, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 166167230.28596494, + "achieved_people": 7287.960397588523, + "age_lower_bound": 25, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 155405278.44091952, + "achieved_people": 3244.6726190476193, + "age_lower_bound": 25, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 504696824.15139484, + "achieved_people": 6585.034922450792, + "age_lower_bound": 25, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 330334395.80818903, + "achieved_people": 1849.0833333333335, + "age_lower_bound": 25, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 336246850.53934723, + "achieved_people": 700.0, + "age_lower_bound": 25, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 260964862.07343853, + "achieved_people": 266.66666666666663, + "age_lower_bound": 25, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 1681187616.12229, + "achieved_people": 558.75, + "age_lower_bound": 25, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 124615624.06515267, + "achieved_people": 16448.602551743483, + "age_lower_bound": 35, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 280422701.3422664, + "achieved_people": 14315.693479059297, + "age_lower_bound": 35, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 484639301.76776975, + "achieved_people": 11156.465061550047, + "age_lower_bound": 35, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 778276821.3156677, + "achieved_people": 9455.819598489352, + "age_lower_bound": 35, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1352489508.2716084, + "achieved_people": 7303.5128852029575, + "age_lower_bound": 35, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1875333822.9857256, + "achieved_people": 5313.14689502346, + "age_lower_bound": 35, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 946256106.0615661, + "achieved_people": 1441.3333333333333, + "age_lower_bound": 35, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 2368336293.587601, + "achieved_people": 2171.2359735973596, + "age_lower_bound": 35, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 2161650987.0754747, + "achieved_people": 588.25, + "age_lower_bound": 35, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 3295955491.1572623, + "achieved_people": 533.3333333333334, + "age_lower_bound": 35, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 171989803.5802155, + "achieved_people": 25498.26670577162, + "age_lower_bound": 45, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 376259476.8930146, + "achieved_people": 19880.842750690983, + "age_lower_bound": 45, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 651148787.824141, + "achieved_people": 16427.43894070049, + "age_lower_bound": 45, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 771225234.6671305, + "achieved_people": 10318.646887224852, + "age_lower_bound": 45, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 2348744482.3329134, + "achieved_people": 15714.85048828055, + "age_lower_bound": 45, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1262962371.1550977, + "achieved_people": 3668.416666666667, + "age_lower_bound": 45, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1906780537.4997, + "achieved_people": 2683.0, + "age_lower_bound": 45, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 4452385490.635573, + "achieved_people": 2950.7499999999995, + "age_lower_bound": 45, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 3908251345.7258105, + "achieved_people": 1418.5535136384651, + "age_lower_bound": 45, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 9277717456.078026, + "achieved_people": 766.6666666666666, + "age_lower_bound": 45, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 175300175.00787067, + "achieved_people": 36752.31307947682, + "age_lower_bound": 55, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 467778992.63081664, + "achieved_people": 31552.05268401946, + "age_lower_bound": 55, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 883234330.6242255, + "achieved_people": 25203.439853179883, + "age_lower_bound": 55, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1252184262.5712876, + "achieved_people": 18139.746824386086, + "age_lower_bound": 55, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 2597821439.0154586, + "achieved_people": 16524.94912205414, + "age_lower_bound": 55, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 2404528890.044648, + "achieved_people": 6804.087856359649, + "age_lower_bound": 55, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 4043943643.7051034, + "achieved_people": 6515.293871857067, + "age_lower_bound": 55, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 3434135806.896396, + "achieved_people": 2675.9103174603174, + "age_lower_bound": 55, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 2154110177.566593, + "achieved_people": 952.9166666666666, + "age_lower_bound": 55, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 17795127823.585213, + "achieved_people": 2119.5, + "age_lower_bound": 55, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 144044575.59163883, + "achieved_people": 33462.50754013387, + "age_lower_bound": 65, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 332585866.9193122, + "achieved_people": 25598.127839599, + "age_lower_bound": 65, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 715264520.7659788, + "achieved_people": 25002.048468152145, + "age_lower_bound": 65, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1013937304.1203458, + "achieved_people": 17146.14130533331, + "age_lower_bound": 65, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1591755754.8358397, + "achieved_people": 12427.094279287014, + "age_lower_bound": 65, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1807212207.5393338, + "achieved_people": 5081.754523026316, + "age_lower_bound": 65, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1465409382.4685707, + "achieved_people": 2490.3333333333335, + "age_lower_bound": 65, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 3681654600.8051834, + "achieved_people": 3245.6666666666665, + "age_lower_bound": 65, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 6865801367.674121, + "achieved_people": 2495.004523026316, + "age_lower_bound": 65, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 1155557306.314554, + "achieved_people": 205.0, + "age_lower_bound": 65, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 89164991.17554791, + "achieved_people": 15230.903599014822, + "age_lower_bound": 75, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 275779045.59540373, + "achieved_people": 17560.274959346265, + "age_lower_bound": 75, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 293040852.3688427, + "achieved_people": 8858.626836256719, + "age_lower_bound": 75, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 669850394.3946185, + "achieved_people": 9343.20789240743, + "age_lower_bound": 75, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1114330437.471431, + "achieved_people": 7386.222890191557, + "age_lower_bound": 75, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 473670451.1944047, + "achieved_people": 1361.6666666666667, + "age_lower_bound": 75, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 775445741.2160058, + "achieved_people": 1330.0, + "age_lower_bound": 75, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 1664376700.7540848, + "achieved_people": 1366.9936507936509, + "age_lower_bound": 75, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 75, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 16511915980.854683, + "achieved_people": 1327.0578982597056, + "age_lower_bound": 75, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 23991672.007704698, + "achieved_people": 4324.9140922262995, + "age_lower_bound": 85, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 77325596.78040291, + "achieved_people": 4748.309177068886, + "age_lower_bound": 85, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 275119890.0025425, + "achieved_people": 7340.91243977527, + "age_lower_bound": 85, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 107025526.81160536, + "achieved_people": 1408.2545230263158, + "age_lower_bound": 85, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 642618725.5348088, + "achieved_people": 3815.755663430421, + "age_lower_bound": 85, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 85, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 169046971.48965555, + "achieved_people": 300.0, + "age_lower_bound": 85, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 164716052.67265835, + "achieved_people": 100.0, + "age_lower_bound": 85, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 498697059.80152684, + "achieved_people": 200.0, + "age_lower_bound": 85, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 85, + "gain_lower_bound": 5000000 + } + ], + "age_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "published_gains": 54000000.0, + "published_people": 1000.0 + }, + { + "achieved_gains": 303442299.52077776, + "achieved_people": 4591.106683062192, + "age_lower_bound": 16, + "published_gains": 319000000.0, + "published_people": 4000.0 + }, + { + "achieved_gains": 3503538555.224461, + "achieved_people": 29043.84217850492, + "age_lower_bound": 25, + "published_gains": 2499000000.0, + "published_people": 27000.0 + }, + { + "achieved_gains": 13667976657.630095, + "achieved_people": 68727.39311133263, + "age_lower_bound": 35, + "published_gains": 11775000000.0, + "published_people": 65000.0 + }, + { + "achieved_gains": 25127464986.391624, + "achieved_people": 99327.43261964028, + "age_lower_bound": 45, + "published_gains": 28422000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 35208165541.64761, + "achieved_people": 147240.2102754601, + "age_lower_bound": 55, + "published_gains": 38118000000.0, + "published_people": 144000.0 + }, + { + "achieved_gains": 18773222887.034874, + "achieved_people": 127153.67847855797, + "age_lower_bound": 65, + "published_gains": 24260000000.0, + "published_people": 125000.0 + }, + { + "achieved_gains": 21867574595.025024, + "achieved_people": 63764.95439293682, + "age_lower_bound": 75, + "published_gains": 11736000000.0, + "published_people": 68000.0 + }, + { + "achieved_gains": 1958541495.100905, + "achieved_people": 22238.145895527192, + "age_lower_bound": 85, + "published_gains": 2076000000.0, + "published_people": 19000.0 + } + ], + "allocation": { + "band_rows": [ + { + "gain_lower_bound": 0, + "gains_difference": -1000000.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 759000000.0, + "published_people": 133000.0, + "table2_1a_gains": 760000000.0, + "table2_1a_people": 133000.0, + "target_gains_at_cell_means": 758976349.1549579, + "target_people": 132976.11086837502 + }, + { + "gain_lower_bound": 10000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 2036000000.0, + "published_people": 123000.0, + "table2_1a_gains": 2036000000.0, + "table2_1a_people": 123000.0, + "target_gains_at_cell_means": 2033975331.6882389, + "target_people": 122932.62720850299 + }, + { + "gain_lower_bound": 25000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 3516000000.0, + "published_people": 98000.0, + "table2_1a_gains": 3516000000.0, + "table2_1a_people": 98000.0, + "target_gains_at_cell_means": 3514051553.988366, + "target_people": 96927.5289296759 + }, + { + "gain_lower_bound": 50000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 5510000000.0, + "published_people": 78000.0, + "table2_1a_gains": 5510000000.0, + "table2_1a_people": 78000.0, + "target_gains_at_cell_means": 5508271180.542232, + "target_people": 77967.24136638598 + }, + { + "gain_lower_bound": 100000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 9487000000.0, + "published_people": 61000.0, + "table2_1a_gains": 9487000000.0, + "table2_1a_people": 61000.0, + "target_gains_at_cell_means": 9489202603.948486, + "target_people": 60975.20777135002 + }, + { + "gain_lower_bound": 250000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 8820000000.0, + "published_people": 25000.0, + "table2_1a_gains": 8820000000.0, + "table2_1a_people": 25000.0, + "target_gains_at_cell_means": 8823899082.660036, + "target_people": 24000.083759788773 + }, + { + "gain_lower_bound": 500000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 11372000000.0, + "published_people": 16000.0, + "table2_1a_gains": 11372000000.0, + "table2_1a_people": 16000.0, + "target_gains_at_cell_means": 11376054216.655891, + "target_people": 17000.440850376017 + }, + { + "gain_lower_bound": 1000000, + "gains_difference": 0.0, + "means_repaired": 2, + "people_difference": 0.0, + "published_gains": 12806000000.0, + "published_people": 9000.0, + "table2_1a_gains": 12806000000.0, + "table2_1a_people": 9000.0, + "target_gains_at_cell_means": 13002442818.185097, + "target_people": 9979.510578547051 + }, + { + "gain_lower_bound": 2000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 16477000000.0, + "published_people": 5000.0, + "table2_1a_gains": 16477000000.0, + "table2_1a_people": 5000.0, + "target_gains_at_cell_means": 16475121641.489286, + "target_people": 5580.580680186042 + }, + { + "gain_lower_bound": 5000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 48474000000.0, + "published_people": 3000.0, + "table2_1a_gains": 48474000000.0, + "table2_1a_people": 3000.0, + "target_gains_at_cell_means": 48072120949.95949, + "target_people": 2660.6679868122214 + } + ], + "conditioning": { + "age_group_lower_bounds": [ + 16, + 25, + 35, + 45, + 55, + 65, + 75 + ], + "fallback_policy": "pooled_income_band_rank_walk", + "joint_record_set_prefix": "hmrc.cgt_table3_2026.ty2024.", + "joint_resource": "hmrc_cgt_conditioning_facts.json", + "joint_resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "joint_source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "joint_source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "joint_vintage": "2024-25", + "region_groups": { + "EAST_MIDLANDS": "rest_of_england", + "EAST_OF_ENGLAND": "south_east_and_east_of_england", + "LONDON": "london", + "NORTHERN_IRELAND": "wales_scotland_northern_ireland", + "NORTH_EAST": "rest_of_england", + "NORTH_WEST": "rest_of_england", + "SCOTLAND": "wales_scotland_northern_ireland", + "SOUTH_EAST": "south_east_and_east_of_england", + "SOUTH_WEST": "rest_of_england", + "WALES": "wales_scotland_northern_ireland", + "WEST_MIDLANDS": "rest_of_england", + "YORKSHIRE": "rest_of_england" + }, + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "vintage_tax_year": 2024 + }, + "fallback_released_mass": 5012.289487235825, + "fallback_share_by_band": { + "0": 0.013203205593150797, + "10000": 0.004011965405432582, + "100000": 0.0, + "1000000": 0.0687199231818041, + "2000000": 0.08992552906032077, + "25000": 0.0028542453445679562, + "250000": 0.0, + "50000": 0.012694629595970045, + "500000": 0.0, + "5000000": 0.0 + }, + "joint_rows": [ + { + "achieved_fallback": 0.0, + "achieved_pass1": 73937.00259717608, + "gain_lower_bound": 0, + "income_lower_bound": 0, + "mean": 5830.985915492958, + "mean_repaired": false, + "residual": -2968.4095812514133, + "target_people": 70968.59301592466 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 13021.262869001952, + "gain_lower_bound": 0, + "income_lower_bound": 37700, + "mean": 5461.538461538462, + "mean_repaired": false, + "residual": -351.5208105551519, + "target_people": 12669.7420584468 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 27662.41586489319, + "gain_lower_bound": 0, + "income_lower_bound": 50000, + "mean": 5565.217391304348, + "mean_repaired": false, + "residual": -4463.634537241091, + "target_people": 23198.7813276521 + }, + { + "achieved_fallback": 1070.0, + "achieved_pass1": 2876.095238095238, + "gain_lower_bound": 0, + "income_lower_bound": 100000, + "mean": 5600.0, + "mean_repaired": false, + "residual": 960.1113626851379, + "target_people": 4906.206600780376 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 13756.80836516983, + "gain_lower_bound": 0, + "income_lower_bound": 125140, + "mean": 5750.0, + "mean_repaired": false, + "residual": -5317.671293249556, + "target_people": 8439.137071920275 + }, + { + "achieved_fallback": 814.5, + "achieved_pass1": 9592.404771708312, + "gain_lower_bound": 0, + "income_lower_bound": 200000, + "mean": 5538.461538461538, + "mean_repaired": false, + "residual": 2386.746021942481, + "target_people": 12793.650793650793 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 70583.56637180719, + "gain_lower_bound": 10000, + "income_lower_bound": 0, + "mean": 16597.222222222223, + "mean_repaired": false, + "residual": 1384.5842922290904, + "target_people": 71968.15066403628 + }, + { + "achieved_fallback": 485.22018030513175, + "achieved_pass1": 10275.97958042702, + "gain_lower_bound": 10000, + "income_lower_bound": 37700, + "mean": 16272.727272727272, + "mean_repaired": false, + "residual": -40.64878820024353, + "target_people": 10720.550972531908 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 16607.587315166762, + "gain_lower_bound": 10000, + "income_lower_bound": 50000, + "mean": 16736.842105263157, + "mean_repaired": false, + "residual": 2556.623346806715, + "target_people": 19164.210661973477 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5893.5815071533, + "gain_lower_bound": 10000, + "income_lower_bound": 100000, + "mean": 16250.0, + "mean_repaired": false, + "residual": -1968.616226528999, + "target_people": 3924.9652806243007 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 6710.094785295607, + "gain_lower_bound": 10000, + "income_lower_bound": 125140, + "mean": 16333.333333333334, + "mean_repaired": false, + "residual": -380.74198135540064, + "target_people": 6329.352803940206 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 10387.231547217403, + "gain_lower_bound": 10000, + "income_lower_bound": 200000, + "mean": 16363.636363636364, + "mean_repaired": false, + "residual": 438.1652781794219, + "target_people": 10825.396825396825 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 60200.808818888196, + "gain_lower_bound": 25000, + "income_lower_bound": 0, + "mean": 35866.666666666664, + "mean_repaired": false, + "residual": -227.34993219128955, + "target_people": 59973.458886696906 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 6923.504523026316, + "gain_lower_bound": 25000, + "income_lower_bound": 37700, + "mean": 37875.0, + "mean_repaired": false, + "residual": 873.2598206332532, + "target_people": 7796.764343659569 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 14883.03152360126, + "gain_lower_bound": 25000, + "income_lower_bound": 50000, + "mean": 37071.42857142857, + "mean_repaired": false, + "residual": -762.0341937260673, + "target_people": 14120.997329875192 + }, + { + "achieved_fallback": 280.25, + "achieved_pass1": 1932.5, + "gain_lower_bound": 25000, + "income_lower_bound": 100000, + "mean": 33666.666666666664, + "mean_repaired": false, + "residual": 730.9739604682254, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3285.9693469947956, + "gain_lower_bound": 25000, + "income_lower_bound": 125140, + "mean": 39250.0, + "mean_repaired": false, + "residual": 933.5991889653419, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 10681.010186456737, + "gain_lower_bound": 25000, + "income_lower_bound": 200000, + "mean": 35500.0, + "mean_repaired": false, + "residual": -2807.994313440864, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 43871.8618321712, + "gain_lower_bound": 50000, + "income_lower_bound": 0, + "mean": 70204.54545454546, + "mean_repaired": false, + "residual": 108.6746847398681, + "target_people": 43980.53651691107 + }, + { + "achieved_fallback": 931.75, + "achieved_pass1": 4524.832182031865, + "gain_lower_bound": 50000, + "income_lower_bound": 37700, + "mean": 69285.71428571429, + "mean_repaired": false, + "residual": 1365.5866186702578, + "target_people": 6822.168800702123 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 12364.480887980613, + "gain_lower_bound": 50000, + "income_lower_bound": 50000, + "mean": 71307.69230769231, + "mean_repaired": false, + "residual": 747.8737754749218, + "target_people": 13112.354663455535 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1992.25, + "gain_lower_bound": 50000, + "income_lower_bound": 100000, + "mean": 65333.333333333336, + "mean_repaired": false, + "residual": 951.4739604682254, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4367.827182138039, + "gain_lower_bound": 50000, + "income_lower_bound": 125140, + "mean": 76000.0, + "mean_repaired": false, + "residual": -148.25864617790103, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5344.176853123403, + "gain_lower_bound": 50000, + "income_lower_bound": 200000, + "mean": 72571.42857142857, + "mean_repaired": false, + "residual": 1544.7120357654858, + "target_people": 6888.888888888889 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 30213.19526475229, + "gain_lower_bound": 100000, + "income_lower_bound": 0, + "mean": 154750.0, + "mean_repaired": false, + "residual": -2225.5811176270654, + "target_people": 27987.614147125223 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 7612.112851597434, + "gain_lower_bound": 100000, + "income_lower_bound": 37700, + "mean": 152166.66666666666, + "mean_repaired": false, + "residual": -1764.5395938527572, + "target_people": 5847.573257744677 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 13555.81579301087, + "gain_lower_bound": 100000, + "income_lower_bound": 50000, + "mean": 153666.66666666666, + "mean_repaired": false, + "residual": -1452.1037959749901, + "target_people": 12103.71199703588 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2829.6545630904184, + "gain_lower_bound": 100000, + "income_lower_bound": 100000, + "mean": 143666.66666666666, + "mean_repaired": false, + "residual": 114.06939737780704, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4421.407323864893, + "gain_lower_bound": 100000, + "income_lower_bound": 125140, + "mean": 179000.0, + "mean_repaired": false, + "residual": -201.83878790475592, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 6389.282865464059, + "gain_lower_bound": 100000, + "income_lower_bound": 200000, + "mean": 156250.0, + "mean_repaired": false, + "residual": 1483.733007551814, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 7371.416666666666, + "gain_lower_bound": 250000, + "income_lower_bound": 0, + "mean": 343444.44444444444, + "mean_repaired": false, + "residual": 1624.6021663378688, + "target_people": 8996.018833004535 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1905.9223300970875, + "gain_lower_bound": 250000, + "income_lower_bound": 37700, + "mean": 410500.0, + "mean_repaired": false, + "residual": 43.26875581780473, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4128.833333333334, + "gain_lower_bound": 250000, + "income_lower_bound": 50000, + "mean": 383200.0, + "mean_repaired": false, + "residual": 914.379998764949, + "target_people": 5043.213332098283 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2144.8378563596493, + "gain_lower_bound": 250000, + "income_lower_bound": 100000, + "mean": 486000.0, + "mean_repaired": false, + "residual": -1163.596536203574, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2260.504523026316, + "gain_lower_bound": 250000, + "income_lower_bound": 125140, + "mean": 420000.0, + "mean_repaired": false, + "residual": -150.72025504624708, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5117.557898259705, + "gain_lower_bound": 250000, + "income_lower_bound": 200000, + "mean": 333000.0, + "mean_repaired": false, + "residual": -196.92297762478483, + "target_people": 4920.6349206349205 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4966.666666666667, + "gain_lower_bound": 500000, + "income_lower_bound": 0, + "mean": 639000.0, + "mean_repaired": false, + "residual": 31.121573891407934, + "target_people": 4997.788240558075 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2612.8078982597053, + "gain_lower_bound": 500000, + "income_lower_bound": 37700, + "mean": 543500.0, + "mean_repaired": false, + "residual": -663.6168123448131, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3249.319306930693, + "gain_lower_bound": 500000, + "income_lower_bound": 50000, + "mean": 830333.3333333334, + "mean_repaired": false, + "residual": -223.3913076717231, + "target_people": 3025.92799925897 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 869.9166666666666, + "gain_lower_bound": 500000, + "income_lower_bound": 100000, + "mean": 715000.0, + "mean_repaired": false, + "residual": 111.32465348940855, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 265.66666666666663, + "gain_lower_bound": 500000, + "income_lower_bound": 125140, + "mean": 612000.0, + "mean_repaired": false, + "residual": 1844.1176013134022, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3062.25, + "gain_lower_bound": 500000, + "income_lower_bound": 200000, + "mean": 665000.0, + "mean_repaired": false, + "residual": 874.2579365079364, + "target_people": 3936.5079365079364 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1742.668287037037, + "gain_lower_bound": 1000000, + "income_lower_bound": 0, + "mean": 1357500.0, + "mean_repaired": false, + "residual": 256.4470091861931, + "target_people": 1999.1152962232302 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 366.66666666666663, + "gain_lower_bound": 1000000, + "income_lower_bound": 37700, + "mean": 1020000.0, + "mean_repaired": true, + "residual": 607.9288762907795, + "target_people": 974.5955429574461 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2384.6603174603174, + "gain_lower_bound": 1000000, + "income_lower_bound": 50000, + "mean": 1427000.0, + "mean_repaired": false, + "residual": -367.37498462100416, + "target_people": 2017.2853328393132 + }, + { + "achieved_fallback": 871.8193069306931, + "achieved_pass1": 266.66666666666663, + "gain_lower_bound": 1000000, + "income_lower_bound": 100000, + "mean": 1020000.0, + "mean_repaired": true, + "residual": -157.24465344128453, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2860.6666666666665, + "gain_lower_bound": 1000000, + "income_lower_bound": 125140, + "mean": 1507000.0, + "mean_repaired": false, + "residual": -1805.7745326766321, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4193.410317460317, + "gain_lower_bound": 1000000, + "income_lower_bound": 200000, + "mean": 1295666.6666666667, + "mean_repaired": false, + "residual": -1241.0293650793647, + "target_people": 2952.3809523809523 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1151.8868469717984, + "gain_lower_bound": 2000000, + "income_lower_bound": 0, + "mean": 2279000.0, + "mean_repaired": false, + "residual": -152.32919886018328, + "target_people": 999.5576481116151 + }, + { + "achieved_fallback": 558.75, + "achieved_pass1": 100.0, + "gain_lower_bound": 2000000, + "income_lower_bound": 37700, + "mean": 3295400.0, + "mean_repaired": false, + "residual": -420.6758930385555, + "target_people": 238.07410696144447 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1033.3333333333333, + "gain_lower_bound": 2000000, + "income_lower_bound": 50000, + "mean": 2882000.0, + "mean_repaired": false, + "residual": -24.690666913676637, + "target_people": 1008.6426664196566 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 2000000, + "income_lower_bound": 100000, + "mean": 3295400.0, + "mean_repaired": false, + "residual": 311.1601564493228, + "target_people": 311.1601564493228 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1000.1666666666666, + "gain_lower_bound": 2000000, + "income_lower_bound": 125140, + "mean": 2325000.0, + "mean_repaired": false, + "residual": 54.72546732336775, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2369.337856359649, + "gain_lower_bound": 2000000, + "income_lower_bound": 200000, + "mean": 3570500.0, + "mean_repaired": false, + "residual": -401.08388810568067, + "target_people": 1968.2539682539682 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 100.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 0, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 29.166751408407748, + "target_people": 129.16675140840775 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 37700, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 32.14874516625317, + "target_people": 32.14874516625317 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 50000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 204.87468939159012, + "target_people": 204.87468939159012 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 100000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 82.7721202730988, + "target_people": 82.7721202730988 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 266.66666666666663, + "gain_lower_bound": 5000000, + "income_lower_bound": 125140, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -23.214954347763438, + "target_people": 243.4517123189032 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4584.891231593039, + "gain_lower_bound": 5000000, + "income_lower_bound": 200000, + "mean": 18739500.0, + "mean_repaired": false, + "residual": -2616.637263339071, + "target_people": 1968.2539682539682 + } + ], + "rake": { + "age_margin": { + "16": { + "normalised": 4007.272727272728, + "published": 4000.0, + "raked": 4007.27272840189 + }, + "25": { + "normalised": 27049.09090909091, + "published": 27000.0, + "raked": 27049.090911107716 + }, + "35": { + "normalised": 65118.18181818182, + "published": 65000.0, + "raked": 65118.18181331646 + }, + "45": { + "normalised": 98178.18181818182, + "published": 98000.0, + "raked": 98178.18180242073 + }, + "55": { + "normalised": 144261.8181818182, + "published": 144000.0, + "raked": 144261.81817521903 + }, + "65": { + "normalised": 125227.27272727275, + "published": 125000.0, + "raked": 125227.27273548905 + }, + "75": { + "normalised": 87158.18181818182, + "published": 87000.0, + "raked": 87158.18183404508 + } + }, + "gains_margin": { + "16": { + "attainable": true, + "normalised": 318596224.2969573, + "published": 319000000.0, + "raked": 318596224.3558943, + "raked_mean": 79504.5024257561, + "target_mean": 79504.50243345123, + "tilt_lambda": -4.4257345128760575 + }, + "25": { + "attainable": true, + "normalised": 2495836879.3670735, + "published": 2499000000.0, + "raked": 2495836879.2296968, + "raked_mean": 92270.6381309392, + "target_mean": 92270.63814289778, + "tilt_lambda": -6.041919161022214 + }, + "35": { + "attainable": true, + "normalised": 11760095740.114962, + "published": 11775000000.0, + "raked": 11760095738.732988, + "raked_mean": 180596.1931254058, + "target_mean": 180596.19313313495, + "tilt_lambda": -1.2141554059004156 + }, + "45": { + "attainable": true, + "normalised": 28386024724.038, + "published": 28422000000.0, + "raked": 28386024722.85784, + "raked_mean": 289127.62695059343, + "target_mean": 289127.6269161987, + "tilt_lambda": -0.07648477374735435 + }, + "55": { + "attainable": true, + "normalised": 38069751967.87279, + "published": 38118000000.0, + "raked": 38069751968.00012, + "raked_mean": 263893.4712562749, + "target_mean": 263893.4712433206, + "tilt_lambda": 0.3534790756321525 + }, + "65": { + "attainable": true, + "normalised": 24229292794.495876, + "published": 24260000000.0, + "raked": 24229292795.126102, + "raked_mean": 193482.55588304918, + "target_mean": 193482.55589071114, + "tilt_lambda": 0.21316023112280014 + }, + "75": { + "attainable": true, + "normalised": 13794517398.086441, + "published": 13812000000.0, + "raked": 13794517399.969437, + "raked_mean": 158269.9077664918, + "target_mean": 158269.90777369344, + "tilt_lambda": 0.5739417512797743 + } + }, + "gains_margin_max_abs_error": 1.8498967864204015e-10, + "income_bands_without_gainers": [], + "ipf_max_abs_margin_error": 2.817782330918425e-10, + "ipf_unattainable_margin_mass": { + "age": 0.0, + "gains": 0.0, + "joint": 0.0, + "region": 0.0 + }, + "ipf_zero_seed_cells": 0, + "joint_total_gains_at_cell_means": 119054115728.2721, + "joint_total_people": 551000.0000000001, + "rake_rounds": 500, + "rake_rounds_used": 9, + "rake_tolerance": 1e-09, + "region_margin": { + "london": { + "normalised": 106797.59862778733, + "published_individuals_basis": 106614.72602739726, + "raked": 106797.59861620239 + }, + "rest_of_england": { + "normalised": 209814.75128644946, + "published_individuals_basis": 209455.47945205483, + "raked": 209814.75130484806 + }, + "south_east_and_east_of_england": { + "normalised": 172955.4030874786, + "published_individuals_basis": 172659.2465753425, + "raked": 172955.40307525013 + }, + "wales_scotland_northern_ireland": { + "normalised": 61432.24699828475, + "published_individuals_basis": 61327.054794520554, + "raked": 61432.247003699486 + } + } + } + }, + "published_taxpayer_mass": 551000.0, + "region_rows": [ + { + "achieved_gains": 1904898302.2627306, + "achieved_people": 18561.66625916871, + "geography_id": "E12000001", + "published_gains_individuals_basis": 1497797150.3974364, + "published_people_individuals_basis": 11321.91780821918, + "region": "NORTH_EAST" + }, + { + "achieved_gains": 4052882587.3368716, + "achieved_people": 54312.49190938511, + "geography_id": "E12000002", + "published_gains_individuals_basis": 8790074083.38308, + "published_people_individuals_basis": 41513.69863013699, + "region": "NORTH_WEST" + }, + { + "achieved_gains": 4704597902.393557, + "achieved_people": 32820.76190476191, + "geography_id": "E12000003", + "published_gains_individuals_basis": 6970985861.949795, + "published_people_individuals_basis": 32078.767123287675, + "region": "YORKSHIRE" + }, + { + "achieved_gains": 5001087738.955614, + "achieved_people": 28860.553630363036, + "geography_id": "E12000004", + "published_gains_individuals_basis": 6299365751.358824, + "published_people_individuals_basis": 31135.273972602743, + "region": "EAST_MIDLANDS" + }, + { + "achieved_gains": 4564880731.360875, + "achieved_people": 38840.45, + "geography_id": "E12000005", + "published_gains_individuals_basis": 5890960774.765152, + "published_people_individuals_basis": 33022.260273972606, + "region": "WEST_MIDLANDS" + }, + { + "achieved_gains": 15150554377.86792, + "achieved_people": 74558.9515224359, + "geography_id": "E12000006", + "published_gains_individuals_basis": 11545870966.728456, + "published_people_individuals_basis": 58496.57534246576, + "region": "EAST_OF_ENGLAND" + }, + { + "achieved_gains": 34966159948.05541, + "achieved_people": 110004.42469879519, + "geography_id": "E12000007", + "published_gains_individuals_basis": 32519714615.602127, + "published_people_individuals_basis": 106614.72602739726, + "region": "LONDON" + }, + { + "achieved_gains": 22915817113.406914, + "achieved_people": 101333.7306743421, + "geography_id": "E12000008", + "published_gains_individuals_basis": 25606804690.69088, + "published_people_individuals_basis": 114162.67123287672, + "region": "SOUTH_EAST" + }, + { + "achieved_gains": 15650290355.762867, + "achieved_people": 38023.72703252033, + "geography_id": "E12000009", + "published_gains_individuals_basis": 10341263627.509504, + "published_people_individuals_basis": 60383.56164383562, + "region": "SOUTH_WEST" + }, + { + "achieved_gains": 2665913782.65701, + "achieved_people": 18991.326398520567, + "geography_id": "W92000004", + "published_gains_individuals_basis": 2358632410.6946497, + "published_people_individuals_basis": 16982.87671232877, + "region": "WALES" + }, + { + "achieved_gains": 5525266793.062844, + "achieved_people": 38359.90205843293, + "geography_id": "S92000003", + "published_gains_individuals_basis": 5680201325.83493, + "published_people_individuals_basis": 34909.24657534247, + "region": "SCOTLAND" + }, + { + "achieved_gains": 3307577384.452756, + "achieved_people": 7418.777546296296, + "geography_id": "N92000002", + "published_gains_individuals_basis": 1757265449.747086, + "published_people_individuals_basis": 9434.931506849316, + "region": "NORTHERN_IRELAND" + } + ], + "remainder_mass": 11608300.238168037, + "rows": [ + { + "achieved_gains": 810274969.3634601, + "achieved_people": 142730.48970604458, + "gain_lower_bound": 0, + "published_gains": 760000000.0, + "published_people": 133000.0 + }, + { + "achieved_gains": 1976318910.447181, + "achieved_people": 120943.26128737241, + "gain_lower_bound": 10000, + "published_gains": 2036000000.0, + "published_people": 123000.0 + }, + { + "achieved_gains": 3489165406.3426824, + "achieved_people": 98187.0743989673, + "gain_lower_bound": 25000, + "published_gains": 3516000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 5174430431.86768, + "achieved_people": 73397.1789374451, + "gain_lower_bound": 50000, + "published_gains": 5510000000.0, + "published_people": 78000.0 + }, + { + "achieved_gains": 9978094743.270247, + "achieved_people": 65021.46866177997, + "gain_lower_bound": 100000, + "published_gains": 9487000000.0, + "published_people": 61000.0 + }, + { + "achieved_gains": 8159954593.458556, + "achieved_people": 22929.07260774276, + "gain_lower_bound": 250000, + "published_gains": 8820000000.0, + "published_people": 25000.0 + }, + { + "achieved_gains": 9567847244.51404, + "achieved_people": 15026.627205190398, + "gain_lower_bound": 500000, + "published_gains": 11372000000.0, + "published_people": 16000.0 + }, + { + "achieved_gains": 15947868106.355972, + "achieved_people": 12686.558228888363, + "gain_lower_bound": 1000000, + "published_gains": 12806000000.0, + "published_people": 9000.0 + }, + { + "achieved_gains": 17269698553.965813, + "achieved_people": 6213.474703331448, + "gain_lower_bound": 2000000, + "published_gains": 16477000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 48036274057.98974, + "achieved_people": 4951.557898259706, + "gain_lower_bound": 5000000, + "published_gains": 48474000000.0, + "published_people": 3000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 562086.7636350221 + }, + "hmrc_cgt_asset_type_spine": { + "asset_type": { + "achieved_gains": { + "agricultural_commercial_industrial_land_buildings": 498241161.846527, + "listed_shares": 14042048861.29966, + "other_financial_assets": 21634742538.801983, + "other_non_financial_assets": 0.0, + "unlisted_shares": 72590290866.20761 + }, + "achieved_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.004580882455386959, + "listed_shares": 0.1291040969558192, + "other_financial_assets": 0.198912133544959, + "other_non_financial_assets": 0.0, + "unlisted_shares": 0.6674028870438348 + }, + "achieved_people": { + "agricultural_commercial_industrial_land_buildings": 956.0, + "listed_shares": 169175.6518999254, + "other_financial_assets": 149384.67315623866, + "other_non_financial_assets": 0.0, + "unlisted_shares": 39957.46376724959 + }, + "log_sigma": 1.5, + "median_anchor_gbp": { + "agricultural_commercial_industrial_land_buildings": 156692.3076923077, + "listed_shares": 5501.392757660167, + "other_financial_assets": 14663.62807657247, + "other_non_financial_assets": 143600.0, + "unlisted_shares": 114879.31034482758 + }, + "non_residential_gains_mass": 108765323428.15579, + "share_fit_iterations": 17, + "target_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.033817547937245784, + "listed_shares": 0.0983647381090728, + "other_financial_assets": 0.26705403834979663, + "other_non_financial_assets": 0.0476799203121109, + "unlisted_shares": 0.5530837552917739 + }, + "type_weights": { + "agricultural_commercial_industrial_land_buildings": 0.0007054231490589088, + "listed_shares": 0.6363748396491832, + "other_financial_assets": 0.34179175159556524, + "other_non_financial_assets": 0.001160859932381037, + "unlisted_shares": 0.019967125673811394 + } + }, + "composition_by_band": [ + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 0, + "listed_shares_gains": 255071267.8600291, + "listed_shares_people": 44881.14369545626, + "other_financial_assets_gains": 120980093.64367862, + "other_financial_assets_people": 19437.824571542358, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 434223607.8597523, + "residential_land_buildings_people": 78411.52143904597, + "unlisted_shares_gains": 0.0, + "unlisted_shares_people": 0.0 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 10000, + "listed_shares_gains": 678699475.310491, + "listed_shares_people": 41457.190401668246, + "other_financial_assets_gains": 459815089.2157215, + "other_financial_assets_people": 27717.517868967494, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 815112681.0354605, + "residential_land_buildings_people": 50817.303016736696, + "unlisted_shares_gains": 22691664.885508433, + "unlisted_shares_people": 951.25 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 25000, + "listed_shares_gains": 1190173984.5824144, + "listed_shares_people": 32971.52242916334, + "other_financial_assets_gains": 1049947741.6545182, + "other_financial_assets_people": 29863.25830518061, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1147512123.0282497, + "residential_land_buildings_people": 32927.314438265596, + "unlisted_shares_gains": 101531557.07749994, + "unlisted_shares_people": 2424.9792263577633 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 50000, + "listed_shares_gains": 1715843321.9668007, + "listed_shares_people": 24295.09863927963, + "other_financial_assets_gains": 1973237578.9609456, + "other_financial_assets_people": 27423.12744024186, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1408189304.031392, + "residential_land_buildings_people": 20283.463532145233, + "unlisted_shares_gains": 77160226.90854144, + "unlisted_shares_people": 1395.4893257783883 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 100000, + "listed_shares_gains": 2443895713.8305416, + "listed_shares_people": 16269.61522720464, + "other_financial_assets_gains": 4325809070.926108, + "other_financial_assets_people": 28397.223765359588, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1991493855.188731, + "residential_land_buildings_people": 13278.789052081609, + "unlisted_shares_gains": 1216896103.3248677, + "unlisted_shares_people": 7075.840617134124 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 142644278.53247014, + "agricultural_commercial_industrial_land_buildings_people": 556.0, + "gain_lower_bound": 250000, + "listed_shares_gains": 1596462873.2573385, + "listed_shares_people": 4615.921189692983, + "other_financial_assets_gains": 2970021320.588885, + "other_financial_assets_people": 7796.671189692983, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1143091472.2709286, + "residential_land_buildings_people": 3294.583333333333, + "unlisted_shares_gains": 2307734648.808934, + "unlisted_shares_people": 6665.896895023459 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 165148092.31840906, + "agricultural_commercial_industrial_land_buildings_people": 300.0, + "gain_lower_bound": 500000, + "listed_shares_gains": 677500273.6057909, + "listed_shares_people": 1123.6666666666667, + "other_financial_assets_gains": 3646908782.101829, + "other_financial_assets_people": 5806.210538523732, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1142791783.8504262, + "residential_land_buildings_people": 1866.6666666666665, + "unlisted_shares_gains": 3935498312.6375847, + "unlisted_shares_people": 5930.083333333333 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 190448790.99564782, + "agricultural_commercial_industrial_land_buildings_people": 100.0, + "gain_lower_bound": 1000000, + "listed_shares_gains": 4177920796.7279325, + "listed_shares_people": 3019.2436507936504, + "other_financial_assets_gains": 1147707197.2526062, + "other_financial_assets_people": 1004.0016203703703, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1394982083.9840407, + "residential_land_buildings_people": 1133.3333333333333, + "unlisted_shares_gains": 9036809237.395744, + "unlisted_shares_people": 7429.9796243910105 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 2000000, + "listed_shares_gains": 1306481154.1583204, + "listed_shares_people": 542.25, + "other_financial_assets_gains": 5940315664.45769, + "other_financial_assets_people": 1938.8378563596493, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1127453152.6525466, + "residential_land_buildings_people": 433.33333333333326, + "unlisted_shares_gains": 8895448582.697258, + "unlisted_shares_people": 3299.0535136384647 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 5000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 0.0, + "other_financial_assets_people": 0.0, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1039753525.5180687, + "residential_land_buildings_people": 166.66666666666666, + "unlisted_shares_gains": 46996520532.47167, + "unlisted_shares_people": 4784.891231593039 + } + ], + "facts": { + "annual_exempt_amount": 3000.0, + "resource": "hmrc_cgt_asset_type_facts.json", + "resource_sha256": "99123735ad0bc54cc5d8cf7b156f4feaa4bcf3ccf46d7b69377e1036b7251dcb", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f" + }, + "residential": { + "achieved_count": 202612.97481160844, + "achieved_gains": 11644603589.419598, + "achieved_rows": 314, + "count_bernoulli_sigma": 9709.034394469336, + "count_target_individuals_basis": 202630.0578034682, + "expected_count": 202630.0578034682, + "expected_gains": 12242481473.29794, + "gains_bernoulli_sigma": 3407331679.9448357, + "gains_target_individuals_basis": 12242481474.688189, + "liable_gains_mass": 120409927017.57538, + "liable_taxpayer_mass": 562086.7636350221, + "log_gain_centre": 10.415886667897583, + "logistic_intercept": -0.6570864091983906, + "logistic_slope": -0.4612179641844705, + "max_liable_weight": 3266.6666666666665, + "table8a_gains_total": 12914000000.0, + "table8a_taxpayers_total": 205000.0, + "table8b_individuals_gains_share": 0.9480007336757154, + "table8b_individuals_taxpayer_share": 0.9884393063583815 + }, + "seeds": { + "asset_type": 554, + "residential_flag": 553 + }, + "stage": "hmrc_cgt_asset_type_spine", + "value_counts": { + "agricultural_commercial_industrial_land_buildings": 3, + "listed_shares": 301, + "none": 91945, + "other_financial_assets": 276, + "other_non_financial_assets": 0, + "residential_land_buildings": 314, + "sub_aea": 20668, + "unlisted_shares": 83 + } + } + } +} diff --git a/docs/evidence/uk-cgt-725/receipt-weighted.json b/docs/evidence/uk-cgt-725/receipt-weighted.json new file mode 100644 index 0000000000..48e2dcfb52 --- /dev/null +++ b/docs/evidence/uk-cgt-725/receipt-weighted.json @@ -0,0 +1,2316 @@ +{ + "label": "-weighted", + "inputs": { + "control": "control.h5", + "candidate": "candidate-tilt3.h5" + }, + "control_provenance": { + "h5": "control.h5", + "build_commit": "d69a543e5d7f0ac01e73c9c6eb4645b0d4b8b9b6", + "h5_sha256": "c6909bdaa9d264e6b052ff7bb4d2e2a16fc5c8766038a2e298cb7ee8cb4a7c90", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": null, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "759e22ba7afdaad9b0411e051508d550e7f24c03898db8829d32f28b2a06039e", + "source_vintages": { + "frs": "2024_25" + } + }, + "control_headline": { + "liable_taxpayers": 357787.8291737345, + "liable_gains": 63762165202.22745, + "share_65_plus_of_taxpayers": 0.23074415456851116, + "share_65_plus_of_gains": 0.29014226804959764, + "share_65_plus_of_2m_plus_gainers": 0.21851480088389827, + "share_65_plus_of_2m_plus_gains": 0.38325563962979103, + "top_2m_plus_taxpayers": 4400.922330097088, + "top_2m_plus_gains": 31733417691.922935 + }, + "control_stage_evidence": { + "hmrc_cgt_gains_spine": { + "published_taxpayer_mass": 359000.0, + "remainder_mass": 11695599.172629325, + "rows": [ + { + "achieved_gains": 492030045.77188396, + "achieved_people": 61716.26528400545, + "gain_lower_bound": 0, + "published_gains": 462000000.0, + "published_people": 63000.0 + }, + { + "achieved_gains": 1655366280.7861395, + "achieved_people": 99394.33220162481, + "gain_lower_bound": 10000, + "published_gains": 1669000000.0, + "published_people": 101000.0 + }, + { + "achieved_gains": 2518693708.19442, + "achieved_people": 74570.58235379534, + "gain_lower_bound": 25000, + "published_gains": 2645000000.0, + "published_people": 74000.0 + }, + { + "achieved_gains": 3590296848.5971456, + "achieved_people": 53117.88027693833, + "gain_lower_bound": 50000, + "published_gains": 3731000000.0, + "published_people": 53000.0 + }, + { + "achieved_gains": 5903553980.984594, + "achieved_people": 36265.90857274244, + "gain_lower_bound": 100000, + "published_gains": 5649000000.0, + "published_people": 37000.0 + }, + { + "achieved_gains": 4941119445.462856, + "achieved_people": 14025.627064255188, + "gain_lower_bound": 250000, + "published_gains": 4766000000.0, + "published_people": 14000.0 + }, + { + "achieved_gains": 5870012433.427295, + "achieved_people": 9395.721613545815, + "gain_lower_bound": 500000, + "published_gains": 5705000000.0, + "published_people": 8000.0 + }, + { + "achieved_gains": 7057674767.080178, + "achieved_people": 4900.589476730021, + "gain_lower_bound": 1000000, + "published_gains": 6390000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 9550987003.01075, + "achieved_people": 2905.922330097087, + "gain_lower_bound": 2000000, + "published_gains": 9189000000.0, + "published_people": 3000.0 + }, + { + "achieved_gains": 22182430688.912186, + "achieved_people": 1495.0, + "gain_lower_bound": 5000000, + "published_gains": 22714000000.0, + "published_people": 2000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 357787.8291737345 + } + }, + "candidate_provenance": { + "h5": "candidate-tilt3.h5", + "build_commit": "9bd4d8cea10fe9e8608ff8a3497b2d56c95022f4", + "h5_sha256": "f3dbbeb7e1303c08d980ea90434e5a42a591cf95742b9d481e84b5eb17ff6390", + "time_period": "2024", + "declared_seeds": { + "age_tail": { + "age": 0 + }, + "cgt_band_donors": { + "stack_band_donor_households": 1 + }, + "cgt_incidence_clone": { + "cgt_prior_amount": 0 + }, + "etb_services": { + "etb_services": 0 + }, + "etb_vat": { + "etb_vat": 0 + }, + "frs_brma": { + "brma": 0 + }, + "frs_household_draws": { + "household_owns_tv": 0, + "main_residential_property_purchased_is_first_home": 0, + "property_purchased": 0, + "would_evade_tv_licence_fee": 0 + }, + "frs_person_draws": { + "attends_private_school_random_draw": 0, + "would_claim_marriage_allowance": 0, + "would_claim_scp": 0 + }, + "frs_take_up": { + "child_benefit_opts_out": 0, + "maximum_extended_childcare_hours_usage": 0, + "would_claim_child_benefit": 0, + "would_claim_extended_childcare": 0, + "would_claim_pc": 0, + "would_claim_targeted_childcare": 0, + "would_claim_tfc": 0, + "would_claim_uc": 0, + "would_claim_universal_childcare": 0 + }, + "hmrc_cgt_asset_type_spine": { + "assign_main_asset_type": 554, + "assign_residential_property_flag": 553 + }, + "hmrc_cgt_gains_spine": { + "within_band_draws": 552 + }, + "hmrc_spi_income_spine": { + "donor_bootstrap": 42, + "stage1": 42, + "stage2": 43 + }, + "lcfs_consumption": { + "bridge_donor_column_via_qrf": 0, + "has_fuel_consumption": 0, + "lcfs_consumption": 0 + }, + "salary_sacrifice": { + "salary_sacrifice": 42, + "salary_sacrifice_conversion": 2024 + }, + "spi_support_channel": { + "stack_zero_weight_donors": 42 + }, + "student_loans": { + "student_loan_plan_2": 42, + "student_loan_plan_5": 42 + }, + "uc_capital_coherence": { + "frs_benunit_capital": 0 + }, + "uc_deduction_attributes": { + "uc_deduction_random_draw": 0, + "uc_deduction_type_random_draw": 0 + }, + "uc_reporter_redraw": { + "universal_credit_reported": 44 + }, + "was_wealth": { + "was_wealth": 0 + } + }, + "sampling": null, + "stochastic_contract_sha256": "c0c506e18e8c0537b715a6710a72452ee79116e9f7ec9f915b9e2d101883573b", + "uk_frame_content_identity": "71e73288d4c553af9469e13300485a9ae896e1204ccc7c507ee3b7097cefe938", + "source_vintages": { + "frs": "2024_25" + }, + "chronicle_feed": { + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797" + } + }, + "candidate_headline": { + "liable_taxpayers": 557419.6331493518, + "liable_gains": 134292331705.11432, + "share_65_plus_of_taxpayers": 0.3856406031494745, + "share_65_plus_of_gains": 0.32428762553267937, + "share_65_plus_of_2m_plus_gainers": 0.23054687691517, + "share_65_plus_of_2m_plus_gains": 0.3198067193947638, + "top_2m_plus_taxpayers": 9565.633738506189, + "top_2m_plus_gains": 75939308939.01144 + }, + "candidate_stage_evidence": { + "hmrc_cgt_gains_spine": { + "age_by_band_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 6041897.810593854, + "achieved_people": 1689.3078982597056, + "age_lower_bound": 16, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 8518062.92909781, + "achieved_people": 826.0016203703703, + "age_lower_bound": 16, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 12854984.763790967, + "achieved_people": 514.0, + "age_lower_bound": 16, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 29511528.694167927, + "achieved_people": 468.25, + "age_lower_bound": 16, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 122971149.56542675, + "achieved_people": 1000.3269841269841, + "age_lower_bound": 16, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 124287539.91510083, + "achieved_people": 485.22018030513175, + "age_lower_bound": 16, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 354905971.1668099, + "achieved_people": 176.00162037037038, + "age_lower_bound": 16, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 16, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 54504508.78372228, + "achieved_people": 6464.721613545817, + "age_lower_bound": 25, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 140487025.351172, + "achieved_people": 6579.816309905373, + "age_lower_bound": 25, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 253434362.30769676, + "achieved_people": 5758.559518630076, + "age_lower_bound": 25, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 536120742.85053146, + "achieved_people": 6683.149643238706, + "age_lower_bound": 25, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 477020935.0701907, + "achieved_people": 2677.466746794872, + "age_lower_bound": 25, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 212895501.32732242, + "achieved_people": 433.3333333333333, + "age_lower_bound": 25, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 615068666.4141777, + "achieved_people": 1004.1666666666666, + "age_lower_bound": 25, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 519846514.43076897, + "achieved_people": 266.66666666666663, + "age_lower_bound": 25, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 25, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 122659376.15794292, + "achieved_people": 15553.43180834492, + "age_lower_bound": 35, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 291557866.43031096, + "achieved_people": 14185.373869672581, + "age_lower_bound": 35, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 497735011.45974743, + "achieved_people": 11463.520805108676, + "age_lower_bound": 35, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 578709989.3056127, + "achieved_people": 6758.163894994827, + "age_lower_bound": 35, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1489699018.6349506, + "achieved_people": 8301.576893187506, + "age_lower_bound": 35, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1482763660.723838, + "achieved_people": 4501.615796519411, + "age_lower_bound": 35, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 2336473438.329837, + "achieved_people": 3088.2216135458166, + "age_lower_bound": 35, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 2983040600.5169067, + "achieved_people": 2106.5, + "age_lower_bound": 35, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 2970013092.0964165, + "achieved_people": 754.9166666666666, + "age_lower_bound": 35, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 9127376838.491219, + "achieved_people": 806.0833333333334, + "age_lower_bound": 35, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 160938562.40785787, + "achieved_people": 23531.55184145305, + "age_lower_bound": 45, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 420970092.1709924, + "achieved_people": 21400.818748858037, + "age_lower_bound": 45, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 624116074.2690834, + "achieved_people": 16178.8855654671, + "age_lower_bound": 45, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1026049983.5192575, + "achieved_people": 13209.954785484557, + "age_lower_bound": 45, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1917961258.2044516, + "achieved_people": 11345.333080051272, + "age_lower_bound": 45, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1522729184.8971443, + "achieved_people": 3960.454986943253, + "age_lower_bound": 45, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1754621578.7166905, + "achieved_people": 2531.9166666666665, + "age_lower_bound": 45, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 2576746283.5303764, + "achieved_people": 1578.75, + "age_lower_bound": 45, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 6495404749.3864975, + "achieved_people": 2042.5833333333333, + "age_lower_bound": 45, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 12687587673.370316, + "achieved_people": 785.2201803051317, + "age_lower_bound": 45, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 168204197.03529787, + "achieved_people": 33437.54645287425, + "age_lower_bound": 55, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 487842556.26346254, + "achieved_people": 31081.823946566135, + "age_lower_bound": 55, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 852269029.4936154, + "achieved_people": 24129.190026113865, + "age_lower_bound": 55, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1347665184.127625, + "achieved_people": 19437.990586153355, + "age_lower_bound": 55, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 2518291893.7912354, + "achieved_people": 16100.31222247168, + "age_lower_bound": 55, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 2522028215.9157076, + "achieved_people": 6757.057898259705, + "age_lower_bound": 55, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 3960009277.052034, + "achieved_people": 6048.1526402640275, + "age_lower_bound": 55, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 4332936901.927364, + "achieved_people": 3556.551549053356, + "age_lower_bound": 55, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 4389849591.145952, + "achieved_people": 1572.0, + "age_lower_bound": 55, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 15628269758.463531, + "achieved_people": 1223.5016203703703, + "age_lower_bound": 55, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 117554767.02077486, + "achieved_people": 28560.596586417807, + "age_lower_bound": 65, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 405179494.65389824, + "achieved_people": 31310.641408828764, + "age_lower_bound": 65, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 688880370.8697364, + "achieved_people": 23111.207616244676, + "age_lower_bound": 65, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 1118697939.6793964, + "achieved_people": 18171.39130533331, + "age_lower_bound": 65, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1583365045.3983185, + "achieved_people": 12632.197765775722, + "age_lower_bound": 65, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1805228218.3945887, + "achieved_people": 4789.00162037037, + "age_lower_bound": 65, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1409139515.7885864, + "achieved_people": 2359.666666666667, + "age_lower_bound": 65, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 5181849022.519027, + "achieved_people": 4570.421189692982, + "age_lower_bound": 65, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 1567841165.087803, + "achieved_people": 600.0, + "age_lower_bound": 65, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 2680509603.532201, + "achieved_people": 305.0, + "age_lower_bound": 65, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 88094665.66495767, + "achieved_people": 16513.093342654323, + "age_lower_bound": 75, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 277597076.40338844, + "achieved_people": 17119.865191829762, + "age_lower_bound": 75, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 323128541.92663467, + "achieved_people": 9199.161175091856, + "age_lower_bound": 75, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 666277337.5194769, + "achieved_people": 10024.423842522825, + "age_lower_bound": 75, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 1089249191.4404345, + "achieved_people": 6646.345140160439, + "age_lower_bound": 75, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 1165663351.2655838, + "achieved_people": 3339.291271657142, + "age_lower_bound": 75, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 1074331556.2337804, + "achieved_people": 1776.0016203703703, + "age_lower_bound": 75, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 491530643.1773982, + "achieved_people": 366.66666666666663, + "age_lower_bound": 75, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 2298097856.132065, + "achieved_people": 1000.3269841269841, + "age_lower_bound": 75, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 17218681856.45749, + "achieved_people": 100.0, + "age_lower_bound": 75, + "gain_lower_bound": 5000000 + }, + { + "achieved_gains": 30420498.075348217, + "achieved_people": 5170.694050326243, + "age_lower_bound": 85, + "gain_lower_bound": 0 + }, + { + "achieved_gains": 59630743.07642249, + "achieved_people": 3627.338996763754, + "age_lower_bound": 85, + "gain_lower_bound": 10000 + }, + { + "achieved_gains": 275067347.14325374, + "achieved_people": 7329.329106441938, + "age_lower_bound": 85, + "gain_lower_bound": 25000 + }, + { + "achieved_gains": 157563794.03168306, + "achieved_people": 2369.506143396686, + "age_lower_bound": 85, + "gain_lower_bound": 50000 + }, + { + "achieved_gains": 309726486.4508216, + "achieved_people": 1965.5535136384651, + "age_lower_bound": 85, + "gain_lower_bound": 100000 + }, + { + "achieved_gains": 604519594.5842562, + "achieved_people": 1405.9223300970875, + "age_lower_bound": 85, + "gain_lower_bound": 250000 + }, + { + "achieved_gains": 183542134.6928604, + "achieved_people": 300.0, + "age_lower_bound": 85, + "gain_lower_bound": 500000 + }, + { + "achieved_gains": 157202774.9971318, + "achieved_people": 100.0, + "age_lower_bound": 85, + "gain_lower_bound": 1000000 + }, + { + "achieved_gains": 520770783.68115747, + "achieved_people": 200.0, + "age_lower_bound": 85, + "gain_lower_bound": 2000000 + }, + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 85, + "gain_lower_bound": 5000000 + } + ], + "age_rows": [ + { + "achieved_gains": 0.0, + "achieved_people": 0.0, + "age_lower_bound": 0, + "published_gains": 54000000.0, + "published_people": 1000.0 + }, + { + "achieved_gains": 659091134.844988, + "achieved_people": 5159.108303432562, + "age_lower_bound": 16, + "published_gains": 319000000.0, + "published_people": 4000.0 + }, + { + "achieved_gains": 2809378256.535582, + "achieved_people": 29867.88049878151, + "age_lower_bound": 25, + "published_gains": 2499000000.0, + "published_people": 27000.0 + }, + { + "achieved_gains": 21880028892.146782, + "achieved_people": 67519.40468137375, + "age_lower_bound": 35, + "published_gains": 11775000000.0, + "published_people": 65000.0 + }, + { + "achieved_gains": 29187125440.47267, + "achieved_people": 96565.46918856239, + "age_lower_bound": 45, + "published_gains": 28422000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 36207366605.21582, + "achieved_people": 143344.12694212678, + "age_lower_bound": 55, + "published_gains": 38118000000.0, + "published_people": 144000.0 + }, + { + "achieved_gains": 16558245142.944328, + "achieved_people": 126410.12415933031, + "age_lower_bound": 65, + "published_gains": 24260000000.0, + "published_people": 125000.0 + }, + { + "achieved_gains": 24692652076.221214, + "achieved_people": 66085.17523508037, + "age_lower_bound": 75, + "published_gains": 11736000000.0, + "published_people": 68000.0 + }, + { + "achieved_gains": 2298444156.732935, + "achieved_people": 22468.344140664172, + "age_lower_bound": 85, + "published_gains": 2076000000.0, + "published_people": 19000.0 + } + ], + "allocation": { + "band_rows": [ + { + "gain_lower_bound": 0, + "gains_difference": -1000000.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 759000000.0, + "published_people": 133000.0, + "table2_1a_gains": 760000000.0, + "table2_1a_people": 133000.0, + "target_gains_at_cell_means": 758976349.1549579, + "target_people": 132976.11086837502 + }, + { + "gain_lower_bound": 10000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 2036000000.0, + "published_people": 123000.0, + "table2_1a_gains": 2036000000.0, + "table2_1a_people": 123000.0, + "target_gains_at_cell_means": 2033975331.6882389, + "target_people": 122932.62720850299 + }, + { + "gain_lower_bound": 25000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 3516000000.0, + "published_people": 98000.0, + "table2_1a_gains": 3516000000.0, + "table2_1a_people": 98000.0, + "target_gains_at_cell_means": 3514051553.988366, + "target_people": 96927.5289296759 + }, + { + "gain_lower_bound": 50000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 5510000000.0, + "published_people": 78000.0, + "table2_1a_gains": 5510000000.0, + "table2_1a_people": 78000.0, + "target_gains_at_cell_means": 5508271180.542232, + "target_people": 77967.24136638598 + }, + { + "gain_lower_bound": 100000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 9487000000.0, + "published_people": 61000.0, + "table2_1a_gains": 9487000000.0, + "table2_1a_people": 61000.0, + "target_gains_at_cell_means": 9489202603.948486, + "target_people": 60975.20777135002 + }, + { + "gain_lower_bound": 250000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 8820000000.0, + "published_people": 25000.0, + "table2_1a_gains": 8820000000.0, + "table2_1a_people": 25000.0, + "target_gains_at_cell_means": 8823899082.660036, + "target_people": 24000.083759788773 + }, + { + "gain_lower_bound": 500000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 11372000000.0, + "published_people": 16000.0, + "table2_1a_gains": 11372000000.0, + "table2_1a_people": 16000.0, + "target_gains_at_cell_means": 11376054216.655891, + "target_people": 17000.440850376017 + }, + { + "gain_lower_bound": 1000000, + "gains_difference": 0.0, + "means_repaired": 2, + "people_difference": 0.0, + "published_gains": 12806000000.0, + "published_people": 9000.0, + "table2_1a_gains": 12806000000.0, + "table2_1a_people": 9000.0, + "target_gains_at_cell_means": 13002442818.185097, + "target_people": 9979.510578547051 + }, + { + "gain_lower_bound": 2000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 16477000000.0, + "published_people": 5000.0, + "table2_1a_gains": 16477000000.0, + "table2_1a_people": 5000.0, + "target_gains_at_cell_means": 16475121641.489286, + "target_people": 5580.580680186042 + }, + { + "gain_lower_bound": 5000000, + "gains_difference": 0.0, + "means_repaired": 0, + "people_difference": 0.0, + "published_gains": 48474000000.0, + "published_people": 3000.0, + "table2_1a_gains": 48474000000.0, + "table2_1a_people": 3000.0, + "target_gains_at_cell_means": 48072120949.95949, + "target_people": 2660.6679868122214 + } + ], + "conditioning": { + "age_group_lower_bounds": [ + 16, + 25, + 35, + 45, + 55, + 65, + 75 + ], + "fallback_policy": "pooled_income_band_rank_walk", + "joint_record_set_prefix": "hmrc.cgt_table3_2026.ty2024.", + "joint_resource": "hmrc_cgt_conditioning_facts.json", + "joint_resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "joint_source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "joint_source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "joint_vintage": "2024-25", + "region_groups": { + "EAST_MIDLANDS": "rest_of_england", + "EAST_OF_ENGLAND": "south_east_and_east_of_england", + "LONDON": "london", + "NORTHERN_IRELAND": "wales_scotland_northern_ireland", + "NORTH_EAST": "rest_of_england", + "NORTH_WEST": "rest_of_england", + "SCOTLAND": "wales_scotland_northern_ireland", + "SOUTH_EAST": "south_east_and_east_of_england", + "SOUTH_WEST": "rest_of_england", + "WALES": "wales_scotland_northern_ireland", + "WEST_MIDLANDS": "rest_of_england", + "YORKSHIRE": "rest_of_england" + }, + "resource": "hmrc_cgt_conditioning_facts.json", + "resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "vintage_tax_year": 2024 + }, + "fallback_released_mass": 1860.5, + "fallback_share_by_band": { + "0": 0.0, + "10000": 0.0, + "100000": 0.013186281602981395, + "1000000": 0.0, + "2000000": 0.0, + "25000": 0.00907775405438701, + "250000": 0.0, + "50000": 0.0, + "500000": 0.0, + "5000000": 0.05396289302255744 + }, + "joint_rows": [ + { + "achieved_fallback": 0.0, + "achieved_pass1": 70956.62129168297, + "gain_lower_bound": 0, + "income_lower_bound": 0, + "mean": 5830.985915492958, + "mean_repaired": false, + "residual": 11.971724241695483, + "target_people": 70968.59301592466 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 12816.327648268583, + "gain_lower_bound": 0, + "income_lower_bound": 37700, + "mean": 5461.538461538462, + "mean_repaired": false, + "residual": -146.5855898217833, + "target_people": 12669.7420584468 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 23113.557341034364, + "gain_lower_bound": 0, + "income_lower_bound": 50000, + "mean": 5565.217391304348, + "mean_repaired": false, + "residual": 85.22398661773695, + "target_people": 23198.7813276521 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4960.392799352751, + "gain_lower_bound": 0, + "income_lower_bound": 100000, + "mean": 5600.0, + "mean_repaired": false, + "residual": -54.18619857237536, + "target_people": 4906.206600780376 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 8498.738134005318, + "gain_lower_bound": 0, + "income_lower_bound": 125140, + "mean": 5750.0, + "mean_repaired": false, + "residual": -59.60106208504294, + "target_people": 8439.137071920275 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 10575.306379532127, + "gain_lower_bound": 0, + "income_lower_bound": 200000, + "mean": 5538.461538461538, + "mean_repaired": false, + "residual": 2218.3444141186665, + "target_people": 12793.650793650793 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 72356.61245760461, + "gain_lower_bound": 10000, + "income_lower_bound": 0, + "mean": 16597.222222222223, + "mean_repaired": false, + "residual": -388.46179356833454, + "target_people": 71968.15066403628 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 11274.28857036622, + "gain_lower_bound": 10000, + "income_lower_bound": 37700, + "mean": 16272.727272727272, + "mean_repaired": false, + "residual": -553.7375978343116, + "target_people": 10720.550972531908 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 19284.06523763772, + "gain_lower_bound": 10000, + "income_lower_bound": 50000, + "mean": 16736.842105263157, + "mean_repaired": false, + "residual": -119.85457566424157, + "target_people": 19164.210661973477 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4508.321229757085, + "gain_lower_bound": 10000, + "income_lower_bound": 100000, + "mean": 16250.0, + "mean_repaired": false, + "residual": -583.3559491327846, + "target_people": 3924.9652806243007 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 6132.639900582853, + "gain_lower_bound": 10000, + "income_lower_bound": 125140, + "mean": 16333.333333333334, + "mean_repaired": false, + "residual": 196.71290335735284, + "target_people": 6329.352803940206 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 12575.752696846283, + "gain_lower_bound": 10000, + "income_lower_bound": 200000, + "mean": 16363.636363636364, + "mean_repaired": false, + "residual": -1750.3558714494575, + "target_people": 10825.396825396825 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 59590.82225172085, + "gain_lower_bound": 25000, + "income_lower_bound": 0, + "mean": 35866.666666666664, + "mean_repaired": false, + "residual": 382.6366349760574, + "target_people": 59973.458886696906 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 7709.6004290047995, + "gain_lower_bound": 25000, + "income_lower_bound": 37700, + "mean": 37875.0, + "mean_repaired": false, + "residual": 87.16391465476954, + "target_people": 7796.764343659569 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 14095.803414000613, + "gain_lower_bound": 25000, + "income_lower_bound": 50000, + "mean": 37071.42857142857, + "mean_repaired": false, + "residual": 25.193915874579034, + "target_people": 14120.997329875192 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3301.076984126984, + "gain_lower_bound": 25000, + "income_lower_bound": 100000, + "mean": 33666.666666666664, + "mean_repaired": false, + "residual": -357.3530236587585, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4498.952720392232, + "gain_lower_bound": 25000, + "income_lower_bound": 125140, + "mean": 39250.0, + "mean_repaired": false, + "residual": -279.3841844320941, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 886.75, + "achieved_pass1": 7600.848013852711, + "gain_lower_bound": 25000, + "income_lower_bound": 200000, + "mean": 35500.0, + "mean_repaired": false, + "residual": -614.5821408368383, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 44193.335718191476, + "gain_lower_bound": 50000, + "income_lower_bound": 0, + "mean": 70204.54545454546, + "mean_repaired": false, + "residual": -212.79920128040976, + "target_people": 43980.53651691107 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 6841.299035424199, + "gain_lower_bound": 50000, + "income_lower_bound": 37700, + "mean": 69285.71428571429, + "mean_repaired": false, + "residual": -19.13023472207624, + "target_people": 6822.168800702123 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 13211.887605772112, + "gain_lower_bound": 50000, + "income_lower_bound": 50000, + "mean": 71307.69230769231, + "mean_repaired": false, + "residual": -99.53294231657674, + "target_people": 13112.354663455535 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3002.0667067307695, + "gain_lower_bound": 50000, + "income_lower_bound": 100000, + "mean": 65333.333333333336, + "mean_repaired": false, + "residual": -58.3427462625441, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4211.1532786460675, + "gain_lower_bound": 50000, + "income_lower_bound": 125140, + "mean": 76000.0, + "mean_repaired": false, + "residual": 8.415257314070004, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5663.087856359649, + "gain_lower_bound": 50000, + "income_lower_bound": 200000, + "mean": 72571.42857142857, + "mean_repaired": false, + "residual": 1225.8010325292398, + "target_people": 6888.888888888889 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 27931.881017286236, + "gain_lower_bound": 100000, + "income_lower_bound": 0, + "mean": 154750.0, + "mean_repaired": false, + "residual": 55.733129838987225, + "target_people": 27987.614147125223 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5903.9866262365895, + "gain_lower_bound": 100000, + "income_lower_bound": 37700, + "mean": 152166.66666666666, + "mean_repaired": false, + "residual": -56.41336849191248, + "target_people": 5847.573257744677 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 12062.992408552705, + "gain_lower_bound": 100000, + "income_lower_bound": 50000, + "mean": 153666.66666666666, + "mean_repaired": false, + "residual": 40.71958848317445, + "target_people": 12103.71199703588 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3056.058036664781, + "gain_lower_bound": 100000, + "income_lower_bound": 100000, + "mean": 143666.66666666666, + "mean_repaired": false, + "residual": -112.33407619655554, + "target_people": 2943.7239604682254 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4539.048502847275, + "gain_lower_bound": 100000, + "income_lower_bound": 125140, + "mean": 179000.0, + "mean_repaired": false, + "residual": -319.4799668871374, + "target_people": 4219.5685359601375 + }, + { + "achieved_fallback": 800.0, + "achieved_pass1": 6375.145754619355, + "gain_lower_bound": 100000, + "income_lower_bound": 200000, + "mean": 156250.0, + "mean_repaired": false, + "residual": 697.8701183965177, + "target_people": 7873.015873015873 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 9030.333025443988, + "gain_lower_bound": 250000, + "income_lower_bound": 0, + "mean": 343444.44444444444, + "mean_repaired": false, + "residual": -34.31419243945311, + "target_people": 8996.018833004535 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2671.9073238648934, + "gain_lower_bound": 250000, + "income_lower_bound": 37700, + "mean": 410500.0, + "mean_repaired": false, + "residual": -722.7162379500012, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4987.057898259705, + "gain_lower_bound": 250000, + "income_lower_bound": 50000, + "mean": 383200.0, + "mean_repaired": false, + "residual": 56.155433838577665, + "target_people": 5043.213332098283 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1136.5833333333335, + "gain_lower_bound": 250000, + "income_lower_bound": 100000, + "mean": 486000.0, + "mean_repaired": false, + "residual": -155.3420131772583, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2653.8167067307695, + "gain_lower_bound": 250000, + "income_lower_bound": 125140, + "mean": 420000.0, + "mean_repaired": false, + "residual": -544.0324387507007, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 5192.199129852745, + "gain_lower_bound": 250000, + "income_lower_bound": 200000, + "mean": 333000.0, + "mean_repaired": false, + "residual": -271.5642092178241, + "target_people": 4920.6349206349205 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4933.333333333334, + "gain_lower_bound": 500000, + "income_lower_bound": 0, + "mean": 639000.0, + "mean_repaired": false, + "residual": 64.45490722474096, + "target_people": 4997.788240558075 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1969.25, + "gain_lower_bound": 500000, + "income_lower_bound": 37700, + "mean": 543500.0, + "mean_repaired": false, + "residual": -20.058914085107745, + "target_people": 1949.1910859148923 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3165.654260634397, + "gain_lower_bound": 500000, + "income_lower_bound": 50000, + "mean": 830333.3333333334, + "mean_repaired": false, + "residual": -139.72626137542693, + "target_people": 3025.92799925897 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1035.75, + "gain_lower_bound": 500000, + "income_lower_bound": 100000, + "mean": 715000.0, + "mean_repaired": false, + "residual": -54.508679843924824, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 2056.4166666666665, + "gain_lower_bound": 500000, + "income_lower_bound": 125140, + "mean": 612000.0, + "mean_repaired": false, + "residual": 53.36760131340225, + "target_people": 2109.7842679800688 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 3947.7216135458166, + "gain_lower_bound": 500000, + "income_lower_bound": 200000, + "mean": 665000.0, + "mean_repaired": false, + "residual": -11.213677037880188, + "target_people": 3936.5079365079364 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1900.0, + "gain_lower_bound": 1000000, + "income_lower_bound": 0, + "mean": 1357500.0, + "mean_repaired": false, + "residual": 99.11529622323019, + "target_people": 1999.1152962232302 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1427.0578982597056, + "gain_lower_bound": 1000000, + "income_lower_bound": 37700, + "mean": 1020000.0, + "mean_repaired": true, + "residual": -452.4623553022594, + "target_people": 974.5955429574461 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1951.0, + "gain_lower_bound": 1000000, + "income_lower_bound": 50000, + "mean": 1427000.0, + "mean_repaired": false, + "residual": 66.28533283931324, + "target_people": 2017.2853328393132 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1496.6711896929824, + "gain_lower_bound": 1000000, + "income_lower_bound": 100000, + "mean": 1020000.0, + "mean_repaired": true, + "residual": -515.4298695369072, + "target_people": 981.2413201560752 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1246.6666666666665, + "gain_lower_bound": 1000000, + "income_lower_bound": 125140, + "mean": 1507000.0, + "mean_repaired": false, + "residual": -191.77453267663213, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 4524.160317460317, + "gain_lower_bound": 1000000, + "income_lower_bound": 200000, + "mean": 1295666.6666666667, + "mean_repaired": false, + "residual": -1571.7793650793647, + "target_people": 2952.3809523809523 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 942.668287037037, + "gain_lower_bound": 2000000, + "income_lower_bound": 0, + "mean": 2279000.0, + "mean_repaired": false, + "residual": 56.88936107457812, + "target_people": 999.5576481116151 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 200.0, + "gain_lower_bound": 2000000, + "income_lower_bound": 37700, + "mean": 3295400.0, + "mean_repaired": false, + "residual": 38.07410696144447, + "target_people": 238.07410696144447 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1900.3269841269841, + "gain_lower_bound": 2000000, + "income_lower_bound": 50000, + "mean": 2882000.0, + "mean_repaired": false, + "residual": -891.6843177073275, + "target_people": 1008.6426664196566 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 353.41666666666663, + "gain_lower_bound": 2000000, + "income_lower_bound": 100000, + "mean": 3295400.0, + "mean_repaired": false, + "residual": -42.256510217343816, + "target_people": 311.1601564493228 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1055.8333333333333, + "gain_lower_bound": 2000000, + "income_lower_bound": 125140, + "mean": 2325000.0, + "mean_repaired": false, + "residual": -0.9411993432988766, + "target_people": 1054.8921339900344 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 1893.5833333333333, + "gain_lower_bound": 2000000, + "income_lower_bound": 200000, + "mean": 3570500.0, + "mean_repaired": false, + "residual": 74.67063492063494, + "target_people": 1968.2539682539682 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 485.22018030513175, + "gain_lower_bound": 5000000, + "income_lower_bound": 0, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -356.053428896724, + "target_people": 129.16675140840775 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 100.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 37700, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -67.85125483374682, + "target_people": 32.14874516625317 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 300.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 50000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -95.12531060840988, + "target_people": 204.87468939159012 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 0.0, + "gain_lower_bound": 5000000, + "income_lower_bound": 100000, + "mean": 16158000.0, + "mean_repaired": false, + "residual": 82.7721202730988, + "target_people": 82.7721202730988 + }, + { + "achieved_fallback": 0.0, + "achieved_pass1": 275.00162037037035, + "gain_lower_bound": 5000000, + "income_lower_bound": 125140, + "mean": 16158000.0, + "mean_repaired": false, + "residual": -31.549908051467156, + "target_people": 243.4517123189032 + }, + { + "achieved_fallback": 173.75, + "achieved_pass1": 1885.8333333333335, + "gain_lower_bound": 5000000, + "income_lower_bound": 200000, + "mean": 18739500.0, + "mean_repaired": false, + "residual": -91.32936507936529, + "target_people": 1968.2539682539682 + } + ], + "rake": { + "age_margin": { + "16": { + "normalised": 4007.272727272728, + "published": 4000.0, + "raked": 4007.27272840189 + }, + "25": { + "normalised": 27049.09090909091, + "published": 27000.0, + "raked": 27049.090911107716 + }, + "35": { + "normalised": 65118.18181818182, + "published": 65000.0, + "raked": 65118.18181331646 + }, + "45": { + "normalised": 98178.18181818182, + "published": 98000.0, + "raked": 98178.18180242073 + }, + "55": { + "normalised": 144261.8181818182, + "published": 144000.0, + "raked": 144261.81817521903 + }, + "65": { + "normalised": 125227.27272727275, + "published": 125000.0, + "raked": 125227.27273548905 + }, + "75": { + "normalised": 87158.18181818182, + "published": 87000.0, + "raked": 87158.18183404508 + } + }, + "gains_margin": { + "16": { + "attainable": true, + "normalised": 318596224.2969573, + "published": 319000000.0, + "raked": 318596224.3558943, + "raked_mean": 79504.5024257561, + "target_mean": 79504.50243345123, + "tilt_lambda": -4.4257345128760575 + }, + "25": { + "attainable": true, + "normalised": 2495836879.3670735, + "published": 2499000000.0, + "raked": 2495836879.2296968, + "raked_mean": 92270.6381309392, + "target_mean": 92270.63814289778, + "tilt_lambda": -6.041919161022214 + }, + "35": { + "attainable": true, + "normalised": 11760095740.114962, + "published": 11775000000.0, + "raked": 11760095738.732988, + "raked_mean": 180596.1931254058, + "target_mean": 180596.19313313495, + "tilt_lambda": -1.2141554059004156 + }, + "45": { + "attainable": true, + "normalised": 28386024724.038, + "published": 28422000000.0, + "raked": 28386024722.85784, + "raked_mean": 289127.62695059343, + "target_mean": 289127.6269161987, + "tilt_lambda": -0.07648477374735435 + }, + "55": { + "attainable": true, + "normalised": 38069751967.87279, + "published": 38118000000.0, + "raked": 38069751968.00012, + "raked_mean": 263893.4712562749, + "target_mean": 263893.4712433206, + "tilt_lambda": 0.3534790756321525 + }, + "65": { + "attainable": true, + "normalised": 24229292794.495876, + "published": 24260000000.0, + "raked": 24229292795.126102, + "raked_mean": 193482.55588304918, + "target_mean": 193482.55589071114, + "tilt_lambda": 0.21316023112280014 + }, + "75": { + "attainable": true, + "normalised": 13794517398.086441, + "published": 13812000000.0, + "raked": 13794517399.969437, + "raked_mean": 158269.9077664918, + "target_mean": 158269.90777369344, + "tilt_lambda": 0.5739417512797743 + } + }, + "gains_margin_max_abs_error": 1.8498967864204015e-10, + "income_bands_without_gainers": [], + "ipf_max_abs_margin_error": 2.817782330918425e-10, + "ipf_unattainable_margin_mass": { + "age": 0.0, + "gains": 0.0, + "joint": 0.0, + "region": 0.0 + }, + "ipf_zero_seed_cells": 0, + "joint_total_gains_at_cell_means": 119054115728.2721, + "joint_total_people": 551000.0000000001, + "rake_rounds": 500, + "rake_rounds_used": 9, + "rake_tolerance": 1e-09, + "region_margin": { + "london": { + "normalised": 106797.59862778733, + "published_individuals_basis": 106614.72602739726, + "raked": 106797.59861620239 + }, + "rest_of_england": { + "normalised": 209814.75128644946, + "published_individuals_basis": 209455.47945205483, + "raked": 209814.75130484806 + }, + "south_east_and_east_of_england": { + "normalised": 172955.4030874786, + "published_individuals_basis": 172659.2465753425, + "raked": 172955.40307525013 + }, + "wales_scotland_northern_ireland": { + "normalised": 61432.24699828475, + "published_individuals_basis": 61327.054794520554, + "raked": 61432.247003699486 + } + } + }, + "rounding_carry_out": { + "0": { + "0": -11.971724241680704, + "10000": 388.461793568345, + "100000": -55.73312983898904, + "1000000": -99.11529622323025, + "2000000": -56.88936107457822, + "25000": -382.63663497604966, + "250000": 34.31419243945379, + "50000": 212.79920128040453, + "500000": -64.45490722474102, + "5000000": 356.05342889672403 + }, + "100000": { + "0": 56.269609265125894, + "10000": 583.3559491327843, + "100000": 115.07955147452768, + "1000000": 515.4298695369073, + "2000000": 42.25651021734384, + "25000": 357.35302365875833, + "250000": 155.3420131772581, + "50000": 58.342746262544146, + "500000": 55.21780605278688, + "5000000": -82.29398076777588 + }, + "125140": { + "0": 59.60106208504294, + "10000": -196.71290335735185, + "100000": 319.4799668871366, + "1000000": 191.77453267663248, + "2000000": 0.9411993432987167, + "25000": 279.38418443209366, + "250000": 544.0324387507004, + "50000": -8.415257314070608, + "500000": -53.36760131340198, + "5000000": 31.549908051467206 + }, + "200000": { + "0": 60.448135458961616, + "10000": 1929.6360438565644, + "100000": 73.51128867313201, + "1000000": 1679.778714421369, + "2000000": -40.95289537325906, + "25000": 329.12357818036423, + "250000": 917.2549629084091, + "50000": -193.5064475096264, + "500000": 49.86226815750109, + "5000000": 36.600202358773934 + }, + "37700": { + "0": 146.58558982178306, + "10000": 553.7375978343116, + "100000": 56.41336849191222, + "1000000": 452.46235530225937, + "2000000": -38.07410696144448, + "25000": -87.16391465477176, + "250000": 722.7162379500015, + "50000": 19.1302347220751, + "500000": 20.058914085107887, + "5000000": 67.85125483374682 + }, + "50000": { + "0": -85.2239866177359, + "10000": 119.85457566424478, + "100000": -40.71958848317516, + "1000000": -66.28533283931367, + "2000000": 891.6843177073276, + "25000": -25.193915874577556, + "250000": -56.15543383857729, + "50000": 99.53294231657397, + "500000": 139.7262613754273, + "5000000": 95.12531060840993 + } + } + }, + "published_taxpayer_mass": 551000.0, + "region_rows": [ + { + "achieved_gains": 1707523915.3686948, + "achieved_people": 18561.66625916871, + "geography_id": "E12000001", + "published_gains_individuals_basis": 1497797150.3974364, + "published_people_individuals_basis": 11321.91780821918, + "region": "NORTH_EAST" + }, + { + "achieved_gains": 4326742592.990708, + "achieved_people": 53648.99190938511, + "geography_id": "E12000002", + "published_gains_individuals_basis": 8790074083.38308, + "published_people_individuals_basis": 41513.69863013699, + "region": "NORTH_WEST" + }, + { + "achieved_gains": 5607527002.690194, + "achieved_people": 32615.261904761912, + "geography_id": "E12000003", + "published_gains_individuals_basis": 6970985861.949795, + "published_people_individuals_basis": 32078.767123287675, + "region": "YORKSHIRE" + }, + { + "achieved_gains": 4794674955.826572, + "achieved_people": 26104.91501650165, + "geography_id": "E12000004", + "published_gains_individuals_basis": 6299365751.358824, + "published_people_individuals_basis": 31135.273972602743, + "region": "EAST_MIDLANDS" + }, + { + "achieved_gains": 6078094399.69057, + "achieved_people": 37466.95, + "geography_id": "E12000005", + "published_gains_individuals_basis": 5890960774.765152, + "published_people_individuals_basis": 33022.260273972606, + "region": "WEST_MIDLANDS" + }, + { + "achieved_gains": 12595231949.006302, + "achieved_people": 72219.13481570513, + "geography_id": "E12000006", + "published_gains_individuals_basis": 11545870966.728456, + "published_people_individuals_basis": 58496.57534246576, + "region": "EAST_OF_ENGLAND" + }, + { + "achieved_gains": 32577351656.345314, + "achieved_people": 101525.8343373494, + "geography_id": "E12000007", + "published_gains_individuals_basis": 32519714615.602127, + "published_people_individuals_basis": 106614.72602739726, + "region": "LONDON" + }, + { + "achieved_gains": 15541117666.53226, + "achieved_people": 103079.81400767545, + "geography_id": "E12000008", + "published_gains_individuals_basis": 25606804690.69088, + "published_people_individuals_basis": 114162.67123287672, + "region": "SOUTH_EAST" + }, + { + "achieved_gains": 22114901012.32714, + "achieved_people": 37397.47703252032, + "geography_id": "E12000009", + "published_gains_individuals_basis": 10341263627.509504, + "published_people_individuals_basis": 60383.56164383562, + "region": "SOUTH_WEST" + }, + { + "achieved_gains": 9835944626.48921, + "achieved_people": 22964.236939435967, + "geography_id": "W92000004", + "published_gains_individuals_basis": 2358632410.6946497, + "published_people_individuals_basis": 16982.87671232877, + "region": "WALES" + }, + { + "achieved_gains": 7194747172.036149, + "achieved_people": 42634.816899070385, + "geography_id": "S92000003", + "published_gains_individuals_basis": 5680201325.83493, + "published_people_individuals_basis": 34909.24657534247, + "region": "SCOTLAND" + }, + { + "achieved_gains": 11918474755.811193, + "achieved_people": 9200.534027777778, + "geography_id": "N92000002", + "published_gains_individuals_basis": 1757265449.747086, + "published_people_individuals_basis": 9434.931506849316, + "region": "NORTHERN_IRELAND" + } + ], + "remainder_mass": 11612967.368653707, + "rows": [ + { + "achieved_gains": 748418472.9564955, + "achieved_people": 130920.9435938761, + "gain_lower_bound": 0, + "published_gains": 760000000.0, + "published_people": 133000.0 + }, + { + "achieved_gains": 2091782917.2787447, + "achieved_people": 126131.68009279478, + "gain_lower_bound": 10000, + "published_gains": 2036000000.0, + "published_people": 123000.0 + }, + { + "achieved_gains": 3527485722.2335587, + "achieved_people": 97683.8538130982, + "gain_lower_bound": 25000, + "published_gains": 3516000000.0, + "published_people": 98000.0 + }, + { + "achieved_gains": 5460596499.727752, + "achieved_people": 77122.83020112425, + "gain_lower_bound": 50000, + "published_gains": 5510000000.0, + "published_people": 78000.0 + }, + { + "achieved_gains": 9508284978.55583, + "achieved_people": 60669.11234620694, + "gain_lower_bound": 100000, + "published_gains": 9487000000.0, + "published_people": 61000.0 + }, + { + "achieved_gains": 9440115267.02354, + "achieved_people": 25671.89741748543, + "gain_lower_bound": 250000, + "published_gains": 8820000000.0, + "published_people": 25000.0 + }, + { + "achieved_gains": 11333186167.227966, + "achieved_people": 17108.125874180216, + "gain_lower_bound": 500000, + "published_gains": 11372000000.0, + "published_people": 16000.0 + }, + { + "achieved_gains": 16243152741.098972, + "achieved_people": 12545.556072079671, + "gain_lower_bound": 1000000, + "published_gains": 12806000000.0, + "published_people": 9000.0 + }, + { + "achieved_gains": 18596883208.6967, + "achieved_people": 6345.828604497356, + "gain_lower_bound": 2000000, + "published_gains": 16477000000.0, + "published_people": 5000.0 + }, + { + "achieved_gains": 57342425730.31476, + "achieved_people": 3219.8051340088355, + "gain_lower_bound": 5000000, + "published_gains": 48474000000.0, + "published_people": 3000.0 + } + ], + "stage": "hmrc_cgt_gains_spine", + "taxpayer_mass": 557419.6331493518 + }, + "hmrc_cgt_asset_type_spine": { + "asset_type": { + "achieved_gains": { + "agricultural_commercial_industrial_land_buildings": 8280309555.892511, + "listed_shares": 9574785639.119093, + "other_financial_assets": 36265039955.27424, + "other_non_financial_assets": 234966026.46367028, + "unlisted_shares": 67227070158.66411 + }, + "achieved_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.06810463627145866, + "listed_shares": 0.07875155982125658, + "other_financial_assets": 0.2982759688937321, + "other_non_financial_assets": 0.0019325697500126072, + "unlisted_shares": 0.5529352652635401 + }, + "achieved_people": { + "agricultural_commercial_industrial_land_buildings": 938.8868469717984, + "listed_shares": 164714.50136492576, + "other_financial_assets": 162907.05979932845, + "other_non_financial_assets": 100.0, + "unlisted_shares": 26080.21765382622 + }, + "log_sigma": 1.5, + "median_anchor_gbp": { + "agricultural_commercial_industrial_land_buildings": 156692.3076923077, + "listed_shares": 5501.392757660167, + "other_financial_assets": 14663.62807657247, + "other_non_financial_assets": 143600.0, + "unlisted_shares": 114879.31034482758 + }, + "non_residential_gains_mass": 121582171335.41362, + "share_fit_iterations": 19, + "target_gains_share": { + "agricultural_commercial_industrial_land_buildings": 0.033817547937245784, + "listed_shares": 0.0983647381090728, + "other_financial_assets": 0.26705403834979663, + "other_non_financial_assets": 0.0476799203121109, + "unlisted_shares": 0.5530837552917739 + }, + "type_weights": { + "agricultural_commercial_industrial_land_buildings": 0.00047718095480865196, + "listed_shares": 0.6500689855329533, + "other_financial_assets": 0.33377195266353354, + "other_non_financial_assets": 0.0008080832646016493, + "unlisted_shares": 0.014873797584102776 + } + }, + "composition_by_band": [ + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 0, + "listed_shares_gains": 248606748.73499224, + "listed_shares_people": 41767.7236628322, + "other_financial_assets_gains": 90826294.5037106, + "other_financial_assets_people": 15566.337405126555, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 408985429.7177927, + "residential_land_buildings_people": 73586.88252591735, + "unlisted_shares_gains": 0.0, + "unlisted_shares_people": 0.0 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 10000, + "listed_shares_gains": 778500656.1876446, + "listed_shares_people": 46691.246419849784, + "other_financial_assets_gains": 427141808.8889303, + "other_financial_assets_people": 24795.024015419676, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 886140452.2021698, + "residential_land_buildings_people": 54645.40965752532, + "unlisted_shares_gains": 0.0, + "unlisted_shares_people": 0.0 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 25000, + "listed_shares_gains": 1082640209.8596733, + "listed_shares_people": 30574.749433523553, + "other_financial_assets_gains": 1176415962.8660572, + "other_financial_assets_people": 31452.035774211134, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1189173049.6280696, + "residential_land_buildings_people": 33505.31525170497, + "unlisted_shares_gains": 79256499.87975895, + "unlisted_shares_people": 2151.7533536585365 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 50000, + "listed_shares_gains": 1641792132.5194988, + "listed_shares_people": 23889.538501464966, + "other_financial_assets_gains": 2219500558.220035, + "other_financial_assets_people": 29938.402226754184, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1459900930.3228695, + "residential_land_buildings_people": 21077.24512020894, + "unlisted_shares_gains": 139402878.66534784, + "unlisted_shares_people": 2217.6443526961743 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 31815264.3171144, + "agricultural_commercial_industrial_land_buildings_people": 287.0, + "gain_lower_bound": 100000, + "listed_shares_gains": 2331261777.115343, + "listed_shares_people": 14522.435448995566, + "other_financial_assets_gains": 4402583232.154324, + "other_financial_assets_people": 28353.923669526772, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1919189167.83177, + "residential_land_buildings_people": 12627.836561017937, + "unlisted_shares_gains": 823435537.1372783, + "unlisted_shares_people": 4877.916666666667 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 250000, + "listed_shares_gains": 1323192259.1853647, + "listed_shares_people": 3700.307898259706, + "other_financial_assets_gains": 5293025271.754437, + "other_financial_assets_people": 14699.99606494031, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1294133621.6122293, + "residential_land_buildings_people": 3616.526747554652, + "unlisted_shares_gains": 1529764114.4715097, + "unlisted_shares_people": 3655.0667067307695 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 500000, + "listed_shares_gains": 2063731944.1613193, + "listed_shares_people": 3468.5, + "other_financial_assets_gains": 4175204023.496485, + "other_financial_assets_people": 6506.707587143175, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1326999684.7641375, + "residential_land_buildings_people": 2057.7516203703703, + "unlisted_shares_gains": 3767250514.8060226, + "unlisted_shares_people": 5075.166666666667 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 0.0, + "agricultural_commercial_industrial_land_buildings_people": 0.0, + "gain_lower_bound": 1000000, + "listed_shares_gains": 105059911.35525641, + "listed_shares_people": 100.0, + "other_financial_assets_gains": 10625217300.319092, + "other_financial_assets_people": 8433.139405413005, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1441494371.4569893, + "residential_land_buildings_people": 1095.3333333333333, + "unlisted_shares_gains": 4071381157.967635, + "unlisted_shares_people": 2917.083333333333 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 408306618.2050791, + "agricultural_commercial_industrial_land_buildings_people": 166.66666666666666, + "gain_lower_bound": 2000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 7855125503.071168, + "other_financial_assets_people": 3161.4936507936504, + "other_non_financial_assets_gains": 234966026.46367028, + "other_non_financial_assets_people": 100.0, + "residential_land_buildings_gains": 1168343662.1646643, + "residential_land_buildings_people": 366.66666666666663, + "unlisted_shares_gains": 8930141398.79212, + "unlisted_shares_people": 2551.0016203703703 + }, + { + "agricultural_commercial_industrial_land_buildings_gains": 7840187673.370317, + "agricultural_commercial_industrial_land_buildings_people": 485.22018030513175, + "gain_lower_bound": 5000000, + "listed_shares_gains": 0.0, + "listed_shares_people": 0.0, + "other_financial_assets_gains": 0.0, + "other_financial_assets_people": 0.0, + "other_non_financial_assets_gains": 0.0, + "other_non_financial_assets_people": 0.0, + "residential_land_buildings_gains": 1615799999.9999998, + "residential_land_buildings_people": 100.0, + "unlisted_shares_gains": 47886438056.94444, + "unlisted_shares_people": 2634.584953703704 + } + ], + "facts": { + "annual_exempt_amount": 3000.0, + "resource": "hmrc_cgt_asset_type_facts.json", + "resource_sha256": "99123735ad0bc54cc5d8cf7b156f4feaa4bcf3ccf46d7b69377e1036b7251dcb", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f" + }, + "residential": { + "achieved_count": 202678.96748429956, + "achieved_gains": 12710160369.700691, + "achieved_rows": 325, + "count_bernoulli_sigma": 9505.93894880605, + "count_target_individuals_basis": 202630.0578034682, + "expected_count": 202630.0578034682, + "expected_gains": 12242481471.184263, + "gains_bernoulli_sigma": 3697866169.742512, + "gains_target_individuals_basis": 12242481474.688189, + "liable_gains_mass": 134292331705.11432, + "liable_taxpayer_mass": 557419.6331493518, + "log_gain_centre": 10.465424333752768, + "logistic_intercept": -0.6479969947269753, + "logistic_slope": -0.48162386112380773, + "max_liable_weight": 3266.6666666666665, + "table8a_gains_total": 12914000000.0, + "table8a_taxpayers_total": 205000.0, + "table8b_individuals_gains_share": 0.9480007336757154, + "table8b_individuals_taxpayer_share": 0.9884393063583815 + }, + "seeds": { + "asset_type": 554, + "residential_flag": 553 + }, + "stage": "hmrc_cgt_asset_type_spine", + "value_counts": { + "agricultural_commercial_industrial_land_buildings": 3, + "listed_shares": 305, + "none": 91945, + "other_financial_assets": 295, + "other_non_financial_assets": 1, + "residential_land_buildings": 325, + "sub_aea": 20642, + "unlisted_shares": 74 + } + } + } +} diff --git a/docs/evidence/uk-cgt-725/target-comparison-round1.csv b/docs/evidence/uk-cgt-725/target-comparison-round1.csv new file mode 100644 index 0000000000..b58ccb7083 --- /dev/null +++ b/docs/evidence/uk-cgt-725/target-comparison-round1.csv @@ -0,0 +1,635 @@ +name,family,cgt,control_target,control_estimate,control_relative_error,candidate_target,candidate_estimate,candidate_relative_error +dfe.funded_childcare.early_learning_2_year_olds@2025,dfe_funded_childcare,False,95031.0,95047.27766418457,0.00017128793956256707,95031.0,95226.60805130005,0.0020583604434347615 +dfe.funded_childcare.universal_only_children@2025,dfe_funded_childcare,False,396965.0,396292.4543914795,-0.0016942189072601055,396965.0,399077.0820541382,0.0053205749981438755 +dfe.funded_childcare.working_parent_children_2_to_4@2025,dfe_funded_childcare,False,621482.0,620727.0542449951,-0.0012147507972956302,621482.0,621149.7807846069,-0.0005345596741226076 +dfi_ni.bus.passenger_receipts@2025,dft_local_bus,False,150082817.48999995,150509095.65825486,0.0028402862858255902,150082817.48999995,149940099.0576724,-0.0009509311906211255 +dft.bus_fare_receipts.england@2025,dft_local_bus,False,3612036036.2194014,3616635669.2031064,0.0012734183539650748,3612036036.2194014,3615558540.0405464,0.0009752128123372617 +dft.bus_fare_receipts.london@2025,dft_local_bus,False,1347434943.01459,1347895803.0490305,0.0003420276703003146,1347434943.01459,1349843100.1812236,0.0017872159091005036 +dft.bus_net_support.england@2025,dft_local_bus,False,3024904320.8399997,3024139711.4189057,-0.00025277144001751857,3024904320.8399997,3026883353.518125,0.0006542463721880019 +dft.bus_net_support.london@2025,dft_local_bus,False,1130214000.0,1129647735.7705243,-0.000501023902973894,1130214000.0,1129464312.8057988,-0.0006633143760396093 +dwp.benefit_cap.capped_households@2025,dwp_benefit_cap,False,110637.0,110650.46585845947,0.00012171207154453443,110637.0,110652.5015411377,0.0001401117269782741 +dwp.esa_claimants@2025,dwp_legacy_benefits,False,1000000.0,799690.1333656311,-0.2003098666343689,1000000.0,801276.4079780579,-0.19872359202194215 +dwp.esa_contrib_claimants@2025,dwp_legacy_benefits,False,620000.0,618975.989107132,-0.0016516304723678096,620000.0,621727.5820178986,0.002786422609513806 +dwp.esa_income_claimants@2025,dwp_legacy_benefits,False,180000.0,180962.3353919983,0.005346307733323839,180000.0,179799.56708335876,-0.0011135162035624186 +dwp.uc.households@2025,dwp_universal_credit,False,6197311.0,5993232.183032036,-0.03293022037589596,6197311.0,5990835.067541599,-0.033317019665206525 +dwp.uc.households_children_1@2025,dwp_universal_credit,False,1190123.8333333333,1009313.3557415009,-0.151925768166001,1190123.8333333333,1012309.0588769913,-0.1494086325103777 +dwp.uc.households_children_2@2025,dwp_universal_credit,False,1049895.5,972132.5900774002,-0.07406728567043082,1049895.5,972363.0009222031,-0.07384782492904954 +dwp.uc.households_children_3@2025,dwp_universal_credit,False,477887.6666666667,477354.73596191406,-0.0011151798674150554,477887.6666666667,476299.82789993286,-0.0033226192628263923 +dwp.uc.households_children_4@2025,dwp_universal_credit,False,170713.66666666666,170712.4619140625,-7.057153815982115e-06,170713.66666666666,170709.08554077148,-2.6835144394840038e-05 +dwp.uc.households_children_5_or_more@2025,dwp_universal_credit,False,76320.08333333333,76147.23992919922,-0.0022647171830146467,76320.08333333333,76290.16525268555,-0.0003920079662008791 +dwp.uc.households_couple_no_children@2025,dwp_universal_credit,False,241130.91666666666,246000.0862159729,0.02019305370135204,241130.91666666666,246280.49199295044,0.021355931447821875 +dwp.uc.households_couple_with_children@2025,dwp_universal_credit,False,826160.8333333334,881816.1841773987,0.06736624226001027,826160.8333333334,879515.3665218353,0.06458129099782059 +dwp.uc.households_housing_element_private_rented@2025,dwp_universal_credit,False,1570545.4166666667,1568871.7276172638,-0.001065673766350034,1570545.4166666667,1568338.0812263489,-0.0014054578854540399 +dwp.uc.households_housing_element_social_rented@2025,dwp_universal_credit,False,2354587.5833333335,2351571.8600873947,-0.0012807861840796284,2354587.5833333335,2352212.996580124,-0.0010084937039581009 +dwp.uc.households_lcwra_element@2025,dwp_universal_credit,False,2272425.1666666665,2532342.0919208527,0.11437865108466842,2272425.1666666665,2530512.840438843,0.11357367342958764 +dwp.uc.households_single_no_children@2025,dwp_universal_credit,False,2990070.1666666665,3041571.713191986,0.017224193298023355,2990070.1666666665,3036583.4370560646,0.01555591266985254 +dwp.uc.households_single_with_children@2025,dwp_universal_credit,False,2138780.1666666665,1823844.1994466782,-0.14725027477266286,2138780.1666666665,1828455.771970749,-0.1450941052906642 +dwp.uc.households_with_deduction@2025,dwp_universal_credit,False,3130000.0,3125382.3320770264,-0.0014752932661257613,3130000.0,3125704.6840438843,-0.0013723054172893683 +dwp.uc.scotland_households_child_under_1@2025,dwp_universal_credit,False,14333.222222222223,14301.71420288086,-0.002198250948241996,14333.222222222223,14278.118621826172,-0.003844467039003843 +dwp.uc.two_child_limit.children_affected@2025,dwp_two_child_limit,False,597920.0,597791.6025695801,-0.00021474014988614174,597920.0,597215.3494491577,-0.0011785030620188072 +dwp.uc.two_child_limit.children_claimant_pip@2025,dwp_two_child_limit,False,235270.0,235307.4132385254,0.0001590225635456736,235270.0,234973.21188354492,-0.0012614787965107245 +dwp.uc.two_child_limit.children_disabled_child_element@2025,dwp_two_child_limit,False,479460.0,478645.0094909668,-0.0016998091791457122,479460.0,479270.6258544922,-0.0003949738153502117 +dwp.uc.two_child_limit.children_in_3_children_households@2025,dwp_two_child_limit,False,891930.0,892616.9891967773,0.0007702277048393302,891930.0,889723.6804275513,-0.002473646555726044 +dwp.uc.two_child_limit.children_in_4_children_households@2025,dwp_two_child_limit,False,468760.0,468702.7509765625,-0.00012212864458891544,468760.0,468880.34338378906,0.00025672707523906156 +dwp.uc.two_child_limit.children_in_5_children_households@2025,dwp_two_child_limit,False,185120.0,184785.40176391602,-0.0018074667031330184,185120.0,185009.00955200195,-0.0005995594641208236 +dwp.uc.two_child_limit.children_in_6_plus_children_households@2025,dwp_two_child_limit,False,119720.0,119234.7495727539,-0.004053211052840743,119720.0,119675.93530273438,-0.00036806462801223686 +dwp.uc.two_child_limit.children_in_affected_households@2025,dwp_two_child_limit,False,1665540.0,1665339.8915100098,-0.00012014631290166215,1665540.0,1663288.9686660767,-0.00135153243628093 +dwp.uc.two_child_limit.households_3_children@2025,dwp_two_child_limit,False,297310.0,297538.9963989258,0.0007702277048393302,297310.0,296574.5601425171,-0.002473646555726044 +dwp.uc.two_child_limit.households_4_children@2025,dwp_two_child_limit,False,117190.0,117175.68774414062,-0.00012212864458891544,117190.0,117220.08584594727,0.00025672707523906156 +dwp.uc.two_child_limit.households_5_children@2025,dwp_two_child_limit,False,37020.0,36957.0803527832,-0.0016996122965099102,37020.0,37001.80191040039,-0.0004915745434794537 +dwp.uc.two_child_limit.households_6_plus_children@2025,dwp_two_child_limit,False,18260.0,18186.105865478516,-0.004046776260760371,18260.0,18254.970764160156,-0.0002754236494985624 +dwp.uc.two_child_limit.households_affected@2025,dwp_two_child_limit,False,469780.0,469857.8703613281,0.00016575920926417684,469780.0,469051.4186630249,-0.001550899010121967 +dwp.uc.two_child_limit.households_claimant_pip@2025,dwp_two_child_limit,False,65280.0,65316.3913269043,0.0005574651792937634,65280.0,65186.07778930664,-0.001438759354984059 +dwp.uc.two_child_limit.households_disabled_child_element@2025,dwp_two_child_limit,False,129630.0,129406.58740234375,-0.0017234636863091106,129630.0,129579.42135620117,-0.0003901769945138326 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,7506.333333333333,7498.405059814453,-0.0010562112241502605,7506.333333333333,7523.316635131836,0.002262529659199286 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000@2025,dwp_universal_credit,False,13313.333333333334,13310.319107055664,-0.0002264065806962852,13313.333333333334,13322.92155456543,0.0007201968877387893 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200@2025,dwp_universal_credit,False,16121.444444444445,16058.476440429688,-0.003905853736105944,16121.444444444445,16169.579727172852,0.002985792178503834 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400@2025,dwp_universal_credit,False,13317.333333333334,13302.247177124023,-0.0011328211010195111,13317.333333333334,13339.242889404297,0.0016451909344435524 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600@2025,dwp_universal_credit,False,19657.333333333332,19695.704788208008,0.0019520173069257798,19657.333333333332,19666.062393188477,0.000444061242037464 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800@2025,dwp_universal_credit,False,16443.222222222223,16377.807235717773,-0.0039782340480714285,16443.222222222223,16338.61117553711,-0.006361955416727049 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000@2025,dwp_universal_credit,False,13441.111111111111,13377.848594665527,-0.004706643366208611,13441.111111111111,13444.801445007324,0.00027455571683819254 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200@2025,dwp_universal_credit,False,10728.555555555555,10738.631607055664,0.0009391806238903844,10728.555555555555,10680.136169433594,-0.004513131881662117 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400@2025,dwp_universal_credit,False,9653.222222222223,9637.923370361328,-0.001584844056078575,9653.222222222223,9549.162139892578,-0.010779828738438524 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,8797.0,8798.397567749023,0.0001588686767106329,8797.0,8824.167709350586,0.0030882925259276954 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,6486.888888888889,6491.204345703125,0.0006652583215396324,6486.888888888889,6466.7021484375,-0.0031119294313743653 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800@2025,dwp_universal_credit,False,3981.8888888888887,3976.0797119140625,-0.0014588998178819567,3981.8888888888887,3985.1322021484375,0.0008145162635248296 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,2761.4444444444443,2749.086669921875,-0.004475112489563598,2761.4444444444443,2757.652099609375,-0.0013733192578611875 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,2131.222222222222,2128.817626953125,-0.00112827055012119,2131.222222222222,2124.2066040039062,-0.0032918285785330952 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,1475.3333333333333,1477.4501953125,0.0014348364070267121,1475.3333333333333,1473.9725952148438,-0.0009223258823923459 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,12256.0,12243.781646728516,-0.00099692830217725,12256.0,12241.703666687012,-0.0011664762820649708 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,10945.444444444445,10929.908752441406,-0.0014193751639682772,10945.444444444445,10967.605407714844,0.0020246745925101917 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,12492.444444444445,12383.94172668457,-0.008685467303248847,12492.444444444445,12520.376174926758,0.0022358899098193843 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,12979.666666666666,12952.064193725586,-0.0021265933594401595,12979.666666666666,12976.815544128418,-0.00021966069017551236 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,16484.444444444445,16478.29605102539,-0.000372981536610216,16484.444444444445,16518.108154296875,0.002042150098893689 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600@2025,dwp_universal_credit,False,15272.444444444445,15276.852722167969,0.00028864257713028164,15272.444444444445,15331.554763793945,0.0038703902027289565 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800@2025,dwp_universal_credit,False,19142.333333333332,19122.398849487305,-0.0010413821292786026,19142.333333333332,19068.651084899902,-0.0038491780051245817 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,19073.555555555555,19092.62907409668,0.0009999980593848638,19073.555555555555,19041.182376861572,-0.001697280750811725 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000@2025,dwp_universal_credit,False,40805.444444444445,40858.6354675293,0.0013035276005208035,40805.444444444445,40800.98840332031,-0.00010920212204034531 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200@2025,dwp_universal_credit,False,40009.555555555555,40064.99139022827,0.0013855648707654577,40009.555555555555,39920.6286239624,-0.002222642325273328 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400@2025,dwp_universal_credit,False,39972.555555555555,40166.868392944336,0.004861156228020421,39972.555555555555,39920.657207489014,-0.001298349513690976 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600@2025,dwp_universal_credit,False,40518.77777777778,40522.407554626465,8.958258485956988e-05,40518.77777777778,40616.498054504395,0.002411728143986798 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800@2025,dwp_universal_credit,False,37118.0,37304.101470947266,0.005013779593385032,37118.0,36873.41766357422,-0.006589318832528187 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000@2025,dwp_universal_credit,False,37177.77777777778,37144.1795501709,-0.0009037180169215276,37177.77777777778,37116.73960876465,-0.0016417917546867695 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200@2025,dwp_universal_credit,False,37164.555555555555,37127.98385620117,-0.0009840478059723746,37164.555555555555,37060.58052062988,-0.0027976934843266057 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400@2025,dwp_universal_credit,False,33309.555555555555,33318.652252197266,0.0002730957075226925,33309.555555555555,33166.010025024414,-0.004309439983122181 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,22775.777777777777,22834.02562713623,0.0025574472111018426,22775.777777777777,22726.909790039062,-0.002145612247165282 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,29102.555555555555,29077.092582702637,-0.0008749394122557479,29102.555555555555,29147.91876220703,0.0015587361929394843 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800@2025,dwp_universal_credit,False,27534.666666666668,27590.600036621094,0.0020313799557318967,27534.666666666668,27453.626251220703,-0.002943213964673554 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,25584.777777777777,25619.315826416016,0.0013499452267370106,25584.777777777777,25630.944885253906,0.001804475609564541 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,22927.777777777777,22769.79803466797,-0.0068903207559402845,22927.777777777777,22838.819213867188,-0.003879947056919355 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,20334.666666666668,20361.552001953125,0.0013221429063564906,20334.666666666668,20315.576080322266,-0.0009388197336765911 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600@2025,dwp_universal_credit,False,17535.0,17429.07177734375,-0.006040959375891075,17535.0,17494.820739746094,-0.002291374978836969 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800@2025,dwp_universal_credit,False,15399.888888888889,15318.989013671875,-0.005253276552883665,15399.888888888889,15422.971893310547,0.0014989072056430688 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000@2025,dwp_universal_credit,False,12836.222222222223,12856.200317382812,0.0015563843329234014,12836.222222222223,12866.7255859375,0.0023763505482531757 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,26502.666666666668,26532.5386428833,0.0011271309635495635,26502.666666666668,26413.158878326416,-0.0033773125348487646 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,29027.0,29059.226558685303,0.0011102269847143259,29027.0,28976.345252990723,-0.0017450906745194938 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,32427.0,32448.47692489624,0.0006623161222512176,32427.0,32321.311349868774,-0.0032592793083302675 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,34956.88888888889,34907.42909240723,-0.0014148798149306939,34956.88888888889,34946.16667175293,-0.00030672687063318426 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,37410.77777777778,37357.75244140625,-0.0014173812874595825,37410.77777777778,37452.8896522522,0.001125661560007206 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600@2025,dwp_universal_credit,False,39910.333333333336,39906.17240905762,-0.0001042568159219894,39910.333333333336,39909.99817657471,-8.397743908312652e-06 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800@2025,dwp_universal_credit,False,39368.0,39521.73371887207,0.0039050426456022735,39368.0,39256.82487869263,-0.0028239971882588156 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,26670.222222222223,26553.321952819824,-0.004383175679166051,26670.222222222223,26602.20059967041,-0.0025504707829219113 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,36208.11111111111,36166.45346069336,-0.0011505060368909087,36208.11111111111,35936.29881286621,-0.0075069449883975875 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,85490.44444444444,85069.96188354492,-0.004918474381926564,85490.44444444444,85085.32662963867,-0.004738749663057724 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,71259.55555555556,71256.97412109375,-3.622580076014477e-05,71259.55555555556,71214.4896850586,-0.0006324186299735465 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,51301.666666666664,51210.21199798584,-0.0017826841625838874,51301.666666666664,51538.24935913086,0.004611598566600081 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,43305.22222222222,43181.172912597656,-0.0028645346509942726,43305.22222222222,43431.56689453125,0.0029175389439335753 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600@2025,dwp_universal_credit,False,34910.555555555555,34776.64959716797,-0.003835686836163128,34910.555555555555,34975.26689910889,0.0018536325911615009 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800@2025,dwp_universal_credit,False,28513.0,28486.287338256836,-0.0009368590377429265,28513.0,28534.22135925293,0.0007442696051951632 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000@2025,dwp_universal_credit,False,22593.0,22691.866119384766,0.004375962439019414,22593.0,22657.938262939453,0.002874264725333206 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,46312.77777777778,46348.127014160156,0.0007632717811052316,46312.77777777778,46327.76824951172,0.0003236789597433865 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,60310.11111111111,60158.27948760986,-0.0025175152342452544,60310.11111111111,60165.3752746582,-0.0023998602188985397 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,67858.66666666667,67831.38890075684,-0.0004019791022984376,67858.66666666667,67810.4252243042,-0.0007109105547187138 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,89577.44444444444,89445.29569244385,-0.0014752458369422276,89577.44444444444,89617.30568695068,0.00044499195923106957 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,116076.0,116154.6541671753,0.0006776092144396169,116076.0,116171.90098571777,0.0008261913377250546 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600@2025,dwp_universal_credit,False,97511.0,97341.0114479065,-0.0017432756519111265,97511.0,97169.26430511475,-0.0035045860968019394 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800@2025,dwp_universal_credit,False,102343.0,102097.2710723877,-0.0024010330712633467,102343.0,102430.47212219238,0.0008546957016345311 +dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,89479.33333333333,89524.17416000366,0.0005011305404264705,89479.33333333333,89774.30750274658,0.00329656199286152 +dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000@2025,dwp_universal_credit,False,104891.11111111111,104533.52238464355,-0.00340914232559479,104891.11111111111,105254.81552124023,0.003467447396413343 +dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200@2025,dwp_universal_credit,False,122035.55555555556,121750.02020263672,-0.002339771811739374,122035.55555555556,121596.40381622314,-0.0035985556613662294 +dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800@2025,dwp_universal_credit,False,149963.22222222222,150106.4390258789,0.0009550128460460938,149963.22222222222,149825.42459106445,-0.0009188761692088155 +dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000@2025,dwp_universal_credit,False,108689.66666666667,108647.64122009277,-0.0003866554003039057,108689.66666666667,108819.55644226074,0.0011950517429814302 +dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200@2025,dwp_universal_credit,False,61718.666666666664,61730.9599609375,0.0001991827583902616,61718.666666666664,61458.175048828125,-0.004220629380174651 +dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400@2025,dwp_universal_credit,False,34050.444444444445,33983.67492675781,-0.0019609000345229455,34050.444444444445,34076.34939575195,0.0007607815912586256 +dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,127403.22222222222,127282.98274993896,-0.0009437710458651293,127403.22222222222,127243.31181716919,-0.0012551519676174822 +dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,22338.333333333332,22264.31005859375,-0.0033137331077929774,22338.333333333332,22447.4462890625,0.004884561175669681 +dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,11133.666666666666,10729.99609375,-0.03625675035927063,11133.666666666666,10729.99609375,-0.03625675035927063 +dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,6951.222222222223,6955.0751953125,0.0005542871407505692,6951.222222222223,6975.48193359375,0.0034899922051077562 +dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,6508.222222222223,6503.87255859375,-0.0006683336063142971,6508.222222222223,6500.73681640625,-0.0011501460092149013 +dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600@2025,dwp_universal_credit,False,5913.444444444444,5903.55810546875,-0.0016718410172910899,5913.444444444444,5856.7587890625,-0.009585894636280774 +dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000@2025,dwp_universal_credit,False,1653.7777777777778,1651.2129211425781,-0.0015509076670785628,1653.7777777777778,1656.4339904785156,0.0016061485021929703 +dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,197136.66666666666,196609.87888526917,-0.0026721958441562974,197136.66666666666,196916.91854524612,-0.00111469938665494 +dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,377063.1111111111,377087.6189517975,6.4996654311112e-05,377063.1111111111,376241.8713874817,-0.0021779901014698723 +dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,195983.22222222222,196211.13967514038,0.0011629436965768934,195983.22222222222,196438.4694595337,0.0023228888276736 +dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,114033.33333333333,114000.27459716797,-0.0002899041464369459,114033.33333333333,114170.00187683105,0.0011984964352329103 +dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,149043.77777777778,148972.4663619995,-0.00047845952941821986,149043.77777777778,149111.38083648682,0.00045357853723910986 +hmrc.cgt.gains_by_age_band.age_16_to_24@2025,hmrc_cgt,True,,,,319000000.0,93908318.06642029,-0.7056165577855164 +hmrc.cgt.gains_by_age_band.age_25_to_34@2025,hmrc_cgt,True,,,,2499000000.0,2264711938.653756,-0.09375272562874905 +hmrc.cgt.gains_by_age_band.age_35_to_44@2025,hmrc_cgt,True,,,,11775000000.0,11756694044.570152,-0.0015546458963777254 +hmrc.cgt.gains_by_age_band.age_45_to_54@2025,hmrc_cgt,True,,,,28422000000.0,28564262780.701237,0.005005375438084467 +hmrc.cgt.gains_by_age_band.age_55_to_64@2025,hmrc_cgt,True,,,,38118000000.0,38112477377.60352,-0.000144882270750741 +hmrc.cgt.gains_by_age_band.age_65_to_74@2025,hmrc_cgt,True,,,,24260000000.0,24235467443.831024,-0.0010112347967426146 +hmrc.cgt.gains_by_age_band.age_75_to_84@2025,hmrc_cgt,True,,,,11736000000.0,11714316556.84219,-0.0018476008144010065 +hmrc.cgt.gains_by_age_band.age_85_plus@2025,hmrc_cgt,True,,,,2076000000.0,2038613306.6853666,-0.018009004486817616 +hmrc.cgt.gains_by_region@E12000001@2025,hmrc_cgt,True,,,,1497797150.3974364,1497152683.5495627,-0.0004302764547940822 +hmrc.cgt.gains_by_region@E12000002@2025,hmrc_cgt,True,,,,8790074083.38308,8756234355.975298,-0.0038497658935267515 +hmrc.cgt.gains_by_region@E12000003@2025,hmrc_cgt,True,,,,6970985861.949795,6966113198.937089,-0.0006989919516696469 +hmrc.cgt.gains_by_region@E12000004@2025,hmrc_cgt,True,,,,6299365751.358824,6301285595.220215,0.00030476780316763505 +hmrc.cgt.gains_by_region@E12000005@2025,hmrc_cgt,True,,,,5890960774.765152,5891921359.129771,0.00016306073004832553 +hmrc.cgt.gains_by_region@E12000006@2025,hmrc_cgt,True,,,,11545870966.728456,11523829363.024897,-0.0019090464259540745 +hmrc.cgt.gains_by_region@E12000007@2025,hmrc_cgt,True,,,,32519714615.602127,32186918327.256603,-0.01023367800976509 +hmrc.cgt.gains_by_region@E12000008@2025,hmrc_cgt,True,,,,25606804690.69088,25566605585.54138,-0.0015698602631242001 +hmrc.cgt.gains_by_region@E12000009@2025,hmrc_cgt,True,,,,10341263627.509504,10295403185.765337,-0.00443470386173802 +hmrc.cgt.gains_by_region@N92000002@2025,hmrc_cgt,True,,,,1757265449.747086,1766411686.0498238,0.005204812001541419 +hmrc.cgt.gains_by_region@S92000003@2025,hmrc_cgt,True,,,,5680201325.83493,5672412469.308121,-0.0013712289547527282 +hmrc.cgt.gains_by_region@W92000004@2025,hmrc_cgt,True,,,,2358632410.6946497,2356163957.1955605,-0.0010465613411808614 +hmrc.cgt.gains_total@2025,hmrc_cgt,True,119258000000.0,107931956702.93329,-0.09497093106598058,119258000000.0,118780451766.95367,-0.004004328707896541 +hmrc.cgt.liability_total@2025,hmrc_cgt,True,22503000000.0,22629780697.062336,0.005633946454354351,22503000000.0,25065767241.866356,0.11388558156096325 +hmrc.cgt.residential_property_gains.ty2024@2025,hmrc_cgt,True,,,,12242481474.688189,12238960600.728003,-0.00028759479583167434 +hmrc.cgt.residential_property_taxpayers.ty2024@2025,hmrc_cgt,True,,,,202630.0578034682,202661.28561019897,0.00015411241090927363 +hmrc.cgt.tax_by_age_band.age_16_to_24@2025,hmrc_cgt,True,,,,59000000.0,12050655.492611237,-0.7957516018201485 +hmrc.cgt.tax_by_age_band.age_25_to_34@2025,hmrc_cgt,True,,,,456000000.0,458723389.79726875,0.005972346046641992 +hmrc.cgt.tax_by_age_band.age_35_to_44@2025,hmrc_cgt,True,,,,2246000000.0,2486943171.444068,0.10727656787358324 +hmrc.cgt.tax_by_age_band.age_45_to_54@2025,hmrc_cgt,True,,,,5522000000.0,6110400482.883022,0.10655568324574834 +hmrc.cgt.tax_by_age_band.age_55_to_64@2025,hmrc_cgt,True,,,,7152000000.0,8111413789.799624,0.13414622340598775 +hmrc.cgt.tax_by_age_band.age_65_to_74@2025,hmrc_cgt,True,,,,4409000000.0,5081912631.686146,0.15262250661967472 +hmrc.cgt.tax_by_age_band.age_75_to_84@2025,hmrc_cgt,True,,,,2260000000.0,2411014837.104593,0.06682072438256319 +hmrc.cgt.tax_by_age_band.age_85_plus@2025,hmrc_cgt,True,,,,390000000.0,393308283.65903914,0.008482778612920872 +hmrc.cgt.taxpayers_by_age_band.age_16_to_24@2025,hmrc_cgt,True,,,,4000.0,4012.647476196289,0.0031618690490722657 +hmrc.cgt.taxpayers_by_age_band.age_25_to_34@2025,hmrc_cgt,True,,,,27000.0,27078.57518386841,0.0029101919951262296 +hmrc.cgt.taxpayers_by_age_band.age_35_to_44@2025,hmrc_cgt,True,,,,65000.0,64942.10457229614,-0.0008906988877516527 +hmrc.cgt.taxpayers_by_age_band.age_45_to_54@2025,hmrc_cgt,True,,,,98000.0,97889.81784439087,-0.0011243077102972537 +hmrc.cgt.taxpayers_by_age_band.age_55_to_64@2025,hmrc_cgt,True,,,,144000.0,143422.31245231628,-0.004011719081136915 +hmrc.cgt.taxpayers_by_age_band.age_65_to_74@2025,hmrc_cgt,True,,,,125000.0,124932.23085594177,-0.0005421531524658203 +hmrc.cgt.taxpayers_by_age_band.age_75_to_84@2025,hmrc_cgt,True,,,,68000.0,67895.72945785522,-0.0015333903256584617 +hmrc.cgt.taxpayers_by_age_band.age_85_plus@2025,hmrc_cgt,True,,,,19000.0,19019.399349212646,0.0010210183796129728 +hmrc.cgt.taxpayers_by_region@E12000001@2025,hmrc_cgt,True,,,,11321.91780821918,11346.488628387451,0.0021701994824970938 +hmrc.cgt.taxpayers_by_region@E12000002@2025,hmrc_cgt,True,,,,41513.69863013699,41387.560134887695,-0.0030384788494303124 +hmrc.cgt.taxpayers_by_region@E12000003@2025,hmrc_cgt,True,,,,32078.767123287675,32046.018800258636,-0.0010208722455940149 +hmrc.cgt.taxpayers_by_region@E12000004@2025,hmrc_cgt,True,,,,31135.273972602743,31117.72386932373,-0.0005636726785977741 +hmrc.cgt.taxpayers_by_region@E12000005@2025,hmrc_cgt,True,,,,33022.260273972606,32994.58889770508,-0.0008379613036160959 +hmrc.cgt.taxpayers_by_region@E12000006@2025,hmrc_cgt,True,,,,58496.57534246576,58293.886348724365,-0.003464971967243554 +hmrc.cgt.taxpayers_by_region@E12000007@2025,hmrc_cgt,True,,,,106614.72602739726,106568.08265209198,-0.0004374946786741085 +hmrc.cgt.taxpayers_by_region@E12000008@2025,hmrc_cgt,True,,,,114162.67123287672,114015.95173072815,-0.0012851793021668122 +hmrc.cgt.taxpayers_by_region@E12000009@2025,hmrc_cgt,True,,,,60383.56164383562,60122.20346212387,-0.004328300196224567 +hmrc.cgt.taxpayers_by_region@N92000002@2025,hmrc_cgt,True,,,,9434.931506849316,9489.673076629639,0.00580201029976559 +hmrc.cgt.taxpayers_by_region@S92000003@2025,hmrc_cgt,True,,,,34909.24657534247,34843.238636016846,-0.0018908439969669035 +hmrc.cgt.taxpayers_by_region@W92000004@2025,hmrc_cgt,True,,,,16982.87671232877,16967.400955200195,-0.0009112565197708191 +hmrc.cgt.taxpayers_total@2025,hmrc_cgt,True,551000.0,550625.616733551,-0.0006794614636097542,551000.0,549192.8171920776,-0.0032798236078445796 +hmrc.salary_sacrifice.users_above_cap@2025,hmrc_salary_sacrifice,False,3300000.0,3303812.1317478744,0.0011551914387498278,3300000.0,3307957.3777186004,0.002411326581394074 +hmrc.salary_sacrifice.users_below_cap@2025,hmrc_salary_sacrifice,False,4300000.0,4298576.552334656,-0.00033103434077767264,4300000.0,4298678.463606654,-0.00030733404496424764 +hmrc.salary_sacrifice.users_total@2025,hmrc_salary_sacrifice,False,7700000.0,7602388.6840825295,-0.012676794274996168,7700000.0,7606635.841325253,-0.012125215412304774 +hmrc.tfc.children_with_used_accounts@2025,hmrc_tfc,False,1151515.0,1150141.6304855347,-0.0011926631563334668,1151515.0,1153438.0757255554,0.0016700396656191365 +hmrc.tfc.government_top_up@2025,hmrc_tfc,False,599800000.0,599060490.0332513,-0.0012329275871102274,599800000.0,600105465.4765728,0.0005092788872503367 +hmrc/capital_gains_band_1000000@2025,hmrc_cgt,True,,,,12806000000.0,12828156004.771564,0.0017301268758054414 +hmrc/capital_gains_band_100000@2025,hmrc_cgt,True,,,,9487000000.0,9490842339.38142,0.00040501100257406297 +hmrc/capital_gains_band_10000@2025,hmrc_cgt,True,,,,289000000.0,288232751.16344905,-0.0026548402648821834 +hmrc/capital_gains_band_12300@2025,hmrc_cgt,True,,,,1747000000.0,1742762763.4591463,-0.002425435913482392 +hmrc/capital_gains_band_2000000@2025,hmrc_cgt,True,,,,16477000000.0,16450541419.762945,-0.0016057886895099122 +hmrc/capital_gains_band_250000@2025,hmrc_cgt,True,,,,8820000000.0,8802024947.038269,-0.0020379878641418317 +hmrc/capital_gains_band_25000@2025,hmrc_cgt,True,,,,3516000000.0,3514018121.244543,-0.0005636742762960536 +hmrc/capital_gains_band_3000@2025,hmrc_cgt,True,,,,311000000.0,310319001.087522,-0.002189707114077266 +hmrc/capital_gains_band_5000000@2025,hmrc_cgt,True,,,,48474000000.0,48051623955.84032,-0.00871345554647199 +hmrc/capital_gains_band_500000@2025,hmrc_cgt,True,,,,11372000000.0,11337989333.8238,-0.002990737440749285 +hmrc/capital_gains_band_50000@2025,hmrc_cgt,True,,,,5510000000.0,5516355665.250963,0.0011534782669624702 +hmrc/capital_gains_band_6000@2025,hmrc_cgt,True,,,,448000000.0,447585464.12971497,-0.000925303281886237 +hmrc/cgt_taxpayers_band_1000000@2025,hmrc_cgt,True,,,,9000.0,9019.947410583496,0.0022163789537217884 +hmrc/cgt_taxpayers_band_100000@2025,hmrc_cgt,True,,,,61000.0,61114.00471687317,0.0018689297848060483 +hmrc/cgt_taxpayers_band_10000@2025,hmrc_cgt,True,,,,26000.0,25944.814949035645,-0.002122501960167518 +hmrc/cgt_taxpayers_band_12300@2025,hmrc_cgt,True,,,,97000.0,96963.66179656982,-0.00037462065391933794 +hmrc/cgt_taxpayers_band_2000000@2025,hmrc_cgt,True,,,,5000.0,4993.589327812195,-0.0012821344375610352 +hmrc/cgt_taxpayers_band_250000@2025,hmrc_cgt,True,,,,25000.0,24967.479124069214,-0.0013008350372314453 +hmrc/cgt_taxpayers_band_25000@2025,hmrc_cgt,True,,,,98000.0,98987.91841125488,0.010080800114845743 +hmrc/cgt_taxpayers_band_3000@2025,hmrc_cgt,True,,,,73000.0,72994.23070144653,-7.903148703379174e-05 +hmrc/cgt_taxpayers_band_5000000@2025,hmrc_cgt,True,,,,3000.0,2996.490288734436,-0.0011699037551879882 +hmrc/cgt_taxpayers_band_500000@2025,hmrc_cgt,True,,,,16000.0,15968.293199539185,-0.0019816750288009642 +hmrc/cgt_taxpayers_band_50000@2025,hmrc_cgt,True,,,,78000.0,78235.93495750427,0.0030248071474906725 +hmrc/cgt_taxpayers_band_6000@2025,hmrc_cgt,True,,,,57000.0,57006.452308654785,0.00011319839745237117 +hmrc/dividend_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,222000.0,221963.19381713867,-0.00016579361649246904,222000.0,221749.81780052185,-0.0011269468444961685 +hmrc/dividend_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,115000.0,114800.81825351715,-0.0017320151868073837,115000.0,114808.42598438263,-0.00166586100536844 +hmrc/dividend_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,92000.0,91786.6767654419,-0.00231873081041419,92000.0,92236.22834968567,0.0025676994531050974 +hmrc/dividend_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,372000.0,371776.244808197,-0.0006014924510832756,372000.0,371712.2736129761,-0.0007734580296342091 +hmrc/dividend_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,75000.0,75144.38858795166,0.001925181172688802,75000.0,74901.4013671875,-0.0013146484375 +hmrc/dividend_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,843000.0,843093.3517951965,0.00011073759809790415,843000.0,842019.704826355,-0.0011628649746678761 +hmrc/dividend_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,49000.0,48970.97156524658,-0.0005924170357840401,49000.0,48942.86185455322,-0.0011660846009546397 +hmrc/dividend_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,667000.0,666466.6921432202,-0.0007995620041675838,667000.0,665831.4935088526,-0.0017518837948237592 +hmrc/dividend_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,627000.0,627184.7502727509,0.00029465753229801354,627000.0,626423.8365139113,-0.0009189210304445654 +hmrc/dividend_income_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,32000.0,32111.354385375977,0.0034798245429992674,32000.0,31967.902053833008,-0.0010030608177185058 +hmrc/dividend_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,643000.0,642913.7146296869,-0.00013419186673887525,643000.0,642524.8407464027,-0.000738972400617822 +hmrc/dividend_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,336000.0,335919.25883102417,-0.00024030109814235143,336000.0,335497.177544117,-0.0014964954044137681 +hmrc/dividend_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,6870000000.0,6879438939.833873,0.001373935929239126,6870000000.0,6869574471.408043,-6.194011527759713e-05 +hmrc/dividend_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,175000000.0,174978041.63896134,-0.00012547634879231452,175000000.0,174559480.80271026,-0.0025172525559413435 +hmrc/dividend_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,3450000000.0,3440344525.534564,-0.0027986882508510094,3450000000.0,3444063764.093953,-0.001720648088709237 +hmrc/dividend_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,855000000.0,856134897.0437845,0.0013273649634906422,855000000.0,854246275.1377269,-0.0008815495465182421 +hmrc/dividend_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,3700000000.0,3707377797.4451647,0.001993999309503968,3700000000.0,3686807745.1767993,-0.0035654742765407303 +hmrc/dividend_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,3330000000.0,3325445083.384061,-0.0013678428276093515,3330000000.0,3330864154.4867067,0.000259505851863884 +hmrc/dividend_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,3430000000.0,3427392193.533094,-0.0007602934305848603,3430000000.0,3423591088.388026,-0.0018684873504296684 +hmrc/dividend_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,4700000000.0,4692439284.376222,-0.0016086628986762433,4700000000.0,4698739773.235292,-0.000268133354193099 +hmrc/dividend_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,8400000000.0,8403907956.808586,0.0004652329534031096,8400000000.0,8381200367.01758,-0.0022380515455261867 +hmrc/dividend_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,12500000000.0,12501017713.255322,8.141706042572021e-05,12500000000.0,12488332030.454592,-0.0009334375636326599 +hmrc/dividend_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,9440000000.0,9441737974.44081,0.0001841074619501324,9440000000.0,9417685045.657688,-0.002363872282024561 +hmrc/employment_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,791000.0,790755.0606002808,-0.00030965790103569947,791000.0,791010.3477487564,1.308185683490353e-05 +hmrc/employment_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,1360000.0,1363439.2267636193,0.0025288432085436344,1360000.0,1362880.6574404927,0.0021181304709504785 +hmrc/employment_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,264000.0,263669.8199682236,-0.0012506819385470767,264000.0,264311.0181956291,0.0011780992258678784 +hmrc/employment_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,3100000.0,3110240.5114422515,0.0033033907878230657,3100000.0,3110463.953984655,0.0033754690273080563 +hmrc/employment_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,180000.0,180180.4045600891,0.0010022475560506185,180000.0,180073.5999212265,0.00040888845125834145 +hmrc/employment_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,7470000.0,7522615.122937659,0.007043523820302383,7470000.0,7518721.817696149,0.0065223316862315205 +hmrc/employment_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,93000.0,92989.72315073013,-0.00011050375558996714,93000.0,92688.43758964539,-0.0033501334446732717 +hmrc/employment_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,5370000.0,5493143.641452337,0.02293177680676661,5370000.0,5490874.307227966,0.02250918197913713 +hmrc/employment_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,3500000.0,3522982.0286870706,0.006566293910591597,3500000.0,3519190.642580968,0.005483040737419389 +hmrc/employment_income_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,44000.0,44115.540702819824,0.002625925064086914,44000.0,43974.29800605774,-0.0005841362259604714 +hmrc/employment_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,3430000.0,3444064.3382329457,0.004100390155377741,3430000.0,3448484.2697037803,0.005388999913638571 +hmrc/employment_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,1640000.0,1665444.7557668686,0.015515094979797922,1640000.0,1666778.6879491806,0.01632846826169549 +hmrc/employment_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,82300000000.0,82384748125.20845,0.0010297463573323245,82300000000.0,82427405589.12312,0.0015480630513137687 +hmrc/employment_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,16900000000.0,16754994383.94453,-0.008580213967779261,16900000000.0,16769729568.433786,-0.007708309560130982 +hmrc/employment_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,39200000000.0,39190755099.379776,-0.0002358393015363265,39200000000.0,39301036241.688156,0.0025774551451060237 +hmrc/employment_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,48600000000.0,48526358458.516045,-0.0015152580552254193,48600000000.0,48531403894.1203,-0.0014114425078127512 +hmrc/employment_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,36600000000.0,36701675538.797935,0.0027780201857359422,36600000000.0,36686633063.06134,0.002367023580910938 +hmrc/employment_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,172000000000.0,172017810961.37323,0.00010355210100715105,172000000000.0,171901350258.55554,-0.0005735450083980116 +hmrc/employment_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,29000000000.0,30761169689.167236,0.060729989281628836,29000000000.0,30873515524.989193,0.064603983620317 +hmrc/employment_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,170000000000.0,170129889872.73483,0.000764058074910781,170000000000.0,170005000589.3329,2.941523136991613e-05 +hmrc/employment_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,139000000000.0,139072058127.369,0.0005184037940214966,139000000000.0,139070409768.1246,0.0005065450944216062 +hmrc/employment_income_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,23100000000.0,23177961815.981277,0.0033749703887998904,23100000000.0,23100371880.205326,1.6098710187276206e-05 +hmrc/employment_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,174000000000.0,174506758047.72006,0.002912402573103806,174000000000.0,174560803458.12024,0.003223008380001375 +hmrc/employment_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,118000000000.0,118014222925.64903,0.00012053326821214061,118000000000.0,118035181071.36996,0.00029814467262681863 +hmrc/private_pension_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,109000.0,108702.59630584717,-0.002728474258282863,109000.0,108475.68524169922,-0.00481022714037414 +hmrc/private_pension_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,1070000.0,1068823.110198021,-0.0010998970111953878,1070000.0,1069515.374516047,-0.00045292101304011994 +hmrc/private_pension_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,29000.0,28931.538548469543,-0.0023607397079467773,29000.0,28878.2021856308,-0.004199924633420747 +hmrc/private_pension_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,2140000.0,2141063.1404143614,0.0004967945861501759,2140000.0,2138318.369115851,-0.0007858088243687439 +hmrc/private_pension_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,20000.0,19981.10668182373,-0.0009446659088134765,20000.0,19917.961540222168,-0.0041019229888916015 +hmrc/private_pension_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,2660000.0,2658452.9267192255,-0.0005816064965317754,2660000.0,2656940.5918064117,-0.0011501534562361867 +hmrc/private_pension_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,10000.0,10046.791735172272,0.0046791735172271726,10000.0,10066.374691963196,0.00663746919631958 +hmrc/private_pension_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,1450000.0,1448387.6006736755,-0.0011119995353961814,1450000.0,1447520.1496119127,-0.0017102416469567808 +hmrc/private_pension_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,779000.0,779052.3097419739,6.714986132718479e-05,779000.0,778398.1477718353,-0.0007725959283243554 +hmrc/private_pension_income_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,4000.0,4010.1061096191406,0.002526527404785156,4000.0,3992.143943786621,-0.0019640140533447267 +hmrc/private_pension_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,643000.0,642463.3175230026,-0.0008346539300114705,643000.0,642354.9462776184,-0.0010031939694892563 +hmrc/private_pension_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,259000.0,258775.71597194672,-0.0008659614982752266,259000.0,258688.3879570961,-0.0012031353007872592 +hmrc/private_pension_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,5430000000.0,5410998914.152588,-0.0034992791615860237,5430000000.0,5403548371.319018,-0.004871386497418349 +hmrc/private_pension_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,4350000000.0,4346645485.746268,-0.0007711527020072937,4350000000.0,4350034772.108743,7.993588216715846e-06 +hmrc/private_pension_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,1810000000.0,1801069134.3691978,-0.004934179906520527,1810000000.0,1805680170.2604175,-0.0023866462649627285 +hmrc/private_pension_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,13600000000.0,13578160298.319824,-0.0016058604176599838,13600000000.0,13575575609.182514,-0.0017959110895210155 +hmrc/private_pension_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,1570000000.0,1567671040.824632,-0.0014834134874955863,1570000000.0,1563741359.6026456,-0.003986395157550551 +hmrc/private_pension_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,30200000000.0,30169523826.97483,-0.0010091448021579263,30200000000.0,30151146764.059402,-0.001617656819225084 +hmrc/private_pension_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,1120000000.0,998581436.0865912,-0.10840943206554353,1120000000.0,973923600.4508489,-0.13042535674031344 +hmrc/private_pension_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,24900000000.0,24890833410.855362,-0.00036813611022642816,24900000000.0,24871439786.352585,-0.0011469965320247053 +hmrc/private_pension_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,16900000000.0,16900922286.389114,5.457315911919408e-05,16900000000.0,16886000327.936195,-0.0008283829623553033 +hmrc/private_pension_income_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,640000000.0,641528101.5653784,0.002387658695903793,640000000.0,638968987.0733439,-0.0016109576979001985 +hmrc/private_pension_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,17400000000.0,17389574266.466526,-0.0005991800881306878,17400000000.0,17398051161.038784,-0.00011200223915034328 +hmrc/private_pension_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,9470000000.0,9457622862.91149,-0.001306983853063412,9470000000.0,9456098352.779343,-0.0014679669715583262 +hmrc/property_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,137000.0,136881.7260723114,-0.0008633133407926907,137000.0,137032.01652145386,0.00023369723688947022 +hmrc/property_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,101000.0,100859.34951019287,-0.0013925791070012762,101000.0,100733.78307723999,-0.0026358111164357404 +hmrc/property_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,54000.0,53917.88989448547,-0.001520557509528266,54000.0,54168.03489494324,0.0031117573137636537 +hmrc/property_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,232000.0,231537.66903686523,-0.0019928058755808863,232000.0,232094.10341835022,0.0004056181825440505 +hmrc/property_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,41000.0,41046.37253570557,0.001131037456233327,41000.0,41053.719252586365,0.0013102256728381645 +hmrc/property_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,431000.0,430617.2193546295,-0.0008881221470312839,431000.0,430623.5626182556,-0.0008734045980148138 +hmrc/property_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,23000.0,23007.192695617676,0.00031272589642068613,23000.0,22978.776708602905,-0.0009227517998736838 +hmrc/property_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,364000.0,364387.31760406494,0.0010640593518267622,364000.0,364290.6761540626,0.000798560862809389 +hmrc/property_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,325000.0,324773.2037878793,-0.000697834498832862,325000.0,325272.62531486386,0.0008388471226580441 +hmrc/property_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,397000.0,397118.30762290955,0.000298004087933365,397000.0,397203.9712314606,0.0005137814394472829 +hmrc/property_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,226000.0,225893.8906803131,-0.0004695102641012816,226000.0,226162.23794555664,0.0007178670157373479 +hmrc/self_employment_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,85000.0,84938.21348953247,-0.0007269001231474035,85000.0,85151.61635684967,0.0017837218452902402 +hmrc/self_employment_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,444000.0,444277.90880966187,0.0006259207424816784,444000.0,443925.4870452881,-0.00016782197007187853 +hmrc/self_employment_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,40000.0,39921.50653076172,-0.0019623367309570313,40000.0,40054.87124252319,0.001371781063079834 +hmrc/self_employment_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,651000.0,650179.803440094,-0.0012599025497788108,651000.0,650115.1590298758,-0.0013592027190848456 +hmrc/self_employment_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,34000.0,33966.705949783325,-0.0009792367710786708,34000.0,34117.96673774719,0.0034696099337409524 +hmrc/self_employment_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,961000.0,961503.7924113274,0.0005242376808817503,961000.0,959363.8700499535,-0.0017025285640442657 +hmrc/self_employment_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,21000.0,21016.631408691406,0.0007919718424479167,21000.0,20974.027465820312,-0.001236787341889881 +hmrc/self_employment_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,595000.0,594765.2763404846,-0.00039449354540400147,595000.0,593875.3341479301,-0.0018901947093611004 +hmrc/self_employment_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,359000.0,358786.50452423096,-0.0005946949185767214,359000.0,359109.0376300812,0.00030372598908405784 +hmrc/self_employment_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,311000.0,310726.179210186,-0.0008804527003665446,311000.0,310821.2483224869,-0.0005747642363765999 +hmrc/self_employment_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,143000.0,142997.57814216614,-1.6936068768267866e-05,143000.0,142938.3185210228,-0.00043133901382659697 +hmrc/self_employment_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,4980000000.0,4980030897.899983,6.20439758702933e-06,4980000000.0,4996134400.140031,0.003239839385548366 +hmrc/self_employment_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,4810000000.0,4815403310.5660715,0.001123349390035657,4810000000.0,4809268946.417897,-0.00015198619170535876 +hmrc/self_employment_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,3650000000.0,3650444531.748102,0.00012178952002799675,3650000000.0,3648762866.461845,-0.0003389406953849531 +hmrc/self_employment_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,8030000000.0,8030099199.409501,1.2353600186933468e-05,8030000000.0,8025529190.604052,-0.0005567633120732764 +hmrc/self_employment_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,4390000000.0,4399745372.18752,0.002219902548410029,4390000000.0,4425735456.532742,0.008140195109963905 +hmrc/self_employment_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,15700000000.0,19788765386.485855,0.26043091633667864,15700000000.0,19678337398.761765,0.25339728654533533 +hmrc/self_employment_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,4840000000.0,4853366121.748816,0.002761595402647838,4840000000.0,4845410769.00428,0.001117927480223159 +hmrc/self_employment_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,12600000000.0,14576649818.495884,0.15687696972189555,12600000000.0,14512750618.42308,0.1518056046367524 +hmrc/self_employment_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,8730000000.0,9167749771.00845,0.05014315819111679,8730000000.0,9211204364.769573,0.055120774887694526 +hmrc/self_employment_income_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,6670000000.0,6668763574.350714,-0.0001853711618120345,6670000000.0,6677524747.689924,0.0011281480794489115 +hmrc/self_employment_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,8220000000.0,9020495703.55576,0.09738390554206319,8220000000.0,9028730003.63488,0.09838564521105597 +hmrc/self_employment_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,5360000000.0,5363217000.100863,0.0006001865859819881,5360000000.0,5362726971.27182,0.000508763296981356 +hmrc/state_pension_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,74000.0,73578.40440750122,-0.005697237736469991,74000.0,73569.19233894348,-0.005821725149412413 +hmrc/state_pension_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,1140000.0,1136605.0162029266,-0.0029780559623450564,1140000.0,1136066.4237857233,-0.0034505054511199296 +hmrc/state_pension_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,21000.0,20964.464184761047,-0.0016921816780453636,21000.0,20909.216032981873,-0.0043230460484822595 +hmrc/state_pension_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,2050000.0,2044478.4216796202,-0.0026934528392096755,2050000.0,2043799.4250564792,-0.003024670704156501 +hmrc/state_pension_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,14000.0,13981.479522705078,-0.0013228912353515625,14000.0,13929.801578521729,-0.005014172962733677 +hmrc/state_pension_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,2320000.0,2315902.1012153625,-0.0017663356830333841,2320000.0,2314517.7426748276,-0.002363041950505355 +hmrc/state_pension_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,8000.0,8027.89266204834,0.0034865827560424806,8000.0,7992.936065673828,-0.0008829917907714844 +hmrc/state_pension_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,1160000.0,1157001.814716339,-0.0025846424859145593,1160000.0,1156712.5533051116,-0.0028340057714555237 +hmrc/state_pension_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,568000.0,566338.753660202,-0.002924729471475306,568000.0,565714.5786209106,-0.004023629188537598 +hmrc/state_pension_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,3000.0,3004.3687133789062,0.00145623779296875,3000.0,2995.0454635620117,-0.0016515121459960938 +hmrc/state_pension_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,441000.0,430194.61750415654,-0.02450200112436158,441000.0,428175.54030799866,-0.029080407464855653 +hmrc/state_pension_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,176000.0,175729.2636976242,-0.0015382744453170084,176000.0,175603.90340471268,-0.0022505488368597896 +hmrc/state_pension_income_band_100_000_to_150_000@2025,hmrc_spi,False,847000000.0,843181828.0615735,-0.0045078771409994035,847000000.0,842947821.0252441,-0.004784154633714148 +hmrc/state_pension_income_band_12_570_to_15_000@2025,hmrc_spi,False,11800000000.0,13111748721.3314,0.11116514587554237,11800000000.0,13109858779.740211,0.11100498133391623 +hmrc/state_pension_income_band_150_000_to_200_000@2025,hmrc_spi,False,265000000.0,264843222.44576156,-0.0005916134122205231,265000000.0,263749175.3133915,-0.004720093157013183 +hmrc/state_pension_income_band_15_000_to_20_000@2025,hmrc_spi,False,22200000000.0,25377650196.5516,0.14313739624106311,22200000000.0,25368815829.222473,0.14273945176677807 +hmrc/state_pension_income_band_200_000_to_300_000@2025,hmrc_spi,False,179000000.0,178816343.4071458,-0.0010260144852190045,179000000.0,178197935.65254474,-0.004480806410364599 +hmrc/state_pension_income_band_20_000_to_30_000@2025,hmrc_spi,False,24900000000.0,29167459646.592186,0.171383921549887,24900000000.0,29160418018.945892,0.17110112525887117 +hmrc/state_pension_income_band_300_000_to_500_000@2025,hmrc_spi,False,96000000.0,95930007.81504366,-0.0007290852599618956,96000000.0,95586052.38875926,-0.004311954283757756 +hmrc/state_pension_income_band_30_000_to_40_000@2025,hmrc_spi,False,12300000000.0,14067869503.18636,0.14372922790133003,12300000000.0,14060019371.372112,0.14309100580261075 +hmrc/state_pension_income_band_40_000_to_50_000@2025,hmrc_spi,False,6020000000.0,6530387864.006682,0.08478203721041236,6020000000.0,6516524999.703514,0.08247923583114852 +hmrc/state_pension_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,43000000.0,43050091.75034857,0.001164924426710883,43000000.0,42917029.15362482,-0.001929554566864704 +hmrc/state_pension_income_band_50_000_to_70_000@2025,hmrc_spi,False,4660000000.0,4842589049.834036,0.03918219953520083,4660000000.0,4824547994.83874,0.035310728506167455 +hmrc/state_pension_income_band_70_000_to_100_000@2025,hmrc_spi,False,1890000000.0,1888501998.2143908,-0.000792593537359389,1890000000.0,1887959290.8685439,-0.001079740281193723 +isc.private_school_students@2025,isc,False,556551.0,556112.8858337402,-0.0007871950032607355,556551.0,556479.6089248657,-0.0001282740937205707 +mhclg.council_tax_stock.band_a@E12000001@2025,council_tax_stock,False,621096.0,620194.9571781158,-0.0014507303571173462,621096.0,622049.6735458374,0.0015354688258134045 +mhclg.council_tax_stock.band_a@E12000002@2025,council_tax_stock,False,1285713.0,1285283.3794378387,-0.0003341496602751306,1285713.0,1284559.07183964,-0.0008975005777806423 +mhclg.council_tax_stock.band_a@E12000003@2025,council_tax_stock,False,988548.0,988687.8627319336,0.00014148299519456186,988548.0,988576.0378575325,2.8362666792610192e-05 +mhclg.council_tax_stock.band_a@E12000004@2025,council_tax_stock,False,739971.0,739584.0246810913,-0.000522960114529747,739971.0,738831.6317186356,-0.0015397472081533478 +mhclg.council_tax_stock.band_a@E12000005@2025,council_tax_stock,False,728493.0,727134.7655916971,-0.0018644440074275677,728493.0,726744.8303852081,-0.002399706812271182 +mhclg.council_tax_stock.band_a@E12000006@2025,council_tax_stock,False,364482.0,363957.9205608368,-0.0014378746801301792,364482.0,364609.83808612823,0.0003507390930916612 +mhclg.council_tax_stock.band_a@E12000007@2025,council_tax_stock,False,118732.0,118437.56732177734,-0.0024798089666025693,118732.0,118578.48318481445,-0.001292969167415245 +mhclg.council_tax_stock.band_a@E12000008@2025,council_tax_stock,False,320025.0,320278.77394485474,0.0007929816259815212,320025.0,321513.36463165283,0.004650776132029785 +mhclg.council_tax_stock.band_a@E12000009@2025,council_tax_stock,False,422969.0,422346.27302360535,-0.0014722756901679635,422969.0,423122.8185067177,0.00036366378320321796 +mhclg.council_tax_stock.band_b@E12000001@2025,council_tax_stock,False,193309.0,192903.76585388184,-0.002096302531791919,193309.0,192985.77997207642,-0.001672038176823552 +mhclg.council_tax_stock.band_b@E12000002@2025,council_tax_stock,False,666970.0,667705.5748056517,0.0011028604069923309,666970.0,667151.865908061,0.00027267479505980444 +mhclg.council_tax_stock.band_b@E12000003@2025,council_tax_stock,False,482052.0,481753.3534965515,-0.000619531717425685,482052.0,482122.763007164,0.00014679538133645636 +mhclg.council_tax_stock.band_b@E12000004@2025,council_tax_stock,False,478320.0,477547.1876602173,-0.001615680589945465,478320.0,476841.7201948166,-0.003090566577152138 +mhclg.council_tax_stock.band_b@E12000005@2025,council_tax_stock,False,625673.0,625848.6727115994,0.00028077400111461634,625673.0,625430.9611675625,-0.0003868455765831031 +mhclg.council_tax_stock.band_b@E12000006@2025,council_tax_stock,False,568914.0,568559.471321106,-0.000623167436368314,568914.0,568284.5200715433,-0.0011064588469552735 +mhclg.council_tax_stock.band_b@E12000007@2025,council_tax_stock,False,463447.0,463533.025182724,0.00018562032492172573,463447.0,463696.96045924316,0.000539350690031777 +mhclg.council_tax_stock.band_b@E12000008@2025,council_tax_stock,False,649092.0,648308.064116478,-0.0012077423285482393,649092.0,649059.7980632782,-4.9610743502926795e-05 +mhclg.council_tax_stock.band_b@E12000009@2025,council_tax_stock,False,609286.0,609887.542760849,0.0009872912898852082,609286.0,609817.2607212067,0.0008719398134975447 +mhclg.council_tax_stock.band_c@E12000001@2025,council_tax_stock,False,186703.0,186750.9312095642,0.0002567243673867532,186703.0,186859.11717414856,0.0008361792480493595 +mhclg.council_tax_stock.band_c@E12000002@2025,council_tax_stock,False,585587.0,585362.172203064,-0.00038393577203051836,585587.0,584842.3816293821,-0.0012715759923254038 +mhclg.council_tax_stock.band_c@E12000003@2025,council_tax_stock,False,408440.0,408506.7806444168,0.00016350172465186827,408440.0,408394.01471042633,-0.00011258762504570912 +mhclg.council_tax_stock.band_c@E12000004@2025,council_tax_stock,False,384470.0,384445.54001426697,-6.362001127014391e-05,384470.0,384324.8839702606,-0.00037744435128717426 +mhclg.council_tax_stock.band_c@E12000005@2025,council_tax_stock,False,503657.0,503460.320852431,-0.0003905021623227653,503657.0,501770.00629997253,-0.003746584878255372 +mhclg.council_tax_stock.band_c@E12000006@2025,council_tax_stock,False,708146.0,707312.1177453995,-0.0011775569650898613,708146.0,708117.3152685165,-4.050680436443823e-05 +mhclg.council_tax_stock.band_c@E12000007@2025,council_tax_stock,False,991205.0,991777.1511862333,0.0005772279056635812,991205.0,991054.4381990541,-0.00015189774158312302 +mhclg.council_tax_stock.band_c@E12000008@2025,council_tax_stock,False,1024169.0,1024776.7852220535,0.0005934423147483744,1024169.0,1023257.9715738297,-0.0008895293903353344 +mhclg.council_tax_stock.band_c@E12000009@2025,council_tax_stock,False,587214.0,586099.308303833,-0.001898271662744744,587214.0,587217.0872716904,5.257489927639076e-06 +mhclg.council_tax_stock.band_d@E12000001@2025,council_tax_stock,False,108432.0,108514.6448726654,0.0007621815761528448,108432.0,108371.78597450256,-0.00055531600908806 +mhclg.council_tax_stock.band_d@E12000002@2025,council_tax_stock,False,346489.0,346640.89738082886,0.0004383901965974603,346489.0,346690.149231349,0.0005805356918949855 +mhclg.council_tax_stock.band_d@E12000003@2025,council_tax_stock,False,237496.0,237483.99088859558,-5.056553122755308e-05,237496.0,237591.2750635147,0.00040116491862898524 +mhclg.council_tax_stock.band_d@E12000004@2025,council_tax_stock,False,238335.0,238126.12706756592,-0.0008763837977388215,238335.0,238087.25663375854,-0.0010394753864999059 +mhclg.council_tax_stock.band_d@E12000005@2025,council_tax_stock,False,288790.0,288892.22273460263,0.0003539690938143075,288790.0,288306.36939430237,-0.0016746791983712449 +mhclg.council_tax_stock.band_d@E12000006@2025,council_tax_stock,False,485975.0,485387.6507373223,-0.001208599748295108,485975.0,484025.24270248413,-0.004012052672495229 +mhclg.council_tax_stock.band_d@E12000007@2025,council_tax_stock,False,929941.0,930067.9663539041,0.00013653162287081294,929941.0,930181.5587587357,0.00025868174296612013 +mhclg.council_tax_stock.band_d@E12000008@2025,council_tax_stock,False,807114.0,806798.9860906601,-0.00039029667350573127,807114.0,806588.0575590134,-0.000651633401213005 +mhclg.council_tax_stock.band_d@E12000009@2025,council_tax_stock,False,404568.0,404870.18783569336,0.000746939539690137,404568.0,404881.0755572319,0.0007738515088487055 +mhclg.council_tax_stock.band_e@E12000001@2025,council_tax_stock,False,58932.0,58708.52875518799,-0.0037920186793594605,58932.0,59031.00852584839,0.0016800469328783797 +mhclg.council_tax_stock.band_e@E12000002@2025,council_tax_stock,False,207825.0,207981.2329711914,0.0007517525379112535,207825.0,207749.39052391052,-0.00036381318941165666 +mhclg.council_tax_stock.band_e@E12000003@2025,council_tax_stock,False,152517.0,152760.4509420395,0.0015962216804650613,152517.0,152056.79827404022,-0.0030173798721439436 +mhclg.council_tax_stock.band_e@E12000004@2025,council_tax_stock,False,149931.0,150015.4684267044,0.0005633820004162363,149931.0,149568.74155712128,-0.0024161677230107393 +mhclg.council_tax_stock.band_e@E12000005@2025,council_tax_stock,False,185672.0,185746.73205566406,0.0004024950216729636,185672.0,185674.12697601318,1.1455556105301788e-05 +mhclg.council_tax_stock.band_e@E12000006@2025,council_tax_stock,False,301723.0,302064.2689078404,0.0011310669317235408,301723.0,301444.86578992696,-0.0009218197156764312 +mhclg.council_tax_stock.band_e@E12000007@2025,council_tax_stock,False,551952.0,552325.0366301645,0.000675849766219676,551952.0,552704.0915022113,0.0013626030926806852 +mhclg.council_tax_stock.band_e@E12000008@2025,council_tax_stock,False,529137.0,529146.0169086456,1.704078271908765e-05,529137.0,528713.4236831665,-0.0008005040600704469 +mhclg.council_tax_stock.band_e@E12000009@2025,council_tax_stock,False,274120.0,274278.4754009247,0.0005781241825648717,274120.0,274139.85486221313,7.24312790498131e-05 +mhclg.council_tax_stock.band_f@E12000001@2025,council_tax_stock,False,25729.0,25775.728233337402,0.001816169821501121,25729.0,25630.183868408203,-0.003840651855563639 +mhclg.council_tax_stock.band_f@E12000002@2025,council_tax_stock,False,100117.0,99958.25249481201,-0.0015856198766242325,100117.0,99888.52194213867,-0.00228211050931738 +mhclg.council_tax_stock.band_f@E12000003@2025,council_tax_stock,False,73172.0,73123.63964128494,-0.0006609134466060429,73172.0,73363.23878097534,0.0026135513717725606 +mhclg.council_tax_stock.band_f@E12000004@2025,council_tax_stock,False,71418.0,71433.54439926147,0.0002176538024234032,71418.0,71266.578125,-0.0021202200425663 +mhclg.council_tax_stock.band_f@E12000005@2025,council_tax_stock,False,102077.0,102066.87266921997,-9.92126608347551e-05,102077.0,102116.6750793457,0.00038867795238597453 +mhclg.council_tax_stock.band_f@E12000006@2025,council_tax_stock,False,166744.0,166552.83470344543,-0.0011464598219699984,166744.0,166316.21382522583,-0.002565526644282073 +mhclg.council_tax_stock.band_f@E12000007@2025,council_tax_stock,False,279261.0,279144.99192619324,-0.00041541093746267006,279261.0,278944.65284347534,-0.0011328010589543767 +mhclg.council_tax_stock.band_f@E12000008@2025,council_tax_stock,False,325815.0,326410.0446662903,0.0018263267998412695,325815.0,325438.6130657196,-0.0011552167158675798 +mhclg.council_tax_stock.band_f@E12000009@2025,council_tax_stock,False,139412.0,139273.56274032593,-0.000993008203555449,139412.0,139154.98787498474,-0.0018435437768288153 +mhclg.council_tax_stock.band_g@E12000001@2025,council_tax_stock,False,14062.0,14076.558532714844,0.0010353102485310588,14062.0,14016.375885009766,-0.0032444968703053884 +mhclg.council_tax_stock.band_g@E12000002@2025,council_tax_stock,False,62587.0,62479.37763786316,-0.0017195641608775116,62587.0,62375.85375022888,-0.0033736438840512913 +mhclg.council_tax_stock.band_g@E12000003@2025,council_tax_stock,False,40487.0,40558.9407081604,0.0017768841396102548,40487.0,40397.65264129639,-0.0022068159829973393 +mhclg.council_tax_stock.band_g@E12000004@2025,council_tax_stock,False,37892.0,37878.61399459839,-0.0003532673229602905,37892.0,37618.3215713501,-0.007222591276520172 +mhclg.council_tax_stock.band_g@E12000005@2025,council_tax_stock,False,60209.0,60203.69123840332,-8.817222668836366e-05,60209.0,59928.25450134277,-0.004662849385593957 +mhclg.council_tax_stock.band_g@E12000006@2025,council_tax_stock,False,108700.0,108689.91599845886,-9.276910341433022e-05,108700.0,108905.96536973806,0.0018948056093657435 +mhclg.council_tax_stock.band_g@E12000007@2025,council_tax_stock,False,207056.0,207102.33735466003,0.00022379141227510518,207056.0,207396.55295181274,0.0016447383887100307 +mhclg.council_tax_stock.band_g@E12000008@2025,council_tax_stock,False,255206.0,255706.63027000427,0.0019616712381537757,255206.0,254637.2344675064,-0.0022286526668400873 +mhclg.council_tax_stock.band_g@E12000009@2025,council_tax_stock,False,75533.0,75494.89457321167,-0.0005044871352697507,75533.0,75093.62637329102,-0.005816975715369235 +mhclg.council_tax_stock.band_h@E12000004@2025,council_tax_stock,False,2779.0,2777.045166015625,-0.0007034307248560633,2779.0,2779.6568603515625,0.00023636572564321697 +mhclg.council_tax_stock.band_h@E12000005@2025,council_tax_stock,False,5285.0,5266.8173828125,-0.0034404195245979186,5285.0,5291.653579711914,0.0012589554800215823 +mhclg.council_tax_stock.band_h@E12000006@2025,council_tax_stock,False,13447.0,13547.438842773438,0.007469237954446159,13447.0,13475.417846679688,0.002113322427283967 +mhclg.council_tax_stock.band_h@E12000007@2025,council_tax_stock,False,59569.0,59460.119148254395,-0.0018278106354917066,59569.0,59552.63742351532,-0.00027468274580201406 +mhclg.council_tax_stock.band_h@E12000008@2025,council_tax_stock,False,36978.0,37319.16191101074,0.009226077965567153,36978.0,36855.20357513428,-0.0033207968215079953 +mhclg.council_tax_stock.band_h@E12000009@2025,council_tax_stock,False,6697.0,6735.3565673828125,0.005727425322205839,6697.0,6671.47021484375,-0.0038121226155368075 +mhclg.council_tax_stock.total@E12000001@2025,council_tax_stock,False,1209414.0,1206925.1146354675,-0.0020579267021321656,1209414.0,1208943.9249458313,-0.00038868001707331084 +mhclg.council_tax_stock.total@E12000002@2025,council_tax_stock,False,3261518.0,3255410.88693125,-0.0018724756597235177,3261518.0,3253257.2348247105,-0.0025327976651637286 +mhclg.council_tax_stock.total@E12000003@2025,council_tax_stock,False,2385734.0,2382875.0190529823,-0.0011983653445931817,2385734.0,2382501.7803349495,-0.0013548114186453756 +mhclg.council_tax_stock.total@E12000004@2025,council_tax_stock,False,2103116.0,2101807.5514097214,-0.0006221476087284893,2103116.0,2099318.7906312943,-0.0018055158957973546 +mhclg.council_tax_stock.total@E12000005@2025,council_tax_stock,False,2499856.0,2498620.0952364304,-0.0004943903823138572,2499856.0,2495262.8773834594,-0.0018373548782572439 +mhclg.council_tax_stock.total@E12000006@2025,council_tax_stock,False,2718131.0,2716071.6188171823,-0.000757646037964227,2718131.0,2715179.378960242,-0.0010859009517046716 +mhclg.council_tax_stock.total@E12000007@2025,council_tax_stock,False,3601163.0,3601848.195103911,0.000190270505364855,3601163.0,3602109.3753228625,0.00026279713605369386 +mhclg.council_tax_stock.total@E12000008@2025,council_tax_stock,False,3947536.0,3948744.4631299973,0.00030613099665139303,3947536.0,3946063.666619301,-0.00037297528906618147 +mhclg.council_tax_stock.total@E12000009@2025,council_tax_stock,False,2519799.0,2518985.601205826,-0.0003228030466613386,2519799.0,2520098.1813821793,0.00011873224101575572 +nithc.public_transport_support@2025,dft_local_bus,False,111700000.0,111492148.58393034,-0.0018608005019664872,111700000.0,111742322.41018805,0.0003788935558464555 +obr.attendance_allowance@2025,obr,False,8492497075.074617,8464315474.324637,-0.003318411593298354,8492497075.074617,8469470533.252484,-0.002711398263499637 +obr.carers_allowance@2025,obr,False,4569403813.760573,4569753917.682451,7.661916874659608e-05,4569403813.760573,4571205428.399673,0.00039427783416177525 +obr.child_benefit@2025,obr,False,13389272724.45089,16031537202.628736,0.1973418969465505,13389272724.45089,16040484303.018097,0.19801012595147782 +obr.council_tax@2025,obr,False,50925163826.30539,44769794834.09963,-0.1208708726632746,50925163826.30539,44763595795.852585,-0.12099260105413832 +obr.esa@2025,obr,False,7206287181.538654,6498237299.695721,-0.09825446363792485,7206287181.538654,6508208131.488838,-0.09687083410139165 +obr.fuel_duties_cars@2025,obr,False,14400000000.0,12015455374.64862,-0.16559337676051245,14400000000.0,12057525841.91529,-0.16267181653366036 +obr.income_tax@2025,obr,False,331437583074.4429,288873911060.3093,-0.12842138063918204,331437583074.4429,289030712955.9042,-0.12794828433507452 +obr.jobseekers_allowance@2025,obr,False,280558748.04472804,279958185.4513395,-0.0021405947865607558,280558748.04472804,280679096.84732753,0.0004289611478459517 +obr.ni@2025,obr,False,200081395082.7125,196428193894.51556,-0.018258575149811992,200081395082.7125,196458321965.47675,-0.018107996076986523 +obr.ni_employee@2025,obr,False,49544363784.26465,47677389950.58033,-0.03768287028195267,49544363784.26465,47680060018.79099,-0.03762897781050447 +obr.ni_employer@2025,obr,False,145324007512.71753,145850768556.15732,0.003624735186260888,145324007512.71753,145879262955.651,0.003820810149932594 +obr.ni_self_employed@2025,obr,False,2902816090.4147716,2900035497.4771214,-0.0009578949720004123,2902816090.4147716,2898999097.1628437,-0.0013149276885062525 +obr.pension_credit@2025,obr,False,6146422389.476461,6131573069.689932,-0.002415928949489977,6146422389.476461,6142532938.556917,-0.0006327991591016436 +obr.pip@2025,obr,False,36910059270.5278,36874599088.03161,-0.0009607186549415113,36910059270.5278,36858729542.63221,-0.0013906704272506505 +obr.sdlt@2025,obr,False,15406516698.785578,15374327355.247734,-0.002089332985981253,15406516698.785578,15379452304.907034,-0.0017566848112186976 +obr.state_pension@2025,obr,False,146185954351.57382,135388915617.3279,-0.07385824980339287,146185954351.57382,135394668803.62427,-0.07381889454301993 +obr.statutory_maternity_pay@2025,obr,False,3194800881.520547,3201543213.261227,0.002110407499784852,3194800881.520547,3192831299.1970973,-0.0006164961124313326 +obr.tv_licence_fee@2025,obr,False,3872000000.0,3870761512.745221,-0.00031985724555239206,3872000000.0,3868551895.843459,-0.0008905227677016712 +obr.universal_credit@2025,obr,False,79286349139.54411,79166803620.77298,-0.0015077692448763544,79286349139.54411,79180150994.71027,-0.0013394253359672057 +obr.vat@2025,obr,False,180168938685.41794,218219977029.93292,0.21119643942041305,180168938685.41794,218208644894.7719,0.2111335421460899 +obr.winter_fuel_allowance@2025,obr,False,1911040880.4619167,1885485588.748808,-0.013372446384784726,1911040880.4619167,1885099606.7991765,-0.01357442110629783 +ons.household_composition.couple_3_plus_children_households@2025,ons_household_composition,False,931000.0,931460.5526982867,0.0004946860346796089,931000.0,929688.9077796936,-0.0014082623204150339 +ons.household_composition.couple_no_children_households@2025,ons_household_composition,False,8119000.0,8120444.919556134,0.00017796767534602543,8119000.0,8114841.361414371,-0.0005122106892017418 +ons.household_composition.couple_non_dependent_children_only_households@2025,ons_household_composition,False,1848000.0,1847621.5034827339,-0.00020481413271977643,1848000.0,1848432.1303667282,0.00023383677853256246 +ons.household_composition.couple_under_3_children_households@2025,ons_household_composition,False,5439000.0,5437932.706181859,-0.00019622978822234486,5439000.0,5439154.972141846,2.8492763715036423e-05 +ons.household_composition.lone_households_over_65@2025,ons_household_composition,False,4254000.0,4250446.745724829,-0.0008352736895089531,4254000.0,4246772.411339356,-0.001699010028360218 +ons.household_composition.lone_households_under_65@2025,ons_household_composition,False,4316000.0,4312240.722036762,-0.0008710097227149761,4316000.0,4315595.344229221,-9.375712946678777e-05 +ons.household_composition.lone_parent_dependent_children_households@2025,ons_household_composition,False,1835000.0,1833730.5642666817,-0.0006917905903642119,1835000.0,1834299.319185257,-0.0003818424058545188 +ons.household_composition.lone_parent_non_dependent_children_households@2025,ons_household_composition,False,1204000.0,1207919.7250995636,0.0032555856308667764,1204000.0,1203812.6405958282,-0.0001556141230662932 +ons.household_composition.multi_family_households@2025,ons_household_composition,False,244000.0,243946.38682937622,-0.00021972610911384958,244000.0,244446.89408874512,0.0018315331505947426 +ons.household_composition.unrelated_adult_households@2025,ons_household_composition,False,813000.0,812647.3109092712,-0.00043381191971557164,813000.0,811785.9488677979,-0.0014932978255868985 +ons.household_energy_expenditure@2025,ons_national_accounts,False,43427000000.0,43402765371.90854,-0.0005580543922320488,43427000000.0,43400491701.18111,-0.0006104105468693079 +ons.land.corporate_land_value@2025,ons_land,False,2103053000000.0,2102251629065.8828,-0.00038105123081405345,2103053000000.0,2100732092689.287,-0.0011035895484863628 +ons.land.household_land_value@2025,ons_land,False,4559831000000.0,4559926839959.675,2.1018313984620196e-05,4559831000000.0,4560075719702.076,5.366859036577713e-05 +ons.land.land_value@2025,ons_land,False,7117771000000.0,6662178468268.26,-0.06400775351324736,7117771000000.0,6660807823458.541,-0.06420032009198652 +ons.population.age_0_9_by_region@E12000001@2025,ons_population,False,285165.0,284609.9429988861,-0.0019464415377549544,285165.0,285815.25963783264,0.0022802925949279946 +ons.population.age_0_9_by_region@E12000002@2025,ons_population,False,865892.0,865455.561085701,-0.0005040338914079484,865892.0,865820.2304600821,-8.288509412020855e-05 +ons.population.age_0_9_by_region@E12000003@2025,ons_population,False,626938.0,626571.9527072906,-0.0005838652190636882,626938.0,627695.364358902,0.00120803709282573 +ons.population.age_0_9_by_region@E12000004@2025,ons_population,False,543004.0,542600.5250740051,-0.0007430422722390131,543004.0,542680.280093193,-0.000596164865833301 +ons.population.age_0_9_by_region@E12000005@2025,ons_population,False,718837.0,718518.2166614532,-0.0004434709656664208,718837.0,718677.0200996399,-0.00022255379225068745 +ons.population.age_0_9_by_region@E12000006@2025,ons_population,False,744698.0,744733.5138652509,4.76889494142072e-05,744698.0,744480.8659558664,-0.00029157328760597234 +ons.population.age_0_9_by_region@E12000007@2025,ons_population,False,1054493.0,1054045.5713834763,-0.00042430686265697607,1054493.0,1054900.6959486008,0.0003866274585044842 +ons.population.age_0_9_by_region@E12000008@2025,ons_population,False,1059434.0,1058727.9531116486,-0.000666437822791642,1059434.0,1059327.5348834991,-0.00010049244832698827 +ons.population.age_0_9_by_region@E12000009@2025,ons_population,False,575506.0,575020.3139476776,-0.0008439287380537956,575506.0,575581.3799886703,0.00013098036974479695 +ons.population.age_0_9_by_region@N92000002@2025,ons_population,False,229505.0,229853.9004907608,0.001520230455810563,229505.0,229409.21150445938,-0.00041736997250874227 +ons.population.age_0_9_by_region@S92000003@2025,ons_population,False,527989.0,527794.9173984528,-0.0003675883428390387,527989.0,526921.1991195679,-0.002022392285506192 +ons.population.age_0_9_by_region@W92000004@2025,ons_population,False,321552.0,321050.732875824,-0.0015588991024034226,321552.0,320682.1037788391,-0.0027053049620617774 +ons.population.age_10_19_by_region@E12000001@2025,ons_population,False,326306.0,325976.6063747406,-0.0010094623612786752,326306.0,326321.7274646759,4.819851512354453e-05 +ons.population.age_10_19_by_region@E12000002@2025,ons_population,False,952864.0,952052.4070858107,-0.0008517405570882397,952864.0,952313.461977397,-0.0005777718778367371 +ons.population.age_10_19_by_region@E12000003@2025,ons_population,False,696780.0,696847.7113595009,9.717753021166653e-05,696780.0,697422.7549877167,0.0009224647488686168 +ons.population.age_10_19_by_region@E12000004@2025,ons_population,False,615630.0,614734.3473949432,-0.001454855359642582,615630.0,613958.1790428162,-0.002715626199476695 +ons.population.age_10_19_by_region@E12000005@2025,ons_population,False,785062.0,785543.875207477,0.0006138052885976093,785062.0,783924.057891997,-0.0014494932986222197 +ons.population.age_10_19_by_region@E12000006@2025,ons_population,False,785091.0,784457.7626464551,-0.0008065782865233649,785091.0,783689.0186858545,-0.0017857564462533569 +ons.population.age_10_19_by_region@E12000007@2025,ons_population,False,1068691.0,1068464.3065729141,-0.00021212251912468288,1068691.0,1069404.2698369026,0.0006674238268148776 +ons.population.age_10_19_by_region@E12000008@2025,ons_population,False,1183235.0,1183052.2799797058,-0.00015442411718229215,1183235.0,1183647.8443317413,0.0003489115279224609 +ons.population.age_10_19_by_region@E12000009@2025,ons_population,False,677228.0,677339.0187215805,0.0001639310861046876,677228.0,676980.6806235313,-0.000365193666636138 +ons.population.age_10_19_by_region@N92000002@2025,ons_population,False,252764.0,253409.34803533554,0.002553164356219797,252764.0,252508.54029607773,-0.001010664904504881 +ons.population.age_10_19_by_region@S92000003@2025,ons_population,False,612935.0,612865.6775856018,-0.00011309912861591091,612935.0,611732.4179592133,-0.001962005825718458 +ons.population.age_10_19_by_region@W92000004@2025,ons_population,False,374851.0,374968.99680805206,0.0003147832286750282,374851.0,373927.1735391617,-0.0024645164634436558 +ons.population.age_20_29_by_region@E12000001@2025,ons_population,False,343015.0,342763.2720069885,-0.0007338687608748148,343015.0,343350.73349380493,0.0009787720473009391 +ons.population.age_20_29_by_region@E12000002@2025,ons_population,False,986590.0,986526.0422205076,-6.482711105156953e-05,986590.0,984142.3954427928,-0.0024808730650089737 +ons.population.age_20_29_by_region@E12000003@2025,ons_population,False,717479.0,717085.464466095,-0.0005484976339447277,717479.0,716543.3863258362,-0.001304029350216269 +ons.population.age_20_29_by_region@E12000004@2025,ons_population,False,612108.0,612098.2460422516,-1.593502739453346e-05,612108.0,611090.4865036011,-0.0016623104033911104 +ons.population.age_20_29_by_region@E12000005@2025,ons_population,False,766058.0,766542.9874440753,0.0006330949406902482,766058.0,765128.3332730853,-0.0012135722450711305 +ons.population.age_20_29_by_region@E12000006@2025,ons_population,False,727218.0,727476.6374969482,0.00035565332121625454,727218.0,727026.8712005615,-0.0002628218765741175 +ons.population.age_20_29_by_region@E12000007@2025,ons_population,False,1508607.0,1507259.431204086,-0.0008932537075023935,1508607.0,1507956.7768521416,-0.0004310089691075276 +ons.population.age_20_29_by_region@E12000008@2025,ons_population,False,1066121.0,1066585.0860977173,0.0004353034015062879,1066121.0,1065363.6288585663,-0.0007103988585101652 +ons.population.age_20_29_by_region@E12000009@2025,ons_population,False,684393.0,684861.380903244,0.0006843741874098925,684393.0,683352.1511750221,-0.0015208349953577474 +ons.population.age_20_29_by_region@N92000002@2025,ons_population,False,219525.0,219736.91438388824,0.0009653314378236858,219525.0,219611.79107570648,0.0003953585045278758 +ons.population.age_20_29_by_region@S92000003@2025,ons_population,False,703554.0,701364.6888618469,-0.003111788346243609,703554.0,701357.0057449341,-0.003122708782930547 +ons.population.age_20_29_by_region@W92000004@2025,ons_population,False,380557.0,380362.6153793335,-0.0005107897651771059,380557.0,380323.02798461914,-0.0006148146411204087 +ons.population.age_30_39_by_region@E12000001@2025,ons_population,False,363357.0,362320.89476394653,-0.002851480048694443,363357.0,364221.94745635986,0.002380434273620333 +ons.population.age_30_39_by_region@E12000002@2025,ons_population,False,1064968.0,1065548.3231199475,0.0005449207111832975,1064968.0,1064815.721108966,-0.00014298917059851437 +ons.population.age_30_39_by_region@E12000003@2025,ons_population,False,770809.0,770560.1672348976,-0.0003228202642968446,770809.0,770692.0764551163,-0.00015168938723306036 +ons.population.age_30_39_by_region@E12000004@2025,ons_population,False,676709.0,676543.4868240356,-0.00024458545100531465,676709.0,676283.2432584763,-0.0006291577938578365 +ons.population.age_30_39_by_region@E12000005@2025,ons_population,False,839114.0,838854.9021657913,-0.00030877548725053735,839114.0,838569.7612229907,-0.0006485874112567596 +ons.population.age_30_39_by_region@E12000006@2025,ons_population,False,895639.0,895252.0604333878,-0.0004320262590309753,895639.0,894946.3261709213,-0.0007733850681788916 +ons.population.age_30_39_by_region@E12000007@2025,ons_population,False,1537372.0,1534018.7645695263,-0.00218114771862223,1537372.0,1535416.734953902,-0.001271822985001702 +ons.population.age_30_39_by_region@E12000008@2025,ons_population,False,1284552.0,1284259.926044464,-0.00022737417834068895,1284552.0,1283483.7594604492,-0.0008316055243779787 +ons.population.age_30_39_by_region@E12000009@2025,ons_population,False,742082.0,742132.8662395477,6.85453083995158e-05,742082.0,742458.5950021744,0.0005074843510210157 +ons.population.age_30_39_by_region@N92000002@2025,ons_population,False,254067.0,254494.06637835503,0.0016809203019480146,254067.0,253962.04452872276,-0.0004131015491080579 +ons.population.age_30_39_by_region@S92000003@2025,ons_population,False,733480.0,732783.4366836548,-0.0009496691339166914,733480.0,731727.1338710785,-0.0023897940351768404 +ons.population.age_30_39_by_region@W92000004@2025,ons_population,False,410248.0,410204.61909103394,-0.00010574313333901555,410248.0,409649.31188201904,-0.0014593322038887625 +ons.population.age_40_49_by_region@E12000001@2025,ons_population,False,320860.0,321013.66044425964,0.00047890183961741433,320860.0,320955.7583427429,0.0002984427561644328 +ons.population.age_40_49_by_region@E12000002@2025,ons_population,False,930967.0,930497.6449722395,-0.0005041586090167486,930967.0,930514.6682628737,-0.00048587300852376096 +ons.population.age_40_49_by_region@E12000003@2025,ons_population,False,674349.0,674379.5499053001,4.53028110075649e-05,674349.0,675647.6875538826,0.0019258389259605914 +ons.population.age_40_49_by_region@E12000004@2025,ons_population,False,610611.0,609682.2416114807,-0.001521031210573159,610611.0,609894.2202425003,-0.0011738729854190227 +ons.population.age_40_49_by_region@E12000005@2025,ons_population,False,746341.0,746289.8564990209,-6.852564843557897e-05,746341.0,745498.659040451,-0.001128627476648007 +ons.population.age_40_49_by_region@E12000006@2025,ons_population,False,838578.0,838616.4733310112,4.587925155590736e-05,838578.0,839165.2361746568,0.0007002761516004196 +ons.population.age_40_49_by_region@E12000007@2025,ons_population,False,1268973.0,1258015.5042910683,-0.008634932113553009,1268973.0,1260049.6612625122,-0.007031937430889226 +ons.population.age_40_49_by_region@E12000008@2025,ons_population,False,1255951.0,1255119.7139348984,-0.0006618777843256812,1255951.0,1256068.7916908264,9.378685221510713e-05 +ons.population.age_40_49_by_region@E12000009@2025,ons_population,False,688417.0,687546.2866687775,-0.0012648050981055583,688417.0,688346.198431015,-0.00010284692124829188 +ons.population.age_40_49_by_region@N92000002@2025,ons_population,False,246140.0,246243.06718850136,0.00041873400707466494,246140.0,245986.4394609928,-0.0006238747826732221 +ons.population.age_40_49_by_region@S92000003@2025,ons_population,False,675368.0,675158.1136274338,-0.00031077334514845704,675368.0,674564.2146978378,-0.001190144191258944 +ons.population.age_40_49_by_region@W92000004@2025,ons_population,False,365951.0,365483.1434059143,-0.0012784678661506414,365951.0,365288.0163421631,-0.0018116733055434035 +ons.population.age_50_59_by_region@E12000001@2025,ons_population,False,360074.0,359886.9211444855,-0.0005195566897763414,360074.0,360060.7395076752,-3.682713088095531e-05 +ons.population.age_50_59_by_region@E12000002@2025,ons_population,False,995810.0,995746.7963461027,-6.346959148559988e-05,995810.0,995157.0894172877,-0.0006556577888475406 +ons.population.age_50_59_by_region@E12000003@2025,ons_population,False,736903.0,736626.5655660629,-0.0003751300156697323,736903.0,736839.2894077301,-8.645723015091194e-05 +ons.population.age_50_59_by_region@E12000004@2025,ons_population,False,676307.0,675686.4504814148,-0.0009175559599193932,676307.0,675215.1486797333,-0.0016144314937842187 +ons.population.age_50_59_by_region@E12000005@2025,ons_population,False,794143.0,794746.8683930957,0.0007604025888230153,794143.0,793417.4542658972,-0.00091362101548819 +ons.population.age_50_59_by_region@E12000006@2025,ons_population,False,866946.0,866605.7335467706,-0.0003924886362349634,866946.0,866234.2415981293,-0.0008209950814361304 +ons.population.age_50_59_by_region@E12000007@2025,ons_population,False,1087518.0,1086155.139494896,-0.001253184319803502,1087518.0,1087197.0747542598,-0.0002950987898501157 +ons.population.age_50_59_by_region@E12000008@2025,ons_population,False,1287719.0,1287957.7299718857,0.00018538980312139618,1287719.0,1287292.6985797882,-0.00033105158828268587 +ons.population.age_50_59_by_region@E12000009@2025,ons_population,False,784718.0,785513.1134653091,0.0010132473899020324,784718.0,785809.610013485,0.0013910857320527307 +ons.population.age_50_59_by_region@N92000002@2025,ons_population,False,255269.0,255796.59795570374,0.0020668312866181766,255269.0,255591.3528227806,0.0012627965901876419 +ons.population.age_50_59_by_region@S92000003@2025,ons_population,False,766715.0,765937.3916301727,-0.001014207847540834,766715.0,765246.7736721039,-0.0019149570934390461 +ons.population.age_50_59_by_region@W92000004@2025,ons_population,False,424694.0,424568.29020404816,-0.0002960008758113919,424694.0,424018.76752376556,-0.0015899270444942382 +ons.population.age_60_69_by_region@E12000001@2025,ons_population,False,349719.0,349593.85594177246,-0.00035784174788198254,349719.0,349581.4758758545,-0.0003932417859638962 +ons.population.age_60_69_by_region@E12000002@2025,ons_population,False,884043.0,883623.4940605164,-0.0004745311477876558,884043.0,884008.8717594147,-3.860472916512788e-05 +ons.population.age_60_69_by_region@E12000003@2025,ons_population,False,652931.0,652570.0643081665,-0.0005527930085008923,652931.0,652054.3723888397,-0.0013426037531688315 +ons.population.age_60_69_by_region@E12000004@2025,ons_population,False,591429.0,592810.8889827728,0.0023365255724234475,591429.0,590234.4848117828,-0.0020197102073404635 +ons.population.age_60_69_by_region@E12000005@2025,ons_population,False,677922.0,677563.8161260211,-0.0005283555836496074,677922.0,676045.3267688751,-0.002768273092073834 +ons.population.age_60_69_by_region@E12000006@2025,ons_population,False,744651.0,744053.5699324976,-0.0008022953940872003,744651.0,744311.7387185465,-0.0004555976980539054 +ons.population.age_60_69_by_region@E12000007@2025,ons_population,False,787666.0,787340.3348808289,-0.00041345585460225855,787666.0,787007.7885556329,-0.0008356479070660312 +ons.population.age_60_69_by_region@E12000008@2025,ons_population,False,1089421.0,1089254.1041965485,-0.0001531967930226589,1089421.0,1089327.0130081177,-8.627242533632473e-05 +ons.population.age_60_69_by_region@E12000009@2025,ons_population,False,736639.0,736440.7810535431,-0.0002690855988576619,736639.0,736614.7931623459,-3.2861194769912766e-05 +ons.population.age_60_69_by_region@N92000002@2025,ons_population,False,223111.0,223016.45362138748,-0.0004237638601974726,223111.0,223218.37842559814,0.00048127804365604804 +ons.population.age_60_69_by_region@S92000003@2025,ons_population,False,721727.0,721488.6410321316,-0.0003302619520516461,721727.0,719639.0931892395,-0.0028929315527346186 +ons.population.age_60_69_by_region@W92000004@2025,ons_population,False,401775.0,401787.2392578125,3.0462965123514406e-05,401775.0,401233.8584213257,-0.0013468771792030773 +ons.population.age_70_79_by_region@E12000001@2025,ons_population,False,265573.0,265352.5727844238,-0.0008300061210144551,265573.0,264993.0436668396,-0.0021837925284588435 +ons.population.age_70_79_by_region@E12000002@2025,ons_population,False,669277.0,669028.6429100037,-0.00037108266083600344,669277.0,669569.8539856167,0.0004375676821655375 +ons.population.age_70_79_by_region@E12000003@2025,ons_population,False,504131.0,502623.55839538574,-0.0029901783556541012,504131.0,504414.83004951477,0.0005630085226156901 +ons.population.age_70_79_by_region@E12000004@2025,ons_population,False,466530.0,466128.36456394196,-0.0008608994835445619,466530.0,465037.3242826462,-0.003199527827479092 +ons.population.age_70_79_by_region@E12000005@2025,ons_population,False,528207.0,527308.1121683877,-0.0017017719030839374,528207.0,526965.4424419403,-0.002350513261012619 +ons.population.age_70_79_by_region@E12000006@2025,ons_population,False,599882.0,599092.2607718247,-0.0013164909568469374,599882.0,598601.670190371,-0.0021343027622582594 +ons.population.age_70_79_by_region@E12000007@2025,ons_population,False,485057.0,484442.09627628326,-0.0012676937426255798,485057.0,484379.666138183,-0.0013964005504858682 +ons.population.age_70_79_by_region@E12000008@2025,ons_population,False,865392.0,865970.3027620316,0.0006682552670137408,865392.0,864877.9712352753,-0.0005939837261318933 +ons.population.age_70_79_by_region@E12000009@2025,ons_population,False,618254.0,617349.0966053009,-0.0014636434130617783,618254.0,618397.3721866608,0.00023189851850657917 +ons.population.age_70_79_by_region@N92000002@2025,ons_population,False,155382.0,155182.01890945435,-0.0012870286812221125,155382.0,155616.71235752106,0.0015105504982627146 +ons.population.age_70_79_by_region@S92000003@2025,ons_population,False,519252.0,518779.34658813477,-0.000910258240440546,519252.0,517701.6430130005,-0.002985750631676935 +ons.population.age_70_79_by_region@W92000004@2025,ons_population,False,321668.0,320977.74789333344,-0.0021458525767765677,321668.0,321189.5973548889,-0.0014872559443621497 +ons.population.age_80_89_by_region@E12000001@2025,ons_population,False,122118.0,121468.60262298584,-0.005317785887536319,122118.0,122207.36476135254,0.0007317902467493659 +ons.population.age_80_89_by_region@E12000002@2025,ons_population,False,324141.0,324328.1623210907,0.0005774102044810692,324141.0,322488.746257782,-0.00509733030446015 +ons.population.age_80_89_by_region@E12000003@2025,ons_population,False,243274.0,244611.01162147522,0.00549590840564639,243274.0,242405.27213668823,-0.0035709852401480126 +ons.population.age_80_89_by_region@E12000004@2025,ons_population,False,225626.0,224939.7790260315,-0.003041409119376782,225626.0,225039.21353149414,-0.0026007041232209913 +ons.population.age_80_89_by_region@E12000005@2025,ons_population,False,275030.0,274663.54776763916,-0.0013324082185973889,275030.0,274508.46419525146,-0.0018962869677800064 +ons.population.age_80_89_by_region@E12000006@2025,ons_population,False,305691.0,304833.524810791,-0.0028050390401058076,305691.0,304614.04920196533,-0.0035230045962578813 +ons.population.age_80_89_by_region@E12000007@2025,ons_population,False,237061.0,236868.22968771245,-0.0008131675488062299,237061.0,237358.36215879704,0.001254369798478202 +ons.population.age_80_89_by_region@E12000008@2025,ons_population,False,447958.0,448803.9723072052,0.001888508090502235,447958.0,448037.39949035645,0.0001772476222245061 +ons.population.age_80_89_by_region@E12000009@2025,ons_population,False,313605.0,313154.55645370483,-0.0014363404483192742,313605.0,313186.11070632935,-0.0013357226245457002 +ons.population.age_80_89_by_region@N92000002@2025,ons_population,False,77441.0,77351.94020271301,-0.001150034184566151,77441.0,77490.62666893005,0.0006408319744070158 +ons.population.age_80_89_by_region@S92000003@2025,ons_population,False,238904.0,237507.3569869995,-0.0058460428163634275,238904.0,238180.14039993286,-0.0030299182938215295 +ons.population.age_80_89_by_region@W92000004@2025,ons_population,False,154319.0,154141.38262557983,-0.001150975410805967,154319.0,154351.05325317383,0.0002077077558423015 +ons.population.female_0_4@2025,ons_population,False,1744355.0,1742985.2922632694,-0.000785223040453678,1744355.0,1744649.4765617,0.00016881687597994325 +ons.population.female_10_14@2025,ons_population,False,2052052.0,2051975.3098326556,-3.737242883923415e-05,2052052.0,2050729.4956689249,-0.000644478956222903 +ons.population.female_15_19@2025,ons_population,False,2002835.0,2001723.708850299,-0.0005548590621299267,2002835.0,2001327.430930053,-0.0007527175578353265 +ons.population.female_20_24@2025,ons_population,False,2034609.0,2034606.7757162955,-1.0932241548789832e-06,2034609.0,2033604.1656512367,-0.0004938709839400785 +ons.population.female_25_29@2025,ons_population,False,2291610.0,2289598.055078826,-0.000877961311555669,2291610.0,2287394.4428207004,-0.0018395613473931641 +ons.population.female_30_34@2025,ons_population,False,2463301.0,2462376.36257822,-0.000375365179399432,2463301.0,2461629.791898798,-0.000678442505078268 +ons.population.female_35_39@2025,ons_population,False,2472291.0,2470152.486272335,-0.0008649927244264318,2472291.0,2471185.3275518417,-0.0004472258517133558 +ons.population.female_40_44@2025,ons_population,False,2333109.0,2331627.573281127,-0.0006349582119279348,2333109.0,2332149.466465627,-0.00041126819808811195 +ons.population.female_45_49@2025,ons_population,False,2088285.0,2086710.9461190884,-0.0007537543395233665,2088285.0,2087834.4595938097,-0.0002157466084324336 +ons.population.female_50_54@2025,ons_population,False,2255231.0,2255495.922010974,0.00011747001126449007,2255231.0,2254599.1304951487,-0.0002801795048273499 +ons.population.female_55_59@2025,ons_population,False,2360202.0,2360069.2718506227,-5.6235927847394104e-05,2360202.0,2357994.824465275,-0.0009351638269627724 +ons.population.female_5_9@2025,ons_population,False,1941658.0,1940493.6505188942,-0.0005996676454379734,1941658.0,1940492.186041832,-0.0006004218859181328 +ons.population.female_60_64@2025,ons_population,False,2193915.0,2191220.3231972773,-0.0012282503208751192,2193915.0,2190363.3816184998,-0.0016188495823677054 +ons.population.female_65_69@2025,ons_population,False,1838574.0,1840315.3586513125,0.0009471245929250243,1838574.0,1838630.617681991,3.079434496032039e-05 +ons.population.female_70_74@2025,ons_population,False,1622996.0,1621580.1644964975,-0.0008723592069866568,1622996.0,1620830.1395730972,-0.0013344829111733923 +ons.population.female_75_79@2025,ons_population,False,1551183.0,1548807.0104699503,-0.0015317274171066405,1551183.0,1549433.1555437194,-0.0011280709344291303 +ons.population.female_80_84@2025,ons_population,False,1024480.0,1025348.5131001581,0.000847759936902696,1024480.0,1023086.6159196008,-0.0013600890992495481 +ons.population.female_85_89@2025,ons_population,False,665267.0,663693.7828521729,-0.0023647905996045924,665267.0,663725.1879673004,-0.00231758381627164 +ons.population.female_90_plus@2025,ons_population,False,414716.0,415213.40118364186,0.0011993778480740192,414716.0,414197.69990825653,-0.0012497711487945227 +ons.population.male_0_4@2025,ons_population,False,1829801.0,1828830.5834515095,-0.0005303399377804057,1829801.0,1829790.553957224,-5.708840893686138e-06 +ons.population.male_10_14@2025,ons_population,False,2152800.0,2152562.5578729995,-0.00011029455917899503,2152800.0,2152228.8411780917,-0.0002653097463342119 +ons.population.male_15_19@2025,ons_population,False,2123750.0,2123450.7612161636,-0.0001409011342372524,2123750.0,2121544.358860016,-0.001038559689221486 +ons.population.male_20_24@2025,ons_population,False,2131646.0,2131875.620774269,0.00010771993767684878,2131646.0,2128754.585910797,-0.0013564232002888288 +ons.population.male_25_29@2025,ons_population,False,2257360.0,2256582.3149375916,-0.00034451087217300175,2257360.0,2255493.3935479377,-0.0008268979923726213 +ons.population.male_30_34@2025,ons_population,False,2333326.0,2332847.006454712,-0.0002052835931576728,2333326.0,2330619.9241375076,-0.0011597504431410076 +ons.population.male_35_39@2025,ons_population,False,2303479.0,2301597.658243322,-0.0008167392698948792,2303479.0,2302791.6117830295,-0.0002984130599716726 +ons.population.male_40_44@2025,ons_population,False,2196013.0,2186858.1871728897,-0.0041688336212537406,2196013.0,2188398.390153885,-0.003467470295537919 +ons.population.male_45_49@2025,ons_population,False,2005099.0,2002848.5493068008,-0.001122363879887815,2005099.0,2003597.2352891336,-0.0007489728491542714 +ons.population.male_50_54@2025,ons_population,False,2164862.0,2162712.046805457,-0.0009931132767551872,2164862.0,2163669.90831581,-0.0005506548150367509 +ons.population.male_55_59@2025,ons_population,False,2256521.0,2256950.3575328933,0.00019027411351071294,2256521.0,2255816.3769664024,-0.0003122607915448603 +ons.population.male_5_9@2025,ons_population,False,2037199.0,2036673.5753667539,-0.00025791522244324096,2037199.0,2037058.929268397,-6.875652874514214e-05 +ons.population.male_60_64@2025,ons_population,False,2094462.0,2092904.4500098596,-0.0007436515869661838,2094462.0,2091097.6361236572,-0.001606314116151438 +ons.population.male_65_69@2025,ons_population,False,1734083.0,1735103.1115355492,0.0005882714584879523,1734083.0,1733185.5596614252,-0.0005175302096697884 +ons.population.male_70_74@2025,ons_population,False,1473758.0,1472312.485072136,-0.0009808360177614472,1473758.0,1472310.5347918984,-0.0009821593559468731 +ons.population.male_75_79@2025,ons_population,False,1350668.0,1349534.4605899225,-0.0008392435521367953,1350668.0,1349171.2969937434,-0.0011081205790442986 +ons.population.male_80_84@2025,ons_population,False,815910.0,814888.0688061822,-0.0012525048030024833,815910.0,815200.2075066675,-0.0008699396910597084 +ons.population.male_85_89@2025,ons_population,False,459511.0,458741.70167541504,-0.0016741673748505714,459511.0,457854.7913684845,-0.003604285058498062 +ons.population.male_90_plus@2025,ons_population,False,210520.0,210153.3474187851,-0.0017416520103311077,210520.0,210271.06010198593,-0.001182499990566543 +ons.population.scotland_babies_under_1@2025,ons_population,False,46776.0,46718.190574645996,-0.0012358779150419854,46776.0,46501.006675720215,-0.005878940573793936 +ons.population.scotland_children_under_16@2025,ons_population,False,896833.0,896850.7508964539,1.9792867182471454e-05,896833.0,895063.9235610962,-0.00197258178379231 +ons.population.uk_total@2025,ons_population,False,69281437.0,69241420.75256681,-0.0005775897436016747,69281437.0,69222712.1922735,-0.0008476268719210085 +ons.public_sector_employment@2025,ons_employment,False,6146000.0,6146408.809994146,6.651643250019978e-05,6146000.0,6144086.765251085,-0.0003112975510762834 +orr.rail_government_support@2025,orr_rail,False,21621100549.34064,21630095912.89506,0.0004160455909213555,21621100549.34064,21645246826.270462,0.0011167922222422384 +scotgov.bus.government_support@2025,dft_local_bus,False,499000000.0,499433283.7901752,0.0008683041887278547,499000000.0,498502404.4339237,-0.000997185503158875 +scotgov.bus.passenger_revenue@2025,dft_local_bus,False,391000000.0,388643854.6842788,-0.0060259470990312375,391000000.0,390581307.70029926,-0.0010708242959098133 +scotgov.council_tax_stock.band_a@2025,council_tax_stock,False,498707.0,497020.141664505,-0.003382463722175536,498707.0,496785.52547454834,-0.0038529126831018216 +scotgov.council_tax_stock.band_b@2025,council_tax_stock,False,583705.0,583027.2126274109,-0.0011611813717359134,583705.0,583974.1954879761,0.0004611841392074322 +scotgov.council_tax_stock.band_c@2025,council_tax_stock,False,426388.0,425330.3944672664,-0.0024803829674700205,426388.0,425246.31650161743,-0.0026775694869052794 +scotgov.council_tax_stock.band_d@2025,council_tax_stock,False,369621.0,368154.1543941498,-0.003968512627394601,369621.0,367985.1022529602,-0.004425878797578587 +scotgov.council_tax_stock.band_e@2025,council_tax_stock,False,366881.0,366802.6941642761,-0.00021343660675771423,366881.0,365744.2815608978,-0.003098330082784807 +scotgov.council_tax_stock.band_f@2025,council_tax_stock,False,221282.0,221274.51622104645,-3.3820098126156877e-05,221282.0,220969.4873456955,-0.0014122823108273805 +scotgov.council_tax_stock.band_g@2025,council_tax_stock,False,142084.0,141809.02550315857,-0.0019352952960321405,142084.0,141494.5899734497,-0.00414832089855503 +scotgov.council_tax_stock.band_h@2025,council_tax_stock,False,14481.0,14478.901580810547,-0.00014490844482101546,14481.0,14454.777770996094,-0.0018108023619851012 +scotgov.council_tax_stock.total@2025,council_tax_stock,False,2623149.0,2617897.0406226236,-0.0020021582370564396,2623149.0,2616654.276368141,-0.002475926312938695 +scotgov.scottish_child_payment_spending@2025,scotgov_social_security,False,471000000.0,470649557.5122337,-0.0007440392521578036,471000000.0,470515291.9583651,-0.001029104122367128 +slc.borrowers.plan_5_above_threshold@2025,slc_borrowers,False,35000.0,34992.94677734375,-0.00020152064732142856,35000.0,34990.390869140625,-0.00027454659598214284 +slc.repayments.england_plan_1@2025,slc_repayments,False,1852699178.55,1851842083.45906,-0.0004626196745068982,1852699178.55,1855616446.343596,0.0015746041383141354 +slc.repayments.england_plan_2@2025,slc_repayments,False,2778253361.64,2779780257.7217193,0.0005495884942682382,2778253361.64,2774860230.8476114,-0.0012213179831753998 +slc.repayments.england_total_higher_education@2025,slc_repayments,False,5018231834.949999,5022408978.767491,0.0008323935511309644,5018231834.949999,5019659448.91632,0.0002844854548923438 +slc.support.adult_dependants_grant_recipients@2025,slc_student_support,False,18611.0,15702.80029296875,-0.15626240970561764,18611.0,15788.589233398438,-0.15165282717755965 +slc.support.adult_dependants_grant_spend@2025,slc_student_support,False,55364916.81,55666427.03857422,0.005445871608710837,55364916.81,55970548.83239746,0.010938913255769029 +slc.support.maintenance_loan_recipients@2025,slc_student_support,False,1159761.0,1161001.3805103302,0.0010695139001313204,1159761.0,1159126.8409671783,-0.000546801481358362 +slc.support.maintenance_loan_spend@2025,slc_student_support,False,8591659718.080004,8601706708.275253,0.0011693887473344649,8591659718.080004,8586877723.470213,-0.0005565856617584297 +slc.support.parents_learning_allowance_recipients@2025,slc_student_support,False,99645.0,90412.25402832031,-0.09265638990094523,99645.0,90076.85375976562,-0.09602234171543354 +slc.support.parents_learning_allowance_spend@2025,slc_student_support,False,181421659.32,182994402.1533203,0.00866899155930573,181421659.32,182315552.00976562,0.004927155297311786 +welshgov.bus.public_support@2025,dft_local_bus,False,131489970.0,131356817.11180069,-0.0010126467303879867,131489970.0,131373842.19144568,-0.0008831685683274665 +welshgov.council_tax_stock.band_a@2025,council_tax_stock,False,194973.29,195355.29622650146,0.0019592746601416874,194973.29,194382.98224639893,-0.0030276339574568513 +welshgov.council_tax_stock.band_b@2025,council_tax_stock,False,285787.52,285829.3788471222,0.0001464684221416448,285787.52,285460.8245487213,-0.0011431410695565193 +welshgov.council_tax_stock.band_c@2025,council_tax_stock,False,301699.86,301656.5366868973,-0.00014359739213239342,301699.86,301583.0379896164,-0.0003872126768093031 +welshgov.council_tax_stock.band_d@2025,council_tax_stock,False,225179.88,224034.700466156,-0.005085621032589585,225179.88,224744.42152690887,-0.0019338249629191123 +welshgov.council_tax_stock.band_e@2025,council_tax_stock,False,185447.46,185598.83496189117,0.0008162687258762265,185447.46,185589.07086086273,0.0007636171499072573 +welshgov.council_tax_stock.band_f@2025,council_tax_stock,False,114672.0,114573.23415756226,-0.0008612899612611984,114672.0,114522.90254211426,-0.0013002080532801572 +welshgov.council_tax_stock.band_g@2025,council_tax_stock,False,52211.0,52101.870948791504,-0.002090154396745822,52211.0,52062.370178222656,-0.0028467147110253347 +welshgov.council_tax_stock.band_h@2025,council_tax_stock,False,12357.0,12298.32290649414,-0.004748490208453458,12357.0,12366.139068603516,0.0007395863561961338 +welshgov.council_tax_stock.band_i@2025,council_tax_stock,False,5305.0,5320.9476318359375,0.0030061511472078226,5305.0,5303.201545715332,-0.00033901117524372644 +welshgov.council_tax_stock.total@2025,council_tax_stock,False,1377633.03,1376769.122833252,-0.0006270952771421826,1377633.03,1376014.950507164,-0.0011745359305416962 diff --git a/docs/evidence/uk-cgt-725/target-comparison-tilt.csv b/docs/evidence/uk-cgt-725/target-comparison-tilt.csv new file mode 100644 index 0000000000..df5481ebef --- /dev/null +++ b/docs/evidence/uk-cgt-725/target-comparison-tilt.csv @@ -0,0 +1,635 @@ +name,family,cgt,control_target,control_estimate,control_relative_error,candidate_target,candidate_estimate,candidate_relative_error +dfe.funded_childcare.early_learning_2_year_olds@2025,dfe_funded_childcare,False,95031.0,95047.27766418457,0.00017128793956256707,95031.0,95018.94245910645,-0.00012688008011653762 +dfe.funded_childcare.universal_only_children@2025,dfe_funded_childcare,False,396965.0,396292.4543914795,-0.0016942189072601055,396965.0,397566.88194895873,0.0015162091090114573 +dfe.funded_childcare.working_parent_children_2_to_4@2025,dfe_funded_childcare,False,621482.0,620727.0542449951,-0.0012147507972956302,621482.0,621533.231504928,8.243441471832072e-05 +dfi_ni.bus.passenger_receipts@2025,dft_local_bus,False,150082817.48999995,150509095.65825486,0.0028402862858255902,150082817.48999995,149568164.47539532,-0.003429126819523624 +dft.bus_fare_receipts.england@2025,dft_local_bus,False,3612036036.2194014,3616635669.2031064,0.0012734183539650748,3612036036.2194014,3617155196.3059907,0.001417250557651521 +dft.bus_fare_receipts.london@2025,dft_local_bus,False,1347434943.01459,1347895803.0490305,0.0003420276703003146,1347434943.01459,1347573779.9528997,0.00010303795298573177 +dft.bus_net_support.england@2025,dft_local_bus,False,3024904320.8399997,3024139711.4189057,-0.00025277144001751857,3024904320.8399997,3025414569.3885593,0.00016868254147555067 +dft.bus_net_support.london@2025,dft_local_bus,False,1130214000.0,1129647735.7705243,-0.000501023902973894,1130214000.0,1130630016.6117272,0.00036808658513099086 +dwp.benefit_cap.capped_households@2025,dwp_benefit_cap,False,110637.0,110650.46585845947,0.00012171207154453443,110637.0,110622.68842315674,-0.0001293561542997525 +dwp.esa_claimants@2025,dwp_legacy_benefits,False,1000000.0,799690.1333656311,-0.2003098666343689,1000000.0,802322.9730930328,-0.19767702690696717 +dwp.esa_contrib_claimants@2025,dwp_legacy_benefits,False,620000.0,618975.989107132,-0.0016516304723678096,620000.0,622051.3022651672,0.0033085520405923166 +dwp.esa_income_claimants@2025,dwp_legacy_benefits,False,180000.0,180962.3353919983,0.005346307733323839,180000.0,180570.48644638062,0.0031693691465589737 +dwp.uc.households@2025,dwp_universal_credit,False,6197311.0,5993232.183032036,-0.03293022037589596,6197311.0,6009272.601791184,-0.030341933494836004 +dwp.uc.households_children_1@2025,dwp_universal_credit,False,1190123.8333333333,1009313.3557415009,-0.151925768166001,1190123.8333333333,1005983.5750780106,-0.15472361202915946 +dwp.uc.households_children_2@2025,dwp_universal_credit,False,1049895.5,972132.5900774002,-0.07406728567043082,1049895.5,969444.0864367593,-0.07662802018223783 +dwp.uc.households_children_3@2025,dwp_universal_credit,False,477887.6666666667,477354.73596191406,-0.0011151798674150554,477887.6666666667,468961.1383335882,-0.018679135193720883 +dwp.uc.households_children_4@2025,dwp_universal_credit,False,170713.66666666666,170712.4619140625,-7.057153815982115e-06,170713.66666666666,170580.2561340332,-0.0007814871254212444 +dwp.uc.households_children_5_or_more@2025,dwp_universal_credit,False,76320.08333333333,76147.23992919922,-0.0022647171830146467,76320.08333333333,76290.45468139648,-0.00038821566542896564 +dwp.uc.households_couple_no_children@2025,dwp_universal_credit,False,241130.91666666666,246000.0862159729,0.02019305370135204,241130.91666666666,246465.5480632782,0.02212338206297288 +dwp.uc.households_couple_with_children@2025,dwp_universal_credit,False,826160.8333333334,881816.1841773987,0.06736624226001027,826160.8333333334,883084.0804901123,0.06890092686566751 +dwp.uc.households_housing_element_private_rented@2025,dwp_universal_credit,False,1570545.4166666667,1568871.7276172638,-0.001065673766350034,1570545.4166666667,1569438.5075345149,-0.0007047928193640996 +dwp.uc.households_housing_element_social_rented@2025,dwp_universal_credit,False,2354587.5833333335,2351571.8600873947,-0.0012807861840796284,2354587.5833333335,2355459.781129151,0.0003704248684531322 +dwp.uc.households_lcwra_element@2025,dwp_universal_credit,False,2272425.1666666665,2532342.0919208527,0.11437865108466842,2272425.1666666665,2586141.9791526794,0.1380537485184571 +dwp.uc.households_single_no_children@2025,dwp_universal_credit,False,2990070.1666666665,3041571.713191986,0.017224193298023355,2990070.1666666665,3071547.5430641174,0.027249319198512985 +dwp.uc.households_single_with_children@2025,dwp_universal_credit,False,2138780.1666666665,1823844.1994466782,-0.14725027477266286,2138780.1666666665,1808175.4301736755,-0.15457630552477272 +dwp.uc.households_with_deduction@2025,dwp_universal_credit,False,3130000.0,3125382.3320770264,-0.0014752932661257613,3130000.0,3129088.216026108,-0.0002913047839911244 +dwp.uc.scotland_households_child_under_1@2025,dwp_universal_credit,False,14333.222222222223,14301.71420288086,-0.002198250948241996,14333.222222222223,14352.736419677734,0.0013614661904325284 +dwp.uc.two_child_limit.children_affected@2025,dwp_two_child_limit,False,597920.0,597791.6025695801,-0.00021474014988614174,597920.0,597937.5288300622,2.9316346772559447e-05 +dwp.uc.two_child_limit.children_claimant_pip@2025,dwp_two_child_limit,False,235270.0,235307.4132385254,0.0001590225635456736,235270.0,235149.86569213867,-0.000510623147283241 +dwp.uc.two_child_limit.children_disabled_child_element@2025,dwp_two_child_limit,False,479460.0,478645.0094909668,-0.0016998091791457122,479460.0,479221.1375274658,-0.0004981906155553742 +dwp.uc.two_child_limit.children_in_3_children_households@2025,dwp_two_child_limit,False,891930.0,892616.9891967773,0.0007702277048393302,891930.0,891848.630099806,-9.122902043209302e-05 +dwp.uc.two_child_limit.children_in_4_children_households@2025,dwp_two_child_limit,False,468760.0,468702.7509765625,-0.00012212864458891544,468760.0,469546.6135253906,0.0016780730552748207 +dwp.uc.two_child_limit.children_in_5_children_households@2025,dwp_two_child_limit,False,185120.0,184785.40176391602,-0.0018074667031330184,185120.0,185107.30010986328,-6.860355518970803e-05 +dwp.uc.two_child_limit.children_in_6_plus_children_households@2025,dwp_two_child_limit,False,119720.0,119234.7495727539,-0.004053211052840743,119720.0,119321.33221435547,-0.003330001550655958 +dwp.uc.two_child_limit.children_in_affected_households@2025,dwp_two_child_limit,False,1665540.0,1665339.8915100098,-0.00012014631290166215,1665540.0,1665823.8759494154,0.0001704407876216592 +dwp.uc.two_child_limit.households_3_children@2025,dwp_two_child_limit,False,297310.0,297538.9963989258,0.0007702277048393302,297310.0,297282.8766999353,-9.122902043222354e-05 +dwp.uc.two_child_limit.households_4_children@2025,dwp_two_child_limit,False,117190.0,117175.68774414062,-0.00012212864458891544,117190.0,117386.65338134766,0.0016780730552748207 +dwp.uc.two_child_limit.households_5_children@2025,dwp_two_child_limit,False,37020.0,36957.0803527832,-0.0016996122965099102,37020.0,37021.460021972656,3.943873507985548e-05 +dwp.uc.two_child_limit.households_6_plus_children@2025,dwp_two_child_limit,False,18260.0,18186.105865478516,-0.004046776260760371,18260.0,18200.558624267578,-0.003255277970012151 +dwp.uc.two_child_limit.households_affected@2025,dwp_two_child_limit,False,469780.0,469857.8703613281,0.00016575920926417684,469780.0,469891.5487275232,0.00023744886441139735 +dwp.uc.two_child_limit.households_claimant_pip@2025,dwp_two_child_limit,False,65280.0,65316.3913269043,0.0005574651792937634,65280.0,65239.95065307617,-0.0006135010251811906 +dwp.uc.two_child_limit.households_disabled_child_element@2025,dwp_two_child_limit,False,129630.0,129406.58740234375,-0.0017234636863091106,129630.0,129537.01707458496,-0.0007172948037880048 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,7506.333333333333,7498.405059814453,-0.0010562112241502605,7506.333333333333,7520.367546081543,0.0018696495512513795 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000@2025,dwp_universal_credit,False,13313.333333333334,13310.319107055664,-0.0002264065806962852,13313.333333333334,13296.405776977539,-0.0012714739375910022 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200@2025,dwp_universal_credit,False,16121.444444444445,16058.476440429688,-0.003905853736105944,16121.444444444445,16093.189697265625,-0.001752618834880954 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400@2025,dwp_universal_credit,False,13317.333333333334,13302.247177124023,-0.0011328211010195111,13317.333333333334,13247.265655517578,-0.005261389503585989 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600@2025,dwp_universal_credit,False,19657.333333333332,19695.704788208008,0.0019520173069257798,19657.333333333332,19659.018966674805,8.575086523125722e-05 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800@2025,dwp_universal_credit,False,16443.222222222223,16377.807235717773,-0.0039782340480714285,16443.222222222223,16505.79591369629,0.003805439750701727 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000@2025,dwp_universal_credit,False,13441.111111111111,13377.848594665527,-0.004706643366208611,13441.111111111111,13535.98038482666,0.007058142212448868 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200@2025,dwp_universal_credit,False,10728.555555555555,10738.631607055664,0.0009391806238903844,10728.555555555555,10731.096817016602,0.00023686892870968795 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400@2025,dwp_universal_credit,False,9653.222222222223,9637.923370361328,-0.001584844056078575,9653.222222222223,9662.81069946289,0.0009932929150428987 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,8797.0,8798.397567749023,0.0001588686767106329,8797.0,8762.956985473633,-0.003869843642874524 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,6486.888888888889,6491.204345703125,0.0006652583215396324,6486.888888888889,6518.387878417969,0.004855792980057562 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800@2025,dwp_universal_credit,False,3981.8888888888887,3976.0797119140625,-0.0014588998178819567,3981.8888888888887,3983.958251953125,0.0005196938242075737 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,2761.4444444444443,2749.086669921875,-0.004475112489563598,2761.4444444444443,2764.689453125,0.0011751127881946208 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,2131.222222222222,2128.817626953125,-0.00112827055012119,2131.222222222222,2147.610595703125,0.007689659628180254 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,1475.3333333333333,1477.4501953125,0.0014348364070267121,1475.3333333333333,1478.7342529296875,0.0023051872546458944 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,12256.0,12243.781646728516,-0.00099692830217725,12256.0,12250.776268005371,-0.00042621834159831156 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,10945.444444444445,10929.908752441406,-0.0014193751639682772,10945.444444444445,10883.92529296875,-0.005620525670560632 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,12492.444444444445,12383.94172668457,-0.008685467303248847,12492.444444444445,12530.928695678711,0.003080602151597331 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,12979.666666666666,12952.064193725586,-0.0021265933594401595,12979.666666666666,12921.721176147461,-0.004464328091569259 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,16484.444444444445,16478.29605102539,-0.000372981536610216,16484.444444444445,16424.08383178711,-0.003661671029361168 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600@2025,dwp_universal_credit,False,15272.444444444445,15276.852722167969,0.00028864257713028164,15272.444444444445,15200.370513916016,-0.004719213796495261 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800@2025,dwp_universal_credit,False,19142.333333333332,19122.398849487305,-0.0010413821292786026,19142.333333333332,19183.17729949951,0.0021336984083887164 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,19073.555555555555,19092.62907409668,0.0009999980593848638,19073.555555555555,19029.11577987671,-0.0023299156546563123 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000@2025,dwp_universal_credit,False,40805.444444444445,40858.6354675293,0.0013035276005208035,40805.444444444445,40939.52069091797,0.0032857440544745158 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200@2025,dwp_universal_credit,False,40009.555555555555,40064.99139022827,0.0013855648707654577,40009.555555555555,39965.078884124756,-0.001111651224644085 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400@2025,dwp_universal_credit,False,39972.555555555555,40166.868392944336,0.004861156228020421,39972.555555555555,39930.094650268555,-0.0010622514547008657 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600@2025,dwp_universal_credit,False,40518.77777777778,40522.407554626465,8.958258485956988e-05,40518.77777777778,40540.9884185791,0.000548156731753686 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800@2025,dwp_universal_credit,False,37118.0,37304.101470947266,0.005013779593385032,37118.0,37123.58499145508,0.00015046585093696118 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000@2025,dwp_universal_credit,False,37177.77777777778,37144.1795501709,-0.0009037180169215276,37177.77777777778,37180.68760681152,7.826796564160738e-05 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200@2025,dwp_universal_credit,False,37164.555555555555,37127.98385620117,-0.0009840478059723746,37164.555555555555,37136.51518249512,-0.0007544923554519929 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400@2025,dwp_universal_credit,False,33309.555555555555,33318.652252197266,0.0002730957075226925,33309.555555555555,33258.63383483887,-0.0015287421242159008 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,22775.777777777777,22834.02562713623,0.0025574472111018426,22775.777777777777,22853.79737854004,0.00342555154530815 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,29102.555555555555,29077.092582702637,-0.0008749394122557479,29102.555555555555,29008.155670166016,-0.003243697454999569 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800@2025,dwp_universal_credit,False,27534.666666666668,27590.600036621094,0.0020313799557318967,27534.666666666668,27378.803741455078,-0.005660606939552192 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,25584.777777777777,25619.315826416016,0.0013499452267370106,25584.777777777777,25595.36849975586,0.0004139462171635826 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,22927.777777777777,22769.79803466797,-0.0068903207559402845,22927.777777777777,22914.970458984375,-0.000558593986627678 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,20334.666666666668,20361.552001953125,0.0013221429063564906,20334.666666666668,20425.094451904297,0.004446976521422972 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600@2025,dwp_universal_credit,False,17535.0,17429.07177734375,-0.006040959375891075,17535.0,17435.231689453125,-0.005689666982998289 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800@2025,dwp_universal_credit,False,15399.888888888889,15318.989013671875,-0.005253276552883665,15399.888888888889,15370.516998291016,-0.0019072793842730292 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000@2025,dwp_universal_credit,False,12836.222222222223,12856.200317382812,0.0015563843329234014,12836.222222222223,12785.194091796875,-0.00397532307729973 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,26502.666666666668,26532.5386428833,0.0011271309635495635,26502.666666666668,26449.93719482422,-0.0019895911798479067 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,29027.0,29059.226558685303,0.0011102269847143259,29027.0,29022.100025177002,-0.00016880748348082982 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,32427.0,32448.47692489624,0.0006623161222512176,32427.0,32427.487422943115,1.5031391837519178e-05 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,34956.88888888889,34907.42909240723,-0.0014148798149306939,34956.88888888889,34950.91313171387,-0.00017094648193714755 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,37410.77777777778,37357.75244140625,-0.0014173812874595825,37410.77777777778,37505.10767364502,0.0025214631042306482 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600@2025,dwp_universal_credit,False,39910.333333333336,39906.17240905762,-0.0001042568159219894,39910.333333333336,39745.2971496582,-0.004135174274209669 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800@2025,dwp_universal_credit,False,39368.0,39521.73371887207,0.0039050426456022735,39368.0,39366.044494628906,-4.96724591316234e-05 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,26670.222222222223,26553.321952819824,-0.004383175679166051,26670.222222222223,26738.255004882812,0.0025508892312079592 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,36208.11111111111,36166.45346069336,-0.0011505060368909087,36208.11111111111,36253.96908569336,0.0012665110986189373 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,85490.44444444444,85069.96188354492,-0.004918474381926564,85490.44444444444,85454.54718017578,-0.00041989797224629467 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,71259.55555555556,71256.97412109375,-3.622580076014477e-05,71259.55555555556,71334.54846191406,0.0010523908797050287 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,51301.666666666664,51210.21199798584,-0.0017826841625838874,51301.666666666664,51520.24266052246,0.004260602199846595 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,43305.22222222222,43181.172912597656,-0.0028645346509942726,43305.22222222222,43248.06329345703,-0.0013199084505761164 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600@2025,dwp_universal_credit,False,34910.555555555555,34776.64959716797,-0.003835686836163128,34910.555555555555,34580.597396850586,-0.00945152987267372 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800@2025,dwp_universal_credit,False,28513.0,28486.287338256836,-0.0009368590377429265,28513.0,28541.843536376953,0.0010115924798145802 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000@2025,dwp_universal_credit,False,22593.0,22691.866119384766,0.004375962439019414,22593.0,22589.885986328125,-0.00013783090655844732 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,46312.77777777778,46348.127014160156,0.0007632717811052316,46312.77777777778,46059.91879272461,-0.005459810384651571 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,60310.11111111111,60158.27948760986,-0.0025175152342452544,60310.11111111111,60532.6766204834,0.003690351506105666 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,67858.66666666667,67831.38890075684,-0.0004019791022984376,67858.66666666667,67775.34702301025,-0.0012278408602647308 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,89577.44444444444,89445.29569244385,-0.0014752458369422276,89577.44444444444,89620.58641815186,0.00048161648253064384 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,116076.0,116154.6541671753,0.0006776092144396169,116076.0,116212.0425491333,0.0011720127255703226 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600@2025,dwp_universal_credit,False,97511.0,97341.0114479065,-0.0017432756519111265,97511.0,97563.20690776003,0.0005353950606601486 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800@2025,dwp_universal_credit,False,102343.0,102097.2710723877,-0.0024010330712633467,102343.0,102378.95245361328,0.00035129372417538326 +dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,89479.33333333333,89524.17416000366,0.0005011305404264705,89479.33333333333,89569.68458938599,0.0010097444033928637 +dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000@2025,dwp_universal_credit,False,104891.11111111111,104533.52238464355,-0.00340914232559479,104891.11111111111,104934.10822296143,0.00040992140701769726 +dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200@2025,dwp_universal_credit,False,122035.55555555556,121750.02020263672,-0.002339771811739374,122035.55555555556,122382.57319641113,0.002843578162739581 +dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800@2025,dwp_universal_credit,False,149963.22222222222,150106.4390258789,0.0009550128460460938,149963.22222222222,149846.64894104004,-0.0007773458015555068 +dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000@2025,dwp_universal_credit,False,108689.66666666667,108647.64122009277,-0.0003866554003039057,108689.66666666667,108580.36124420166,-0.0010056652653120477 +dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200@2025,dwp_universal_credit,False,61718.666666666664,61730.9599609375,0.0001991827583902616,61718.666666666664,62044.73974609375,0.0052832165216426 +dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400@2025,dwp_universal_credit,False,34050.444444444445,33983.67492675781,-0.0019609000345229455,34050.444444444445,34150.39358520508,0.002935325585065608 +dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,127403.22222222222,127282.98274993896,-0.0009437710458651293,127403.22222222222,127493.64039230347,0.0007097008105771181 +dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,22338.333333333332,22264.31005859375,-0.0033137331077929774,22338.333333333332,22300.8076171875,-0.0016798798543236047 +dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,11133.666666666666,10729.99609375,-0.03625675035927063,11133.666666666666,10729.99609375,-0.03625675035927063 +dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,6951.222222222223,6955.0751953125,0.0005542871407505692,6951.222222222223,6947.78662109375,-0.0004942441801802023 +dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,6508.222222222223,6503.87255859375,-0.0006683336063142971,6508.222222222223,6536.330810546875,0.004318934935668921 +dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600@2025,dwp_universal_credit,False,5913.444444444444,5903.55810546875,-0.0016718410172910899,5913.444444444444,5895.26513671875,-0.0030742332825623173 +dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000@2025,dwp_universal_credit,False,1653.7777777777778,1651.2129211425781,-0.0015509076670785628,1653.7777777777778,1654.6583862304688,0.0005324829396814227 +dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,197136.66666666666,196609.87888526917,-0.0026721958441562974,197136.66666666666,197085.44451522827,-0.00025983066623012197 +dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,377063.1111111111,377087.6189517975,6.4996654311112e-05,377063.1111111111,376595.59312820435,-0.0012398931879841527 +dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,195983.22222222222,196211.13967514038,0.0011629436965768934,195983.22222222222,195671.27042388916,-0.0015917270611019024 +dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,114033.33333333333,114000.27459716797,-0.0002899041464369459,114033.33333333333,113975.86061096191,-0.0005039993192465456 +dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,149043.77777777778,148972.4663619995,-0.00047845952941821986,149043.77777777778,149317.12064361572,0.0018339770362335562 +hmrc.cgt.gains_by_age_band.age_16_to_24@2025,hmrc_cgt,True,,,,319000000.0,313274407.3495134,-0.017948566302465795 +hmrc.cgt.gains_by_age_band.age_25_to_34@2025,hmrc_cgt,True,,,,2499000000.0,2246548814.2205887,-0.10102088266483046 +hmrc.cgt.gains_by_age_band.age_35_to_44@2025,hmrc_cgt,True,,,,11775000000.0,11738863982.227863,-0.0030688762439181902 +hmrc.cgt.gains_by_age_band.age_45_to_54@2025,hmrc_cgt,True,,,,28422000000.0,28440843331.359566,0.0006629840039253301 +hmrc.cgt.gains_by_age_band.age_55_to_64@2025,hmrc_cgt,True,,,,38118000000.0,38190316941.65641,0.0018971861497562889 +hmrc.cgt.gains_by_age_band.age_65_to_74@2025,hmrc_cgt,True,,,,24260000000.0,24262504428.675697,0.00010323283906419318 +hmrc.cgt.gains_by_age_band.age_75_to_84@2025,hmrc_cgt,True,,,,11736000000.0,11683267337.722862,-0.004493239798665453 +hmrc.cgt.gains_by_age_band.age_85_plus@2025,hmrc_cgt,True,,,,2076000000.0,2015978020.169549,-0.028912321690968697 +hmrc.cgt.gains_by_region@E12000001@2025,hmrc_cgt,True,,,,1497797150.3974364,1497707525.19249,-5.98380127258873e-05 +hmrc.cgt.gains_by_region@E12000002@2025,hmrc_cgt,True,,,,8790074083.38308,8789751152.81278,-3.673809426812711e-05 +hmrc.cgt.gains_by_region@E12000003@2025,hmrc_cgt,True,,,,6970985861.949795,6954829103.814346,-0.002317714948130649 +hmrc.cgt.gains_by_region@E12000004@2025,hmrc_cgt,True,,,,6299365751.358824,6287460441.570799,-0.001889921979122554 +hmrc.cgt.gains_by_region@E12000005@2025,hmrc_cgt,True,,,,5890960774.765152,5884458490.792638,-0.001103773089165302 +hmrc.cgt.gains_by_region@E12000006@2025,hmrc_cgt,True,,,,11545870966.728456,11552234029.857738,0.0005511115746588828 +hmrc.cgt.gains_by_region@E12000007@2025,hmrc_cgt,True,,,,32519714615.602127,32287223978.520866,-0.0071492213209558 +hmrc.cgt.gains_by_region@E12000008@2025,hmrc_cgt,True,,,,25606804690.69088,25520321939.54021,-0.003377334743452357 +hmrc.cgt.gains_by_region@E12000009@2025,hmrc_cgt,True,,,,10341263627.509504,10312847172.271683,-0.00274787069176237 +hmrc.cgt.gains_by_region@N92000002@2025,hmrc_cgt,True,,,,1757265449.747086,1753138324.8926606,-0.0023486063844363556 +hmrc.cgt.gains_by_region@S92000003@2025,hmrc_cgt,True,,,,5680201325.83493,5693778946.240842,0.002390341402893088 +hmrc.cgt.gains_by_region@W92000004@2025,hmrc_cgt,True,,,,2358632410.6946497,2357846157.8750157,-0.0003333511470752657 +hmrc.cgt.gains_total@2025,hmrc_cgt,True,119258000000.0,107931956702.93329,-0.09497093106598058,119258000000.0,118891597263.38205,-0.003072353524442389 +hmrc.cgt.liability_total@2025,hmrc_cgt,True,22503000000.0,22629780697.062336,0.005633946454354351,22503000000.0,25110092875.9396,0.11585534710659032 +hmrc.cgt.residential_property_gains.ty2024@2025,hmrc_cgt,True,,,,12242481474.688189,12242213972.671858,-2.1850310076743015e-05 +hmrc.cgt.residential_property_taxpayers.ty2024@2025,hmrc_cgt,True,,,,202630.0578034682,202703.15572023392,0.0003607456739543478 +hmrc.cgt.tax_by_age_band.age_16_to_24@2025,hmrc_cgt,True,,,,59000000.0,59482781.277098626,0.008182733510146202 +hmrc.cgt.tax_by_age_band.age_25_to_34@2025,hmrc_cgt,True,,,,456000000.0,456432815.89975315,0.0009491576748972661 +hmrc.cgt.tax_by_age_band.age_35_to_44@2025,hmrc_cgt,True,,,,2246000000.0,2483803072.700427,0.1058784829476523 +hmrc.cgt.tax_by_age_band.age_45_to_54@2025,hmrc_cgt,True,,,,5522000000.0,6086206839.756372,0.10217436431661943 +hmrc.cgt.tax_by_age_band.age_55_to_64@2025,hmrc_cgt,True,,,,7152000000.0,8120283411.955905,0.13538638310345427 +hmrc.cgt.tax_by_age_band.age_65_to_74@2025,hmrc_cgt,True,,,,4409000000.0,5089767444.843525,0.1544040473675493 +hmrc.cgt.tax_by_age_band.age_75_to_84@2025,hmrc_cgt,True,,,,2260000000.0,2424100402.852166,0.07261079772219742 +hmrc.cgt.tax_by_age_band.age_85_plus@2025,hmrc_cgt,True,,,,390000000.0,390016106.65436184,4.129911374831811e-05 +hmrc.cgt.taxpayers_by_age_band.age_16_to_24@2025,hmrc_cgt,True,,,,4000.0,4006.0354080200195,0.0015088520050048828 +hmrc.cgt.taxpayers_by_age_band.age_25_to_34@2025,hmrc_cgt,True,,,,27000.0,27033.607704162598,0.0012447297837999132 +hmrc.cgt.taxpayers_by_age_band.age_35_to_44@2025,hmrc_cgt,True,,,,65000.0,64883.4488363266,-0.001793094825744629 +hmrc.cgt.taxpayers_by_age_band.age_45_to_54@2025,hmrc_cgt,True,,,,98000.0,97938.79466875394,-0.0006245441963883979 +hmrc.cgt.taxpayers_by_age_band.age_55_to_64@2025,hmrc_cgt,True,,,,144000.0,144118.04681539536,0.0008197695513566336 +hmrc.cgt.taxpayers_by_age_band.age_65_to_74@2025,hmrc_cgt,True,,,,125000.0,125080.28143501282,0.000642251480102539 +hmrc.cgt.taxpayers_by_age_band.age_75_to_84@2025,hmrc_cgt,True,,,,68000.0,67951.48524284363,-0.0007134523111231186 +hmrc.cgt.taxpayers_by_age_band.age_85_plus@2025,hmrc_cgt,True,,,,19000.0,18943.77908706665,-0.002958995417544716 +hmrc.cgt.taxpayers_by_region@E12000001@2025,hmrc_cgt,True,,,,11321.91780821918,11352.421562194824,0.0026942214642735394 +hmrc.cgt.taxpayers_by_region@E12000002@2025,hmrc_cgt,True,,,,41513.69863013699,41440.0089263916,-0.0017750695837034831 +hmrc.cgt.taxpayers_by_region@E12000003@2025,hmrc_cgt,True,,,,32078.767123287675,32103.746509552002,0.0007786890988772905 +hmrc.cgt.taxpayers_by_region@E12000004@2025,hmrc_cgt,True,,,,31135.273972602743,31136.994695663452,5.5266032417870196e-05 +hmrc.cgt.taxpayers_by_region@E12000005@2025,hmrc_cgt,True,,,,33022.260273972606,33038.048599243164,0.00047811158714056385 +hmrc.cgt.taxpayers_by_region@E12000006@2025,hmrc_cgt,True,,,,58496.57534246576,58431.856536865234,-0.0011063691373662762 +hmrc.cgt.taxpayers_by_region@E12000007@2025,hmrc_cgt,True,,,,106614.72602739726,106644.96109636624,0.000283591864797437 +hmrc.cgt.taxpayers_by_region@E12000008@2025,hmrc_cgt,True,,,,114162.67123287672,114160.20513677597,-2.1601597738687674e-05 +hmrc.cgt.taxpayers_by_region@E12000009@2025,hmrc_cgt,True,,,,60383.56164383562,60367.02329349518,-0.0002738882883059109 +hmrc.cgt.taxpayers_by_region@N92000002@2025,hmrc_cgt,True,,,,9434.931506849316,9361.172931671143,-0.007817605790209313 +hmrc.cgt.taxpayers_by_region@S92000003@2025,hmrc_cgt,True,,,,34909.24657534247,34927.127197265625,0.0005122030314966815 +hmrc.cgt.taxpayers_by_region@W92000004@2025,hmrc_cgt,True,,,,16982.87671232877,16991.912712097168,0.0005320653221158546 +hmrc.cgt.taxpayers_total@2025,hmrc_cgt,True,551000.0,550625.616733551,-0.0006794614636097542,551000.0,549955.4791975815,-0.0018956820370571116 +hmrc.salary_sacrifice.users_above_cap@2025,hmrc_salary_sacrifice,False,3300000.0,3303812.1317478744,0.0011551914387498278,3300000.0,3296798.503353925,-0.0009701504988106194 +hmrc.salary_sacrifice.users_below_cap@2025,hmrc_salary_sacrifice,False,4300000.0,4298576.552334656,-0.00033103434077767264,4300000.0,4308244.268420023,0.0019172717255867239 +hmrc.salary_sacrifice.users_total@2025,hmrc_salary_sacrifice,False,7700000.0,7602388.6840825295,-0.012676794274996168,7700000.0,7605042.771773948,-0.012332107561824892 +hmrc.tfc.children_with_used_accounts@2025,hmrc_tfc,False,1151515.0,1150141.6304855347,-0.0011926631563334668,1151515.0,1151118.1101403343,-0.0003446675550606383 +hmrc.tfc.government_top_up@2025,hmrc_tfc,False,599800000.0,599060490.0332513,-0.0012329275871102274,599800000.0,600082214.7860616,0.00047051481504108795 +hmrc/capital_gains_band_1000000@2025,hmrc_cgt,True,,,,12806000000.0,12772190365.84588,-0.0026401401026174835 +hmrc/capital_gains_band_100000@2025,hmrc_cgt,True,,,,9487000000.0,9478771295.636398,-0.0008673663290399161 +hmrc/capital_gains_band_10000@2025,hmrc_cgt,True,,,,289000000.0,289094558.7278524,0.0003271928299391146 +hmrc/capital_gains_band_12300@2025,hmrc_cgt,True,,,,1747000000.0,1747764462.5677238,0.0004375859002425593 +hmrc/capital_gains_band_2000000@2025,hmrc_cgt,True,,,,16477000000.0,16446650395.020588,-0.0018419375480616665 +hmrc/capital_gains_band_250000@2025,hmrc_cgt,True,,,,8820000000.0,8823195174.01934,0.0003622646280431423 +hmrc/capital_gains_band_25000@2025,hmrc_cgt,True,,,,3516000000.0,3518882168.4532347,0.0008197293666765281 +hmrc/capital_gains_band_3000@2025,hmrc_cgt,True,,,,311000000.0,311520424.6444865,0.0016733911398279322 +hmrc/capital_gains_band_5000000@2025,hmrc_cgt,True,,,,48474000000.0,48189087247.14931,-0.005877640649640895 +hmrc/capital_gains_band_500000@2025,hmrc_cgt,True,,,,11372000000.0,11359377903.628479,-0.0011099275739993842 +hmrc/capital_gains_band_50000@2025,hmrc_cgt,True,,,,5510000000.0,5506713997.879043,-0.0005963706208634074 +hmrc/capital_gains_band_6000@2025,hmrc_cgt,True,,,,448000000.0,448349269.809736,0.0007796201110178871 +hmrc/cgt_taxpayers_band_1000000@2025,hmrc_cgt,True,,,,9000.0,8989.644360303879,-0.0011506266329023573 +hmrc/cgt_taxpayers_band_100000@2025,hmrc_cgt,True,,,,61000.0,61054.725732803345,0.0008971431607105693 +hmrc/cgt_taxpayers_band_10000@2025,hmrc_cgt,True,,,,26000.0,26025.944984436035,0.0009978840167705828 +hmrc/cgt_taxpayers_band_12300@2025,hmrc_cgt,True,,,,97000.0,97229.84968566895,0.0023695843883396422 +hmrc/cgt_taxpayers_band_2000000@2025,hmrc_cgt,True,,,,5000.0,4996.310457229614,-0.0007379085540771484 +hmrc/cgt_taxpayers_band_250000@2025,hmrc_cgt,True,,,,25000.0,25014.41899871826,0.0005767599487304688 +hmrc/cgt_taxpayers_band_25000@2025,hmrc_cgt,True,,,,98000.0,99109.49285125732,0.011321355625074737 +hmrc/cgt_taxpayers_band_3000@2025,hmrc_cgt,True,,,,73000.0,73261.0242729187,0.003575674971489057 +hmrc/cgt_taxpayers_band_5000000@2025,hmrc_cgt,True,,,,3000.0,3005.328713417053,0.0017762378056844076 +hmrc/cgt_taxpayers_band_500000@2025,hmrc_cgt,True,,,,16000.0,15998.13650894165,-0.00011646819114685058 +hmrc/cgt_taxpayers_band_50000@2025,hmrc_cgt,True,,,,78000.0,78174.07342656453,0.0022317105969811494 +hmrc/cgt_taxpayers_band_6000@2025,hmrc_cgt,True,,,,57000.0,57096.529205322266,0.0016934948302151863 +hmrc/dividend_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,222000.0,221963.19381713867,-0.00016579361649246904,222000.0,221758.24454045296,-0.001088988556518211 +hmrc/dividend_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,115000.0,114800.81825351715,-0.0017320151868073837,115000.0,114928.49075317383,-0.0006218195376188858 +hmrc/dividend_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,92000.0,91786.6767654419,-0.00231873081041419,92000.0,91961.19618034363,-0.00042178064843882685 +hmrc/dividend_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,372000.0,371776.244808197,-0.0006014924510832756,372000.0,371866.4670124054,-0.0003589596440715175 +hmrc/dividend_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,75000.0,75144.38858795166,0.001925181172688802,75000.0,74933.98497772217,-0.0008802002970377604 +hmrc/dividend_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,843000.0,843093.3517951965,0.00011073759809790415,843000.0,842252.554857254,-0.0008866490424032879 +hmrc/dividend_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,49000.0,48970.97156524658,-0.0005924170357840401,49000.0,48908.17188358307,-0.0018740431921822685 +hmrc/dividend_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,667000.0,666466.6921432202,-0.0007995620041675838,667000.0,666462.3404746423,-0.0008060862449140217 +hmrc/dividend_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,627000.0,627184.7502727509,0.00029465753229801354,627000.0,626625.8179531097,-0.0005967815739876535 +hmrc/dividend_income_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,32000.0,32111.354385375977,0.0034798245429992674,32000.0,32038.740982055664,0.001210655689239502 +hmrc/dividend_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,643000.0,642913.7146296869,-0.00013419186673887525,643000.0,643222.1989138069,0.00034556596237470135 +hmrc/dividend_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,336000.0,335919.25883102417,-0.00024030109814235143,336000.0,335466.76017713547,-0.0015870232823349182 +hmrc/dividend_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,6870000000.0,6879438939.833873,0.001373935929239126,6870000000.0,6852995569.047435,-0.0024751718999367093 +hmrc/dividend_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,175000000.0,174978041.63896134,-0.00012547634879231452,175000000.0,175033122.61586946,0.0001892720906826428 +hmrc/dividend_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,3450000000.0,3440344525.534564,-0.0027986882508510094,3450000000.0,3453756448.119206,0.0010888255417988266 +hmrc/dividend_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,855000000.0,856134897.0437845,0.0013273649634906422,855000000.0,853355850.5799053,-0.0019229817778885713 +hmrc/dividend_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,3700000000.0,3707377797.4451647,0.001993999309503968,3700000000.0,3697239128.5717216,-0.0007461814671022828 +hmrc/dividend_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,3330000000.0,3325445083.384061,-0.0013678428276093515,3330000000.0,3323478717.4197555,-0.001958343117190553 +hmrc/dividend_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,3430000000.0,3427392193.533094,-0.0007602934305848603,3430000000.0,3420339725.812141,-0.002816406468763574 +hmrc/dividend_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,4700000000.0,4692439284.376222,-0.0016086628986762433,4700000000.0,4695128416.970846,-0.001036507027479537 +hmrc/dividend_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,8400000000.0,8403907956.808586,0.0004652329534031096,8400000000.0,8395900334.425274,-0.0004880554255626315 +hmrc/dividend_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,12500000000.0,12501017713.255322,8.141706042572021e-05,12500000000.0,12497147337.72829,-0.00022821298173675538 +hmrc/dividend_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,9440000000.0,9441737974.44081,0.0001841074619501324,9440000000.0,9413205492.533024,-0.0028384012147220513 +hmrc/employment_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,791000.0,790755.0606002808,-0.00030965790103569947,791000.0,791273.2583013376,0.00034545929372642074 +hmrc/employment_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,1360000.0,1363439.2267636193,0.0025288432085436344,1360000.0,1361856.242847832,0.0013648844469352352 +hmrc/employment_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,264000.0,263669.8199682236,-0.0012506819385470767,264000.0,263639.43063259125,-0.0013657930583664865 +hmrc/employment_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,3100000.0,3110240.5114422515,0.0033033907878230657,3100000.0,3114646.3052734085,0.004724614604325334 +hmrc/employment_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,180000.0,180180.4045600891,0.0010022475560506185,180000.0,179621.73049163818,-0.002101497268676758 +hmrc/employment_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,7470000.0,7522615.122937659,0.007043523820302383,7470000.0,7533114.3053160375,0.008449036856229919 +hmrc/employment_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,93000.0,92989.72315073013,-0.00011050375558996714,93000.0,92642.50290966034,-0.003844054734835061 +hmrc/employment_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,5370000.0,5493143.641452337,0.02293177680676661,5370000.0,5500600.6078667715,0.024320411148374584 +hmrc/employment_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,3500000.0,3522982.0286870706,0.006566293910591597,3500000.0,3524027.8044599723,0.006865086988563516 +hmrc/employment_income_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,44000.0,44115.540702819824,0.002625925064086914,44000.0,44025.12744140625,0.0005710782137784091 +hmrc/employment_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,3430000.0,3444064.3382329457,0.004100390155377741,3430000.0,3446950.58513733,0.004941861556072885 +hmrc/employment_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,1640000.0,1665444.7557668686,0.015515094979797922,1640000.0,1668563.0761179924,0.017416509828044147 +hmrc/employment_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,82300000000.0,82384748125.20845,0.0010297463573323245,82300000000.0,82463555691.10095,0.0019873109489787623 +hmrc/employment_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,16900000000.0,16754994383.94453,-0.008580213967779261,16900000000.0,16694116754.541838,-0.012182440559654574 +hmrc/employment_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,39200000000.0,39190755099.379776,-0.0002358393015363265,39200000000.0,39185674273.945694,-0.0003654521952629089 +hmrc/employment_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,48600000000.0,48526358458.516045,-0.0015152580552254193,48600000000.0,48527581700.494705,-0.0014900884671871359 +hmrc/employment_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,36600000000.0,36701675538.797935,0.0027780201857359422,36600000000.0,36576112226.06125,-0.0006526714190915634 +hmrc/employment_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,172000000000.0,172017810961.37323,0.00010355210100715105,172000000000.0,172038929535.9448,0.0002263345113069401 +hmrc/employment_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,29000000000.0,30761169689.167236,0.060729989281628836,29000000000.0,30641709029.747383,0.05661065619818562 +hmrc/employment_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,170000000000.0,170129889872.73483,0.000764058074910781,170000000000.0,170148118437.64297,0.0008712849273116168 +hmrc/employment_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,139000000000.0,139072058127.369,0.0005184037940214966,139000000000.0,139027202816.72525,0.0001957037174478435 +hmrc/employment_income_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,23100000000.0,23177961815.981277,0.0033749703887998904,23100000000.0,23149309813.909756,0.002134623978777303 +hmrc/employment_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,174000000000.0,174506758047.72006,0.002912402573103806,174000000000.0,174385665653.55417,0.0022164692732998203 +hmrc/employment_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,118000000000.0,118014222925.64903,0.00012053326821214061,118000000000.0,117999901730.47096,-8.327926189616575e-07 +hmrc/private_pension_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,109000.0,108702.59630584717,-0.002728474258282863,109000.0,109200.8907585144,0.0018430344817835257 +hmrc/private_pension_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,1070000.0,1068823.110198021,-0.0010998970111953878,1070000.0,1069608.6374435425,-0.0003657593985584295 +hmrc/private_pension_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,29000.0,28931.538548469543,-0.0023607397079467773,29000.0,29091.57089138031,0.003157616944148623 +hmrc/private_pension_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,2140000.0,2141063.1404143614,0.0004967945861501759,2140000.0,2151867.4180536745,0.0055455224549880895 +hmrc/private_pension_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,20000.0,19981.10668182373,-0.0009446659088134765,20000.0,19980.229385375977,-0.000988530731201172 +hmrc/private_pension_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,2660000.0,2658452.9267192255,-0.0005816064965317754,2660000.0,2664943.2441649805,0.0018583624680377753 +hmrc/private_pension_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,10000.0,10046.791735172272,0.0046791735172271726,10000.0,10063.761667251587,0.006376166725158692 +hmrc/private_pension_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,1450000.0,1448387.6006736755,-0.0011119995353961814,1450000.0,1449892.649003421,-7.403517005451281e-05 +hmrc/private_pension_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,779000.0,779052.3097419739,6.714986132718479e-05,779000.0,778199.7472400665,-0.0010272821051777556 +hmrc/private_pension_income_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,4000.0,4010.1061096191406,0.002526527404785156,4000.0,3998.0035095214844,-0.0004991226196289063 +hmrc/private_pension_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,643000.0,642463.3175230026,-0.0008346539300114705,643000.0,643417.3046509796,0.0006489963467800657 +hmrc/private_pension_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,259000.0,258775.71597194672,-0.0008659614982752266,259000.0,259216.01012659073,0.0008340159327827365 +hmrc/private_pension_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,5430000000.0,5410998914.152588,-0.0034992791615860237,5430000000.0,5437751732.738297,0.001427575089925868 +hmrc/private_pension_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,4350000000.0,4346645485.746268,-0.0007711527020072937,4350000000.0,4348689328.533115,-0.00030130378549071566 +hmrc/private_pension_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,1810000000.0,1801069134.3691978,-0.004934179906520527,1810000000.0,1818514517.0845988,0.004704153085413691 +hmrc/private_pension_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,13600000000.0,13578160298.319824,-0.0016058604176599838,13600000000.0,13586834582.422703,-0.0009680454100953832 +hmrc/private_pension_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,1570000000.0,1567671040.824632,-0.0014834134874955863,1570000000.0,1569289520.14824,-0.00045253493742669463 +hmrc/private_pension_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,30200000000.0,30169523826.97483,-0.0010091448021579263,30200000000.0,30164546774.959957,-0.0011739478490080423 +hmrc/private_pension_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,1120000000.0,998581436.0865912,-0.10840943206554353,1120000000.0,992669458.7102185,-0.11368798329444772 +hmrc/private_pension_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,24900000000.0,24890833410.855362,-0.00036813611022642816,24900000000.0,24912452277.341976,0.000500091459517115 +hmrc/private_pension_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,16900000000.0,16900922286.389114,5.457315911919408e-05,16900000000.0,16882125190.487408,-0.001057681036248066 +hmrc/private_pension_income_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,640000000.0,641528101.5653784,0.002387658695903793,640000000.0,637620326.6694638,-0.003718239578962885 +hmrc/private_pension_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,17400000000.0,17389574266.466526,-0.0005991800881306878,17400000000.0,17433578328.39648,0.0019297889883034805 +hmrc/private_pension_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,9470000000.0,9457622862.91149,-0.001306983853063412,9470000000.0,9483573419.89563,0.0014333072751457109 +hmrc/property_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,137000.0,136881.7260723114,-0.0008633133407926907,137000.0,137012.9402923584,9.445468874743386e-05 +hmrc/property_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,101000.0,100859.34951019287,-0.0013925791070012762,101000.0,100809.84999656677,-0.0018826733013190846 +hmrc/property_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,54000.0,53917.88989448547,-0.001520557509528266,54000.0,53997.35000991821,-4.9073890403464985e-05 +hmrc/property_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,232000.0,231537.66903686523,-0.0019928058755808863,232000.0,231954.02897453308,-0.00019815097184016788 +hmrc/property_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,41000.0,41046.37253570557,0.001131037456233327,41000.0,40895.59086608887,-0.0025465642417349466 +hmrc/property_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,431000.0,430617.2193546295,-0.0008881221470312839,431000.0,430360.0107536316,-0.0014848938430821535 +hmrc/property_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,23000.0,23007.192695617676,0.00031272589642068613,23000.0,22924.446266174316,-0.003284944948942765 +hmrc/property_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,364000.0,364387.31760406494,0.0010640593518267622,364000.0,363482.0405881568,-0.0014229654171516873 +hmrc/property_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,325000.0,324773.2037878793,-0.000697834498832862,325000.0,325322.8279423822,0.0009933167457913694 +hmrc/property_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,397000.0,397118.30762290955,0.000298004087933365,397000.0,397290.12153053284,0.0007307847116696144 +hmrc/property_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,226000.0,225893.8906803131,-0.0004695102641012816,226000.0,225761.45256614685,-0.0010555196188192452 +hmrc/self_employment_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,85000.0,84938.21348953247,-0.0007269001231474035,85000.0,84796.61493301392,-0.0023927654939539292 +hmrc/self_employment_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,444000.0,444277.90880966187,0.0006259207424816784,444000.0,441847.2000465393,-0.00484864854383039 +hmrc/self_employment_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,40000.0,39921.50653076172,-0.0019623367309570313,40000.0,40028.391258239746,0.0007097814559936524 +hmrc/self_employment_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,651000.0,650179.803440094,-0.0012599025497788108,651000.0,650254.9987473488,-0.001144395165362849 +hmrc/self_employment_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,34000.0,33966.705949783325,-0.0009792367710786708,34000.0,33815.35620689392,-0.00543069979723762 +hmrc/self_employment_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,961000.0,961503.7924113274,0.0005242376808817503,961000.0,959255.8120074272,-0.0018149718965377569 +hmrc/self_employment_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,21000.0,21016.631408691406,0.0007919718424479167,21000.0,21022.61789703369,0.001077042715890067 +hmrc/self_employment_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,595000.0,594765.2763404846,-0.00039449354540400147,595000.0,594353.5850861126,-0.0010864116199788081 +hmrc/self_employment_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,359000.0,358786.50452423096,-0.0005946949185767214,359000.0,358559.9247903824,-0.0012258362384891775 +hmrc/self_employment_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,311000.0,310726.179210186,-0.0008804527003665446,311000.0,311136.2716012001,0.00043817235112573555 +hmrc/self_employment_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,143000.0,142997.57814216614,-1.6936068768267866e-05,143000.0,142791.96861553192,-0.0014547649263502 +hmrc/self_employment_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,4980000000.0,4980030897.899983,6.20439758702933e-06,4980000000.0,4967226159.408724,-0.0025650282311799537 +hmrc/self_employment_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,4810000000.0,4815403310.5660715,0.001123349390035657,4810000000.0,4790406583.589268,-0.004073475345266584 +hmrc/self_employment_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,3650000000.0,3650444531.748102,0.00012178952002799675,3650000000.0,3640452233.071792,-0.00261582655567339 +hmrc/self_employment_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,8030000000.0,8030099199.409501,1.2353600186933468e-05,8030000000.0,8024917787.432276,-0.0006329031840254331 +hmrc/self_employment_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,4390000000.0,4399745372.18752,0.002219902548410029,4390000000.0,4370593630.318169,-0.004420585348936528 +hmrc/self_employment_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,15700000000.0,19788765386.485855,0.26043091633667864,15700000000.0,19585138841.417667,0.24746107270176226 +hmrc/self_employment_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,4840000000.0,4853366121.748816,0.002761595402647838,4840000000.0,4847359867.160474,0.001520633710841699 +hmrc/self_employment_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,12600000000.0,14576649818.495884,0.15687696972189555,12600000000.0,14509971621.9065,0.1515850493576587 +hmrc/self_employment_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,8730000000.0,9167749771.00845,0.05014315819111679,8730000000.0,9393216875.306887,0.07596985971442001 +hmrc/self_employment_income_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,6670000000.0,6668763574.350714,-0.0001853711618120345,6670000000.0,6636099006.788544,-0.005082607677879505 +hmrc/self_employment_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,8220000000.0,9020495703.55576,0.09738390554206319,8220000000.0,9254430889.608051,0.12584317391825442 +hmrc/self_employment_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,5360000000.0,5363217000.100863,0.0006001865859819881,5360000000.0,5355739077.997631,-0.0007949481347703223 +hmrc/state_pension_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,74000.0,73578.40440750122,-0.005697237736469991,74000.0,73983.26222991943,-0.0002261860821698163 +hmrc/state_pension_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,1140000.0,1136605.0162029266,-0.0029780559623450564,1140000.0,1138019.2859344482,-0.0017374684785541735 +hmrc/state_pension_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,21000.0,20964.464184761047,-0.0016921816780453636,21000.0,21083.223120689392,0.003963005747113909 +hmrc/state_pension_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,2050000.0,2044478.4216796202,-0.0026934528392096755,2050000.0,2045630.612208414,-0.002131408678822492 +hmrc/state_pension_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,14000.0,13981.479522705078,-0.0013228912353515625,14000.0,13986.871459960938,-0.0009377528599330357 +hmrc/state_pension_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,2320000.0,2315902.1012153625,-0.0017663356830333841,2320000.0,2316969.0100393295,-0.0013064611899441685 +hmrc/state_pension_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,8000.0,8027.89266204834,0.0034865827560424806,8000.0,7992.490333557129,-0.0009387083053588867 +hmrc/state_pension_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,1160000.0,1157001.814716339,-0.0025846424859145593,1160000.0,1158671.0638074875,-0.0011456346487176828 +hmrc/state_pension_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,568000.0,566338.753660202,-0.002924729471475306,568000.0,566183.8954172134,-0.003197367223215775 +hmrc/state_pension_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,3000.0,3004.3687133789062,0.00145623779296875,3000.0,2995.442413330078,-0.001519195556640625 +hmrc/state_pension_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,441000.0,430194.61750415654,-0.02450200112436158,441000.0,435039.4652388038,-0.013515951839447113 +hmrc/state_pension_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,176000.0,175729.2636976242,-0.0015382744453170084,176000.0,176118.3736729622,0.0006725776872851632 +hmrc/state_pension_income_band_100_000_to_150_000@2025,hmrc_spi,False,847000000.0,843181828.0615735,-0.0045078771409994035,847000000.0,847391350.9206508,0.0004620435899065405 +hmrc/state_pension_income_band_12_570_to_15_000@2025,hmrc_spi,False,11800000000.0,13111748721.3314,0.11116514587554237,11800000000.0,13160644659.758148,0.1153088694710295 +hmrc/state_pension_income_band_150_000_to_200_000@2025,hmrc_spi,False,265000000.0,264843222.44576156,-0.0005916134122205231,265000000.0,265905605.32003313,0.003417378566162766 +hmrc/state_pension_income_band_15_000_to_20_000@2025,hmrc_spi,False,22200000000.0,25377650196.5516,0.14313739624106311,22200000000.0,25399321780.058083,0.14411359369631002 +hmrc/state_pension_income_band_200_000_to_300_000@2025,hmrc_spi,False,179000000.0,178816343.4071458,-0.0010260144852190045,179000000.0,178745599.86181647,-0.0014212298222543807 +hmrc/state_pension_income_band_20_000_to_30_000@2025,hmrc_spi,False,24900000000.0,29167459646.592186,0.171383921549887,24900000000.0,29189968997.71086,0.17228791155465306 +hmrc/state_pension_income_band_300_000_to_500_000@2025,hmrc_spi,False,96000000.0,95930007.81504366,-0.0007290852599618956,96000000.0,95029441.56819184,-0.01010998366466832 +hmrc/state_pension_income_band_30_000_to_40_000@2025,hmrc_spi,False,12300000000.0,14067869503.18636,0.14372922790133003,12300000000.0,14100187382.77807,0.146356697786835 +hmrc/state_pension_income_band_40_000_to_50_000@2025,hmrc_spi,False,6020000000.0,6530387864.006682,0.08478203721041236,6020000000.0,6567670799.077513,0.09097521579360676 +hmrc/state_pension_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,43000000.0,43050091.75034857,0.001164924426710883,43000000.0,42918430.59545559,-0.0018969628963816999 +hmrc/state_pension_income_band_50_000_to_70_000@2025,hmrc_spi,False,4660000000.0,4842589049.834036,0.03918219953520083,4660000000.0,4951253443.355183,0.06250073891742117 +hmrc/state_pension_income_band_70_000_to_100_000@2025,hmrc_spi,False,1890000000.0,1888501998.2143908,-0.000792593537359389,1890000000.0,1892605899.4394338,0.0013787827721872027 +isc.private_school_students@2025,isc,False,556551.0,556112.8858337402,-0.0007871950032607355,556551.0,555733.3732347488,-0.00146909585150536 +mhclg.council_tax_stock.band_a@E12000001@2025,council_tax_stock,False,621096.0,620194.9571781158,-0.0014507303571173462,621096.0,621146.9393720627,8.201529564299738e-05 +mhclg.council_tax_stock.band_a@E12000002@2025,council_tax_stock,False,1285713.0,1285283.3794378387,-0.0003341496602751306,1285713.0,1287357.9584001647,0.0012794133684303813 +mhclg.council_tax_stock.band_a@E12000003@2025,council_tax_stock,False,988548.0,988687.8627319336,0.00014148299519456186,988548.0,988794.9612960815,0.00024982226061004924 +mhclg.council_tax_stock.band_a@E12000004@2025,council_tax_stock,False,739971.0,739584.0246810913,-0.000522960114529747,739971.0,739049.6898393631,-0.001245062523581197 +mhclg.council_tax_stock.band_a@E12000005@2025,council_tax_stock,False,728493.0,727134.7655916971,-0.0018644440074275677,728493.0,726649.3191184998,-0.0025308148211448073 +mhclg.council_tax_stock.band_a@E12000006@2025,council_tax_stock,False,364482.0,363957.9205608368,-0.0014378746801301792,364482.0,364214.66241242335,-0.0007334726751297748 +mhclg.council_tax_stock.band_a@E12000007@2025,council_tax_stock,False,118732.0,118437.56732177734,-0.0024798089666025693,118732.0,118503.70058441162,-0.0019228128523766036 +mhclg.council_tax_stock.band_a@E12000008@2025,council_tax_stock,False,320025.0,320278.77394485474,0.0007929816259815212,320025.0,320191.10360336304,0.0005190332110398785 +mhclg.council_tax_stock.band_a@E12000009@2025,council_tax_stock,False,422969.0,422346.27302360535,-0.0014722756901679635,422969.0,422426.59939956665,-0.0012823649024712204 +mhclg.council_tax_stock.band_b@E12000001@2025,council_tax_stock,False,193309.0,192903.76585388184,-0.002096302531791919,193309.0,193026.58325195312,-0.0014609601624698022 +mhclg.council_tax_stock.band_b@E12000002@2025,council_tax_stock,False,666970.0,667705.5748056517,0.0011028604069923309,666970.0,666433.6597585678,-0.0008041444764115177 +mhclg.council_tax_stock.band_b@E12000003@2025,council_tax_stock,False,482052.0,481753.3534965515,-0.000619531717425685,482052.0,482475.24538707733,0.0008780077399893197 +mhclg.council_tax_stock.band_b@E12000004@2025,council_tax_stock,False,478320.0,477547.1876602173,-0.001615680589945465,478320.0,477805.3828983307,-0.001075884557763237 +mhclg.council_tax_stock.band_b@E12000005@2025,council_tax_stock,False,625673.0,625848.6727115994,0.00028077400111461634,625673.0,626269.3154182434,0.0009530783943743908 +mhclg.council_tax_stock.band_b@E12000006@2025,council_tax_stock,False,568914.0,568559.471321106,-0.000623167436368314,568914.0,569355.3797912598,0.0007758286687614747 +mhclg.council_tax_stock.band_b@E12000007@2025,council_tax_stock,False,463447.0,463533.025182724,0.00018562032492172573,463447.0,463730.29212216893,0.0006112718869016999 +mhclg.council_tax_stock.band_b@E12000008@2025,council_tax_stock,False,649092.0,648308.064116478,-0.0012077423285482393,649092.0,649852.706972599,0.0011719555511376346 +mhclg.council_tax_stock.band_b@E12000009@2025,council_tax_stock,False,609286.0,609887.542760849,0.0009872912898852082,609286.0,608743.7548484802,-0.0008899681783592194 +mhclg.council_tax_stock.band_c@E12000001@2025,council_tax_stock,False,186703.0,186750.9312095642,0.0002567243673867532,186703.0,186961.0841064453,0.0013823243678211517 +mhclg.council_tax_stock.band_c@E12000002@2025,council_tax_stock,False,585587.0,585362.172203064,-0.00038393577203051836,585587.0,585428.3341408886,-0.0002709518126450073 +mhclg.council_tax_stock.band_c@E12000003@2025,council_tax_stock,False,408440.0,408506.7806444168,0.00016350172465186827,408440.0,408642.21375465393,0.0004950880292183201 +mhclg.council_tax_stock.band_c@E12000004@2025,council_tax_stock,False,384470.0,384445.54001426697,-6.362001127014391e-05,384470.0,384680.8434152603,0.0005484001749429473 +mhclg.council_tax_stock.band_c@E12000005@2025,council_tax_stock,False,503657.0,503460.320852431,-0.0003905021623227653,503657.0,502066.0626754761,-0.003158771395064351 +mhclg.council_tax_stock.band_c@E12000006@2025,council_tax_stock,False,708146.0,707312.1177453995,-0.0011775569650898613,708146.0,708082.1249799728,-9.020035420260885e-05 +mhclg.council_tax_stock.band_c@E12000007@2025,council_tax_stock,False,991205.0,991777.1511862333,0.0005772279056635812,991205.0,992450.4688060447,0.001256519898552433 +mhclg.council_tax_stock.band_c@E12000008@2025,council_tax_stock,False,1024169.0,1024776.7852220535,0.0005934423147483744,1024169.0,1023018.6932897568,-0.0011231610312782607 +mhclg.council_tax_stock.band_c@E12000009@2025,council_tax_stock,False,587214.0,586099.308303833,-0.001898271662744744,587214.0,586460.6624765396,-0.0012829011628816551 +mhclg.council_tax_stock.band_d@E12000001@2025,council_tax_stock,False,108432.0,108514.6448726654,0.0007621815761528448,108432.0,108486.77096176147,0.000505118062578156 +mhclg.council_tax_stock.band_d@E12000002@2025,council_tax_stock,False,346489.0,346640.89738082886,0.0004383901965974603,346489.0,346349.7675037384,-0.0004018381428027922 +mhclg.council_tax_stock.band_d@E12000003@2025,council_tax_stock,False,237496.0,237483.99088859558,-5.056553122755308e-05,237496.0,237319.9785346985,-0.0007411554944147003 +mhclg.council_tax_stock.band_d@E12000004@2025,council_tax_stock,False,238335.0,238126.12706756592,-0.0008763837977388215,238335.0,238088.91067504883,-0.001032535401645465 +mhclg.council_tax_stock.band_d@E12000005@2025,council_tax_stock,False,288790.0,288892.22273460263,0.0003539690938143075,288790.0,289259.12017265195,0.0016244335768272802 +mhclg.council_tax_stock.band_d@E12000006@2025,council_tax_stock,False,485975.0,485387.6507373223,-0.001208599748295108,485975.0,485261.83913759084,-0.0014674846698063903 +mhclg.council_tax_stock.band_d@E12000007@2025,council_tax_stock,False,929941.0,930067.9663539041,0.00013653162287081294,929941.0,930824.4720158904,0.0009500301802914478 +mhclg.council_tax_stock.band_d@E12000008@2025,council_tax_stock,False,807114.0,806798.9860906601,-0.00039029667350573127,807114.0,805926.4046573639,-0.0014714096678240104 +mhclg.council_tax_stock.band_d@E12000009@2025,council_tax_stock,False,404568.0,404870.18783569336,0.000746939539690137,404568.0,404839.88302469254,0.0006720329454937993 +mhclg.council_tax_stock.band_e@E12000001@2025,council_tax_stock,False,58932.0,58708.52875518799,-0.0037920186793594605,58932.0,58828.08632659912,-0.0017632809577288893 +mhclg.council_tax_stock.band_e@E12000002@2025,council_tax_stock,False,207825.0,207981.2329711914,0.0007517525379112535,207825.0,207745.35693740845,-0.0003832217615376049 +mhclg.council_tax_stock.band_e@E12000003@2025,council_tax_stock,False,152517.0,152760.4509420395,0.0015962216804650613,152517.0,152540.63852214813,0.00015498942510102037 +mhclg.council_tax_stock.band_e@E12000004@2025,council_tax_stock,False,149931.0,150015.4684267044,0.0005633820004162363,149931.0,150172.48236846924,0.0016106233431994602 +mhclg.council_tax_stock.band_e@E12000005@2025,council_tax_stock,False,185672.0,185746.73205566406,0.0004024950216729636,185672.0,185450.54933166504,-0.001192698243865316 +mhclg.council_tax_stock.band_e@E12000006@2025,council_tax_stock,False,301723.0,302064.2689078404,0.0011310669317235408,301723.0,302081.93274079834,0.001189610141747021 +mhclg.council_tax_stock.band_e@E12000007@2025,council_tax_stock,False,551952.0,552325.0366301645,0.000675849766219676,551952.0,552201.4293124839,0.0004519039925281061 +mhclg.council_tax_stock.band_e@E12000008@2025,council_tax_stock,False,529137.0,529146.0169086456,1.704078271908765e-05,529137.0,528914.2592964172,-0.0004209509136249472 +mhclg.council_tax_stock.band_e@E12000009@2025,council_tax_stock,False,274120.0,274278.4754009247,0.0005781241825648717,274120.0,273778.388917923,-0.0012462099886072755 +mhclg.council_tax_stock.band_f@E12000001@2025,council_tax_stock,False,25729.0,25775.728233337402,0.001816169821501121,25729.0,25686.15460205078,-0.0016652570231730245 +mhclg.council_tax_stock.band_f@E12000002@2025,council_tax_stock,False,100117.0,99958.25249481201,-0.0015856198766242325,100117.0,100394.31674194336,0.0027699266053053864 +mhclg.council_tax_stock.band_f@E12000003@2025,council_tax_stock,False,73172.0,73123.63964128494,-0.0006609134466060429,73172.0,73130.79101085663,-0.0005631797565102988 +mhclg.council_tax_stock.band_f@E12000004@2025,council_tax_stock,False,71418.0,71433.54439926147,0.0002176538024234032,71418.0,71341.09436798096,-0.0010768382203232094 +mhclg.council_tax_stock.band_f@E12000005@2025,council_tax_stock,False,102077.0,102066.87266921997,-9.92126608347551e-05,102077.0,102438.10886764526,0.003537612465543302 +mhclg.council_tax_stock.band_f@E12000006@2025,council_tax_stock,False,166744.0,166552.83470344543,-0.0011464598219699984,166744.0,166707.11080169678,-0.00022123253792174024 +mhclg.council_tax_stock.band_f@E12000007@2025,council_tax_stock,False,279261.0,279144.99192619324,-0.00041541093746267006,279261.0,279186.2597287496,-0.000267635907808202 +mhclg.council_tax_stock.band_f@E12000008@2025,council_tax_stock,False,325815.0,326410.0446662903,0.0018263267998412695,325815.0,325896.89788913727,0.00025136316356603615 +mhclg.council_tax_stock.band_f@E12000009@2025,council_tax_stock,False,139412.0,139273.56274032593,-0.000993008203555449,139412.0,139426.17563056946,0.0001016815666474766 +mhclg.council_tax_stock.band_g@E12000001@2025,council_tax_stock,False,14062.0,14076.558532714844,0.0010353102485310588,14062.0,14047.497665405273,-0.0010313137956710684 +mhclg.council_tax_stock.band_g@E12000002@2025,council_tax_stock,False,62587.0,62479.37763786316,-0.0017195641608775116,62587.0,62711.26148223877,0.0019854200111647713 +mhclg.council_tax_stock.band_g@E12000003@2025,council_tax_stock,False,40487.0,40558.9407081604,0.0017768841396102548,40487.0,40521.42942047119,0.0008503821095954604 +mhclg.council_tax_stock.band_g@E12000004@2025,council_tax_stock,False,37892.0,37878.61399459839,-0.0003532673229602905,37892.0,37826.26502990723,-0.0017347981128674505 +mhclg.council_tax_stock.band_g@E12000005@2025,council_tax_stock,False,60209.0,60203.69123840332,-8.817222668836366e-05,60209.0,60540.691719055176,0.005509005614695075 +mhclg.council_tax_stock.band_g@E12000006@2025,council_tax_stock,False,108700.0,108689.91599845886,-9.276910341433022e-05,108700.0,108519.1352443695,-0.0016638891962326879 +mhclg.council_tax_stock.band_g@E12000007@2025,council_tax_stock,False,207056.0,207102.33735466003,0.00022379141227510518,207056.0,207141.2941417694,0.0004119375520120604 +mhclg.council_tax_stock.band_g@E12000008@2025,council_tax_stock,False,255206.0,255706.63027000427,0.0019616712381537757,255206.0,255268.3055448532,0.00024413824460714265 +mhclg.council_tax_stock.band_g@E12000009@2025,council_tax_stock,False,75533.0,75494.89457321167,-0.0005044871352697507,75533.0,75405.47719573975,-0.001688305830037916 +mhclg.council_tax_stock.band_h@E12000004@2025,council_tax_stock,False,2779.0,2777.045166015625,-0.0007034307248560633,2779.0,2777.9176025390625,-0.00038949170958528246 +mhclg.council_tax_stock.band_h@E12000005@2025,council_tax_stock,False,5285.0,5266.8173828125,-0.0034404195245979186,5285.0,5291.618865966797,0.0012523871271138836 +mhclg.council_tax_stock.band_h@E12000006@2025,council_tax_stock,False,13447.0,13547.438842773438,0.007469237954446159,13447.0,13456.193542480469,0.0006836872522100654 +mhclg.council_tax_stock.band_h@E12000007@2025,council_tax_stock,False,59569.0,59460.119148254395,-0.0018278106354917066,59569.0,59661.832778930664,0.001558407543028489 +mhclg.council_tax_stock.band_h@E12000008@2025,council_tax_stock,False,36978.0,37319.16191101074,0.009226077965567153,36978.0,37060.821212768555,0.0022397428949254877 +mhclg.council_tax_stock.band_h@E12000009@2025,council_tax_stock,False,6697.0,6735.3565673828125,0.005727425322205839,6697.0,6727.3978271484375,0.004539021524329924 +mhclg.council_tax_stock.total@E12000001@2025,council_tax_stock,False,1209414.0,1206925.1146354675,-0.0020579267021321656,1209414.0,1208183.1162862778,-0.0010177521623879243 +mhclg.council_tax_stock.total@E12000002@2025,council_tax_stock,False,3261518.0,3255410.88693125,-0.0018724756597235177,3261518.0,3256420.6549649504,-0.0015628750278396742 +mhclg.council_tax_stock.total@E12000003@2025,council_tax_stock,False,2385734.0,2382875.0190529823,-0.0011983653445931817,2385734.0,2383425.2579259872,-0.0009677282018920618 +mhclg.council_tax_stock.total@E12000004@2025,council_tax_stock,False,2103116.0,2101807.5514097214,-0.0006221476087284893,2103116.0,2101742.5861968994,-0.0006530375895103199 +mhclg.council_tax_stock.total@E12000005@2025,council_tax_stock,False,2499856.0,2498620.0952364304,-0.0004943903823138572,2499856.0,2497964.7861692035,-0.000756529108395258 +mhclg.council_tax_stock.total@E12000006@2025,council_tax_stock,False,2718131.0,2716071.6188171823,-0.000757646037964227,2718131.0,2717678.3786505917,-0.00016651932868882747 +mhclg.council_tax_stock.total@E12000007@2025,council_tax_stock,False,3601163.0,3601848.195103911,0.000190270505364855,3601163.0,3603699.7494904506,0.0007044250678046515 +mhclg.council_tax_stock.total@E12000008@2025,council_tax_stock,False,3947536.0,3948744.4631299973,0.00030613099665139303,3947536.0,3946129.192466259,-0.0003563761125271555 +mhclg.council_tax_stock.total@E12000009@2025,council_tax_stock,False,2519799.0,2518985.601205826,-0.0003228030466613386,2519799.0,2517808.3393206596,-0.0007900077265449992 +nithc.public_transport_support@2025,dft_local_bus,False,111700000.0,111492148.58393034,-0.0018608005019664872,111700000.0,111369169.32507615,-0.002961778647483009 +obr.attendance_allowance@2025,obr,False,8492497075.074617,8464315474.324637,-0.003318411593298354,8492497075.074617,8496723961.439579,0.0004977200848696773 +obr.carers_allowance@2025,obr,False,4569403813.760573,4569753917.682451,7.661916874659608e-05,4569403813.760573,4566280297.322933,-0.0006835719855255182 +obr.child_benefit@2025,obr,False,13389272724.45089,16031537202.628736,0.1973418969465505,13389272724.45089,16093392774.334671,0.20196168272423332 +obr.council_tax@2025,obr,False,50925163826.30539,44769794834.09963,-0.1208708726632746,50925163826.30539,44713092400.90159,-0.12198431892319128 +obr.esa@2025,obr,False,7206287181.538654,6498237299.695721,-0.09825446363792485,7206287181.538654,6484384983.319413,-0.10017671791774246 +obr.fuel_duties_cars@2025,obr,False,14400000000.0,12015455374.64862,-0.16559337676051245,14400000000.0,11694310794.288483,-0.1878950837299665 +obr.income_tax@2025,obr,False,331437583074.4429,288873911060.3093,-0.12842138063918204,331437583074.4429,288619837451.67487,-0.1291879612009809 +obr.jobseekers_allowance@2025,obr,False,280558748.04472804,279958185.4513395,-0.0021405947865607558,280558748.04472804,280524909.81038904,-0.00012061015589363886 +obr.ni@2025,obr,False,200081395082.7125,196428193894.51556,-0.018258575149811992,200081395082.7125,196205647853.52615,-0.019370852685149105 +obr.ni_employee@2025,obr,False,49544363784.26465,47677389950.58033,-0.03768287028195267,49544363784.26465,47619370001.47669,-0.03885394090779175 +obr.ni_employer@2025,obr,False,145324007512.71753,145850768556.15732,0.003624735186260888,145324007512.71753,145691143834.90195,0.0025263294652281667 +obr.ni_self_employed@2025,obr,False,2902816090.4147716,2900035497.4771214,-0.0009578949720004123,2902816090.4147716,2895134122.4537234,-0.002646384656063582 +obr.pension_credit@2025,obr,False,6146422389.476461,6131573069.689932,-0.002415928949489977,6146422389.476461,6148532462.373933,0.00034330099100969195 +obr.pip@2025,obr,False,36910059270.5278,36874599088.03161,-0.0009607186549415113,36910059270.5278,36893177551.5838,-0.00045737447399549626 +obr.sdlt@2025,obr,False,15406516698.785578,15374327355.247734,-0.002089332985981253,15406516698.785578,15403357328.377039,-0.00020506714595570176 +obr.state_pension@2025,obr,False,146185954351.57382,135388915617.3279,-0.07385824980339287,146185954351.57382,134955910500.40097,-0.07682026567453161 +obr.statutory_maternity_pay@2025,obr,False,3194800881.520547,3201543213.261227,0.002110407499784852,3194800881.520547,3189475432.153539,-0.0016669111986951485 +obr.tv_licence_fee@2025,obr,False,3872000000.0,3870761512.745221,-0.00031985724555239206,3872000000.0,3871678431.2333283,-8.304978478090329e-05 +obr.universal_credit@2025,obr,False,79286349139.54411,79166803620.77298,-0.0015077692448763544,79286349139.54411,79242444606.85077,-0.0005537464288596775 +obr.vat@2025,obr,False,180168938685.41794,218219977029.93292,0.21119643942041305,180168938685.41794,219852023437.29694,0.2202548621389574 +obr.winter_fuel_allowance@2025,obr,False,1911040880.4619167,1885485588.748808,-0.013372446384784726,1911040880.4619167,1870431517.3102238,-0.021249866272812123 +ons.household_composition.couple_3_plus_children_households@2025,ons_household_composition,False,931000.0,931460.5526982867,0.0004946860346796089,931000.0,930564.8835735321,-0.00046736458267228304 +ons.household_composition.couple_no_children_households@2025,ons_household_composition,False,8119000.0,8120444.919556134,0.00017796767534602543,8119000.0,8125613.702006986,0.000814595640717621 +ons.household_composition.couple_non_dependent_children_only_households@2025,ons_household_composition,False,1848000.0,1847621.5034827339,-0.00020481413271977643,1848000.0,1849659.8236091193,0.0008981729486576197 +ons.household_composition.couple_under_3_children_households@2025,ons_household_composition,False,5439000.0,5437932.706181859,-0.00019622978822234486,5439000.0,5438242.758170494,-0.00013922445844936966 +ons.household_composition.lone_households_over_65@2025,ons_household_composition,False,4254000.0,4250446.745724829,-0.0008352736895089531,4254000.0,4256640.070872935,0.0006206090439432382 +ons.household_composition.lone_households_under_65@2025,ons_household_composition,False,4316000.0,4312240.722036762,-0.0008710097227149761,4316000.0,4313246.689761637,-0.0006379310098153895 +ons.household_composition.lone_parent_dependent_children_households@2025,ons_household_composition,False,1835000.0,1833730.5642666817,-0.0006917905903642119,1835000.0,1836491.899989656,0.000813024517523673 +ons.household_composition.lone_parent_non_dependent_children_households@2025,ons_household_composition,False,1204000.0,1207919.7250995636,0.0032555856308667764,1204000.0,1203593.9623882824,-0.0003372405412936803 +ons.household_composition.multi_family_households@2025,ons_household_composition,False,244000.0,243946.38682937622,-0.00021972610911384958,244000.0,243187.5108795166,-0.003329873444604092 +ons.household_composition.unrelated_adult_households@2025,ons_household_composition,False,813000.0,812647.3109092712,-0.00043381191971557164,813000.0,810555.1048545837,-0.003007251101373013 +ons.household_energy_expenditure@2025,ons_national_accounts,False,43427000000.0,43402765371.90854,-0.0005580543922320488,43427000000.0,43432824008.44851,0.00013411031037164015 +ons.land.corporate_land_value@2025,ons_land,False,2103053000000.0,2102251629065.8828,-0.00038105123081405345,2103053000000.0,2102811058245.8435,-0.0001150431083555641 +ons.land.household_land_value@2025,ons_land,False,4559831000000.0,4559926839959.675,2.1018313984620196e-05,4559831000000.0,4564462198151.677,0.0010156512712152616 +ons.land.land_value@2025,ons_land,False,7117771000000.0,6662178468268.26,-0.06400775351324736,7117771000000.0,6667273267214.528,-0.06329196777832156 +ons.population.age_0_9_by_region@E12000001@2025,ons_population,False,285165.0,284609.9429988861,-0.0019464415377549544,285165.0,284882.98040390015,-0.0009889698809456052 +ons.population.age_0_9_by_region@E12000002@2025,ons_population,False,865892.0,865455.561085701,-0.0005040338914079484,865892.0,865253.5372724533,-0.0007373468371883467 +ons.population.age_0_9_by_region@E12000003@2025,ons_population,False,626938.0,626571.9527072906,-0.0005838652190636882,626938.0,627410.3740434647,0.0007534621341578604 +ons.population.age_0_9_by_region@E12000004@2025,ons_population,False,543004.0,542600.5250740051,-0.0007430422722390131,543004.0,542759.5196266174,-0.000450236781649064 +ons.population.age_0_9_by_region@E12000005@2025,ons_population,False,718837.0,718518.2166614532,-0.0004434709656664208,718837.0,718159.8528442383,-0.000942003758517882 +ons.population.age_0_9_by_region@E12000006@2025,ons_population,False,744698.0,744733.5138652509,4.76889494142072e-05,744698.0,744496.9020848642,-0.00027003955312863694 +ons.population.age_0_9_by_region@E12000007@2025,ons_population,False,1054493.0,1054045.5713834763,-0.00042430686265697607,1054493.0,1054714.1689778024,0.00020973963582725206 +ons.population.age_0_9_by_region@E12000008@2025,ons_population,False,1059434.0,1058727.9531116486,-0.000666437822791642,1059434.0,1058950.7117414474,-0.00045617590010567084 +ons.population.age_0_9_by_region@E12000009@2025,ons_population,False,575506.0,575020.3139476776,-0.0008439287380537956,575506.0,575157.5919265747,-0.0006053943372011638 +ons.population.age_0_9_by_region@N92000002@2025,ons_population,False,229505.0,229853.9004907608,0.001520230455810563,229505.0,228803.52364635468,-0.003056475256074267 +ons.population.age_0_9_by_region@S92000003@2025,ons_population,False,527989.0,527794.9173984528,-0.0003675883428390387,527989.0,528263.7163276672,0.0005203069148547343 +ons.population.age_0_9_by_region@W92000004@2025,ons_population,False,321552.0,321050.732875824,-0.0015588991024034226,321552.0,321556.9823627472,1.5494734124472504e-05 +ons.population.age_10_19_by_region@E12000001@2025,ons_population,False,326306.0,325976.6063747406,-0.0010094623612786752,326306.0,325505.3555135727,-0.0024536615521237952 +ons.population.age_10_19_by_region@E12000002@2025,ons_population,False,952864.0,952052.4070858107,-0.0008517405570882397,952864.0,952010.330947876,-0.0008958981052112615 +ons.population.age_10_19_by_region@E12000003@2025,ons_population,False,696780.0,696847.7113595009,9.717753021166653e-05,696780.0,696900.1353702545,0.00017241506681379574 +ons.population.age_10_19_by_region@E12000004@2025,ons_population,False,615630.0,614734.3473949432,-0.001454855359642582,615630.0,615106.633980751,-0.0008501307916264028 +ons.population.age_10_19_by_region@E12000005@2025,ons_population,False,785062.0,785543.875207477,0.0006138052885976093,785062.0,784186.1659107208,-0.0011156241026558092 +ons.population.age_10_19_by_region@E12000006@2025,ons_population,False,785091.0,784457.7626464551,-0.0008065782865233649,785091.0,785502.9679544889,0.0005247391123945337 +ons.population.age_10_19_by_region@E12000007@2025,ons_population,False,1068691.0,1068464.3065729141,-0.00021212251912468288,1068691.0,1069124.3701606863,0.0004055149343321108 +ons.population.age_10_19_by_region@E12000008@2025,ons_population,False,1183235.0,1183052.2799797058,-0.00015442411718229215,1183235.0,1182931.2817587852,-0.0002566846325664405 +ons.population.age_10_19_by_region@E12000009@2025,ons_population,False,677228.0,677339.0187215805,0.0001639310861046876,677228.0,676808.4508805275,-0.0006195094111178269 +ons.population.age_10_19_by_region@N92000002@2025,ons_population,False,252764.0,253409.34803533554,0.002553164356219797,252764.0,252143.42802143097,-0.0024551438439375495 +ons.population.age_10_19_by_region@S92000003@2025,ons_population,False,612935.0,612865.6775856018,-0.00011309912861591091,612935.0,613997.6536617279,0.0017337134634633447 +ons.population.age_10_19_by_region@W92000004@2025,ons_population,False,374851.0,374968.99680805206,0.0003147832286750282,374851.0,374858.54680252075,2.0132806156984917e-05 +ons.population.age_20_29_by_region@E12000001@2025,ons_population,False,343015.0,342763.2720069885,-0.0007338687608748148,343015.0,343181.33808135986,0.00048492946769051874 +ons.population.age_20_29_by_region@E12000002@2025,ons_population,False,986590.0,986526.0422205076,-6.482711105156953e-05,986590.0,986378.7287041717,-0.00021414295282567137 +ons.population.age_20_29_by_region@E12000003@2025,ons_population,False,717479.0,717085.464466095,-0.0005484976339447277,717479.0,717121.3805046082,-0.0004984389722791129 +ons.population.age_20_29_by_region@E12000004@2025,ons_population,False,612108.0,612098.2460422516,-1.593502739453346e-05,612108.0,610928.4758396149,-0.0019269870029229022 +ons.population.age_20_29_by_region@E12000005@2025,ons_population,False,766058.0,766542.9874440753,0.0006330949406902482,766058.0,766071.0747070312,1.7067515816361162e-05 +ons.population.age_20_29_by_region@E12000006@2025,ons_population,False,727218.0,727476.6374969482,0.00035565332121625454,727218.0,726905.135887146,-0.00043022052926908286 +ons.population.age_20_29_by_region@E12000007@2025,ons_population,False,1508607.0,1507259.431204086,-0.0008932537075023935,1508607.0,1507400.5175702733,-0.000799732753279514 +ons.population.age_20_29_by_region@E12000008@2025,ons_population,False,1066121.0,1066585.0860977173,0.0004353034015062879,1066121.0,1065619.488936901,-0.00047040726437140573 +ons.population.age_20_29_by_region@E12000009@2025,ons_population,False,684393.0,684861.380903244,0.0006843741874098925,684393.0,683110.0084037781,-0.0018746416112115755 +ons.population.age_20_29_by_region@N92000002@2025,ons_population,False,219525.0,219736.91438388824,0.0009653314378236858,219525.0,218806.90545511246,-0.0032711287775312277 +ons.population.age_20_29_by_region@S92000003@2025,ons_population,False,703554.0,701364.6888618469,-0.003111788346243609,703554.0,703771.0460548401,0.00030849949661303596 +ons.population.age_20_29_by_region@W92000004@2025,ons_population,False,380557.0,380362.6153793335,-0.0005107897651771059,380557.0,379625.18937683105,-0.0024485441685974645 +ons.population.age_30_39_by_region@E12000001@2025,ons_population,False,363357.0,362320.89476394653,-0.002851480048694443,363357.0,362730.8352832794,-0.001723276878443462 +ons.population.age_30_39_by_region@E12000002@2025,ons_population,False,1064968.0,1065548.3231199475,0.0005449207111832975,1064968.0,1064980.5623272152,1.1795966841459266e-05 +ons.population.age_30_39_by_region@E12000003@2025,ons_population,False,770809.0,770560.1672348976,-0.0003228202642968446,770809.0,771101.5872774124,0.000379584666775316 +ons.population.age_30_39_by_region@E12000004@2025,ons_population,False,676709.0,676543.4868240356,-0.00024458545100531465,676709.0,676855.4376506805,0.0002163967830789039 +ons.population.age_30_39_by_region@E12000005@2025,ons_population,False,839114.0,838854.9021657913,-0.00030877548725053735,839114.0,838271.9603252411,-0.0010034866236994153 +ons.population.age_30_39_by_region@E12000006@2025,ons_population,False,895639.0,895252.0604333878,-0.0004320262590309753,895639.0,895491.7495954221,-0.00016440820975631377 +ons.population.age_30_39_by_region@E12000007@2025,ons_population,False,1537372.0,1534018.7645695263,-0.00218114771862223,1537372.0,1520932.5486141013,-0.010693216336643798 +ons.population.age_30_39_by_region@E12000008@2025,ons_population,False,1284552.0,1284259.926044464,-0.00022737417834068895,1284552.0,1284047.2275218964,-0.00039295604857073725 +ons.population.age_30_39_by_region@E12000009@2025,ons_population,False,742082.0,742132.8662395477,6.85453083995158e-05,742082.0,740859.9302959442,-0.0016468122175929158 +ons.population.age_30_39_by_region@N92000002@2025,ons_population,False,254067.0,254494.06637835503,0.0016809203019480146,254067.0,253371.57933855057,-0.0027371546145285785 +ons.population.age_30_39_by_region@S92000003@2025,ons_population,False,733480.0,732783.4366836548,-0.0009496691339166914,733480.0,734308.2886818965,0.0011292587144796312 +ons.population.age_30_39_by_region@W92000004@2025,ons_population,False,410248.0,410204.61909103394,-0.00010574313333901555,410248.0,409949.1360168457,-0.0007284958931044073 +ons.population.age_40_49_by_region@E12000001@2025,ons_population,False,320860.0,321013.66044425964,0.00047890183961741433,320860.0,320177.2532129288,-0.002127865072216007 +ons.population.age_40_49_by_region@E12000002@2025,ons_population,False,930967.0,930497.6449722395,-0.0005041586090167486,930967.0,930032.6222267151,-0.0010036636887074538 +ons.population.age_40_49_by_region@E12000003@2025,ons_population,False,674349.0,674379.5499053001,4.53028110075649e-05,674349.0,674051.2739686966,-0.0004415014055087288 +ons.population.age_40_49_by_region@E12000004@2025,ons_population,False,610611.0,609682.2416114807,-0.001521031210573159,610611.0,610940.2086181641,0.0005391462292098611 +ons.population.age_40_49_by_region@E12000005@2025,ons_population,False,746341.0,746289.8564990209,-6.852564843557897e-05,746341.0,744575.4932479858,-0.0023655497313080217 +ons.population.age_40_49_by_region@E12000006@2025,ons_population,False,838578.0,838616.4733310112,4.587925155590736e-05,838578.0,837817.9980202455,-0.0009062984954942047 +ons.population.age_40_49_by_region@E12000007@2025,ons_population,False,1268973.0,1258015.5042910683,-0.008634932113553009,1268973.0,1232290.2601089694,-0.028907423476331327 +ons.population.age_40_49_by_region@E12000008@2025,ons_population,False,1255951.0,1255119.7139348984,-0.0006618777843256812,1255951.0,1254866.4461565018,-0.000863531971787299 +ons.population.age_40_49_by_region@E12000009@2025,ons_population,False,688417.0,687546.2866687775,-0.0012648050981055583,688417.0,687633.4740829468,-0.0011381559680444014 +ons.population.age_40_49_by_region@N92000002@2025,ons_population,False,246140.0,246243.06718850136,0.00041873400707466494,246140.0,245386.6356704235,-0.0030607147541094185 +ons.population.age_40_49_by_region@S92000003@2025,ons_population,False,675368.0,675158.1136274338,-0.00031077334514845704,675368.0,676214.7644042969,0.001253782240640473 +ons.population.age_40_49_by_region@W92000004@2025,ons_population,False,365951.0,365483.1434059143,-0.0012784678661506414,365951.0,366183.8174495697,0.0006361984242964281 +ons.population.age_50_59_by_region@E12000001@2025,ons_population,False,360074.0,359886.9211444855,-0.0005195566897763414,360074.0,359628.03360557556,-0.0012385409510946041 +ons.population.age_50_59_by_region@E12000002@2025,ons_population,False,995810.0,995746.7963461027,-6.346959148559988e-05,995810.0,995667.1297492981,-0.00014347139585051797 +ons.population.age_50_59_by_region@E12000003@2025,ons_population,False,736903.0,736626.5655660629,-0.0003751300156697323,736903.0,736209.3869342804,-0.0009412542298234699 +ons.population.age_50_59_by_region@E12000004@2025,ons_population,False,676307.0,675686.4504814148,-0.0009175559599193932,676307.0,674461.175704956,-0.0027292698361009796 +ons.population.age_50_59_by_region@E12000005@2025,ons_population,False,794143.0,794746.8683930957,0.0007604025888230153,794143.0,794833.3574810028,0.0008693112965836224 +ons.population.age_50_59_by_region@E12000006@2025,ons_population,False,866946.0,866605.7335467706,-0.0003924886362349634,866946.0,866499.2777552973,-0.0005152826643213594 +ons.population.age_50_59_by_region@E12000007@2025,ons_population,False,1087518.0,1086155.139494896,-0.001253184319803502,1087518.0,1087446.177359767,-6.604271398999801e-05 +ons.population.age_50_59_by_region@E12000008@2025,ons_population,False,1287719.0,1287957.7299718857,0.00018538980312139618,1287719.0,1286224.9914159775,-0.0011601976704719913 +ons.population.age_50_59_by_region@E12000009@2025,ons_population,False,784718.0,785513.1134653091,0.0010132473899020324,784718.0,783708.9664463997,-0.0012858549868874057 +ons.population.age_50_59_by_region@N92000002@2025,ons_population,False,255269.0,255796.59795570374,0.0020668312866181766,255269.0,254921.80899190903,-0.0013600985943885582 +ons.population.age_50_59_by_region@S92000003@2025,ons_population,False,766715.0,765937.3916301727,-0.001014207847540834,766715.0,767316.1259221156,0.0007840278618725812 +ons.population.age_50_59_by_region@W92000004@2025,ons_population,False,424694.0,424568.29020404816,-0.0002960008758113919,424694.0,424001.93039894104,-0.0016295723534096548 +ons.population.age_60_69_by_region@E12000001@2025,ons_population,False,349719.0,349593.85594177246,-0.00035784174788198254,349719.0,350079.72489356995,0.0010314706766573914 +ons.population.age_60_69_by_region@E12000002@2025,ons_population,False,884043.0,883623.4940605164,-0.0004745311477876558,884043.0,885014.1277721615,0.0010985073940538007 +ons.population.age_60_69_by_region@E12000003@2025,ons_population,False,652931.0,652570.0643081665,-0.0005527930085008923,652931.0,652753.3075962067,-0.00027214576087417346 +ons.population.age_60_69_by_region@E12000004@2025,ons_population,False,591429.0,592810.8889827728,0.0023365255724234475,591429.0,590916.2444839478,-0.000866977297447785 +ons.population.age_60_69_by_region@E12000005@2025,ons_population,False,677922.0,677563.8161260211,-0.0005283555836496074,677922.0,677699.1786443316,-0.0003286828804322064 +ons.population.age_60_69_by_region@E12000006@2025,ons_population,False,744651.0,744053.5699324976,-0.0008022953940872003,744651.0,744580.7952018884,-9.427879383976609e-05 +ons.population.age_60_69_by_region@E12000007@2025,ons_population,False,787666.0,787340.3348808289,-0.00041345585460225855,787666.0,787443.1492080688,-0.00028292549371326467 +ons.population.age_60_69_by_region@E12000008@2025,ons_population,False,1089421.0,1089254.1041965485,-0.0001531967930226589,1089421.0,1087982.7048082352,-0.0013202381740069556 +ons.population.age_60_69_by_region@E12000009@2025,ons_population,False,736639.0,736440.7810535431,-0.0002690855988576619,736639.0,736729.4151439667,0.0001227400992435573 +ons.population.age_60_69_by_region@N92000002@2025,ons_population,False,223111.0,223016.45362138748,-0.0004237638601974726,223111.0,222774.52694416046,-0.0015080971168590458 +ons.population.age_60_69_by_region@S92000003@2025,ons_population,False,721727.0,721488.6410321316,-0.0003302619520516461,721727.0,722357.882061871,0.0008741283918586966 +ons.population.age_60_69_by_region@W92000004@2025,ons_population,False,401775.0,401787.2392578125,3.0462965123514406e-05,401775.0,401140.16132831573,-0.00158008505179333 +ons.population.age_70_79_by_region@E12000001@2025,ons_population,False,265573.0,265352.5727844238,-0.0008300061210144551,265573.0,266060.34198379517,0.0018350584727934165 +ons.population.age_70_79_by_region@E12000002@2025,ons_population,False,669277.0,669028.6429100037,-0.00037108266083600344,669277.0,668998.8210462675,-0.00041564098830899654 +ons.population.age_70_79_by_region@E12000003@2025,ons_population,False,504131.0,502623.55839538574,-0.0029901783556541012,504131.0,504384.1554365158,0.0005021620105008581 +ons.population.age_70_79_by_region@E12000004@2025,ons_population,False,466530.0,466128.36456394196,-0.0008608994835445619,466530.0,466180.3068809509,-0.0007495619125223935 +ons.population.age_70_79_by_region@E12000005@2025,ons_population,False,528207.0,527308.1121683877,-0.0017017719030839374,528207.0,528500.3551902771,0.000555379217384661 +ons.population.age_70_79_by_region@E12000006@2025,ons_population,False,599882.0,599092.2607718247,-0.0013164909568469374,599882.0,599632.136632039,-0.00041652086237130157 +ons.population.age_70_79_by_region@E12000007@2025,ons_population,False,485057.0,484442.09627628326,-0.0012676937426255798,485057.0,484968.76715278625,-0.00018190201814167225 +ons.population.age_70_79_by_region@E12000008@2025,ons_population,False,865392.0,865970.3027620316,0.0006682552670137408,865392.0,865775.5456161499,0.0004432044855393883 +ons.population.age_70_79_by_region@E12000009@2025,ons_population,False,618254.0,617349.0966053009,-0.0014636434130617783,618254.0,617910.3784999847,-0.0005557934117939533 +ons.population.age_70_79_by_region@N92000002@2025,ons_population,False,155382.0,155182.01890945435,-0.0012870286812221125,155382.0,154944.93183135986,-0.0028128622919008426 +ons.population.age_70_79_by_region@S92000003@2025,ons_population,False,519252.0,518779.34658813477,-0.000910258240440546,519252.0,521303.9208011627,0.003951685888860745 +ons.population.age_70_79_by_region@W92000004@2025,ons_population,False,321668.0,320977.74789333344,-0.0021458525767765677,321668.0,321257.59186935425,-0.0012758749102980463 +ons.population.age_80_89_by_region@E12000001@2025,ons_population,False,122118.0,121468.60262298584,-0.005317785887536319,122118.0,122270.84713745117,0.0012516347913589469 +ons.population.age_80_89_by_region@E12000002@2025,ons_population,False,324141.0,324328.1623210907,0.0005774102044810692,324141.0,324116.27251052856,-7.628621331900484e-05 +ons.population.age_80_89_by_region@E12000003@2025,ons_population,False,243274.0,244611.01162147522,0.00549590840564639,243274.0,243523.44748687744,0.0010253766817557215 +ons.population.age_80_89_by_region@E12000004@2025,ons_population,False,225626.0,224939.7790260315,-0.003041409119376782,225626.0,225789.9478149414,0.0007266352944315205 +ons.population.age_80_89_by_region@E12000005@2025,ons_population,False,275030.0,274663.54776763916,-0.0013324082185973889,275030.0,274857.6017303467,-0.0006268344168029681 +ons.population.age_80_89_by_region@E12000006@2025,ons_population,False,305691.0,304833.524810791,-0.0028050390401058076,305691.0,305457.14025878906,-0.0007650200405341914 +ons.population.age_80_89_by_region@E12000007@2025,ons_population,False,237061.0,236868.22968771245,-0.0008131675488062299,237061.0,237173.18129064824,0.0004732169806431144 +ons.population.age_80_89_by_region@E12000008@2025,ons_population,False,447958.0,448803.9723072052,0.001888508090502235,447958.0,447887.92633247375,-0.00015642910167079307 +ons.population.age_80_89_by_region@E12000009@2025,ons_population,False,313605.0,313154.55645370483,-0.0014363404483192742,313605.0,313344.3195858002,-0.0008312380676323053 +ons.population.age_80_89_by_region@N92000002@2025,ons_population,False,77441.0,77351.94020271301,-0.001150034184566151,77441.0,77342.3116607666,-0.0012743680896863216 +ons.population.age_80_89_by_region@S92000003@2025,ons_population,False,238904.0,237507.3569869995,-0.0058460428163634275,238904.0,239402.64144134521,0.002087204238293268 +ons.population.age_80_89_by_region@W92000004@2025,ons_population,False,154319.0,154141.38262557983,-0.001150975410805967,154319.0,154380.5976448059,0.00039915787949577306 +ons.population.female_0_4@2025,ons_population,False,1744355.0,1742985.2922632694,-0.000785223040453678,1744355.0,1744316.31578686,-2.2176800674202262e-05 +ons.population.female_10_14@2025,ons_population,False,2052052.0,2051975.3098326556,-3.737242883923415e-05,2052052.0,2051978.292818363,-3.591876893808858e-05 +ons.population.female_15_19@2025,ons_population,False,2002835.0,2001723.708850299,-0.0005548590621299267,2002835.0,2003254.8024242956,0.0002096040983383916 +ons.population.female_20_24@2025,ons_population,False,2034609.0,2034606.7757162955,-1.0932241548789832e-06,2034609.0,2034386.9343824387,-0.00010914412428203175 +ons.population.female_25_29@2025,ons_population,False,2291610.0,2289598.055078826,-0.000877961311555669,2291610.0,2287424.348819744,-0.0018265111342052785 +ons.population.female_30_34@2025,ons_population,False,2463301.0,2462376.36257822,-0.000375365179399432,2463301.0,2449206.532013841,-0.005721780645629189 +ons.population.female_35_39@2025,ons_population,False,2472291.0,2470152.486272335,-0.0008649927244264318,2472291.0,2470883.6583287134,-0.0005692459630709396 +ons.population.female_40_44@2025,ons_population,False,2333109.0,2331627.573281127,-0.0006349582119279348,2333109.0,2330037.14648987,-0.0013166352322717012 +ons.population.female_45_49@2025,ons_population,False,2088285.0,2086710.9461190884,-0.0007537543395233665,2088285.0,2086074.4142370592,-0.001058565168519054 +ons.population.female_50_54@2025,ons_population,False,2255231.0,2255495.922010974,0.00011747001126449007,2255231.0,2253847.5852726465,-0.0006134248453278138 +ons.population.female_55_59@2025,ons_population,False,2360202.0,2360069.2718506227,-5.6235927847394104e-05,2360202.0,2359163.225756682,-0.00044012090631141324 +ons.population.female_5_9@2025,ons_population,False,1941658.0,1940493.6505188942,-0.0005996676454379734,1941658.0,1940357.1859574427,-0.0006699501367167976 +ons.population.female_60_64@2025,ons_population,False,2193915.0,2191220.3231972773,-0.0012282503208751192,2193915.0,2191151.053809984,-0.0012598237352020832 +ons.population.female_65_69@2025,ons_population,False,1838574.0,1840315.3586513125,0.0009471245929250243,1838574.0,1840826.6427289569,0.001225211891910188 +ons.population.female_70_74@2025,ons_population,False,1622996.0,1621580.1644964975,-0.0008723592069866568,1622996.0,1622437.1698681884,-0.00034432009186193647 +ons.population.female_75_79@2025,ons_population,False,1551183.0,1548807.0104699503,-0.0015317274171066405,1551183.0,1551826.7120423685,0.0004149813673618669 +ons.population.female_80_84@2025,ons_population,False,1024480.0,1025348.5131001581,0.000847759936902696,1024480.0,1024382.9508900751,-9.47301166688797e-05 +ons.population.female_85_89@2025,ons_population,False,665267.0,663693.7828521729,-0.0023647905996045924,665267.0,665480.7504787445,0.0003213002880715665 +ons.population.female_90_plus@2025,ons_population,False,414716.0,415213.40118364186,0.0011993778480740192,414716.0,415028.6509261498,0.0007538916418700978 +ons.population.male_0_4@2025,ons_population,False,1829801.0,1828830.5834515095,-0.0005303399377804057,1829801.0,1829627.4630785098,-9.483923196578023e-05 +ons.population.male_10_14@2025,ons_population,False,2152800.0,2152562.5578729995,-0.00011029455917899503,2152800.0,2151820.045634537,-0.0004551999096353568 +ons.population.male_15_19@2025,ons_population,False,2123750.0,2123450.7612161636,-0.0001409011342372524,2123750.0,2122022.180086147,-0.000813570294927821 +ons.population.male_20_24@2025,ons_population,False,2131646.0,2131875.620774269,0.00010771993767684878,2131646.0,2129692.4246470504,-0.000916463311895857 +ons.population.male_25_29@2025,ons_population,False,2257360.0,2256582.3149375916,-0.00034451087217300175,2257360.0,2257415.5816724356,2.4622422845991063e-05 +ons.population.male_30_34@2025,ons_population,False,2333326.0,2332847.006454712,-0.0002052835931576728,2333326.0,2331124.07374382,-0.000943685647089095 +ons.population.male_35_39@2025,ons_population,False,2303479.0,2301597.658243322,-0.0008167392698948792,2303479.0,2301686.578842111,-0.0007781365308253594 +ons.population.male_40_44@2025,ons_population,False,2196013.0,2186858.1871728897,-0.0041688336212537406,2196013.0,2163068.1956977844,-0.015002098941224654 +ons.population.male_45_49@2025,ons_population,False,2005099.0,2002848.5493068008,-0.001122363879887815,2005099.0,2000990.490742731,-0.0020490306250559656 +ons.population.male_50_54@2025,ons_population,False,2164862.0,2162712.046805457,-0.0009931132767551872,2164862.0,2162753.1251695952,-0.0009741382270115888 +ons.population.male_55_59@2025,ons_population,False,2256521.0,2256950.3575328933,0.00019027411351071294,2256521.0,2255154.425566597,-0.0006056112189530209 +ons.population.male_5_9@2025,ons_population,False,2037199.0,2036673.5753667539,-0.00025791522244324096,2037199.0,2036108.8964353194,-0.0005350992046827797 +ons.population.male_60_64@2025,ons_population,False,2094462.0,2092904.4500098596,-0.0007436515869661838,2094462.0,2092292.5859523187,-0.0010357858236059 +ons.population.male_65_69@2025,ons_population,False,1734083.0,1735103.1115355492,0.0005882714584879523,1734083.0,1735200.9355954642,0.0006446840176993801 +ons.population.male_70_74@2025,ons_population,False,1473758.0,1472312.485072136,-0.0009808360177614472,1473758.0,1474711.6257305145,0.0006470707745196473 +ons.population.male_75_79@2025,ons_population,False,1350668.0,1349534.4605899225,-0.0008392435521367953,1350668.0,1350941.7452995721,0.000202674009876687 +ons.population.male_80_84@2025,ons_population,False,815910.0,814888.0688061822,-0.0012525048030024833,815910.0,816620.9959492792,0.0008714146772060248 +ons.population.male_85_89@2025,ons_population,False,459511.0,458741.70167541504,-0.0016741673748505714,459511.0,459061.5375766754,-0.0009781320214849807 +ons.population.male_90_plus@2025,ons_population,False,210520.0,210153.3474187851,-0.0017416520103311077,210520.0,210781.62977838516,0.001242778730691442 +ons.population.scotland_babies_under_1@2025,ons_population,False,46776.0,46718.190574645996,-0.0012358779150419854,46776.0,46729.98052215576,-0.000983826702673129 +ons.population.scotland_children_under_16@2025,ons_population,False,896833.0,896850.7508964539,1.9792867182471454e-05,896833.0,897583.6104698181,0.0008369567910838642 +ons.population.uk_total@2025,ons_population,False,69281437.0,69241420.75256681,-0.0005775897436016747,69281437.0,69203138.91023126,-0.0011301452908480745 +ons.public_sector_employment@2025,ons_employment,False,6146000.0,6146408.809994146,6.651643250019978e-05,6146000.0,6147193.431259426,0.0001941801593599558 +orr.rail_government_support@2025,orr_rail,False,21621100549.34064,21630095912.89506,0.0004160455909213555,21621100549.34064,21621181757.981037,3.755990136154041e-06 +scotgov.bus.government_support@2025,dft_local_bus,False,499000000.0,499433283.7901752,0.0008683041887278547,499000000.0,500256947.43159974,0.002518932728656786 +scotgov.bus.passenger_revenue@2025,dft_local_bus,False,391000000.0,388643854.6842788,-0.0060259470990312375,391000000.0,390235686.8556029,-0.0019547650751843477 +scotgov.council_tax_stock.band_a@2025,council_tax_stock,False,498707.0,497020.141664505,-0.003382463722175536,498707.0,499405.49267959595,0.0014006073297466192 +scotgov.council_tax_stock.band_b@2025,council_tax_stock,False,583705.0,583027.2126274109,-0.0011611813717359134,583705.0,583733.0941151698,4.813067417588556e-05 +scotgov.council_tax_stock.band_c@2025,council_tax_stock,False,426388.0,425330.3944672664,-0.0024803829674700205,426388.0,427475.85860234895,0.002551334939887961 +scotgov.council_tax_stock.band_d@2025,council_tax_stock,False,369621.0,368154.1543941498,-0.003968512627394601,369621.0,369907.54976272583,0.0007752529286101982 +scotgov.council_tax_stock.band_e@2025,council_tax_stock,False,366881.0,366802.6941642761,-0.00021343660675771423,366881.0,367493.32455444336,0.0016690004509455638 +scotgov.council_tax_stock.band_f@2025,council_tax_stock,False,221282.0,221274.51622104645,-3.3820098126156877e-05,221282.0,221391.56819534302,0.0004951518665911261 +scotgov.council_tax_stock.band_g@2025,council_tax_stock,False,142084.0,141809.02550315857,-0.0019352952960321405,142084.0,142337.68293571472,0.001785443369518888 +scotgov.council_tax_stock.band_h@2025,council_tax_stock,False,14481.0,14478.901580810547,-0.00014490844482101546,14481.0,14466.259674072266,-0.0010179080124117377 +scotgov.council_tax_stock.total@2025,council_tax_stock,False,2623149.0,2617897.0406226236,-0.0020021582370564396,2623149.0,2626210.8305194136,0.0011672346936501036 +scotgov.scottish_child_payment_spending@2025,scotgov_social_security,False,471000000.0,470649557.5122337,-0.0007440392521578036,471000000.0,471354937.2886747,0.0007535823538741235 +slc.borrowers.plan_5_above_threshold@2025,slc_borrowers,False,35000.0,34992.94677734375,-0.00020152064732142856,35000.0,34995.373779296875,-0.000132177734375 +slc.repayments.england_plan_1@2025,slc_repayments,False,1852699178.55,1851842083.45906,-0.0004626196745068982,1852699178.55,1850524515.2923377,-0.001173781088068641 +slc.repayments.england_plan_2@2025,slc_repayments,False,2778253361.64,2779780257.7217193,0.0005495884942682382,2778253361.64,2784834871.9286695,0.0023689381175748953 +slc.repayments.england_total_higher_education@2025,slc_repayments,False,5018231834.949999,5022408978.767491,0.0008323935511309644,5018231834.949999,5017120672.348633,-0.0002214251230138941 +slc.support.adult_dependants_grant_recipients@2025,slc_student_support,False,18611.0,15702.80029296875,-0.15626240970561764,18611.0,15660.629516601562,-0.1585283156949351 +slc.support.adult_dependants_grant_spend@2025,slc_student_support,False,55364916.81,55666427.03857422,0.005445871608710837,55364916.81,55516931.63635254,0.00274568869802907 +slc.support.maintenance_loan_recipients@2025,slc_student_support,False,1159761.0,1161001.3805103302,0.0010695139001313204,1159761.0,1159356.0105361938,-0.00034920079551403467 +slc.support.maintenance_loan_spend@2025,slc_student_support,False,8591659718.080004,8601706708.275253,0.0011693887473344649,8591659718.080004,8581525293.27364,-0.0011795654319313312 +slc.support.parents_learning_allowance_recipients@2025,slc_student_support,False,99645.0,90412.25402832031,-0.09265638990094523,99645.0,89760.37927246094,-0.09919836145856854 +slc.support.parents_learning_allowance_spend@2025,slc_student_support,False,181421659.32,182994402.1533203,0.00866899155930573,181421659.32,181675007.64746094,0.0013964613068281834 +welshgov.bus.public_support@2025,dft_local_bus,False,131489970.0,131356817.11180069,-0.0010126467303879867,131489970.0,131239482.4487902,-0.0019049935992061402 +welshgov.council_tax_stock.band_a@2025,council_tax_stock,False,194973.29,195355.29622650146,0.0019592746601416874,194973.29,194473.8342590332,-0.0025616623741990764 +welshgov.council_tax_stock.band_b@2025,council_tax_stock,False,285787.52,285829.3788471222,0.0001464684221416448,285787.52,285519.5241212845,-0.0009377452126514612 +welshgov.council_tax_stock.band_c@2025,council_tax_stock,False,301699.86,301656.5366868973,-0.00014359739213239342,301699.86,301550.71332740784,-0.0004943544640430033 +welshgov.council_tax_stock.band_d@2025,council_tax_stock,False,225179.88,224034.700466156,-0.005085621032589585,225179.88,225165.66347503662,-6.313408179888702e-05 +welshgov.council_tax_stock.band_e@2025,council_tax_stock,False,185447.46,185598.83496189117,0.0008162687258762265,185447.46,185603.4116487503,0.0008409478822212681 +welshgov.council_tax_stock.band_f@2025,council_tax_stock,False,114672.0,114573.23415756226,-0.0008612899612611984,114672.0,114248.14086532593,-0.003696274022203086 +welshgov.council_tax_stock.band_g@2025,council_tax_stock,False,52211.0,52101.870948791504,-0.002090154396745822,52211.0,52105.765995025635,-0.0020155523735298163 +welshgov.council_tax_stock.band_h@2025,council_tax_stock,False,12357.0,12298.32290649414,-0.004748490208453458,12357.0,12445.14096069336,0.007132876967982469 +welshgov.council_tax_stock.band_i@2025,council_tax_stock,False,5305.0,5320.9476318359375,0.0030061511472078226,5305.0,5308.781661987305,0.0007128486309716658 +welshgov.council_tax_stock.total@2025,council_tax_stock,False,1377633.03,1376769.122833252,-0.0006270952771421826,1377633.03,1376420.9763145447,-0.0008798088163256003 diff --git a/docs/evidence/uk-cgt-725/target-comparison.csv b/docs/evidence/uk-cgt-725/target-comparison.csv new file mode 100644 index 0000000000..b38b7fd0fa --- /dev/null +++ b/docs/evidence/uk-cgt-725/target-comparison.csv @@ -0,0 +1,635 @@ +name,family,cgt,control_target,control_estimate,control_relative_error,candidate_target,candidate_estimate,candidate_relative_error +dfe.funded_childcare.early_learning_2_year_olds@2025,dfe_funded_childcare,False,95031.0,95047.27766418457,0.00017128793956256707,95031.0,95063.73341369629,0.00034444985000988164 +dfe.funded_childcare.universal_only_children@2025,dfe_funded_childcare,False,396965.0,396292.4543914795,-0.0016942189072601055,396965.0,397329.78537989745,0.0009189358757005122 +dfe.funded_childcare.working_parent_children_2_to_4@2025,dfe_funded_childcare,False,621482.0,620727.0542449951,-0.0012147507972956302,621482.0,622038.7998948205,0.000895922801980668 +dfi_ni.bus.passenger_receipts@2025,dft_local_bus,False,150082817.48999995,150509095.65825486,0.0028402862858255902,150082817.48999995,150706355.55705628,0.00415462660872471 +dft.bus_fare_receipts.england@2025,dft_local_bus,False,3612036036.2194014,3616635669.2031064,0.0012734183539650748,3612036036.2194014,3607345945.128986,-0.0012984618767326699 +dft.bus_fare_receipts.london@2025,dft_local_bus,False,1347434943.01459,1347895803.0490305,0.0003420276703003146,1347434943.01459,1345923444.1349523,-0.0011217601914464762 +dft.bus_net_support.england@2025,dft_local_bus,False,3024904320.8399997,3024139711.4189057,-0.00025277144001751857,3024904320.8399997,3026696204.962112,0.0005923771240522006 +dft.bus_net_support.london@2025,dft_local_bus,False,1130214000.0,1129647735.7705243,-0.000501023902973894,1130214000.0,1130193852.562644,-1.782621464253246e-05 +dwp.benefit_cap.capped_households@2025,dwp_benefit_cap,False,110637.0,110650.46585845947,0.00012171207154453443,110637.0,110640.32186889648,3.002493647228662e-05 +dwp.esa_claimants@2025,dwp_legacy_benefits,False,1000000.0,799690.1333656311,-0.2003098666343689,1000000.0,800075.4277038574,-0.19992457229614258 +dwp.esa_contrib_claimants@2025,dwp_legacy_benefits,False,620000.0,618975.989107132,-0.0016516304723678096,620000.0,620182.2778720856,0.0002939965678799537 +dwp.esa_income_claimants@2025,dwp_legacy_benefits,False,180000.0,180962.3353919983,0.005346307733323839,180000.0,180148.76445007324,0.0008264691670735677 +dwp.uc.households@2025,dwp_universal_credit,False,6197311.0,5993232.183032036,-0.03293022037589596,6197311.0,6001751.206190597,-0.03155558819129825 +dwp.uc.households_children_1@2025,dwp_universal_credit,False,1190123.8333333333,1009313.3557415009,-0.151925768166001,1190123.8333333333,1013414.8221654892,-0.14847951634823778 +dwp.uc.households_children_2@2025,dwp_universal_credit,False,1049895.5,972132.5900774002,-0.07406728567043082,1049895.5,969203.4458441843,-0.07685722451026387 +dwp.uc.households_children_3@2025,dwp_universal_credit,False,477887.6666666667,477354.73596191406,-0.0011151798674150554,477887.6666666667,477500.7862854004,-0.0008095634356183331 +dwp.uc.households_children_4@2025,dwp_universal_credit,False,170713.66666666666,170712.4619140625,-7.057153815982115e-06,170713.66666666666,170340.04092407227,-0.0021886106126695073 +dwp.uc.households_children_5_or_more@2025,dwp_universal_credit,False,76320.08333333333,76147.23992919922,-0.0022647171830146467,76320.08333333333,76233.62957763672,-0.0011327785809538084 +dwp.uc.households_couple_no_children@2025,dwp_universal_credit,False,241130.91666666666,246000.0862159729,0.02019305370135204,241130.91666666666,246194.35676765442,0.020998717920470294 +dwp.uc.households_couple_with_children@2025,dwp_universal_credit,False,826160.8333333334,881816.1841773987,0.06736624226001027,826160.8333333334,882222.1507225037,0.06785763150133635 +dwp.uc.households_housing_element_private_rented@2025,dwp_universal_credit,False,1570545.4166666667,1568871.7276172638,-0.001065673766350034,1570545.4166666667,1570497.7183365931,-3.0370551254004845e-05 +dwp.uc.households_housing_element_social_rented@2025,dwp_universal_credit,False,2354587.5833333335,2351571.8600873947,-0.0012807861840796284,2354587.5833333335,2355191.730662346,0.00025658307777072395 +dwp.uc.households_lcwra_element@2025,dwp_universal_credit,False,2272425.1666666665,2532342.0919208527,0.11437865108466842,2272425.1666666665,2541303.960767746,0.11832239760638079 +dwp.uc.households_single_no_children@2025,dwp_universal_credit,False,2990070.1666666665,3041571.713191986,0.017224193298023355,2990070.1666666665,3048864.1246261597,0.019663069654661892 +dwp.uc.households_single_with_children@2025,dwp_universal_credit,False,2138780.1666666665,1823844.1994466782,-0.14725027477266286,2138780.1666666665,1824470.5740742793,-0.14695740941073213 +dwp.uc.households_with_deduction@2025,dwp_universal_credit,False,3130000.0,3125382.3320770264,-0.0014752932661257613,3130000.0,3129812.068283569,-6.004208192681543e-05 +dwp.uc.scotland_households_child_under_1@2025,dwp_universal_credit,False,14333.222222222223,14301.71420288086,-0.002198250948241996,14333.222222222223,14353.80908203125,0.0014363036789529094 +dwp.uc.two_child_limit.children_affected@2025,dwp_two_child_limit,False,597920.0,597791.6025695801,-0.00021474014988614174,597920.0,597375.9829406738,-0.0009098492429190726 +dwp.uc.two_child_limit.children_claimant_pip@2025,dwp_two_child_limit,False,235270.0,235307.4132385254,0.0001590225635456736,235270.0,234821.01153564453,-0.0019083965841606187 +dwp.uc.two_child_limit.children_disabled_child_element@2025,dwp_two_child_limit,False,479460.0,478645.0094909668,-0.0016998091791457122,479460.0,478057.21447753906,-0.0029257613199452246 +dwp.uc.two_child_limit.children_in_3_children_households@2025,dwp_two_child_limit,False,891930.0,892616.9891967773,0.0007702277048393302,891930.0,892074.8620605469,0.00016241415867486797 +dwp.uc.two_child_limit.children_in_4_children_households@2025,dwp_two_child_limit,False,468760.0,468702.7509765625,-0.00012212864458891544,468760.0,466866.7109375,-0.0040389305028159395 +dwp.uc.two_child_limit.children_in_5_children_households@2025,dwp_two_child_limit,False,185120.0,184785.40176391602,-0.0018074667031330184,185120.0,185042.17742919922,-0.000420389859554782 +dwp.uc.two_child_limit.children_in_6_plus_children_households@2025,dwp_two_child_limit,False,119720.0,119234.7495727539,-0.004053211052840743,119720.0,120008.49279785156,0.002409729350581043 +dwp.uc.two_child_limit.children_in_affected_households@2025,dwp_two_child_limit,False,1665540.0,1665339.8915100098,-0.00012014631290166215,1665540.0,1663992.2432250977,-0.0009292822597489965 +dwp.uc.two_child_limit.households_3_children@2025,dwp_two_child_limit,False,297310.0,297538.9963989258,0.0007702277048393302,297310.0,297358.2873535156,0.00016241415867486797 +dwp.uc.two_child_limit.households_4_children@2025,dwp_two_child_limit,False,117190.0,117175.68774414062,-0.00012212864458891544,117190.0,116716.677734375,-0.0040389305028159395 +dwp.uc.two_child_limit.households_5_children@2025,dwp_two_child_limit,False,37020.0,36957.0803527832,-0.0016996122965099102,37020.0,37008.435485839844,-0.00031238557969087656 +dwp.uc.two_child_limit.households_6_plus_children@2025,dwp_two_child_limit,False,18260.0,18186.105865478516,-0.004046776260760371,18260.0,18304.677490234375,0.0024467409766908543 +dwp.uc.two_child_limit.households_affected@2025,dwp_two_child_limit,False,469780.0,469857.8703613281,0.00016575920926417684,469780.0,469388.07806396484,-0.0008342669675915455 +dwp.uc.two_child_limit.households_claimant_pip@2025,dwp_two_child_limit,False,65280.0,65316.3913269043,0.0005574651792937634,65280.0,65139.74841308594,-0.0021484618093453203 +dwp.uc.two_child_limit.households_disabled_child_element@2025,dwp_two_child_limit,False,129630.0,129406.58740234375,-0.0017234636863091106,129630.0,129250.24478149414,-0.002929531886954095 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,7506.333333333333,7498.405059814453,-0.0010562112241502605,7506.333333333333,7516.44580078125,0.0013471913647919939 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000@2025,dwp_universal_credit,False,13313.333333333334,13310.319107055664,-0.0002264065806962852,13313.333333333334,13243.772811889648,-0.005224876422910778 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200@2025,dwp_universal_credit,False,16121.444444444445,16058.476440429688,-0.003905853736105944,16121.444444444445,16152.975036621094,0.001955816818108637 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400@2025,dwp_universal_credit,False,13317.333333333334,13302.247177124023,-0.0011328211010195111,13317.333333333334,13320.68911743164,0.00025198619080196374 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600@2025,dwp_universal_credit,False,19657.333333333332,19695.704788208008,0.0019520173069257798,19657.333333333332,19651.6863861084,-0.00028726924090756716 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800@2025,dwp_universal_credit,False,16443.222222222223,16377.807235717773,-0.0039782340480714285,16443.222222222223,16345.225143432617,-0.005959724770803566 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000@2025,dwp_universal_credit,False,13441.111111111111,13377.848594665527,-0.004706643366208611,13441.111111111111,13444.616882324219,0.00026082450953101536 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200@2025,dwp_universal_credit,False,10728.555555555555,10738.631607055664,0.0009391806238903844,10728.555555555555,10718.420928955078,-0.0009446403616960925 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400@2025,dwp_universal_credit,False,9653.222222222223,9637.923370361328,-0.001584844056078575,9653.222222222223,9644.6865234375,-0.0008842331180435276 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,8797.0,8798.397567749023,0.0001588686767106329,8797.0,8814.609298706055,0.0020017390821933257 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,6486.888888888889,6491.204345703125,0.0006652583215396324,6486.888888888889,6477.6090087890625,-0.0014305594343879224 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800@2025,dwp_universal_credit,False,3981.8888888888887,3976.0797119140625,-0.0014588998178819567,3981.8888888888887,3978.750732421875,-0.000788107492343756 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,2761.4444444444443,2749.086669921875,-0.004475112489563598,2761.4444444444443,2772.95556640625,0.004168514773115958 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,2131.222222222222,2128.817626953125,-0.00112827055012119,2131.222222222222,2121.7318725585938,-0.00445300802735289 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,1475.3333333333333,1477.4501953125,0.0014348364070267121,1475.3333333333333,1479.3150634765625,0.0026988681495001645 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,12256.0,12243.781646728516,-0.00099692830217725,12256.0,12279.902435302734,0.0019502639770507812 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,10945.444444444445,10929.908752441406,-0.0014193751639682772,10945.444444444445,10930.828048706055,-0.0013353862250709589 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,12492.444444444445,12383.94172668457,-0.008685467303248847,12492.444444444445,12491.23403930664,-9.689097623667328e-05 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,12979.666666666666,12952.064193725586,-0.0021265933594401595,12979.666666666666,12959.383407592773,-0.0015626949131122491 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,16484.444444444445,16478.29605102539,-0.000372981536610216,16484.444444444445,16547.355987548828,0.003816418764757656 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600@2025,dwp_universal_credit,False,15272.444444444445,15276.852722167969,0.00028864257713028164,15272.444444444445,15198.660079956055,-0.0048312085702319 +dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800@2025,dwp_universal_credit,False,19142.333333333332,19122.398849487305,-0.0010413821292786026,19142.333333333332,19097.416107177734,-0.0023464864692007807 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,19073.555555555555,19092.62907409668,0.0009999980593848638,19073.555555555555,19041.492336273193,-0.0016810300097939701 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000@2025,dwp_universal_credit,False,40805.444444444445,40858.6354675293,0.0013035276005208035,40805.444444444445,40854.91134643555,0.001212262301381119 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200@2025,dwp_universal_credit,False,40009.555555555555,40064.99139022827,0.0013855648707654577,40009.555555555555,40056.69575500488,0.001178223521725234 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400@2025,dwp_universal_credit,False,39972.555555555555,40166.868392944336,0.004861156228020421,39972.555555555555,40046.510078430176,0.0018501324683090601 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600@2025,dwp_universal_credit,False,40518.77777777778,40522.407554626465,8.958258485956988e-05,40518.77777777778,40644.5133895874,0.003103144238437026 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800@2025,dwp_universal_credit,False,37118.0,37304.101470947266,0.005013779593385032,37118.0,37068.687927246094,-0.001328521815666422 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000@2025,dwp_universal_credit,False,37177.77777777778,37144.1795501709,-0.0009037180169215276,37177.77777777778,37107.51940917969,-0.0018897947321662926 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200@2025,dwp_universal_credit,False,37164.555555555555,37127.98385620117,-0.0009840478059723746,37164.555555555555,37233.34178161621,0.0018508556077801303 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400@2025,dwp_universal_credit,False,33309.555555555555,33318.652252197266,0.0002730957075226925,33309.555555555555,33390.47039794922,0.002429178085510918 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,22775.777777777777,22834.02562713623,0.0025574472111018426,22775.777777777777,22855.34016418457,0.0034932895457217535 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,29102.555555555555,29077.092582702637,-0.0008749394122557479,29102.555555555555,29170.145629882812,0.0023224790069803713 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800@2025,dwp_universal_credit,False,27534.666666666668,27590.600036621094,0.0020313799557318967,27534.666666666668,27424.218048095703,-0.004011256787962983 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,25584.777777777777,25619.315826416016,0.0013499452267370106,25584.777777777777,25592.045654296875,0.0002840703398803917 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,22927.777777777777,22769.79803466797,-0.0068903207559402845,22927.777777777777,22942.94403076172,0.0006614794129172395 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,20334.666666666668,20361.552001953125,0.0013221429063564906,20334.666666666668,20329.137451171875,-0.0002719108006750154 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600@2025,dwp_universal_credit,False,17535.0,17429.07177734375,-0.006040959375891075,17535.0,17496.486938476562,-0.002196353665436983 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800@2025,dwp_universal_credit,False,15399.888888888889,15318.989013671875,-0.005253276552883665,15399.888888888889,15356.902069091797,-0.00279137207464575 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000@2025,dwp_universal_credit,False,12836.222222222223,12856.200317382812,0.0015563843329234014,12836.222222222223,12841.13818359375,0.000382975714070827 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,26502.666666666668,26532.5386428833,0.0011271309635495635,26502.666666666668,26479.587890625,-0.0008708095804825129 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,29027.0,29059.226558685303,0.0011102269847143259,29027.0,29076.381046295166,0.0017012108139031251 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,32427.0,32448.47692489624,0.0006623161222512176,32427.0,32530.736972808838,0.003199092509601193 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,34956.88888888889,34907.42909240723,-0.0014148798149306939,34956.88888888889,34969.641258239746,0.00036480275436951 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,37410.77777777778,37357.75244140625,-0.0014173812874595825,37410.77777777778,37450.03072357178,0.001049241639058165 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600@2025,dwp_universal_credit,False,39910.333333333336,39906.17240905762,-0.0001042568159219894,39910.333333333336,39942.47152709961,0.0008052599685864216 +dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800@2025,dwp_universal_credit,False,39368.0,39521.73371887207,0.0039050426456022735,39368.0,39354.25365447998,-0.00034917561268084564 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,26670.222222222223,26553.321952819824,-0.004383175679166051,26670.222222222223,26707.130332946777,0.001383869636219306 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,36208.11111111111,36166.45346069336,-0.0011505060368909087,36208.11111111111,36296.13874053955,0.0024311577358540645 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,85490.44444444444,85069.96188354492,-0.004918474381926564,85490.44444444444,85577.71228027344,0.001020790526895788 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,71259.55555555556,71256.97412109375,-3.622580076014477e-05,71259.55555555556,71109.12762451172,-0.0021109860968269198 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,51301.666666666664,51210.21199798584,-0.0017826841625838874,51301.666666666664,51430.993576049805,0.002520910484710837 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,43305.22222222222,43181.172912597656,-0.0028645346509942726,43305.22222222222,43338.71063232422,0.0007733111246988377 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600@2025,dwp_universal_credit,False,34910.555555555555,34776.64959716797,-0.003835686836163128,34910.555555555555,34933.81604003906,0.0006662880069751899 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800@2025,dwp_universal_credit,False,28513.0,28486.287338256836,-0.0009368590377429265,28513.0,28508.245651245117,-0.0001667431962572445 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000@2025,dwp_universal_credit,False,22593.0,22691.866119384766,0.004375962439019414,22593.0,22602.451782226562,0.000418350029945669 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,46312.77777777778,46348.127014160156,0.0007632717811052316,46312.77777777778,46330.71649169922,0.0003873383282581952 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,60310.11111111111,60158.27948760986,-0.0025175152342452544,60310.11111111111,60236.20070648193,-0.0012255060265600997 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,67858.66666666667,67831.38890075684,-0.0004019791022984376,67858.66666666667,68127.24642944336,0.003957928676907216 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,89577.44444444444,89445.29569244385,-0.0014752458369422276,89577.44444444444,89783.31956481934,0.002298291960121511 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,116076.0,116154.6541671753,0.0006776092144396169,116076.0,116385.87257385254,0.002669566265658181 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600@2025,dwp_universal_credit,False,97511.0,97341.0114479065,-0.0017432756519111265,97511.0,97600.18027496338,0.0009145663049643517 +dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800@2025,dwp_universal_credit,False,102343.0,102097.2710723877,-0.0024010330712633467,102343.0,102501.48098754883,0.0015485278675515485 +dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200@2025,dwp_universal_credit,False,89479.33333333333,89524.17416000366,0.0005011305404264705,89479.33333333333,89429.89838790894,-0.0005524733319171608 +dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000@2025,dwp_universal_credit,False,104891.11111111111,104533.52238464355,-0.00340914232559479,104891.11111111111,104764.0255203247,-0.0012115954292044894 +dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200@2025,dwp_universal_credit,False,122035.55555555556,121750.02020263672,-0.002339771811739374,122035.55555555556,121877.09270477295,-0.0012984973933311923 +dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800@2025,dwp_universal_credit,False,149963.22222222222,150106.4390258789,0.0009550128460460938,149963.22222222222,149606.49250793457,-0.002378781337193666 +dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000@2025,dwp_universal_credit,False,108689.66666666667,108647.64122009277,-0.0003866554003039057,108689.66666666667,108981.77731323242,0.0026875659437028696 +dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200@2025,dwp_universal_credit,False,61718.666666666664,61730.9599609375,0.0001991827583902616,61718.666666666664,61327.30358886719,-0.006341081214750968 +dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400@2025,dwp_universal_credit,False,34050.444444444445,33983.67492675781,-0.0019609000345229455,34050.444444444445,34091.796966552734,0.0012144488209473595 +dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400@2025,dwp_universal_credit,False,127403.22222222222,127282.98274993896,-0.0009437710458651293,127403.22222222222,127387.02352142334,-0.00012714514214267413 +dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600@2025,dwp_universal_credit,False,22338.333333333332,22264.31005859375,-0.0033137331077929774,22338.333333333332,22382.80419921875,0.0019907871022346287 +dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000@2025,dwp_universal_credit,False,11133.666666666666,10729.99609375,-0.03625675035927063,11133.666666666666,10729.99609375,-0.03625675035927063 +dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200@2025,dwp_universal_credit,False,6951.222222222223,6955.0751953125,0.0005542871407505692,6951.222222222223,6930.300537109375,-0.003009785105986615 +dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400@2025,dwp_universal_credit,False,6508.222222222223,6503.87255859375,-0.0006683336063142971,6508.222222222223,6509.394775390625,0.00018016489424695875 +dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600@2025,dwp_universal_credit,False,5913.444444444444,5903.55810546875,-0.0016718410172910899,5913.444444444444,5932.6044921875,0.0032400824803649106 +dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000@2025,dwp_universal_credit,False,1653.7777777777778,1651.2129211425781,-0.0015509076670785628,1653.7777777777778,1643.0127563476562,-0.006509351845679535 +dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600@2025,dwp_universal_credit,False,197136.66666666666,196609.87888526917,-0.0026721958441562974,197136.66666666666,196961.2473602295,-0.0008898360178412512 +dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800@2025,dwp_universal_credit,False,377063.1111111111,377087.6189517975,6.4996654311112e-05,377063.1111111111,377197.3830528259,0.0003560993843156327 +dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000@2025,dwp_universal_credit,False,195983.22222222222,196211.13967514038,0.0011629436965768934,195983.22222222222,194657.2320175171,-0.006765835308093926 +dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200@2025,dwp_universal_credit,False,114033.33333333333,114000.27459716797,-0.0002899041464369459,114033.33333333333,114016.3927154541,-0.00014855847307126795 +dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400@2025,dwp_universal_credit,False,149043.77777777778,148972.4663619995,-0.00047845952941821986,149043.77777777778,148480.58713531494,-0.003778692749606422 +hmrc.cgt.gains_by_age_band.age_16_to_24@2025,hmrc_cgt,True,,,,319000000.0,304602353.6742637,-0.04513368754149306 +hmrc.cgt.gains_by_age_band.age_25_to_34@2025,hmrc_cgt,True,,,,2499000000.0,2290143470.954356,-0.08357604203507155 +hmrc.cgt.gains_by_age_band.age_35_to_44@2025,hmrc_cgt,True,,,,11775000000.0,10711327435.452766,-0.09033312650082663 +hmrc.cgt.gains_by_age_band.age_45_to_54@2025,hmrc_cgt,True,,,,28422000000.0,28195536126.994263,-0.007967907712537376 +hmrc.cgt.gains_by_age_band.age_55_to_64@2025,hmrc_cgt,True,,,,38118000000.0,38142003324.4962,0.0006297110156933879 +hmrc.cgt.gains_by_age_band.age_65_to_74@2025,hmrc_cgt,True,,,,24260000000.0,24211980961.303123,-0.0019793503172661387 +hmrc.cgt.gains_by_age_band.age_75_to_84@2025,hmrc_cgt,True,,,,11736000000.0,11636013296.167141,-0.008519657790802576 +hmrc.cgt.gains_by_age_band.age_85_plus@2025,hmrc_cgt,True,,,,2076000000.0,2035725469.179367,-0.01940006301571914 +hmrc.cgt.gains_by_region@E12000001@2025,hmrc_cgt,True,,,,1497797150.3974364,1493263594.0932355,-0.0030268159496751085 +hmrc.cgt.gains_by_region@E12000002@2025,hmrc_cgt,True,,,,8790074083.38308,8803463095.75986,0.00152319676145738 +hmrc.cgt.gains_by_region@E12000003@2025,hmrc_cgt,True,,,,6970985861.949795,6989230782.923229,0.002617265525242554 +hmrc.cgt.gains_by_region@E12000004@2025,hmrc_cgt,True,,,,6299365751.358824,6286858187.580633,-0.0019855274756022273 +hmrc.cgt.gains_by_region@E12000005@2025,hmrc_cgt,True,,,,5890960774.765152,5878302102.455937,-0.0021488298417195353 +hmrc.cgt.gains_by_region@E12000006@2025,hmrc_cgt,True,,,,11545870966.728456,11539937745.176668,-0.000513882544581175 +hmrc.cgt.gains_by_region@E12000007@2025,hmrc_cgt,True,,,,32519714615.602127,32460304784.91821,-0.0018268865943680418 +hmrc.cgt.gains_by_region@E12000008@2025,hmrc_cgt,True,,,,25606804690.69088,23986323102.863785,-0.06328324081825822 +hmrc.cgt.gains_by_region@E12000009@2025,hmrc_cgt,True,,,,10341263627.509504,10281757357.499504,-0.005754255200660732 +hmrc.cgt.gains_by_region@N92000002@2025,hmrc_cgt,True,,,,1757265449.747086,1758948684.7626376,0.000957871797794594 +hmrc.cgt.gains_by_region@S92000003@2025,hmrc_cgt,True,,,,5680201325.83493,5683153778.657366,0.0005197796086921971 +hmrc.cgt.gains_by_region@W92000004@2025,hmrc_cgt,True,,,,2358632410.6946497,2365789221.530397,0.003034305304758982 +hmrc.cgt.gains_total@2025,hmrc_cgt,True,119258000000.0,107931956702.93329,-0.09497093106598058,119258000000.0,117527332438.22148,-0.01451196197972898 +hmrc.cgt.liability_total@2025,hmrc_cgt,True,22503000000.0,22629780697.062336,0.005633946454354351,22503000000.0,24827795323.58284,0.10331046187543172 +hmrc.cgt.residential_property_gains.ty2024@2025,hmrc_cgt,True,,,,12242481474.688189,12283753934.687431,0.003371249536670749 +hmrc.cgt.residential_property_taxpayers.ty2024@2025,hmrc_cgt,True,,,,202630.0578034682,202611.6247985363,-9.096875918465289e-05 +hmrc.cgt.tax_by_age_band.age_16_to_24@2025,hmrc_cgt,True,,,,59000000.0,59065527.34412755,0.001110632951314419 +hmrc.cgt.tax_by_age_band.age_25_to_34@2025,hmrc_cgt,True,,,,456000000.0,465121807.0894269,0.020003962915409814 +hmrc.cgt.tax_by_age_band.age_35_to_44@2025,hmrc_cgt,True,,,,2246000000.0,2259400826.222906,0.00596652993005615 +hmrc.cgt.tax_by_age_band.age_45_to_54@2025,hmrc_cgt,True,,,,5522000000.0,6035210595.748004,0.09293926036725896 +hmrc.cgt.tax_by_age_band.age_55_to_64@2025,hmrc_cgt,True,,,,7152000000.0,8116240058.089855,0.1348210372049574 +hmrc.cgt.tax_by_age_band.age_65_to_74@2025,hmrc_cgt,True,,,,4409000000.0,5080986794.054556,0.15241251849729098 +hmrc.cgt.tax_by_age_band.age_75_to_84@2025,hmrc_cgt,True,,,,2260000000.0,2417650409.489393,0.0697568183581386 +hmrc.cgt.tax_by_age_band.age_85_plus@2025,hmrc_cgt,True,,,,390000000.0,394119305.54456615,0.010562321909143985 +hmrc.cgt.taxpayers_by_age_band.age_16_to_24@2025,hmrc_cgt,True,,,,4000.0,3998.1095790863037,-0.00047260522842407227 +hmrc.cgt.taxpayers_by_age_band.age_25_to_34@2025,hmrc_cgt,True,,,,27000.0,27025.803797721863,0.0009556962119208442 +hmrc.cgt.taxpayers_by_age_band.age_35_to_44@2025,hmrc_cgt,True,,,,65000.0,64929.79407930374,-0.001080091087634747 +hmrc.cgt.taxpayers_by_age_band.age_45_to_54@2025,hmrc_cgt,True,,,,98000.0,98029.69796689351,0.0003030404785051954 +hmrc.cgt.taxpayers_by_age_band.age_55_to_64@2025,hmrc_cgt,True,,,,144000.0,143696.47997426987,-0.002107777956459257 +hmrc.cgt.taxpayers_by_age_band.age_65_to_74@2025,hmrc_cgt,True,,,,125000.0,125049.99305605888,0.0003999444484710693 +hmrc.cgt.taxpayers_by_age_band.age_75_to_84@2025,hmrc_cgt,True,,,,68000.0,67937.12657165527,-0.0009246092403636259 +hmrc.cgt.taxpayers_by_age_band.age_85_plus@2025,hmrc_cgt,True,,,,19000.0,19025.52571105957,0.0013434584768194902 +hmrc.cgt.taxpayers_by_region@E12000001@2025,hmrc_cgt,True,,,,11321.91780821918,11281.408515930176,-0.003577953220928318 +hmrc.cgt.taxpayers_by_region@E12000002@2025,hmrc_cgt,True,,,,41513.69863013699,41690.90408325195,0.004268601906415528 +hmrc.cgt.taxpayers_by_region@E12000003@2025,hmrc_cgt,True,,,,32078.767123287675,32090.545795440674,0.00036717970200445904 +hmrc.cgt.taxpayers_by_region@E12000004@2025,hmrc_cgt,True,,,,31135.273972602743,31095.106538772583,-0.0012900941185070363 +hmrc.cgt.taxpayers_by_region@E12000005@2025,hmrc_cgt,True,,,,33022.260273972606,33058.8409614563,0.0011077584387076214 +hmrc.cgt.taxpayers_by_region@E12000006@2025,hmrc_cgt,True,,,,58496.57534246576,58546.18591308594,0.000848093590603123 +hmrc.cgt.taxpayers_by_region@E12000007@2025,hmrc_cgt,True,,,,106614.72602739726,106434.68193133672,-0.001688735719437872 +hmrc.cgt.taxpayers_by_region@E12000008@2025,hmrc_cgt,True,,,,114162.67123287672,113806.9841632843,-0.003115616214575611 +hmrc.cgt.taxpayers_by_region@E12000009@2025,hmrc_cgt,True,,,,60383.56164383562,60343.198436021805,-0.0006684469533595087 +hmrc.cgt.taxpayers_by_region@N92000002@2025,hmrc_cgt,True,,,,9434.931506849316,9450.702218055725,0.0016715236559968919 +hmrc.cgt.taxpayers_by_region@S92000003@2025,hmrc_cgt,True,,,,34909.24657534247,34896.79920005798,-0.00035656384785107413 +hmrc.cgt.taxpayers_by_region@W92000004@2025,hmrc_cgt,True,,,,16982.87671232877,16997.17297935486,0.0008418047936314031 +hmrc.cgt.taxpayers_total@2025,hmrc_cgt,True,551000.0,550625.616733551,-0.0006794614636097542,551000.0,549692.5307360489,-0.0023729024754102746 +hmrc.salary_sacrifice.users_above_cap@2025,hmrc_salary_sacrifice,False,3300000.0,3303812.1317478744,0.0011551914387498278,3300000.0,3302594.5870845304,0.0007862385104637537 +hmrc.salary_sacrifice.users_below_cap@2025,hmrc_salary_sacrifice,False,4300000.0,4298576.552334656,-0.00033103434077767264,4300000.0,4297534.354430774,-0.0005734059463315752 +hmrc.salary_sacrifice.users_total@2025,hmrc_salary_sacrifice,False,7700000.0,7602388.6840825295,-0.012676794274996168,7700000.0,7600128.941515305,-0.012970267335674666 +hmrc.tfc.children_with_used_accounts@2025,hmrc_tfc,False,1151515.0,1150141.6304855347,-0.0011926631563334668,1151515.0,1150524.976412307,-0.0008597574392804216 +hmrc.tfc.government_top_up@2025,hmrc_tfc,False,599800000.0,599060490.0332513,-0.0012329275871102274,599800000.0,600002278.7344412,0.00033724363861480685 +hmrc/capital_gains_band_1000000@2025,hmrc_cgt,True,,,,12806000000.0,12813693020.64206,0.0006007356428283091 +hmrc/capital_gains_band_100000@2025,hmrc_cgt,True,,,,9487000000.0,9476736932.984034,-0.001081803206067926 +hmrc/capital_gains_band_10000@2025,hmrc_cgt,True,,,,289000000.0,289753998.038674,0.002608989753197221 +hmrc/capital_gains_band_12300@2025,hmrc_cgt,True,,,,1747000000.0,1746958708.7930079,-2.363549341279299e-05 +hmrc/capital_gains_band_2000000@2025,hmrc_cgt,True,,,,16477000000.0,16515791555.92095,0.002354285119921705 +hmrc/capital_gains_band_250000@2025,hmrc_cgt,True,,,,8820000000.0,8857378911.53825,0.004237971829733556 +hmrc/capital_gains_band_25000@2025,hmrc_cgt,True,,,,3516000000.0,3514667820.6709023,-0.00037889059416887025 +hmrc/capital_gains_band_3000@2025,hmrc_cgt,True,,,,311000000.0,310684830.39308655,-0.0010134070961847182 +hmrc/capital_gains_band_5000000@2025,hmrc_cgt,True,,,,48474000000.0,46635373586.566216,-0.03793015664962216 +hmrc/capital_gains_band_500000@2025,hmrc_cgt,True,,,,11372000000.0,11395521863.061935,0.002068401605868398 +hmrc/capital_gains_band_50000@2025,hmrc_cgt,True,,,,5510000000.0,5522647898.41343,0.0022954443581543037 +hmrc/capital_gains_band_6000@2025,hmrc_cgt,True,,,,448000000.0,448123311.1989345,0.00027524821190735594 +hmrc/cgt_taxpayers_band_1000000@2025,hmrc_cgt,True,,,,9000.0,9013.119789361954,0.0014577543735504151 +hmrc/cgt_taxpayers_band_100000@2025,hmrc_cgt,True,,,,61000.0,60972.89083003998,-0.00044441262229544216 +hmrc/cgt_taxpayers_band_10000@2025,hmrc_cgt,True,,,,26000.0,26098.53924846649,0.0037899710948650655 +hmrc/cgt_taxpayers_band_12300@2025,hmrc_cgt,True,,,,97000.0,97161.79539616902,0.0016679937749383695 +hmrc/cgt_taxpayers_band_2000000@2025,hmrc_cgt,True,,,,5000.0,5004.2957191467285,0.0008591438293457032 +hmrc/cgt_taxpayers_band_250000@2025,hmrc_cgt,True,,,,25000.0,25068.264560699463,0.0027305824279785155 +hmrc/cgt_taxpayers_band_25000@2025,hmrc_cgt,True,,,,98000.0,98939.71691703796,0.009588948133040448 +hmrc/cgt_taxpayers_band_3000@2025,hmrc_cgt,True,,,,73000.0,73002.65979003906,3.6435479987157536e-05 +hmrc/cgt_taxpayers_band_5000000@2025,hmrc_cgt,True,,,,3000.0,3026.4593048095703,0.008819768269856771 +hmrc/cgt_taxpayers_band_500000@2025,hmrc_cgt,True,,,,16000.0,16021.13005399704,0.0013206283748149871 +hmrc/cgt_taxpayers_band_50000@2025,hmrc_cgt,True,,,,78000.0,78313.82939147949,0.004023453736916567 +hmrc/cgt_taxpayers_band_6000@2025,hmrc_cgt,True,,,,57000.0,57069.829734802246,0.0012250830667060717 +hmrc/dividend_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,222000.0,221963.19381713867,-0.00016579361649246904,222000.0,222535.7505698204,0.002413290855046865 +hmrc/dividend_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,115000.0,114800.81825351715,-0.0017320151868073837,115000.0,114850.22420024872,-0.0013023982587067977 +hmrc/dividend_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,92000.0,91786.6767654419,-0.00231873081041419,92000.0,91980.98323726654,-0.00020670394275499427 +hmrc/dividend_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,372000.0,371776.244808197,-0.0006014924510832756,372000.0,371955.65283584595,-0.00011921280686573316 +hmrc/dividend_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,75000.0,75144.38858795166,0.001925181172688802,75000.0,74937.18384552002,-0.0008375487263997395 +hmrc/dividend_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,843000.0,843093.3517951965,0.00011073759809790415,843000.0,842025.685634613,-0.001155770302950134 +hmrc/dividend_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,49000.0,48970.97156524658,-0.0005924170357840401,49000.0,48976.58601355553,-0.0004778364580504748 +hmrc/dividend_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,667000.0,666466.6921432202,-0.0007995620041675838,667000.0,666849.1282859216,-0.0002261944738805931 +hmrc/dividend_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,627000.0,627184.7502727509,0.00029465753229801354,627000.0,626167.6564369202,-0.0013275016955021275 +hmrc/dividend_income_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,32000.0,32111.354385375977,0.0034798245429992674,32000.0,31881.57893371582,-0.003700658321380615 +hmrc/dividend_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,643000.0,642913.7146296869,-0.00013419186673887525,643000.0,643042.9028498703,6.672293914505171e-05 +hmrc/dividend_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,336000.0,335919.25883102417,-0.00024030109814235143,336000.0,335508.24205350876,-0.0014635653169382185 +hmrc/dividend_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,6870000000.0,6879438939.833873,0.001373935929239126,6870000000.0,6892642309.680996,0.0032958238254724805 +hmrc/dividend_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,175000000.0,174978041.63896134,-0.00012547634879231452,175000000.0,174612515.97476664,-0.002214194429904904 +hmrc/dividend_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,3450000000.0,3440344525.534564,-0.0027986882508510094,3450000000.0,3452358321.3395295,0.0006835714027621781 +hmrc/dividend_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,855000000.0,856134897.0437845,0.0013273649634906422,855000000.0,855181004.1283331,0.00021170073489250495 +hmrc/dividend_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,3700000000.0,3707377797.4451647,0.001993999309503968,3700000000.0,3697353928.4740653,-0.0007151544664688368 +hmrc/dividend_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,3330000000.0,3325445083.384061,-0.0013678428276093515,3330000000.0,3327978009.378769,-0.0006072043907600838 +hmrc/dividend_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,3430000000.0,3427392193.533094,-0.0007602934305848603,3430000000.0,3439884789.1610684,0.0028818627291744723 +hmrc/dividend_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,4700000000.0,4692439284.376222,-0.0016086628986762433,4700000000.0,4704866309.713558,0.0010353850454379143 +hmrc/dividend_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,8400000000.0,8403907956.808586,0.0004652329534031096,8400000000.0,8391619092.874908,-0.0009977270387013753 +hmrc/dividend_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,12500000000.0,12501017713.255322,8.141706042572021e-05,12500000000.0,12495232082.778536,-0.00038143337771713256 +hmrc/dividend_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,9440000000.0,9441737974.44081,0.0001841074619501324,9440000000.0,9418642075.530502,-0.0022624919988874664 +hmrc/employment_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,791000.0,790755.0606002808,-0.00030965790103569947,791000.0,791574.4517677625,0.0007262348517857659 +hmrc/employment_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,1360000.0,1363439.2267636193,0.0025288432085436344,1360000.0,1362582.4241733341,0.0018988413039221675 +hmrc/employment_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,264000.0,263669.8199682236,-0.0012506819385470767,264000.0,263854.3094005585,-0.0005518583312179103 +hmrc/employment_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,3100000.0,3110240.5114422515,0.0033033907878230657,3100000.0,3109314.0158805996,0.0030045212518063284 +hmrc/employment_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,180000.0,180180.4045600891,0.0010022475560506185,180000.0,180052.6068534851,0.0002922602971394857 +hmrc/employment_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,7470000.0,7522615.122937659,0.007043523820302383,7470000.0,7520707.623832923,0.006788169187807678 +hmrc/employment_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,93000.0,92989.72315073013,-0.00011050375558996714,93000.0,92889.72244644165,-0.0011857801457887055 +hmrc/employment_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,5370000.0,5493143.641452337,0.02293177680676661,5370000.0,5493366.140883919,0.02297321059290854 +hmrc/employment_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,3500000.0,3522982.0286870706,0.006566293910591597,3500000.0,3520695.1127006896,0.005912889343054167 +hmrc/employment_income_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,44000.0,44115.540702819824,0.002625925064086914,44000.0,43921.574660778046,-0.001782394073226235 +hmrc/employment_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,3430000.0,3444064.3382329457,0.004100390155377741,3430000.0,3450864.642388832,0.006082986119192952 +hmrc/employment_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,1640000.0,1665444.7557668686,0.015515094979797922,1640000.0,1666970.3743920326,0.016445350239044282 +hmrc/employment_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,82300000000.0,82384748125.20845,0.0010297463573323245,82300000000.0,82463916459.85667,0.0019916945304577667 +hmrc/employment_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,16900000000.0,16754994383.94453,-0.008580213967779261,16900000000.0,16744772358.210777,-0.009185067561492469 +hmrc/employment_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,39200000000.0,39190755099.379776,-0.0002358393015363265,39200000000.0,39214007455.38359,0.0003573330454997627 +hmrc/employment_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,48600000000.0,48526358458.516045,-0.0015152580552254193,48600000000.0,48538482538.294075,-0.0012657913931260285 +hmrc/employment_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,36600000000.0,36701675538.797935,0.0027780201857359422,36600000000.0,36687285249.08095,0.0023848428710641495 +hmrc/employment_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,172000000000.0,172017810961.37323,0.00010355210100715105,172000000000.0,171889223306.36273,-0.0006440505444027213 +hmrc/employment_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,29000000000.0,30761169689.167236,0.060729989281628836,29000000000.0,30404740760.39452,0.04843933656532827 +hmrc/employment_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,170000000000.0,170129889872.73483,0.000764058074910781,170000000000.0,170049311997.3606,0.0002900705727093865 +hmrc/employment_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,139000000000.0,139072058127.369,0.0005184037940214966,139000000000.0,139028019314.62344,0.00020157780304635685 +hmrc/employment_income_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,23100000000.0,23177961815.981277,0.0033749703887998904,23100000000.0,23085764713.008217,-0.0006162461901204824 +hmrc/employment_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,174000000000.0,174506758047.72006,0.002912402573103806,174000000000.0,174644039188.44708,0.003701374646247601 +hmrc/employment_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,118000000000.0,118014222925.64903,0.00012053326821214061,118000000000.0,118007612286.52017,6.451090271332304e-05 +hmrc/private_pension_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,109000.0,108702.59630584717,-0.002728474258282863,109000.0,109116.74713516235,0.0010710746345170047 +hmrc/private_pension_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,1070000.0,1068823.110198021,-0.0010998970111953878,1070000.0,1070418.6882448196,0.00039129742506508516 +hmrc/private_pension_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,29000.0,28931.538548469543,-0.0023607397079467773,29000.0,29097.781421661377,0.0033717731607371365 +hmrc/private_pension_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,2140000.0,2141063.1404143614,0.0004967945861501759,2140000.0,2142799.9044036465,0.0013083665437600357 +hmrc/private_pension_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,20000.0,19981.10668182373,-0.0009446659088134765,20000.0,19906.331424713135,-0.004683428764343261 +hmrc/private_pension_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,2660000.0,2658452.9267192255,-0.0005816064965317754,2660000.0,2662688.5816661804,0.001010744987285864 +hmrc/private_pension_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,10000.0,10046.791735172272,0.0046791735172271726,10000.0,10012.747821569443,0.001274782156944275 +hmrc/private_pension_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,1450000.0,1448387.6006736755,-0.0011119995353961814,1450000.0,1449372.5604110132,-0.000432716957921933 +hmrc/private_pension_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,779000.0,779052.3097419739,6.714986132718479e-05,779000.0,778568.41147995,-0.0005540289089217571 +hmrc/private_pension_income_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,4000.0,4010.1061096191406,0.002526527404785156,4000.0,4001.5416564941406,0.0003854141235351563 +hmrc/private_pension_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,643000.0,642463.3175230026,-0.0008346539300114705,643000.0,642033.5467898422,-0.0015030376518783948 +hmrc/private_pension_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,259000.0,258775.71597194672,-0.0008659614982752266,259000.0,258542.51823282242,-0.0017663388694115127 +hmrc/private_pension_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,5430000000.0,5410998914.152588,-0.0034992791615860237,5430000000.0,5432711407.1031065,0.0004993383246973295 +hmrc/private_pension_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,4350000000.0,4346645485.746268,-0.0007711527020072937,4350000000.0,4345550465.554785,-0.0010228814816586724 +hmrc/private_pension_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,1810000000.0,1801069134.3691978,-0.004934179906520527,1810000000.0,1814480405.0464225,0.0024753619041008187 +hmrc/private_pension_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,13600000000.0,13578160298.319824,-0.0016058604176599838,13600000000.0,13595753035.879808,-0.0003122767735434981 +hmrc/private_pension_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,1570000000.0,1567671040.824632,-0.0014834134874955863,1570000000.0,1562803329.2463822,-0.004583866722049531 +hmrc/private_pension_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,30200000000.0,30169523826.97483,-0.0010091448021579263,30200000000.0,30212898567.303665,0.0004271048776048067 +hmrc/private_pension_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,1120000000.0,998581436.0865912,-0.10840943206554353,1120000000.0,995811644.3867197,-0.11088246036900026 +hmrc/private_pension_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,24900000000.0,24890833410.855362,-0.00036813611022642816,24900000000.0,24901954564.302505,7.849655833355394e-05 +hmrc/private_pension_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,16900000000.0,16900922286.389114,5.457315911919408e-05,16900000000.0,16888209544.038956,-0.000697660116038125 +hmrc/private_pension_income_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,640000000.0,641528101.5653784,0.002387658695903793,640000000.0,637414994.5655614,-0.004039070991310291 +hmrc/private_pension_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,17400000000.0,17389574266.466526,-0.0005991800881306878,17400000000.0,17388912477.500484,-0.0006372139367537663 +hmrc/private_pension_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,9470000000.0,9457622862.91149,-0.001306983853063412,9470000000.0,9455590074.632837,-0.0015216394263107397 +hmrc/property_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,137000.0,136881.7260723114,-0.0008633133407926907,137000.0,137055.45762634277,0.00040480019228301777 +hmrc/property_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,101000.0,100859.34951019287,-0.0013925791070012762,101000.0,101020.50074768066,0.00020297769980855506 +hmrc/property_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,54000.0,53917.88989448547,-0.001520557509528266,54000.0,54225.464029312134,0.004175259802076552 +hmrc/property_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,232000.0,231537.66903686523,-0.0019928058755808863,232000.0,231450.4735546112,-0.0023686484715034224 +hmrc/property_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,41000.0,41046.37253570557,0.001131037456233327,41000.0,40942.8830871582,-0.0013930954351657773 +hmrc/property_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,431000.0,430617.2193546295,-0.0008881221470312839,431000.0,430482.2959575653,-0.0012011694720062468 +hmrc/property_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,23000.0,23007.192695617676,0.00031272589642068613,23000.0,23032.866912841797,0.0014289962105129075 +hmrc/property_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,364000.0,364387.31760406494,0.0010640593518267622,364000.0,363236.2413806915,-0.002098237965133164 +hmrc/property_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,325000.0,324773.2037878793,-0.000697834498832862,325000.0,324902.4937468332,-0.0003000192405133007 +hmrc/property_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,397000.0,397118.30762290955,0.000298004087933365,397000.0,396827.00851917267,-0.0004357468030915152 +hmrc/property_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,226000.0,225893.8906803131,-0.0004695102641012816,226000.0,225843.97229099274,-0.000690388092952492 +hmrc/self_employment_income_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,85000.0,84938.21348953247,-0.0007269001231474035,85000.0,85021.83357334137,0.00025686556872199566 +hmrc/self_employment_income_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,444000.0,444277.90880966187,0.0006259207424816784,444000.0,443778.7690193707,-0.0004982679743902613 +hmrc/self_employment_income_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,40000.0,39921.50653076172,-0.0019623367309570313,40000.0,40148.18704986572,0.0037046762466430663 +hmrc/self_employment_income_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,651000.0,650179.803440094,-0.0012599025497788108,651000.0,650117.3122921358,-0.0013558950965656125 +hmrc/self_employment_income_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,34000.0,33966.705949783325,-0.0009792367710786708,34000.0,33976.87975978851,-0.0006800070650437299 +hmrc/self_employment_income_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,961000.0,961503.7924113274,0.0005242376808817503,961000.0,961061.7910146713,6.429866250918385e-05 +hmrc/self_employment_income_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,21000.0,21016.631408691406,0.0007919718424479167,21000.0,21028.26244354248,0.0013458306448800223 +hmrc/self_employment_income_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,595000.0,594765.2763404846,-0.00039449354540400147,595000.0,594790.3717713356,-0.00035231635069646756 +hmrc/self_employment_income_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,359000.0,358786.50452423096,-0.0005946949185767214,359000.0,358952.22488594055,-0.00013307831214330986 +hmrc/self_employment_income_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,311000.0,310726.179210186,-0.0008804527003665446,311000.0,310929.173845768,-0.00022773683032805512 +hmrc/self_employment_income_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,143000.0,142997.57814216614,-1.6936068768267866e-05,143000.0,142910.68205595016,-0.0006246010073415049 +hmrc/self_employment_income_income_band_100_000_to_150_000@2025,hmrc_spi,False,4980000000.0,4980030897.899983,6.20439758702933e-06,4980000000.0,4983838244.925333,0.0007707319127174745 +hmrc/self_employment_income_income_band_12_570_to_15_000@2025,hmrc_spi,False,4810000000.0,4815403310.5660715,0.001123349390035657,4810000000.0,4807604878.33602,-0.0004979462918876362 +hmrc/self_employment_income_income_band_150_000_to_200_000@2025,hmrc_spi,False,3650000000.0,3650444531.748102,0.00012178952002799675,3650000000.0,3655312444.144494,0.0014554641491764538 +hmrc/self_employment_income_income_band_15_000_to_20_000@2025,hmrc_spi,False,8030000000.0,8030099199.409501,1.2353600186933468e-05,8030000000.0,8026843232.870443,-0.0003931216848762959 +hmrc/self_employment_income_income_band_200_000_to_300_000@2025,hmrc_spi,False,4390000000.0,4399745372.18752,0.002219902548410029,4390000000.0,4379157328.429791,-0.00246985684970582 +hmrc/self_employment_income_income_band_20_000_to_30_000@2025,hmrc_spi,False,15700000000.0,19788765386.485855,0.26043091633667864,15700000000.0,19706442726.644512,0.2551874348181218 +hmrc/self_employment_income_income_band_300_000_to_500_000@2025,hmrc_spi,False,4840000000.0,4853366121.748816,0.002761595402647838,4840000000.0,4854428632.324047,0.0029811223810014644 +hmrc/self_employment_income_income_band_30_000_to_40_000@2025,hmrc_spi,False,12600000000.0,14576649818.495884,0.15687696972189555,12600000000.0,14632754549.414017,0.1613297261439696 +hmrc/self_employment_income_income_band_40_000_to_50_000@2025,hmrc_spi,False,8730000000.0,9167749771.00845,0.05014315819111679,8730000000.0,9224548104.812262,0.05664926744699445 +hmrc/self_employment_income_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,6670000000.0,6668763574.350714,-0.0001853711618120345,6670000000.0,6697199605.73174,0.004077901908806596 +hmrc/self_employment_income_income_band_50_000_to_70_000@2025,hmrc_spi,False,8220000000.0,9020495703.55576,0.09738390554206319,8220000000.0,9028272983.09009,0.09833004660463379 +hmrc/self_employment_income_income_band_70_000_to_100_000@2025,hmrc_spi,False,5360000000.0,5363217000.100863,0.0006001865859819881,5360000000.0,5359311697.221921,-0.00012841469740280465 +hmrc/state_pension_count_income_band_100_000_to_150_000@2025,hmrc_spi,False,74000.0,73578.40440750122,-0.005697237736469991,74000.0,74118.10123825073,0.0015959626790639516 +hmrc/state_pension_count_income_band_12_570_to_15_000@2025,hmrc_spi,False,1140000.0,1136605.0162029266,-0.0029780559623450564,1140000.0,1138593.456604004,-0.0012338099964878016 +hmrc/state_pension_count_income_band_150_000_to_200_000@2025,hmrc_spi,False,21000.0,20964.464184761047,-0.0016921816780453636,21000.0,21055.038578033447,0.0026208846682593935 +hmrc/state_pension_count_income_band_15_000_to_20_000@2025,hmrc_spi,False,2050000.0,2044478.4216796202,-0.0026934528392096755,2050000.0,2046551.4761394688,-0.0016822067612347125 +hmrc/state_pension_count_income_band_200_000_to_300_000@2025,hmrc_spi,False,14000.0,13981.479522705078,-0.0013228912353515625,14000.0,13931.389755249023,-0.004900731767926898 +hmrc/state_pension_count_income_band_20_000_to_30_000@2025,hmrc_spi,False,2320000.0,2315902.1012153625,-0.0017663356830333841,2320000.0,2320141.0449987967,6.079525810200721e-05 +hmrc/state_pension_count_income_band_300_000_to_500_000@2025,hmrc_spi,False,8000.0,8027.89266204834,0.0034865827560424806,8000.0,8035.611573934555,0.0044514467418193815 +hmrc/state_pension_count_income_band_30_000_to_40_000@2025,hmrc_spi,False,1160000.0,1157001.814716339,-0.0025846424859145593,1160000.0,1158409.483791865,-0.0013711346621853942 +hmrc/state_pension_count_income_band_40_000_to_50_000@2025,hmrc_spi,False,568000.0,566338.753660202,-0.002924729471475306,568000.0,566233.1962327957,-0.0031105700126836 +hmrc/state_pension_count_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,3000.0,3004.3687133789062,0.00145623779296875,3000.0,2995.8264770507812,-0.00139117431640625 +hmrc/state_pension_count_income_band_50_000_to_70_000@2025,hmrc_spi,False,441000.0,430194.61750415654,-0.02450200112436158,441000.0,429988.95833988715,-0.02496834843563005 +hmrc/state_pension_count_income_band_70_000_to_100_000@2025,hmrc_spi,False,176000.0,175729.2636976242,-0.0015382744453170084,176000.0,175960.8345246315,-0.00022253111004829406 +hmrc/state_pension_income_band_100_000_to_150_000@2025,hmrc_spi,False,847000000.0,843181828.0615735,-0.0045078771409994035,847000000.0,849151609.3153884,0.0025402707383570733 +hmrc/state_pension_income_band_12_570_to_15_000@2025,hmrc_spi,False,11800000000.0,13111748721.3314,0.11116514587554237,11800000000.0,13149147889.370502,0.11433456689580529 +hmrc/state_pension_income_band_150_000_to_200_000@2025,hmrc_spi,False,265000000.0,264843222.44576156,-0.0005916134122205231,265000000.0,265846348.35114047,0.0031937673627942236 +hmrc/state_pension_income_band_15_000_to_20_000@2025,hmrc_spi,False,22200000000.0,25377650196.5516,0.14313739624106311,22200000000.0,25412714951.331318,0.1447168896996089 +hmrc/state_pension_income_band_200_000_to_300_000@2025,hmrc_spi,False,179000000.0,178816343.4071458,-0.0010260144852190045,179000000.0,178143410.97209966,-0.00478541356368904 +hmrc/state_pension_income_band_20_000_to_30_000@2025,hmrc_spi,False,24900000000.0,29167459646.592186,0.171383921549887,24900000000.0,29221808096.577835,0.17356659022400944 +hmrc/state_pension_income_band_300_000_to_500_000@2025,hmrc_spi,False,96000000.0,95930007.81504366,-0.0007290852599618956,96000000.0,96013247.87197778,0.00013799866643516968 +hmrc/state_pension_income_band_30_000_to_40_000@2025,hmrc_spi,False,12300000000.0,14067869503.18636,0.14372922790133003,12300000000.0,14081519805.124918,0.1448390085467413 +hmrc/state_pension_income_band_40_000_to_50_000@2025,hmrc_spi,False,6020000000.0,6530387864.006682,0.08478203721041236,6020000000.0,6525544221.235816,0.0839774453880093 +hmrc/state_pension_income_band_500_000_to_1_000_000@2025,hmrc_spi,False,43000000.0,43050091.75034857,0.001164924426710883,43000000.0,42935161.564608246,-0.001507870590505905 +hmrc/state_pension_income_band_50_000_to_70_000@2025,hmrc_spi,False,4660000000.0,4842589049.834036,0.03918219953520083,4660000000.0,4863937232.714339,0.043763354659729456 +hmrc/state_pension_income_band_70_000_to_100_000@2025,hmrc_spi,False,1890000000.0,1888501998.2143908,-0.000792593537359389,1890000000.0,1891673151.7171013,0.0008852654587837754 +isc.private_school_students@2025,isc,False,556551.0,556112.8858337402,-0.0007871950032607355,556551.0,556309.4710555077,-0.00043397450456892554 +mhclg.council_tax_stock.band_a@E12000001@2025,council_tax_stock,False,621096.0,620194.9571781158,-0.0014507303571173462,621096.0,620828.8271980286,-0.0004301634561668978 +mhclg.council_tax_stock.band_a@E12000002@2025,council_tax_stock,False,1285713.0,1285283.3794378387,-0.0003341496602751306,1285713.0,1285945.3197016716,0.0001806932819934156 +mhclg.council_tax_stock.band_a@E12000003@2025,council_tax_stock,False,988548.0,988687.8627319336,0.00014148299519456186,988548.0,988451.1036930084,-9.801881850105119e-05 +mhclg.council_tax_stock.band_a@E12000004@2025,council_tax_stock,False,739971.0,739584.0246810913,-0.000522960114529747,739971.0,738527.9442958832,-0.0019501517006974885 +mhclg.council_tax_stock.band_a@E12000005@2025,council_tax_stock,False,728493.0,727134.7655916971,-0.0018644440074275677,728493.0,728669.4114780426,0.00024215946898954765 +mhclg.council_tax_stock.band_a@E12000006@2025,council_tax_stock,False,364482.0,363957.9205608368,-0.0014378746801301792,364482.0,365392.26313642354,0.0024974158845252775 +mhclg.council_tax_stock.band_a@E12000007@2025,council_tax_stock,False,118732.0,118437.56732177734,-0.0024798089666025693,118732.0,118462.7832107544,-0.0022674324465654203 +mhclg.council_tax_stock.band_a@E12000008@2025,council_tax_stock,False,320025.0,320278.77394485474,0.0007929816259815212,320025.0,320041.97356987,5.303826222949806e-05 +mhclg.council_tax_stock.band_a@E12000009@2025,council_tax_stock,False,422969.0,422346.27302360535,-0.0014722756901679635,422969.0,423436.4696302414,0.0011052101459950825 +mhclg.council_tax_stock.band_b@E12000001@2025,council_tax_stock,False,193309.0,192903.76585388184,-0.002096302531791919,193309.0,193017.2031402588,-0.0015094840889002112 +mhclg.council_tax_stock.band_b@E12000002@2025,council_tax_stock,False,666970.0,667705.5748056517,0.0011028604069923309,666970.0,666452.5723695755,-0.0007757884618865908 +mhclg.council_tax_stock.band_b@E12000003@2025,council_tax_stock,False,482052.0,481753.3534965515,-0.000619531717425685,482052.0,482183.77356624603,0.0002733596505066522 +mhclg.council_tax_stock.band_b@E12000004@2025,council_tax_stock,False,478320.0,477547.1876602173,-0.001615680589945465,478320.0,478285.3909163475,-7.235550186589801e-05 +mhclg.council_tax_stock.band_b@E12000005@2025,council_tax_stock,False,625673.0,625848.6727115994,0.00028077400111461634,625673.0,625064.3031055813,-0.0009728674474025266 +mhclg.council_tax_stock.band_b@E12000006@2025,council_tax_stock,False,568914.0,568559.471321106,-0.000623167436368314,568914.0,569465.764092959,0.0009698550096482033 +mhclg.council_tax_stock.band_b@E12000007@2025,council_tax_stock,False,463447.0,463533.025182724,0.00018562032492172573,463447.0,463463.5151128877,3.5635386328358396e-05 +mhclg.council_tax_stock.band_b@E12000008@2025,council_tax_stock,False,649092.0,648308.064116478,-0.0012077423285482393,649092.0,649057.168961525,-5.366117357021288e-05 +mhclg.council_tax_stock.band_b@E12000009@2025,council_tax_stock,False,609286.0,609887.542760849,0.0009872912898852082,609286.0,609422.8482396603,0.00022460427395387892 +mhclg.council_tax_stock.band_c@E12000001@2025,council_tax_stock,False,186703.0,186750.9312095642,0.0002567243673867532,186703.0,186882.22925376892,0.0009599698653418579 +mhclg.council_tax_stock.band_c@E12000002@2025,council_tax_stock,False,585587.0,585362.172203064,-0.00038393577203051836,585587.0,585807.2880513244,0.0003761833020958984 +mhclg.council_tax_stock.band_c@E12000003@2025,council_tax_stock,False,408440.0,408506.7806444168,0.00016350172465186827,408440.0,409151.0998249054,0.0017410141634154233 +mhclg.council_tax_stock.band_c@E12000004@2025,council_tax_stock,False,384470.0,384445.54001426697,-6.362001127014391e-05,384470.0,384555.3949623108,0.0002221108599131038 +mhclg.council_tax_stock.band_c@E12000005@2025,council_tax_stock,False,503657.0,503460.320852431,-0.0003905021623227653,503657.0,503800.1438981616,0.0002842090910313841 +mhclg.council_tax_stock.band_c@E12000006@2025,council_tax_stock,False,708146.0,707312.1177453995,-0.0011775569650898613,708146.0,708964.4695281982,0.0011557920657579682 +mhclg.council_tax_stock.band_c@E12000007@2025,council_tax_stock,False,991205.0,991777.1511862333,0.0005772279056635812,991205.0,991907.556447506,0.0007087902578235087 +mhclg.council_tax_stock.band_c@E12000008@2025,council_tax_stock,False,1024169.0,1024776.7852220535,0.0005934423147483744,1024169.0,1024714.1645832062,0.0005322994380870509 +mhclg.council_tax_stock.band_c@E12000009@2025,council_tax_stock,False,587214.0,586099.308303833,-0.001898271662744744,587214.0,587128.8973932266,-0.00014492605212644192 +mhclg.council_tax_stock.band_d@E12000001@2025,council_tax_stock,False,108432.0,108514.6448726654,0.0007621815761528448,108432.0,108667.27582359314,0.0021698006455026157 +mhclg.council_tax_stock.band_d@E12000002@2025,council_tax_stock,False,346489.0,346640.89738082886,0.0004383901965974603,346489.0,346538.2784576416,0.00014222228596463832 +mhclg.council_tax_stock.band_d@E12000003@2025,council_tax_stock,False,237496.0,237483.99088859558,-5.056553122755308e-05,237496.0,237460.5350971222,-0.00014932842185892654 +mhclg.council_tax_stock.band_d@E12000004@2025,council_tax_stock,False,238335.0,238126.12706756592,-0.0008763837977388215,238335.0,238463.79917430878,0.0005404123368736311 +mhclg.council_tax_stock.band_d@E12000005@2025,council_tax_stock,False,288790.0,288892.22273460263,0.0003539690938143075,288790.0,288910.4956855774,0.0004172432756584112 +mhclg.council_tax_stock.band_d@E12000006@2025,council_tax_stock,False,485975.0,485387.6507373223,-0.001208599748295108,485975.0,485840.56540870667,-0.00027662861524427177 +mhclg.council_tax_stock.band_d@E12000007@2025,council_tax_stock,False,929941.0,930067.9663539041,0.00013653162287081294,929941.0,930066.341025862,0.00013478384742906044 +mhclg.council_tax_stock.band_d@E12000008@2025,council_tax_stock,False,807114.0,806798.9860906601,-0.00039029667350573127,807114.0,806876.5358839035,-0.0002942138484730739 +mhclg.council_tax_stock.band_d@E12000009@2025,council_tax_stock,False,404568.0,404870.18783569336,0.000746939539690137,404568.0,404205.1486725807,-0.0008968858817782944 +mhclg.council_tax_stock.band_e@E12000001@2025,council_tax_stock,False,58932.0,58708.52875518799,-0.0037920186793594605,58932.0,59126.70862579346,0.003303954147041625 +mhclg.council_tax_stock.band_e@E12000002@2025,council_tax_stock,False,207825.0,207981.2329711914,0.0007517525379112535,207825.0,207868.60858861066,0.00020983321838402192 +mhclg.council_tax_stock.band_e@E12000003@2025,council_tax_stock,False,152517.0,152760.4509420395,0.0015962216804650613,152517.0,152402.1247997284,-0.0007531960389438977 +mhclg.council_tax_stock.band_e@E12000004@2025,council_tax_stock,False,149931.0,150015.4684267044,0.0005633820004162363,149931.0,149807.4626235962,-0.000823961531663289 +mhclg.council_tax_stock.band_e@E12000005@2025,council_tax_stock,False,185672.0,185746.73205566406,0.0004024950216729636,185672.0,185922.95343399048,0.0013515954693786812 +mhclg.council_tax_stock.band_e@E12000006@2025,council_tax_stock,False,301723.0,302064.2689078404,0.0011310669317235408,301723.0,301980.3153568414,0.0008528198275949373 +mhclg.council_tax_stock.band_e@E12000007@2025,council_tax_stock,False,551952.0,552325.0366301645,0.000675849766219676,551952.0,551719.7385022803,-0.00042080017414499637 +mhclg.council_tax_stock.band_e@E12000008@2025,council_tax_stock,False,529137.0,529146.0169086456,1.704078271908765e-05,529137.0,528703.3565387726,-0.0008195296515409374 +mhclg.council_tax_stock.band_e@E12000009@2025,council_tax_stock,False,274120.0,274278.4754009247,0.0005781241825648717,274120.0,273309.92693185806,-0.0029551768135923583 +mhclg.council_tax_stock.band_f@E12000001@2025,council_tax_stock,False,25729.0,25775.728233337402,0.001816169821501121,25729.0,25656.263259887695,-0.002827033313082696 +mhclg.council_tax_stock.band_f@E12000002@2025,council_tax_stock,False,100117.0,99958.25249481201,-0.0015856198766242325,100117.0,100175.3994216919,0.000583311742180594 +mhclg.council_tax_stock.band_f@E12000003@2025,council_tax_stock,False,73172.0,73123.63964128494,-0.0006609134466060429,73172.0,73132.24946594238,-0.0005432478824908051 +mhclg.council_tax_stock.band_f@E12000004@2025,council_tax_stock,False,71418.0,71433.54439926147,0.0002176538024234032,71418.0,71551.3461227417,0.0018671220524475512 +mhclg.council_tax_stock.band_f@E12000005@2025,council_tax_stock,False,102077.0,102066.87266921997,-9.92126608347551e-05,102077.0,102095.13033485413,0.00017761429953981774 +mhclg.council_tax_stock.band_f@E12000006@2025,council_tax_stock,False,166744.0,166552.83470344543,-0.0011464598219699984,166744.0,166530.1276626587,-0.0012826388796077135 +mhclg.council_tax_stock.band_f@E12000007@2025,council_tax_stock,False,279261.0,279144.99192619324,-0.00041541093746267006,279261.0,278931.79169305164,-0.0011788552893113014 +mhclg.council_tax_stock.band_f@E12000008@2025,council_tax_stock,False,325815.0,326410.0446662903,0.0018263267998412695,325815.0,325771.9678440094,-0.00013207542927919398 +mhclg.council_tax_stock.band_f@E12000009@2025,council_tax_stock,False,139412.0,139273.56274032593,-0.000993008203555449,139412.0,139953.3873348236,0.003883362514156661 +mhclg.council_tax_stock.band_g@E12000001@2025,council_tax_stock,False,14062.0,14076.558532714844,0.0010353102485310588,14062.0,14098.958679199219,0.0026282661925201784 +mhclg.council_tax_stock.band_g@E12000002@2025,council_tax_stock,False,62587.0,62479.37763786316,-0.0017195641608775116,62587.0,62466.220863342285,-0.0019297799328569006 +mhclg.council_tax_stock.band_g@E12000003@2025,council_tax_stock,False,40487.0,40558.9407081604,0.0017768841396102548,40487.0,40562.17418670654,0.0018567487516126897 +mhclg.council_tax_stock.band_g@E12000004@2025,council_tax_stock,False,37892.0,37878.61399459839,-0.0003532673229602905,37892.0,37927.68533706665,0.0009417644111329672 +mhclg.council_tax_stock.band_g@E12000005@2025,council_tax_stock,False,60209.0,60203.69123840332,-8.817222668836366e-05,60209.0,60223.78594970703,0.0002455770683291742 +mhclg.council_tax_stock.band_g@E12000006@2025,council_tax_stock,False,108700.0,108689.91599845886,-9.276910341433022e-05,108700.0,108632.92223739624,-0.0006170907323252968 +mhclg.council_tax_stock.band_g@E12000007@2025,council_tax_stock,False,207056.0,207102.33735466003,0.00022379141227510518,207056.0,206858.34300804138,-0.0009546064444334777 +mhclg.council_tax_stock.band_g@E12000008@2025,council_tax_stock,False,255206.0,255706.63027000427,0.0019616712381537757,255206.0,254790.14219856262,-0.0016294985283942303 +mhclg.council_tax_stock.band_g@E12000009@2025,council_tax_stock,False,75533.0,75494.89457321167,-0.0005044871352697507,75533.0,75552.15690612793,0.0002536230009125771 +mhclg.council_tax_stock.band_h@E12000004@2025,council_tax_stock,False,2779.0,2777.045166015625,-0.0007034307248560633,2779.0,2778.135009765625,-0.00031125953018172007 +mhclg.council_tax_stock.band_h@E12000005@2025,council_tax_stock,False,5285.0,5266.8173828125,-0.0034404195245979186,5285.0,5246.668487548828,-0.007252887881016438 +mhclg.council_tax_stock.band_h@E12000006@2025,council_tax_stock,False,13447.0,13547.438842773438,0.007469237954446159,13447.0,13465.538330078125,0.0013786220032814011 +mhclg.council_tax_stock.band_h@E12000007@2025,council_tax_stock,False,59569.0,59460.119148254395,-0.0018278106354917066,59569.0,59441.86674118042,-0.0021342184495220682 +mhclg.council_tax_stock.band_h@E12000008@2025,council_tax_stock,False,36978.0,37319.16191101074,0.009226077965567153,36978.0,37013.95849609375,0.0009724294470698794 +mhclg.council_tax_stock.band_h@E12000009@2025,council_tax_stock,False,6697.0,6735.3565673828125,0.005727425322205839,6697.0,6723.5098876953125,0.003958472106213603 +mhclg.council_tax_stock.total@E12000001@2025,council_tax_stock,False,1209414.0,1206925.1146354675,-0.0020579267021321656,1209414.0,1208277.4659805298,-0.0009397394270863532 +mhclg.council_tax_stock.total@E12000002@2025,council_tax_stock,False,3261518.0,3255410.88693125,-0.0018724756597235177,3261518.0,3255253.687453858,-0.0019206739150732608 +mhclg.council_tax_stock.total@E12000003@2025,council_tax_stock,False,2385734.0,2382875.0190529823,-0.0011983653445931817,2385734.0,2383343.0606336594,-0.0010021818720530608 +mhclg.council_tax_stock.total@E12000004@2025,council_tax_stock,False,2103116.0,2101807.5514097214,-0.0006221476087284893,2103116.0,2101897.1584420204,-0.0005795408137162114 +mhclg.council_tax_stock.total@E12000005@2025,council_tax_stock,False,2499856.0,2498620.0952364304,-0.0004943903823138572,2499856.0,2499932.892373464,3.075872108796277e-05 +mhclg.council_tax_stock.total@E12000006@2025,council_tax_stock,False,2718131.0,2716071.6188171823,-0.000757646037964227,2718131.0,2720271.9657532615,0.0007876609895775684 +mhclg.council_tax_stock.total@E12000007@2025,council_tax_stock,False,3601163.0,3601848.195103911,0.000190270505364855,3601163.0,3600851.9357415647,-8.63788332922657e-05 +mhclg.council_tax_stock.total@E12000008@2025,council_tax_stock,False,3947536.0,3948744.4631299973,0.00030613099665139303,3947536.0,3946969.268075943,-0.00014356599257283703 +mhclg.council_tax_stock.total@E12000009@2025,council_tax_stock,False,2519799.0,2518985.601205826,-0.0003228030466613386,2519799.0,2519732.344996214,-2.6452508230254492e-05 +nithc.public_transport_support@2025,dft_local_bus,False,111700000.0,111492148.58393034,-0.0018608005019664872,111700000.0,111470651.66263552,-0.002053252796459086 +obr.attendance_allowance@2025,obr,False,8492497075.074617,8464315474.324637,-0.003318411593298354,8492497075.074617,8499094372.285188,0.0007768383259069147 +obr.carers_allowance@2025,obr,False,4569403813.760573,4569753917.682451,7.661916874659608e-05,4569403813.760573,4565714924.158076,-0.0008073021673830096 +obr.child_benefit@2025,obr,False,13389272724.45089,16031537202.628736,0.1973418969465505,13389272724.45089,16056019292.089056,0.1991703823291517 +obr.council_tax@2025,obr,False,50925163826.30539,44769794834.09963,-0.1208708726632746,50925163826.30539,44787170925.43487,-0.12052966430910021 +obr.esa@2025,obr,False,7206287181.538654,6498237299.695721,-0.09825446363792485,7206287181.538654,6495517345.703216,-0.09863190543617474 +obr.fuel_duties_cars@2025,obr,False,14400000000.0,12015455374.64862,-0.16559337676051245,14400000000.0,11968214325.637045,-0.1688740051640941 +obr.income_tax@2025,obr,False,331437583074.4429,288873911060.3093,-0.12842138063918204,331437583074.4429,288609909976.5807,-0.12921791397520188 +obr.jobseekers_allowance@2025,obr,False,280558748.04472804,279958185.4513395,-0.0021405947865607558,280558748.04472804,280246992.3386736,-0.0011111958127384696 +obr.ni@2025,obr,False,200081395082.7125,196428193894.51556,-0.018258575149811992,200081395082.7125,196318078706.7812,-0.01880892710876777 +obr.ni_employee@2025,obr,False,49544363784.26465,47677389950.58033,-0.03768287028195267,49544363784.26465,47658903817.69792,-0.038055993105023 +obr.ni_employer@2025,obr,False,145324007512.71753,145850768556.15732,0.003624735186260888,145324007512.71753,145759233609.12817,0.002994867151406881 +obr.ni_self_employed@2025,obr,False,2902816090.4147716,2900035497.4771214,-0.0009578949720004123,2902816090.4147716,2899941380.1273146,-0.00099031774591212 +obr.pension_credit@2025,obr,False,6146422389.476461,6131573069.689932,-0.002415928949489977,6146422389.476461,6145236373.067372,-0.00019296044657127944 +obr.pip@2025,obr,False,36910059270.5278,36874599088.03161,-0.0009607186549415113,36910059270.5278,36900310902.82848,-0.00026411140735018747 +obr.sdlt@2025,obr,False,15406516698.785578,15374327355.247734,-0.002089332985981253,15406516698.785578,15410837540.904264,0.00028045548537439794 +obr.state_pension@2025,obr,False,146185954351.57382,135388915617.3279,-0.07385824980339287,146185954351.57382,135399818717.481,-0.07378366602958594 +obr.statutory_maternity_pay@2025,obr,False,3194800881.520547,3201543213.261227,0.002110407499784852,3194800881.520547,3189545738.5790324,-0.0016449046862079672 +obr.tv_licence_fee@2025,obr,False,3872000000.0,3870761512.745221,-0.00031985724555239206,3872000000.0,3871631917.563159,-9.506261282050905e-05 +obr.universal_credit@2025,obr,False,79286349139.54411,79166803620.77298,-0.0015077692448763544,79286349139.54411,79263313800.74449,-0.00029053347833029046 +obr.vat@2025,obr,False,180168938685.41794,218219977029.93292,0.21119643942041305,180168938685.41794,218709003507.27682,0.21391070571354898 +obr.winter_fuel_allowance@2025,obr,False,1911040880.4619167,1885485588.748808,-0.013372446384784726,1911040880.4619167,1884204332.1607866,-0.014042895981714116 +ons.household_composition.couple_3_plus_children_households@2025,ons_household_composition,False,931000.0,931460.5526982867,0.0004946860346796089,931000.0,931037.0906645381,3.9839596711159165e-05 +ons.household_composition.couple_no_children_households@2025,ons_household_composition,False,8119000.0,8120444.919556134,0.00017796767534602543,8119000.0,8123556.063151011,0.0005611606295124083 +ons.household_composition.couple_non_dependent_children_only_households@2025,ons_household_composition,False,1848000.0,1847621.5034827339,-0.00020481413271977643,1848000.0,1846515.8098635674,-0.0008031331907103072 +ons.household_composition.couple_under_3_children_households@2025,ons_household_composition,False,5439000.0,5437932.706181859,-0.00019622978822234486,5439000.0,5439208.091012601,3.8259057290091807e-05 +ons.household_composition.lone_households_over_65@2025,ons_household_composition,False,4254000.0,4250446.745724829,-0.0008352736895089531,4254000.0,4259033.788655831,0.0011833071593395738 +ons.household_composition.lone_households_under_65@2025,ons_household_composition,False,4316000.0,4312240.722036762,-0.0008710097227149761,4316000.0,4314821.111093346,-0.0002731438615973055 +ons.household_composition.lone_parent_dependent_children_households@2025,ons_household_composition,False,1835000.0,1833730.5642666817,-0.0006917905903642119,1835000.0,1836519.5412438025,0.000828087871282029 +ons.household_composition.lone_parent_non_dependent_children_households@2025,ons_household_composition,False,1204000.0,1207919.7250995636,0.0032555856308667764,1204000.0,1204211.4198532104,0.00017559788472628672 +ons.household_composition.multi_family_households@2025,ons_household_composition,False,244000.0,243946.38682937622,-0.00021972610911384958,244000.0,244166.8232460022,0.0006837018278778576 +ons.household_composition.unrelated_adult_households@2025,ons_household_composition,False,813000.0,812647.3109092712,-0.00043381191971557164,813000.0,810725.3687744141,-0.00279782438571456 +ons.household_energy_expenditure@2025,ons_national_accounts,False,43427000000.0,43402765371.90854,-0.0005580543922320488,43427000000.0,43402537629.41116,-0.0005632986526547233 +ons.land.corporate_land_value@2025,ons_land,False,2103053000000.0,2102251629065.8828,-0.00038105123081405345,2103053000000.0,2102762805203.6013,-0.0001379873909020275 +ons.land.household_land_value@2025,ons_land,False,4559831000000.0,4559926839959.675,2.1018313984620196e-05,4559831000000.0,4562023437863.367,0.00048081559675505243 +ons.land.land_value@2025,ons_land,False,7117771000000.0,6662178468268.26,-0.06400775351324736,7117771000000.0,6664786254369.222,-0.06364137672183867 +ons.population.age_0_9_by_region@E12000001@2025,ons_population,False,285165.0,284609.9429988861,-0.0019464415377549544,285165.0,285247.5110607147,0.000289344978222158 +ons.population.age_0_9_by_region@E12000002@2025,ons_population,False,865892.0,865455.561085701,-0.0005040338914079484,865892.0,865643.9148364067,-0.0002865082060964788 +ons.population.age_0_9_by_region@E12000003@2025,ons_population,False,626938.0,626571.9527072906,-0.0005838652190636882,626938.0,626532.0161867142,-0.00064756612820698 +ons.population.age_0_9_by_region@E12000004@2025,ons_population,False,543004.0,542600.5250740051,-0.0007430422722390131,543004.0,543441.7154669762,0.0008060998942478614 +ons.population.age_0_9_by_region@E12000005@2025,ons_population,False,718837.0,718518.2166614532,-0.0004434709656664208,718837.0,718858.4230747223,2.9802409617604603e-05 +ons.population.age_0_9_by_region@E12000006@2025,ons_population,False,744698.0,744733.5138652509,4.76889494142072e-05,744698.0,744423.3445573221,-0.00036881452975287153 +ons.population.age_0_9_by_region@E12000007@2025,ons_population,False,1054493.0,1054045.5713834763,-0.00042430686265697607,1054493.0,1055062.9527373747,0.0005404993085536811 +ons.population.age_0_9_by_region@E12000008@2025,ons_population,False,1059434.0,1058727.9531116486,-0.000666437822791642,1059434.0,1059204.927977562,-0.00021622113547238367 +ons.population.age_0_9_by_region@E12000009@2025,ons_population,False,575506.0,575020.3139476776,-0.0008439287380537956,575506.0,574728.971321106,-0.0013501660780149 +ons.population.age_0_9_by_region@N92000002@2025,ons_population,False,229505.0,229853.9004907608,0.001520230455810563,229505.0,229426.485994339,-0.0003421015039367802 +ons.population.age_0_9_by_region@S92000003@2025,ons_population,False,527989.0,527794.9173984528,-0.0003675883428390387,527989.0,528462.8393707275,0.0008974417473234084 +ons.population.age_0_9_by_region@W92000004@2025,ons_population,False,321552.0,321050.732875824,-0.0015588991024034226,321552.0,321407.14340019226,-0.0004504919882561429 +ons.population.age_10_19_by_region@E12000001@2025,ons_population,False,326306.0,325976.6063747406,-0.0010094623612786752,326306.0,326040.92608833313,-0.000812347648118239 +ons.population.age_10_19_by_region@E12000002@2025,ons_population,False,952864.0,952052.4070858107,-0.0008517405570882397,952864.0,952376.2410825834,-0.0005118872340822639 +ons.population.age_10_19_by_region@E12000003@2025,ons_population,False,696780.0,696847.7113595009,9.717753021166653e-05,696780.0,696414.382941246,-0.0005247238134762297 +ons.population.age_10_19_by_region@E12000004@2025,ons_population,False,615630.0,614734.3473949432,-0.001454855359642582,615630.0,616124.4702992439,0.0008031939626787632 +ons.population.age_10_19_by_region@E12000005@2025,ons_population,False,785062.0,785543.875207477,0.0006138052885976093,785062.0,785325.4289641909,0.00033555179615225747 +ons.population.age_10_19_by_region@E12000006@2025,ons_population,False,785091.0,784457.7626464551,-0.0008065782865233649,785091.0,784742.9459586511,-0.00044332955205048 +ons.population.age_10_19_by_region@E12000007@2025,ons_population,False,1068691.0,1068464.3065729141,-0.00021212251912468288,1068691.0,1069640.8777390374,0.0008888235598853055 +ons.population.age_10_19_by_region@E12000008@2025,ons_population,False,1183235.0,1183052.2799797058,-0.00015442411718229215,1183235.0,1182684.5903186798,-0.0004651735972314802 +ons.population.age_10_19_by_region@E12000009@2025,ons_population,False,677228.0,677339.0187215805,0.0001639310861046876,677228.0,676307.5769610405,-0.0013591036385966074 +ons.population.age_10_19_by_region@N92000002@2025,ons_population,False,252764.0,253409.34803533554,0.002553164356219797,252764.0,252383.08780813217,-0.0015069875135218162 +ons.population.age_10_19_by_region@S92000003@2025,ons_population,False,612935.0,612865.6775856018,-0.00011309912861591091,612935.0,613268.7764701843,0.000544554431031555 +ons.population.age_10_19_by_region@W92000004@2025,ons_population,False,374851.0,374968.99680805206,0.0003147832286750282,374851.0,374521.0333480835,-0.0008802608287466324 +ons.population.age_20_29_by_region@E12000001@2025,ons_population,False,343015.0,342763.2720069885,-0.0007338687608748148,343015.0,342766.10983657837,-0.0007255955670207742 +ons.population.age_20_29_by_region@E12000002@2025,ons_population,False,986590.0,986526.0422205076,-6.482711105156953e-05,986590.0,985141.8587237515,-0.0014678248069091497 +ons.population.age_20_29_by_region@E12000003@2025,ons_population,False,717479.0,717085.464466095,-0.0005484976339447277,717479.0,716522.2487335205,-0.0013334902714636835 +ons.population.age_20_29_by_region@E12000004@2025,ons_population,False,612108.0,612098.2460422516,-1.593502739453346e-05,612108.0,611437.5523986816,-0.001095309326652093 +ons.population.age_20_29_by_region@E12000005@2025,ons_population,False,766058.0,766542.9874440753,0.0006330949406902482,766058.0,765500.7431727212,-0.0007274342507731284 +ons.population.age_20_29_by_region@E12000006@2025,ons_population,False,727218.0,727476.6374969482,0.00035565332121625454,727218.0,727405.9901809692,0.0002585059514055459 +ons.population.age_20_29_by_region@E12000007@2025,ons_population,False,1508607.0,1507259.431204086,-0.0008932537075023935,1508607.0,1506392.404861938,-0.0014679735266123148 +ons.population.age_20_29_by_region@E12000008@2025,ons_population,False,1066121.0,1066585.0860977173,0.0004353034015062879,1066121.0,1064055.1844997406,-0.001937693282713125 +ons.population.age_20_29_by_region@E12000009@2025,ons_population,False,684393.0,684861.380903244,0.0006843741874098925,684393.0,682081.3079614639,-0.0033777260120078255 +ons.population.age_20_29_by_region@N92000002@2025,ons_population,False,219525.0,219736.91438388824,0.0009653314378236858,219525.0,219493.77706861496,-0.00014222950181091122 +ons.population.age_20_29_by_region@S92000003@2025,ons_population,False,703554.0,701364.6888618469,-0.003111788346243609,703554.0,704337.4576683044,0.0011135714789546267 +ons.population.age_20_29_by_region@W92000004@2025,ons_population,False,380557.0,380362.6153793335,-0.0005107897651771059,380557.0,380390.2149734497,-0.0004382655595621496 +ons.population.age_30_39_by_region@E12000001@2025,ons_population,False,363357.0,362320.89476394653,-0.002851480048694443,363357.0,363510.0051956177,0.0004210877886422328 +ons.population.age_30_39_by_region@E12000002@2025,ons_population,False,1064968.0,1065548.3231199475,0.0005449207111832975,1064968.0,1065281.5115036964,0.0002943858441722584 +ons.population.age_30_39_by_region@E12000003@2025,ons_population,False,770809.0,770560.1672348976,-0.0003228202642968446,770809.0,771122.7151870728,0.0004069947121436749 +ons.population.age_30_39_by_region@E12000004@2025,ons_population,False,676709.0,676543.4868240356,-0.00024458545100531465,676709.0,677339.6542758942,0.0009319430891183138 +ons.population.age_30_39_by_region@E12000005@2025,ons_population,False,839114.0,838854.9021657913,-0.00030877548725053735,839114.0,839049.6628211187,-7.66727511175837e-05 +ons.population.age_30_39_by_region@E12000006@2025,ons_population,False,895639.0,895252.0604333878,-0.0004320262590309753,895639.0,895630.1384525299,-9.894106297395238e-06 +ons.population.age_30_39_by_region@E12000007@2025,ons_population,False,1537372.0,1534018.7645695263,-0.00218114771862223,1537372.0,1530115.546908444,-0.004720037239884669 +ons.population.age_30_39_by_region@E12000008@2025,ons_population,False,1284552.0,1284259.926044464,-0.00022737417834068895,1284552.0,1284742.8796024323,0.0001485962440074446 +ons.population.age_30_39_by_region@E12000009@2025,ons_population,False,742082.0,742132.8662395477,6.85453083995158e-05,742082.0,741694.3968925476,-0.000522318433073963 +ons.population.age_30_39_by_region@N92000002@2025,ons_population,False,254067.0,254494.06637835503,0.0016809203019480146,254067.0,254106.70309066772,0.00015627015971269236 +ons.population.age_30_39_by_region@S92000003@2025,ons_population,False,733480.0,732783.4366836548,-0.0009496691339166914,733480.0,733646.4459934235,0.0002269264239290259 +ons.population.age_30_39_by_region@W92000004@2025,ons_population,False,410248.0,410204.61909103394,-0.00010574313333901555,410248.0,410189.03466415405,-0.00014373095260902495 +ons.population.age_40_49_by_region@E12000001@2025,ons_population,False,320860.0,321013.66044425964,0.00047890183961741433,320860.0,320696.62348365784,-0.0005091831837628969 +ons.population.age_40_49_by_region@E12000002@2025,ons_population,False,930967.0,930497.6449722395,-0.0005041586090167486,930967.0,931101.0527038574,0.00014399297059661823 +ons.population.age_40_49_by_region@E12000003@2025,ons_population,False,674349.0,674379.5499053001,4.53028110075649e-05,674349.0,673995.0336370468,-0.0005249008494906732 +ons.population.age_40_49_by_region@E12000004@2025,ons_population,False,610611.0,609682.2416114807,-0.001521031210573159,610611.0,610188.1049609184,-0.0006925768436559012 +ons.population.age_40_49_by_region@E12000005@2025,ons_population,False,746341.0,746289.8564990209,-6.852564843557897e-05,746341.0,747112.6068747686,0.0010338529904810566 +ons.population.age_40_49_by_region@E12000006@2025,ons_population,False,838578.0,838616.4733310112,4.587925155590736e-05,838578.0,838157.6786146897,-0.000501231114231788 +ons.population.age_40_49_by_region@E12000007@2025,ons_population,False,1268973.0,1258015.5042910683,-0.008634932113553009,1268973.0,1255711.6544995415,-0.010450455210992273 +ons.population.age_40_49_by_region@E12000008@2025,ons_population,False,1255951.0,1255119.7139348984,-0.0006618777843256812,1255951.0,1256013.9567317963,5.0126742043491066e-05 +ons.population.age_40_49_by_region@E12000009@2025,ons_population,False,688417.0,687546.2866687775,-0.0012648050981055583,688417.0,688262.6159582138,-0.0002242594848561175 +ons.population.age_40_49_by_region@N92000002@2025,ons_population,False,246140.0,246243.06718850136,0.00041873400707466494,246140.0,245911.26829504967,-0.000929274823069524 +ons.population.age_40_49_by_region@S92000003@2025,ons_population,False,675368.0,675158.1136274338,-0.00031077334514845704,675368.0,675904.5101385117,0.0007943967414974617 +ons.population.age_40_49_by_region@W92000004@2025,ons_population,False,365951.0,365483.1434059143,-0.0012784678661506414,365951.0,365786.1674003601,-0.0004504225965768438 +ons.population.age_50_59_by_region@E12000001@2025,ons_population,False,360074.0,359886.9211444855,-0.0005195566897763414,360074.0,359381.87226104736,-0.0019221819374701777 +ons.population.age_50_59_by_region@E12000002@2025,ons_population,False,995810.0,995746.7963461027,-6.346959148559988e-05,995810.0,994638.2396305294,-0.0011766907035183176 +ons.population.age_50_59_by_region@E12000003@2025,ons_population,False,736903.0,736626.5655660629,-0.0003751300156697323,736903.0,736589.4664516449,-0.00042547465318380106 +ons.population.age_50_59_by_region@E12000004@2025,ons_population,False,676307.0,675686.4504814148,-0.0009175559599193932,676307.0,675709.3840398788,-0.00088364597752375 +ons.population.age_50_59_by_region@E12000005@2025,ons_population,False,794143.0,794746.8683930957,0.0007604025888230153,794143.0,793932.4375192248,-0.00026514428859182007 +ons.population.age_50_59_by_region@E12000006@2025,ons_population,False,866946.0,866605.7335467706,-0.0003924886362349634,866946.0,867232.616990603,0.00033060535558505477 +ons.population.age_50_59_by_region@E12000007@2025,ons_population,False,1087518.0,1086155.139494896,-0.001253184319803502,1087518.0,1085928.081246535,-0.0014619700579346173 +ons.population.age_50_59_by_region@E12000008@2025,ons_population,False,1287719.0,1287957.7299718857,0.00018538980312139618,1287719.0,1286055.517580986,-0.0012918054474726063 +ons.population.age_50_59_by_region@E12000009@2025,ons_population,False,784718.0,785513.1134653091,0.0010132473899020324,784718.0,784070.1605401039,-0.0008255697714288288 +ons.population.age_50_59_by_region@N92000002@2025,ons_population,False,255269.0,255796.59795570374,0.0020668312866181766,255269.0,255451.86619520187,0.0007163666375543986 +ons.population.age_50_59_by_region@S92000003@2025,ons_population,False,766715.0,765937.3916301727,-0.001014207847540834,766715.0,766607.3902176936,-0.0001403517373552898 +ons.population.age_50_59_by_region@W92000004@2025,ons_population,False,424694.0,424568.29020404816,-0.0002960008758113919,424694.0,423485.4629173279,-0.0028456655443027667 +ons.population.age_60_69_by_region@E12000001@2025,ons_population,False,349719.0,349593.85594177246,-0.00035784174788198254,349719.0,349170.81012535095,-0.0015675152755470758 +ons.population.age_60_69_by_region@E12000002@2025,ons_population,False,884043.0,883623.4940605164,-0.0004745311477876558,884043.0,884022.5665874481,-2.3113595777445082e-05 +ons.population.age_60_69_by_region@E12000003@2025,ons_population,False,652931.0,652570.0643081665,-0.0005527930085008923,652931.0,651774.6505184174,-0.0017710132947932348 +ons.population.age_60_69_by_region@E12000004@2025,ons_population,False,591429.0,592810.8889827728,0.0023365255724234475,591429.0,591531.8504962921,0.00017390167930912123 +ons.population.age_60_69_by_region@E12000005@2025,ons_population,False,677922.0,677563.8161260211,-0.0005283555836496074,677922.0,677254.0743923187,-0.000985254362126136 +ons.population.age_60_69_by_region@E12000006@2025,ons_population,False,744651.0,744053.5699324976,-0.0008022953940872003,744651.0,744640.2524625339,-1.4432986011051241e-05 +ons.population.age_60_69_by_region@E12000007@2025,ons_population,False,787666.0,787340.3348808289,-0.00041345585460225855,787666.0,786395.0850906372,-0.0016135200825766161 +ons.population.age_60_69_by_region@E12000008@2025,ons_population,False,1089421.0,1089254.1041965485,-0.0001531967930226589,1089421.0,1089597.2083425522,0.00016174494759343272 +ons.population.age_60_69_by_region@E12000009@2025,ons_population,False,736639.0,736440.7810535431,-0.0002690855988576619,736639.0,736379.8009622097,-0.00035186711237159376 +ons.population.age_60_69_by_region@N92000002@2025,ons_population,False,223111.0,223016.45362138748,-0.0004237638601974726,223111.0,222756.28890037537,-0.0015898413777206582 +ons.population.age_60_69_by_region@S92000003@2025,ons_population,False,721727.0,721488.6410321316,-0.0003302619520516461,721727.0,722124.684664639,0.0005510181337804264 +ons.population.age_60_69_by_region@W92000004@2025,ons_population,False,401775.0,401787.2392578125,3.0462965123514406e-05,401775.0,401768.9893293381,-1.496029036631515e-05 +ons.population.age_70_79_by_region@E12000001@2025,ons_population,False,265573.0,265352.5727844238,-0.0008300061210144551,265573.0,266086.8183517456,0.0019347537277720455 +ons.population.age_70_79_by_region@E12000002@2025,ons_population,False,669277.0,669028.6429100037,-0.00037108266083600344,669277.0,669534.4624151335,0.00038468737926671096 +ons.population.age_70_79_by_region@E12000003@2025,ons_population,False,504131.0,502623.55839538574,-0.0029901783556541012,504131.0,504133.25401878357,4.471097360744203e-06 +ons.population.age_70_79_by_region@E12000004@2025,ons_population,False,466530.0,466128.36456394196,-0.0008608994835445619,466530.0,465546.56572532654,-0.0021079764959883863 +ons.population.age_70_79_by_region@E12000005@2025,ons_population,False,528207.0,527308.1121683877,-0.0017017719030839374,528207.0,528579.6392269135,0.0007054795315348947 +ons.population.age_70_79_by_region@E12000006@2025,ons_population,False,599882.0,599092.2607718247,-0.0013164909568469374,599882.0,602118.3398528467,0.0037279662547745943 +ons.population.age_70_79_by_region@E12000007@2025,ons_population,False,485057.0,484442.09627628326,-0.0012676937426255798,485057.0,483988.73109436035,-0.002202357466523828 +ons.population.age_70_79_by_region@E12000008@2025,ons_population,False,865392.0,865970.3027620316,0.0006682552670137408,865392.0,865856.9439315796,0.0005372639585061913 +ons.population.age_70_79_by_region@E12000009@2025,ons_population,False,618254.0,617349.0966053009,-0.0014636434130617783,618254.0,619161.0497434139,0.0014671150423837536 +ons.population.age_70_79_by_region@N92000002@2025,ons_population,False,155382.0,155182.01890945435,-0.0012870286812221125,155382.0,155258.7429113388,-0.0007932520411707524 +ons.population.age_70_79_by_region@S92000003@2025,ons_population,False,519252.0,518779.34658813477,-0.000910258240440546,519252.0,519351.99210062827,0.0001925695050346797 +ons.population.age_70_79_by_region@W92000004@2025,ons_population,False,321668.0,320977.74789333344,-0.0021458525767765677,321668.0,321568.9240694046,-0.00030800679767772345 +ons.population.age_80_89_by_region@E12000001@2025,ons_population,False,122118.0,121468.60262298584,-0.005317785887536319,122118.0,122365.57015991211,0.0020273027720082984 +ons.population.age_80_89_by_region@E12000002@2025,ons_population,False,324141.0,324328.1623210907,0.0005774102044810692,324141.0,323960.55450439453,-0.0005566882795001828 +ons.population.age_80_89_by_region@E12000003@2025,ons_population,False,243274.0,244611.01162147522,0.00549590840564639,243274.0,244575.62709617615,0.0053504570820397885 +ons.population.age_80_89_by_region@E12000004@2025,ons_population,False,225626.0,224939.7790260315,-0.003041409119376782,225626.0,225237.60005569458,-0.0017214325667494878 +ons.population.age_80_89_by_region@E12000005@2025,ons_population,False,275030.0,274663.54776763916,-0.0013324082185973889,275030.0,275406.8182258606,0.001370098628733577 +ons.population.age_80_89_by_region@E12000006@2025,ons_population,False,305691.0,304833.524810791,-0.0028050390401058076,305691.0,306412.6411342621,0.0023606881925280266 +ons.population.age_80_89_by_region@E12000007@2025,ons_population,False,237061.0,236868.22968771245,-0.0008131675488062299,237061.0,236736.23974897648,-0.0013699438162477827 +ons.population.age_80_89_by_region@E12000008@2025,ons_population,False,447958.0,448803.9723072052,0.001888508090502235,447958.0,448598.55868911743,0.0014299525605468183 +ons.population.age_80_89_by_region@E12000009@2025,ons_population,False,313605.0,313154.55645370483,-0.0014363404483192742,313605.0,314238.18981933594,0.002019067997436066 +ons.population.age_80_89_by_region@N92000002@2025,ons_population,False,77441.0,77351.94020271301,-0.001150034184566151,77441.0,77387.24841117859,-0.0006940972975737805 +ons.population.age_80_89_by_region@S92000003@2025,ons_population,False,238904.0,237507.3569869995,-0.0058460428163634275,238904.0,238821.8281659206,-0.0003439533623522553 +ons.population.age_80_89_by_region@W92000004@2025,ons_population,False,154319.0,154141.38262557983,-0.001150975410805967,154319.0,154876.55652236938,0.0036130128005584846 +ons.population.female_0_4@2025,ons_population,False,1744355.0,1742985.2922632694,-0.000785223040453678,1744355.0,1744697.3401003098,0.00019625598018167836 +ons.population.female_10_14@2025,ons_population,False,2052052.0,2051975.3098326556,-3.737242883923415e-05,2052052.0,2052686.3707817611,0.000309139720514455 +ons.population.female_15_19@2025,ons_population,False,2002835.0,2001723.708850299,-0.0005548590621299267,2002835.0,2001298.5955253497,-0.0007671148520223967 +ons.population.female_20_24@2025,ons_population,False,2034609.0,2034606.7757162955,-1.0932241548789832e-06,2034609.0,2034283.486401558,-0.00015998828199525198 +ons.population.female_25_29@2025,ons_population,False,2291610.0,2289598.055078826,-0.000877961311555669,2291610.0,2288009.780297366,-0.0015710438087781207 +ons.population.female_30_34@2025,ons_population,False,2463301.0,2462376.36257822,-0.000375365179399432,2463301.0,2460212.9763447694,-0.001253611984581115 +ons.population.female_35_39@2025,ons_population,False,2472291.0,2470152.486272335,-0.0008649927244264318,2472291.0,2471461.8074684143,-0.00033539438989410765 +ons.population.female_40_44@2025,ons_population,False,2333109.0,2331627.573281127,-0.0006349582119279348,2333109.0,2332606.231226124,-0.00021549304977869896 +ons.population.female_45_49@2025,ons_population,False,2088285.0,2086710.9461190884,-0.0007537543395233665,2088285.0,2086803.9330907236,-0.0007092264270807934 +ons.population.female_50_54@2025,ons_population,False,2255231.0,2255495.922010974,0.00011747001126449007,2255231.0,2252801.047071289,-0.0010774740719293034 +ons.population.female_55_59@2025,ons_population,False,2360202.0,2360069.2718506227,-5.6235927847394104e-05,2360202.0,2358476.730693377,-0.0007309837491125383 +ons.population.female_5_9@2025,ons_population,False,1941658.0,1940493.6505188942,-0.0005996676454379734,1941658.0,1940600.782195579,-0.0005444922867059865 +ons.population.female_60_64@2025,ons_population,False,2193915.0,2191220.3231972773,-0.0012282503208751192,2193915.0,2190615.436213443,-0.0015039615420638195 +ons.population.female_65_69@2025,ons_population,False,1838574.0,1840315.3586513125,0.0009471245929250243,1838574.0,1840163.42689991,0.0008644889462757404 +ons.population.female_70_74@2025,ons_population,False,1622996.0,1621580.1644964975,-0.0008723592069866568,1622996.0,1624382.540404314,0.0008543091938082055 +ons.population.female_75_79@2025,ons_population,False,1551183.0,1548807.0104699503,-0.0015317274171066405,1551183.0,1552083.4857138712,0.0005805154606975424 +ons.population.female_80_84@2025,ons_population,False,1024480.0,1025348.5131001581,0.000847759936902696,1024480.0,1026418.0937972177,0.0018917829505873274 +ons.population.female_85_89@2025,ons_population,False,665267.0,663693.7828521729,-0.0023647905996045924,665267.0,666284.2124633789,0.0015290288912254873 +ons.population.female_90_plus@2025,ons_population,False,414716.0,415213.40118364186,0.0011993778480740192,414716.0,415246.64153436513,0.001279529929795647 +ons.population.male_0_4@2025,ons_population,False,1829801.0,1828830.5834515095,-0.0005303399377804057,1829801.0,1829905.3728904834,5.704056915662149e-05 +ons.population.male_10_14@2025,ons_population,False,2152800.0,2152562.5578729995,-0.00011029455917899503,2152800.0,2152830.7612992753,1.428897216431042e-05 +ons.population.male_15_19@2025,ons_population,False,2123750.0,2123450.7612161636,-0.0001409011342372524,2123750.0,2123014.61037302,-0.000346269394693268 +ons.population.male_20_24@2025,ons_population,False,2131646.0,2131875.620774269,0.00010771993767684878,2131646.0,2128552.2383900797,-0.0014513486807473195 +ons.population.male_25_29@2025,ons_population,False,2257360.0,2256582.3149375916,-0.00034451087217300175,2257360.0,2254679.3449907303,-0.0011875177239207369 +ons.population.male_30_34@2025,ons_population,False,2333326.0,2332847.006454712,-0.0002052835931576728,2333326.0,2331306.799777031,-0.0008653742438772187 +ons.population.male_35_39@2025,ons_population,False,2303479.0,2301597.658243322,-0.0008167392698948792,2303479.0,2303447.1109973844,-1.384384342795655e-05 +ons.population.male_40_44@2025,ons_population,False,2196013.0,2186858.1871728897,-0.0041688336212537406,2196013.0,2185543.9764289856,-0.004767286701405868 +ons.population.male_45_49@2025,ons_population,False,2005099.0,2002848.5493068008,-0.001122363879887815,2005099.0,2003887.132552579,-0.0006043928242051663 +ons.population.male_50_54@2025,ons_population,False,2164862.0,2162712.046805457,-0.0009931132767551872,2164862.0,2163052.344844173,-0.0008359217150224013 +ons.population.male_55_59@2025,ons_population,False,2256521.0,2256950.3575328933,0.00019027411351071294,2256521.0,2254752.3729819376,-0.0007837848697452396 +ons.population.male_5_9@2025,ons_population,False,2037199.0,2036673.5753667539,-0.00025791522244324096,2037199.0,2037236.7507977854,1.8530736459890722e-05 +ons.population.male_60_64@2025,ons_population,False,2094462.0,2092904.4500098596,-0.0007436515869661838,2094462.0,2092030.656758822,-0.0011608438067522663 +ons.population.male_65_69@2025,ons_population,False,1734083.0,1735103.1115355492,0.0005882714584879523,1734083.0,1734606.7419999382,0.00030202821891348497 +ons.population.male_70_74@2025,ons_population,False,1473758.0,1472312.485072136,-0.0009808360177614472,1473758.0,1474091.7784814835,0.00022648120076936611 +ons.population.male_75_79@2025,ons_population,False,1350668.0,1349534.4605899225,-0.0008392435521367953,1350668.0,1350627.658841806,-2.9867560491550674e-05 +ons.population.male_80_84@2025,ons_population,False,815910.0,814888.0688061822,-0.0012525048030024833,815910.0,816715.8502897451,0.0009876705638429972 +ons.population.male_85_89@2025,ons_population,False,459511.0,458741.70167541504,-0.0016741673748505714,459511.0,459199.27598285675,-0.0006783820564540338 +ons.population.male_90_plus@2025,ons_population,False,210520.0,210153.3474187851,-0.0017416520103311077,210520.0,211076.2330880165,0.002642186433671433 +ons.population.scotland_babies_under_1@2025,ons_population,False,46776.0,46718.190574645996,-0.0012358779150419854,46776.0,47034.02143859863,0.00551610737554799 +ons.population.scotland_children_under_16@2025,ons_population,False,896833.0,896850.7508964539,1.9792867182471454e-05,896833.0,897488.6023159027,0.0007310193936917017 +ons.population.uk_total@2025,ons_population,False,69281437.0,69241420.75256681,-0.0005775897436016747,69281437.0,69245689.92998923,-0.0005159689457764334 +ons.public_sector_employment@2025,ons_employment,False,6146000.0,6146408.809994146,6.651643250019978e-05,6146000.0,6142397.437063069,-0.0005861638361423556 +orr.rail_government_support@2025,orr_rail,False,21621100549.34064,21630095912.89506,0.0004160455909213555,21621100549.34064,21628340515.6753,0.00033485651288367777 +scotgov.bus.government_support@2025,dft_local_bus,False,499000000.0,499433283.7901752,0.0008683041887278547,499000000.0,500372116.8474839,0.0027497331612903273 +scotgov.bus.passenger_revenue@2025,dft_local_bus,False,391000000.0,388643854.6842788,-0.0060259470990312375,391000000.0,390979145.9064987,-5.333527749700619e-05 +scotgov.council_tax_stock.band_a@2025,council_tax_stock,False,498707.0,497020.141664505,-0.003382463722175536,498707.0,499532.9005317688,0.00165608369597539 +scotgov.council_tax_stock.band_b@2025,council_tax_stock,False,583705.0,583027.2126274109,-0.0011611813717359134,583705.0,584061.297082901,0.0006104060833828749 +scotgov.council_tax_stock.band_c@2025,council_tax_stock,False,426388.0,425330.3944672664,-0.0024803829674700205,426388.0,426179.61328107514,-0.0004887255713689312 +scotgov.council_tax_stock.band_d@2025,council_tax_stock,False,369621.0,368154.1543941498,-0.003968512627394601,369621.0,369604.7444038391,-4.3979092532320057e-05 +scotgov.council_tax_stock.band_e@2025,council_tax_stock,False,366881.0,366802.6941642761,-0.00021343660675771423,366881.0,366835.8425331116,-0.00012308477922930795 +scotgov.council_tax_stock.band_f@2025,council_tax_stock,False,221282.0,221274.51622104645,-3.3820098126156877e-05,221282.0,221415.57807913623,0.0006036554222043998 +scotgov.council_tax_stock.band_g@2025,council_tax_stock,False,142084.0,141809.02550315857,-0.0019352952960321405,142084.0,142087.87224388123,2.7253201495070423e-05 +scotgov.council_tax_stock.band_h@2025,council_tax_stock,False,14481.0,14478.901580810547,-0.00014490844482101546,14481.0,14504.730834960938,0.0016387566439429251 +scotgov.council_tax_stock.total@2025,council_tax_stock,False,2623149.0,2617897.0406226236,-0.0020021582370564396,2623149.0,2624222.5789906736,0.000409271067207256 +scotgov.scottish_child_payment_spending@2025,scotgov_social_security,False,471000000.0,470649557.5122337,-0.0007440392521578036,471000000.0,471850009.6547228,0.0018046914113010824 +slc.borrowers.plan_5_above_threshold@2025,slc_borrowers,False,35000.0,34992.94677734375,-0.00020152064732142856,35000.0,35003.878662109375,0.00011081891741071429 +slc.repayments.england_plan_1@2025,slc_repayments,False,1852699178.55,1851842083.45906,-0.0004626196745068982,1852699178.55,1854799446.4091117,0.0011336259460942512 +slc.repayments.england_plan_2@2025,slc_repayments,False,2778253361.64,2779780257.7217193,0.0005495884942682382,2778253361.64,2773324157.1930184,-0.0017742098381091226 +slc.repayments.england_total_higher_education@2025,slc_repayments,False,5018231834.949999,5022408978.767491,0.0008323935511309644,5018231834.949999,5014137132.042636,-0.0008159652726374562 +slc.support.adult_dependants_grant_recipients@2025,slc_student_support,False,18611.0,15702.80029296875,-0.15626240970561764,18611.0,15781.274047851562,-0.1520458842699714 +slc.support.adult_dependants_grant_spend@2025,slc_student_support,False,55364916.81,55666427.03857422,0.005445871608710837,55364916.81,55944616.49963379,0.010470523989464053 +slc.support.maintenance_loan_recipients@2025,slc_student_support,False,1159761.0,1161001.3805103302,0.0010695139001313204,1159761.0,1160260.418264389,0.0004306217094634481 +slc.support.maintenance_loan_spend@2025,slc_student_support,False,8591659718.080004,8601706708.275253,0.0011693887473344649,8591659718.080004,8589387159.727173,-0.00026450749068292244 +slc.support.parents_learning_allowance_recipients@2025,slc_student_support,False,99645.0,90412.25402832031,-0.09265638990094523,99645.0,90470.11608886719,-0.09207570787428182 +slc.support.parents_learning_allowance_spend@2025,slc_student_support,False,181421659.32,182994402.1533203,0.00866899155930573,181421659.32,183111514.9638672,0.009314519832974013 +welshgov.bus.public_support@2025,dft_local_bus,False,131489970.0,131356817.11180069,-0.0010126467303879867,131489970.0,131658506.90745772,0.0012817472500581163 +welshgov.council_tax_stock.band_a@2025,council_tax_stock,False,194973.29,195355.29622650146,0.0019592746601416874,194973.29,194866.65041732788,-0.0005469445721110173 +welshgov.council_tax_stock.band_b@2025,council_tax_stock,False,285787.52,285829.3788471222,0.0001464684221416448,285787.52,285505.69972610474,-0.0009861181968172797 +welshgov.council_tax_stock.band_c@2025,council_tax_stock,False,301699.86,301656.5366868973,-0.00014359739213239342,301699.86,301819.6948661804,0.00039719894527108463 +welshgov.council_tax_stock.band_d@2025,council_tax_stock,False,225179.88,224034.700466156,-0.005085621032589585,225179.88,225444.69596290588,0.0011760196466304145 +welshgov.council_tax_stock.band_e@2025,council_tax_stock,False,185447.46,185598.83496189117,0.0008162687258762265,185447.46,184906.42786884308,-0.002917441582413225 +welshgov.council_tax_stock.band_f@2025,council_tax_stock,False,114672.0,114573.23415756226,-0.0008612899612611984,114672.0,114490.12331390381,-0.0015860601201356163 +welshgov.council_tax_stock.band_g@2025,council_tax_stock,False,52211.0,52101.870948791504,-0.002090154396745822,52211.0,52103.48324203491,-0.0020592740603529503 +welshgov.council_tax_stock.band_h@2025,council_tax_stock,False,12357.0,12298.32290649414,-0.004748490208453458,12357.0,12341.735824584961,-0.0012352654701820072 +welshgov.council_tax_stock.band_i@2025,council_tax_stock,False,5305.0,5320.9476318359375,0.0030061511472078226,5305.0,5297.952201843262,-0.0013285199164445394 +welshgov.council_tax_stock.total@2025,council_tax_stock,False,1377633.03,1376769.122833252,-0.0006270952771421826,1377633.03,1376776.463423729,-0.0006217668694188358 diff --git a/docs/uk-chronicle-feed-repin.md b/docs/uk-chronicle-feed-repin.md index a1e4d66009..f0d82da3e4 100644 --- a/docs/uk-chronicle-feed-repin.md +++ b/docs/uk-chronicle-feed-repin.md @@ -68,3 +68,6 @@ moved the rows to `chronicle.consumer_fact.v3`, which adds the publisher's `geography.name` to every fact (the label the hierarchy needs for constituencies and local authorities, microcosm#920) and brought the council taxbase packages for England, Wales and Scotland (266,390 rows); the `ec20085` re-pin (#890 PR-S, chronicle #269/#270 via PR #271) brought the domestic energy facts the energy stage levels and prices against (DESNZ Energy Trends domestic consumption, subnational consumption and meter counts, QEP average prices paid, NEED 2024, ONS 04.5 sub-classes) and the census central-heating tables (275,698 rows). +The `c5e5bf8` re-pin (microcosm#725, chronicle #273, on top of `ec20085`) then brought the HMRC CGT +Tables 7, 8 and 9 (asset type, residential property, carried interest), 276,205 rows, with no +compiled value moving on either surface. diff --git a/experiments/725-cgt-distribution.md b/experiments/725-cgt-distribution.md new file mode 100644 index 0000000000..30571a5eca --- /dev/null +++ b/experiments/725-cgt-distribution.md @@ -0,0 +1,308 @@ +# UK CGT distribution: age, region and asset-type conditioning measured (microcosm#725, #467) + +*2026-09-17. Twin spine builds and calibrations on PR #939 (branch head 19f7e184 for the candidate spine) against its +base (main d69a543e). Every table is regenerated by `experiments/build_725_cgt_distribution_receipt.py` and +`experiments/build_725_calibration_comparison.py` into `docs/evidence/uk-cgt-725/`.* + +## Question + +Issue #725 found that the CGT amounts redraw conditioned on taxable income only, so the age and geography +joints of large gains were inherited from the incidence prior: 65+ held 24 % of taxpayers but 2 % of £2m+ +gainers, against HMRC Table 6's 38 % of taxpayers and 32 % of gains. Issue #467 asked for size-of-gain +targets. PR #939 rakes the redraw to the Table 6 and Table 5 margins, draws from the published 2024-25 +Table 3 joint, binds 74 new national rows (size bands, age bands, region tier, residential property) and +adds an asset-type stage. This note measures what changed. + +## Inputs + +- Control: main d69a543e, built in `repos/populace-725-control` (own venv; `microcosm.build` resolved to that + tree), feed pin df35af7, `--cgt-ods Table_3_2025_Size_of_gain_by_income.ods`. +- Candidate: branch `uk-cgt-distribution-725` at d7ec3ea1, feed pin c5e5bf8. +- Licensed inputs: FRS 2024-25, WAS round 8, LCFS 2023-24, ETB 1977-2024, SPI 2022-23, HMRC collated ODS — + the same paths as `data/ukds/acceptance/791-relationships/build_791.sh`. Launchers: + `data/ukds/acceptance/725-cgt-distribution/build_725.sh`, `calibrate_725.sh`. +- Published rows: the vendored `hmrc_cgt_conditioning_facts.json` (Tables 1, 2.1a, 3, 5, 6 for 2024-25) + and `hmrc_cgt_asset_type_facts.json` (Tables 7, 8a, 8b). +- Provenance. Every receipt under `docs/evidence/uk-cgt-725/` records, per twin, the build commit + (`TREE_HEAD`), the H5 digest, the declared stage seeds, the time period, the sampling receipt where the + rung was sampled and the Chronicle pin the conditioning resource was vendored from. The commits this note + cites are the pre-rebase hashes the twins were built from; they are reachable from the tag + `uk-cgt-725-measured-pre-rebase` (c658f0e7, on main d69a543e). After the rebase onto main d1196af1 + (2026-09-18) the same changes are, in order: a00d85fa → 955622fd, cb36adcd → 2e48ddd4, 10b31f76 → + 6d0721fc, 6a90cbe8 → fab0c439, d7ec3ea1 → 6210b0c6, fc72f873 → 408de878, 523f8f5b → d0968051, + 19f7e184 → da39c391, 468cca5b → 37a91c54, b88190e8 → 72a113d8, 93c5b185 → b18d4226, 9bd4d8ce → 3ba335ff, + c658f0e7 → d6376f37. The measurement was not re-run after the rebase: #927 and #937 change stages + upstream of the CGT stages without touching their inputs. + +## Part A — 10 % rung (sample seed 42) + +Both twins built with `--sample-fraction 0.1 --sample-seed 42` (control 10.7 min, candidate 10.6 min; the +sampled rung refuses a checkpoint directory by design). Tables: `docs/evidence/uk-cgt-725/*-f010.csv`, +receipt `receipt-f010.json`. Weights are ten times the full-scale weights on this rung, so every count below +is coarse to about one row's weight (the heaviest liable row carries 11,036 people). + +- **Two repairs came out of this rung** (commit fc72f873). First candidate build: liable taxpayers 625,637 + against 551,000 published, because the pooled fallback walked each (gain band, income band) shortfall + clipped at zero and so compounded the half-weight overshoot of the 144 cell walks into 75,000 extra + taxpayers. The fallback now fills the income band's net shortfall, apportioned to bands by their positive + shortfalls: liable taxpayers 551,289. Second, the residential flag realised by probability-systematic + sampling over 61 heavy rows left the weighted count 31,800 (16 %) off its expectation; the weighted + systematic walk in gain order lands it within 40 people (202,669 against 202,630) and the gains at £12.05bn + against £12.24bn. +- **Age.** 65+ hold 38.2 % of liable taxpayers on the candidate (control 27.6 %; Table 6 38.5 %) and the + eight adult age bands sit within one or two rows' weight of Table 6 (65–74: 123k vs 125k; 75–84: 62k vs + 68k; 35–44: 72k vs 65k). 65+ hold 26.9 % of gains (control 24.5 %; Table 6 32 %) and 19.7 % of £2m+ + gainers (control 22.7 %): the rake constrains counts only, so the top bands inside each age cell still + follow the frame's income and prior-gain shares. Gains by age remain far from Table 6 on this rung + (45–54: £12.4bn vs £28.4bn; 55–64: £13.3bn vs £38.1bn), but so does the total: the rung carries £50.5bn + of the £119.3bn because the £250k+ bands are under-filled (£5m+: 500 people of 3,000) — a 3,000-person + band cannot be met by rows that weigh 2,500 each. The full spine settles this; if the gains-by-age + margin stays far off there, the amounts-consistent tilt (Table 6 gains as a rake constraint) the plan + listed as a conditional follow-up is warranted. +- **Region.** Twelve-area counts are closer than the control's but still coarse at this rung (North West + 91k vs 42k, East of England 98k vs 58k, South East 82k vs 114k, London 87k vs 107k): the rake meets the + region margins to 1e-15, but 50,930 of the 551,000 (9 %) pass through the pooled fallback that ignores + age and region, and 24 age×region cells per income band leave most cells with zero or one row here. +- **Size bands.** Candidate bands sit within one row's weight of Table 2.1a folded (0–9,999: 145k vs 133k; + 10k: 99k vs 123k; 25k: 108k vs 98k; 50k: 121k vs 78k; 100k: 49k vs 61k) — the same coarseness the + control shows on its own 2023-24 targets. +- **Residential and asset types.** 61 rows flagged residential, count and gains as above. Non-residential + gains shares against Table 7: unlisted 53.5 % (target 55.3 %), other financial 26.1 % (26.7 %), listed + 9.0 % (9.8 %), agricultural/commercial 9.6 % (3.4 %), other non-financial 1.6 % (4.8 %) — a categorical + draw over 180 rows; diagnostic only. + +## Part B — full twin spines + +Control `control.h5` (main d69a543e, 7.5 min, 5.9 GB RSS); candidate `candidate.h5` (branch head after the +three measurement-round repairs below, 7.6 min). Both pass every spine gate. Tables: +`docs/evidence/uk-cgt-725/*-full.csv`, receipt `receipt-full.json`; stage receipts in each +`*.build.json` under `stage_evidence`. + +**Three repairs came out of the full rung**, each found by the receipts and committed on the branch: + +1. *Fallback netting* (fc72f873, found at 10 %): the pooled walk compounded the cell walks' half-weight + overshoot into 75,000 extra taxpayers; it now fills each income band's net shortfall. +2. *Systematic rounding* (523f8f5b): the midpoint rule inside 144 cells never placed anyone in a band whose + raked cell target (about 20 people for £5m+) was below half a carrier's weight, so the £5m+ band held + 900 people and £9bn against 3,000 and £48bn. Every walk now rounds with one seeded offset, so a small + boundary still receives its person on the share of walks it implies; the £5m+ band then held 3,300 + people. +3. *Stratified draws* (19f7e184): with the counts right, £5m+ still carried £27.7bn because thirty-odd + carriers drawing iid from a Pareto with infinite variance sit well below its mean. Each plan now draws on + quantile strata in prior-gain order and the open band takes stratum conditional means. + +**Result on the full candidate (design weights, before calibration), against the 2024-25 rows:** + +- Liable taxpayers 551,608 (published 551,000; control 357,788 against its own 2023-24 359,000) and liable + gains £117.8bn (published £119.3bn; control £63.8bn against £62.9bn). Pass 1 places 541,672 inside the + income × age × region cells and the pooled fallback 9,936 (1.8 %); the rake met every margin to 1e-15 + with no zero-seed cells. +- Size bands (people / gains, published in brackets): 0–9,999 133.1k/£0.7bn (133k/£0.8bn); 10k 118.8k/£2.0bn + (123k/£2.0bn); 25k 95.9k/£3.4bn (98k/£3.5bn); 50k 80.4k/£5.6bn (78k/£5.5bn); 100k 62.4k/£9.5bn (61k/£9.5bn); + 250k 25.7k/£9.0bn (25k/£8.8bn); 500k 15.9k/£10.0bn (16k/£11.4bn); 1m 7.7k/£9.7bn (9k/£12.8bn); 2m 8.0k/£21.4bn + (5k/£16.5bn); 5m+ 3.7k/£46.5bn (3k/£48.5bn). +- Age (Table 6): 65+ hold 38.0 % of liable taxpayers (control 23.1 %; published 38.5 %); the adult bands sit + on their published counts (25–34 35.7k vs 27k; 35–44 65.9k vs 65k; 45–54 95.1k vs 98k; 55–64 143.7k vs + 144k; 65–74 124.4k vs 125k; 75–84 64.5k vs 68k; 85+ 21.0k vs 19k). Gains by age are not constrained by the + rake and stay off: 65+ hold 20.2 % of gains (control 29.0 %; published 31.8 %), 25–34 7.6 % (2.1 %), 35–44 + 14.3 % (9.9 %), 45–54 29.6 % (23.8 %), 75–84 4.5 % (9.8 %). The top bands inside each age cell follow the + frame's prior and income shares, which put the largest gains on younger cells; 65+ hold 23.0 % of £2m+ + gainers (control 21.9 %) and 13.6 % of their gains (control 38.3 %). The amounts-consistent tilt the plan + listed as a conditional follow-up (Table 6 gains by age as a rake constraint, with the age-band gains + targets already bound) is therefore warranted; the calibration below binds those gains targets in the + meantime. +- Region (Table 5 on the individuals basis): London 104.3k vs 106.6k, Scotland 35.4k vs 34.9k, Wales 18.9k vs + 17.0k, Yorkshire 34.8k vs 32.1k, Northern Ireland 8.7k vs 9.4k, but South East 98.6k vs 114.2k, South West + 37.7k vs 60.4k, East of England 73.1k vs 58.5k, North West 54.7k vs 41.5k, North East 18.8k vs 11.3k. The + rake's region margins are met exactly in the targets; the deviation is the cell walks' rounding across + 24 age × region cells per income band, which the bound region targets correct in calibration. +- Residential property (Table 8a on the individuals basis): 202,689 taxpayers against 202,630 and £12.45bn + against £12.24bn on 325 rows. Non-residential composition against Table 7 (diagnostic): unlisted 62.1 % + (55.3 %), other financial 26.1 % (26.7 %), listed 8.5 % (9.8 %), agricultural/commercial 3.0 % (3.4 %), + other non-financial 0.3 % (4.8 %) — 649 rows across five types. + +## Part C — calibrations (889 settings: 1,500 epochs, lr 0.02, family-equal, loss cap 10) + +`calibrate_725.sh` on each twin against its own pinned feed (control df35af7, candidate c5e5bf8), the +committed measure-exclusion register (see the defect below), release ids `725-control` / `725-candidate` +(non-release). Both solves completed and wrote `calibration_diagnostics.json`; both terminal batteries +blocked at `uk_target_fit`, so neither staged an artifact, as intended for a measurement. Comparison: +`docs/evidence/uk-cgt-725/calibration-comparison-round1.json`, `target-comparison-round1.csv` (renamed +when the split-plus-tilt round below took the plain names). + +- **Surface.** Control 560 targets (3 CGT); candidate 634 (77 CGT: the three totals, 24 size-band rows, + 24 age-band rows, 24 region-tier rows, 2 residential rows). None skipped on either side. +- **Fit.** Final loss 0.0112 on both (initial 0.313 / 0.309); within 10 %: 97.0 % of 560 against 96.2 % of + 634; effective sample size 10,542 against 10,483; realised max weight ratio 10.0 on both; top-1 % weight + share 15.5 % / 15.6 %. +- **The gains gap closes.** `hmrc.cgt.gains_total` sits at −0.4 % (£118.78bn of £119.26bn) against the + control's −9.5 % (£107.93bn), the shortfall #725 opened on. Taxpayers −0.3 % (control −0.1 %). +- **The new families fit.** All 24 size-band rows within 1 % (the £5m+ gains row −0.9 %, the 25k taxpayer row + +1.0 %, every other row within 0.4 %); all 24 region-tier rows within 1 % (London gains −1.0 %, Northern + Ireland taxpayers +0.6 %); all 8 age-band taxpayer rows within 0.4 %; both residential rows at 0.0 %; + age-band gains within 2 % for 35+ (85+ −1.8 %) and −9.4 % for 25–34. 70 of 77 CGT rows are within 10 % + and 75 within 25 %. +- **Two rows breach the 25 % fence**, both the youngest band: `hmrc.cgt.gains_by_age_band.age_16_to_24` + −70.6 % (£94m of £319m) and `hmrc.cgt.tax_by_age_band.age_16_to_24` −79.6 % (£12m of £59m). The band's + taxpayer row fits (+0.3 %, 4,013 of 4,000): the frame's 16–24 carriers can be weighted onto the published + count, but they carry small prior gains and the count-only rake gives their cells low-band allotments, + so no weighting reaches the published £80k mean gain. Decision for María: sign a reviewed fit exclusion + for the two rows (the register keeps them bound and fails a stale entry) with the gains tilt as the + tracked repair, or implement the tilt in this PR. +- **Liability rises to +11.4 %** (£25.07bn of £22.50bn; control +0.6 %). The control's liability sat inside + the fence only because its gains were 9.5 % short; with gains on target the engine's 2024 liability + overshoots, and the age-band tax rows carry the same +7 to +15 % for ages 35–74. *Corrected in session 3 + (the first draft of this bullet blamed the missing residential schedule, which runs the other way):* the + engine charges every gain at `gov.hmrc.cgt.basic_rate` / `higher_rate`, which for 2024-25 are the + day-weighted blends of the rates before and after 30 October 2024 (13.46 % / 21.73 %). HMRC's 2024-25 + commentary reports 61,000 taxpayers claiming Business Asset Disposal Relief on £18.5bn of gains at 10 %, + £1.8bn of tax; charging those gains at the blended 21.73 % overstates liability by about £2bn of the + £2.6bn gap, and HMRC also reports disposals brought forward ahead of the Budget, which a calendar blend + cannot see. Residential property (18/24 % all year, £12.9bn of gains) and carried interest (28 %, £5.4bn) + are under-taxed by the blend, by roughly £0.3bn each, so a residential input alone would widen the gap. + The engine repair is PolicyEngine/policyengine-uk#1858 (BADR, residential and carried-interest inputs with + their own schedules); BADR-qualifying gains also need imputing on the spine before that input has data + (HMRC Table 4; a microcosm follow-up). Until then liability on this branch reads as an upper bound. +- **Nothing outside CGT moved.** 540 non-CGT targets within 10 % on both sides; no non-CGT target crosses + the 10 % or 25 % fence in either direction. The one non-CGT breach, the SPI self-employment + £20,000–30,000 band, sits at +26.0 % on the control and +25.3 % on the candidate: a main-side condition. + +**Defect found on main during this round.** The national calibration tool refused both twins on the three +UC element measure exclusions microcosm#882 authored under their metric names (`dwp/uc/elements/carer`, +`childcare`, `housing`); the registry names specs by reference id, so the entries matched nothing and +`tools/calibrate_uk_national_dataset.py` had refused every national calibration since 15 September. The +branch renamed the entries for its own runs (pre-rebase commit 523f8f5b) and the control run used a +corrected copy of the register through `--measure-exclusions`, so the two solves excluded the same +targets. PR #937 carried the fix to main first (the housing entry keyed by reference id, the carer and +childcare rows retired on the 2.98.0 twin evidence), so after the rebase this branch no longer touches +`calibration_measure_exclusions.json`. + +## Part D — split plus tilt (session 3, María's ruling on the 16–24 rows) + +Two changes to the rake, each measured on its own spine build (`candidate-tilt`, `candidate-tilt2` in the +acceptance directory) against the unchanged control: tables `docs/evidence/uk-cgt-725/*-tilt.csv` and +`*-carry.csv`, receipts `receipt-tilt.json` and `receipt-carry.json`, calibration comparisons +`calibration-comparison-tilt.json` / `target-comparison-tilt.csv` and the plain-named files for the final head. + +**Why the 16–24 rows failed.** The candidate frame holds 271 gainer rows aged 16–24, 265 of them in the +lowest taxable-income band, weighing about 640 people each, with no donor carriers among them. Pooled with +the 2,015 rows aged 25–34, whose incomes and priors are larger, they ranked at the bottom of every cell walk: +two rows ended liable, 1,469 people against 4,000 published, with gains below £24,000. Table 3's lowest +income column has a mean gain of about £84,000 against the published 16–24 mean of £80,000, so the count +margin alone carries most of the 16–24 gains once the group stands on its own. + +**Split plus tilt (commit b88190e8).** The rake now runs at seven age groups (16, 25, 35, 45, 55, 65, 75) +and holds Table 6 gains by age as one linear constraint per group: an exponential tilt of the group's cells, +lambda solved by bisection, that keeps the group's count, alternated with the three count margins with the +joint applied last. The 0–15 band is spread across the groups by the normalisation rather than folded into +the youngest. On the full spine the rake meets every count and gains margin to 3e-10 in nine rounds; the +cumulative tilts run from −6.0 (25–34, target mean £92k against the frame's mix) to +0.57 (75+). + +- *Design weights.* 16–24 reach 4,591 liable people and £0.30bn (published 4,000 / £0.32bn), so the rows + are attainable. But the walked total rose to 562,087 (+2.0 %) and the £5m+ band to 4,950 people against + 2,660 raked: with 168 cells per income band most allotments sit below one carrier's weight, every cell + walk rounds by up to a whole person, and the pooled walk can only add, so the truncation of 168 + independent roundings compounded upward, worst where the heaviest donor rows sit (income band £125,140: + +5,200 on 34,000). Gains by age at design weights swung the other way from round 1 (75–84 £21.9bn against + £11.7bn; 65–74 £18.8bn against £24.3bn): the top two bands hold about 8,000 people on rows weighing + 400–900, so which age cells receive those rows is a lottery of a dozen draws however exact the targets. +- *Calibration.* All 77 CGT rows inside the 25 % fence for the first time, 71 within 10 %: the 16–24 rows + fit (gains −1.8 %, tax +0.8 %, count +0.2 %), every age-band gains row within 3 % except 25–34 (−10.1 %), + gains total −0.3 %, taxpayers −0.2 %, every size-band, region and residential row within 1.2 %; the + liability rows carry the BADR bias described in Part C (total +11.6 %; 35–74 +7 to +15 %). Loss 0.0104 + (control 0.0112), ESS 10,771 (10,542), 538 non-CGT rows within 10 % (540); two non-CGT rows crossed 10 % + for the worse (SPI self-employment £50–70k +9.7 → +12.6 %; OBR ESA −9.8 → −10.0 %) and the one non-CGT + 25 % breach on main (self-employment £20–30k, +26.0 %) came inside the fence at +24.7 %. The terminal + battery passed and staged an artifact. + +**Carry the rounding (commit 93c5b185).** Pass 1 now carries each cell walk's signed rounding error, per +gain band, into the next cell's boundaries (error diffusion), so each gain band's walked total within an +income band stays within one person's weight of its raked total; only rounding is carried, a cell short of +support still scales down and releases its structural shortfall to the pooled walk, and the receipt records +the carry left at the end of every income band. + +- *Design weights.* Liable taxpayers 557,420 (+1.2 %; the largest carry left at the end of an income band + is 1,930 people, a donor row's weight, in a band whose remaining allotments could not absorb it), liable + gains £114.1bn (published £119.3bn), pass 1 places 555,560 and the pooled walk 1,860. Size bands: every + band's count within 3 % of Table 2.1a except £250k (+3 %), £1m (12,546 against 9,000), £2m (+27 %) and + £5m+ (3,220 against 3,000; £41.1bn against £48.5bn because the overshoot sits in the lower-income £5m+ + cells whose means are smaller). Age counts within 2,600 of Table 6 for every adult band (16–24 5,159 + against 4,000); age gains still lumpy at design weights (35–44 £18.3bn against £11.8bn; 65–74 £16.1bn + against £24.3bn; 65+ hold 27.7 % of gains against 31.8 %, control 29.0 %). Residential 202,673 taxpayers + against 202,630 on 324 rows, £12.93bn against £12.24bn (inside the gate's three-sigma envelope). +- *Calibration.* Again all 77 CGT rows inside the fence, 71 within 10 %: 16–24 gains −3.9 %, tax +0.8 %, + count −0.1 %; taxpayers −0.1 %; nothing outside CGT moved (540 non-CGT rows within 10 % on both sides, no + fence crossed either way). But the gains total slipped to −2.9 % and a few rows sit around ±10 %: the £5m+ + band +11.1 % on taxpayers and −7.2 % on gains, 65–74 gains −12.2 %, South East gains −13.0 %, 25–34 gains + −9.3 %; liability +8.7 %. The terminal battery blocked at `uk_target_fit` on the main-side SPI + self-employment £20–30k row (+25.5 %; +24.7 % on the tilt-only run, +26.0 % on the control), not on a CGT + row. The £5m+ receipt explains the gains slip: the (£200k+, £5m+) cell, the largest in the table, lands + 2,060 people against 1,968 raked, yet the band carries £41.1bn against £48.1bn planned, because the + stratified draw gave equal quantile strata to unequally weighted rows — the 100-weight donors hold the top + strata and the 400–900-weight clone rows the bottom ones, so the plan's *weighted* mean drifts below the + published mean however exactly the unweighted strata average to it. + +**Weight-proportional strata (commit 9bd4d8ce).** Each plan's strata now partition +(0, 1) in proportion to household weight along the prior-gain order; the open band takes each stratum's +conditional mean, so its weighted mean is the published mean exactly, and a bounded band takes the quantile +inside its stratum. Rank order is unchanged. + +- *Design weights* (`candidate-tilt3`; the walks are byte-identical to the carry rung, only the amounts + move). Every plan's weighted mean now sits on its published mean, so the band gains follow the band counts: + the £5m+ band's 3,220 people carry £57.3bn (published 3,000 / £48.5bn), the £1m band's 12,546 carry + £16.2bn (9,000 / £12.8bn), and liable gains total £134.3bn against £119.3bn, which is the count overshoot + of the top three bands made visible rather than hidden by light rows holding the top strata. Bands from + £0 to £500k sit within 1 % on gains as well as counts. 65+ hold 32.4 % of gains (published 31.8 %; control + 29.0 %), while within the older groups the lottery of which cells received the heavy top-band rows still + shows (75–84 £24.7bn against £11.7bn; 65–74 £16.6bn against £24.3bn; 35–44 £21.9bn against £11.8bn). + Residential 202,679 taxpayers against 202,630 on 325 rows, £12.71bn against £12.24bn. +- *Three disclosures the receipts now carry.* The open band's cell means are ratios of two rounded publisher + numbers (2,000 taxpayers over £37,479m gives the £18.7m the £200k+ cell draws on), clamped into the band + and replaced by the band-total mean where the count is suppressed: derived, not published. The Table 8a + residential totals are restated on the individuals basis by the Table 8b share taken on the UK Property + service channel and applied to the whole total, the Self Assessment-only channel included, which assumes + that channel's trust share equals the service channel's: a ruling, recorded in the PR's rulings comment. + The Table 5 region rows apply one national individuals share to every area; Table 5 does not publish the + split by area, so areas where trusts are over-represented are overstated and the rest understated by an + amount the publication cannot bound. +- *Calibration* (`calibration-comparison.json`, `target-comparison.csv`; the PR head). All 77 CGT rows + inside the fence, 74 within 10 %, 69 within 5 %, 63 within 1 %. The 16–24 rows fit: gains −4.5 %, tax + +0.1 %, count −0.05 %. Gains total −1.5 % (control −9.5 %), taxpayers −0.2 %. The £5m+ band now fits both + ways, count +0.9 % and gains −3.8 %, where the carry rung had to trade +11 % against −7 %; every size-band + row is within 4 %, every region row within 6.3 % (South East gains), every age-count row within 0.3 %, the + age-gains rows within 9 % (35–44 −9.0 %, 25–34 −8.4 %; 65–74 −0.2 %, 75–84 −0.9 %), both residential rows + within 0.4 %. Liability +10.3 % and the age tax rows +7 to +15 % for 45–74 carry the BADR bias (Part C). + Nothing outside CGT moved: 540 non-CGT rows within 10 % on both sides, no row crossed a fence either way, + loss 0.0103 against 0.0112, ESS 10,530 against 10,542. The terminal battery blocked at `uk_target_fit` on + the same main-side row as the control (SPI self-employment £20–30k, +25.5 % against +26.0 %), not on a CGT + row. + + +## Part E — verdict + +Against the control on main, on the PR head (9bd4d8ce): + +- Age: 65+ hold 38.6 % of liable taxpayers on the design weights (23.1 % on main; Table 6 38.5 %) and 32.4 % + of gains (29.0 % on main; 31.8 % published), because the rake now holds Table 6 gains by age as well as + its counts; after calibration every age-count row is within 0.3 % and every age-gains row within 9 %. +- The 16–24 rows, which breached the fence at −70.6 % and −79.6 % on the count-only rake, fit at −4.5 % and + +0.1 % once 16–24 is its own rake group. +- Size of gain: every band's count within 3 % of Table 2.1a on the design weights below £1m, every band's + count and gains within 4 % after calibration; the £5m+ band holds 3,220 people and, with weight-proportional + strata, the published mean, so count and gains fit together. +- Geography: every region row within 6.3 % after calibration (12 areas, 24 rows); residential property + 202,679 taxpayers and £12.71bn on the design weights, both rows within 0.4 % after. +- The national gains total, 9.5 % short on main against three aggregates, sits at −1.5 % with 74 finer rows + bound; nothing outside CGT moved in either direction. + +What did not improve and why: the liability total (+10.3 %) and the age tax rows for 45–74, which carry the +engine's blended-rate treatment of BADR gains (PolicyEngine/policyengine-uk#1858 is the engine repair and a +BADR imputation on the spine the data one); the 25–34 and 35–44 gains rows around −9 %, and the lumpy age +profile of the top bands on the design weights, which come from about 8,000 people in the top two bands being +carried by rows weighing 400–900 each so that a dozen draws decide which age cells hold them (a follow-up +worth measuring: lighter top-band rows, either more donors per band or a pooled top-band walk); and the +asset-type composition, which is diagnostic only. + +Six repairs came out of the measurement rounds (fallback netting, systematic rounding, stratified draws, +split plus tilt, rounding carry, weight-proportional strata); each was found by a receipt this note quotes, +and the unit tests could not have found them because they depend on the frame's weight granularity. diff --git a/experiments/build_725_calibration_comparison.py b/experiments/build_725_calibration_comparison.py new file mode 100644 index 0000000000..83764f6fc6 --- /dev/null +++ b/experiments/build_725_calibration_comparison.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python +"""Compare twin national calibrations on the CGT families and everything else (microcosm#725). + +Reads two `calibration_diagnostics.json` files and writes the target-level +comparison the evidence note quotes: every CGT-family target with its target +value, final estimate and relative error on each side where it exists, and a +summary of the non-CGT surface (within 10 % / 25 % counts, targets that cross +either fence on one side only). + + .venv/bin/python experiments/build_725_calibration_comparison.py \ + --control --candidate --out docs/evidence/uk-cgt-725 +""" + +from __future__ import annotations + +import argparse +import csv +import json +from pathlib import Path + + +def _load(path: Path) -> dict: + return json.loads(path.read_text(encoding="utf-8")) + + +def _is_cgt(name: str) -> bool: + lowered = name.lower() + return "cgt" in lowered or "capital_gains" in lowered + + +def _headline(diag: dict) -> dict[str, object]: + targets = diag["targets"] + non_cgt = [t for t in targets if not _is_cgt(t["name"])] + cgt = [t for t in targets if _is_cgt(t["name"])] + return { + "targets": len(targets), + "cgt_targets": len(cgt), + "skipped": len(diag.get("skipped", [])), + "initial_loss": diag["initial_loss"], + "final_loss": diag["final_loss"], + "fraction_within_10pct": diag["fraction_within_10pct"], + "effective_sample_size": diag["effective_sample_size"], + "realized_max_weight_ratio": diag["realized_max_weight_ratio"], + "top_1pct_weight_share": diag.get("top_1pct_weight_share"), + "non_cgt_within_10pct": sum(abs(t["relative_error"]) <= 0.10 for t in non_cgt), + "non_cgt_outside_25pct": sorted( + t["name"] for t in non_cgt if abs(t["relative_error"]) > 0.25 + ), + "cgt_within_10pct": sum(abs(t["relative_error"]) <= 0.10 for t in cgt), + "cgt_within_25pct": sum(abs(t["relative_error"]) <= 0.25 for t in cgt), + "cgt_outside_25pct": sorted( + t["name"] for t in cgt if abs(t["relative_error"]) > 0.25 + ), + } + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--control", type=Path, required=True) + parser.add_argument("--candidate", type=Path, required=True) + parser.add_argument("--out", type=Path, required=True) + args = parser.parse_args() + args.out.mkdir(parents=True, exist_ok=True) + control, candidate = _load(args.control), _load(args.candidate) + by_name = { + "control": {t["name"]: t for t in control["targets"]}, + "candidate": {t["name"]: t for t in candidate["targets"]}, + } + names = sorted(set(by_name["control"]) | set(by_name["candidate"])) + rows = [] + for name in names: + row = {"name": name, "family": None, "cgt": _is_cgt(name)} + for side in ("control", "candidate"): + t = by_name[side].get(name) + row[f"{side}_target"] = t["target"] if t else None + row[f"{side}_estimate"] = t["final_estimate"] if t else None + row[f"{side}_relative_error"] = t["relative_error"] if t else None + if t: + row["family"] = t.get("registry", {}).get("family") + rows.append(row) + with (args.out / "target-comparison.csv").open( + "w", newline="", encoding="utf-8" + ) as handle: + writer = csv.DictWriter(handle, fieldnames=list(rows[0])) + writer.writeheader() + writer.writerows(rows) + shared = [ + r + for r in rows + if r["control_relative_error"] is not None + and r["candidate_relative_error"] is not None + and not r["cgt"] + ] + crossed_10 = { + "worse": sorted( + r["name"] + for r in shared + if abs(r["control_relative_error"]) + <= 0.10 + < abs(r["candidate_relative_error"]) + ), + "better": sorted( + r["name"] + for r in shared + if abs(r["candidate_relative_error"]) + <= 0.10 + < abs(r["control_relative_error"]) + ), + } + crossed_25 = { + "worse": sorted( + r["name"] + for r in shared + if abs(r["control_relative_error"]) + <= 0.25 + < abs(r["candidate_relative_error"]) + ), + "better": sorted( + r["name"] + for r in shared + if abs(r["candidate_relative_error"]) + <= 0.25 + < abs(r["control_relative_error"]) + ), + } + summary = { + "control": _headline(control), + "candidate": _headline(candidate), + "non_cgt_shared_targets": len(shared), + "non_cgt_crossed_10pct": crossed_10, + "non_cgt_crossed_25pct": crossed_25, + "cgt_rows": [ + { + k: r[k] + for k in ( + "name", + "control_target", + "control_estimate", + "control_relative_error", + "candidate_target", + "candidate_estimate", + "candidate_relative_error", + ) + } + for r in rows + if r["cgt"] + ], + } + (args.out / "calibration-comparison.json").write_text( + json.dumps(summary, indent=2, default=float) + "\n", encoding="utf-8" + ) + for side in ("control", "candidate"): + print( + side, + json.dumps( + {k: v for k, v in summary[side].items() if not isinstance(v, list)}, + indent=1, + ), + ) + print("non-CGT crossed 10%:", crossed_10) + print("non-CGT crossed 25%:", crossed_25) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/experiments/build_725_cgt_distribution_receipt.py b/experiments/build_725_cgt_distribution_receipt.py new file mode 100644 index 0000000000..eaee48b093 --- /dev/null +++ b/experiments/build_725_cgt_distribution_receipt.py @@ -0,0 +1,291 @@ +#!/usr/bin/env python +"""Compare twin UK spines on the CGT distribution HMRC publishes (microcosm#725). + +Reads two spine H5 files (a control built on main and a candidate built on the +#725 branch) and their build sidecars, measures the liable-gainer population +(net gains above the 2024 annual exempt amount) by size of gain, age band, +country/region and, where the candidate carries them, asset type, and writes +the comparison tables against the published 2024-25 rows vendored in the +country package. Nothing here is a gate; it is the evidence note's input. + + .venv/bin/python experiments/build_725_cgt_distribution_receipt.py \ + --control --candidate --out docs/evidence/uk-cgt-725 +""" + +from __future__ import annotations + +import argparse +import json +from pathlib import Path + +import numpy as np +import pandas as pd + +from microcosm.build.uk_runtime.cgt_asset_type import ( + CGT_ASSET_TYPE_COLUMN, + CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES, + CGT_ASSET_TYPE_RESIDENTIAL, + load_hmrc_cgt_asset_type_facts, +) +from microcosm.build.uk_runtime.hmrc_capital_gains import ( + HMRC_CGT_GAIN_BAND_LOWER_BOUNDS, + HMRC_CGT_SIZE_BAND_LOWER_BOUNDS, + load_hmrc_cgt_conditioning_facts, +) + +AEA_2024 = 3_000.0 +TOP_BAND = 2_000_000.0 + + +def _frame(path: Path) -> pd.DataFrame: + person = pd.read_hdf(path, "/person") + household = pd.read_hdf(path, "/household") + weights = pd.Series( + household["household_weight"].to_numpy(), index=household["household_id"] + ) + regions = pd.Series( + household["region"].astype(str).to_numpy(), index=household["household_id"] + ) + out = pd.DataFrame( + { + "gains": pd.to_numeric(person["capital_gains"], errors="raise").to_numpy( + dtype=float + ), + "age": pd.to_numeric(person["age"], errors="raise").to_numpy(dtype=float), + "weight": person["person_household_id"].map(weights).to_numpy(dtype=float), + "region": person["person_household_id"].map(regions).to_numpy(), + } + ) + if CGT_ASSET_TYPE_COLUMN in person.columns: + out["asset_type"] = person[CGT_ASSET_TYPE_COLUMN].astype(str).to_numpy() + return out + + +def _band(values: np.ndarray, bounds: tuple[int, ...]) -> np.ndarray: + return np.asarray(bounds)[np.digitize(values, np.asarray(bounds)[1:])] + + +def _by(frame: pd.DataFrame, key: np.ndarray, labels) -> pd.DataFrame: + liable = frame[frame["gains"] > AEA_2024] + key = key[frame["gains"].to_numpy() > AEA_2024] + rows = [] + for label in labels: + mask = key == label + rows.append( + { + "key": label, + "people": float(liable["weight"][mask].sum()), + "gains": float((liable["weight"][mask] * liable["gains"][mask]).sum()), + } + ) + return pd.DataFrame(rows).set_index("key") + + +def _summaries(frame: pd.DataFrame) -> dict[str, pd.DataFrame]: + conditioning = load_hmrc_cgt_conditioning_facts() + gains = frame["gains"].to_numpy() + tables: dict[str, pd.DataFrame] = {} + size = _by( + frame, + _band(gains, HMRC_CGT_SIZE_BAND_LOWER_BOUNDS), + HMRC_CGT_SIZE_BAND_LOWER_BOUNDS, + ) + size["published_people"] = [conditioning.size_band(b).taxpayers for b in size.index] + size["published_gains"] = [conditioning.size_band(b).gains for b in size.index] + tables["size_bands"] = size + age_bounds = tuple(b.lower_bound for b in conditioning.age_bands) + age = _by(frame, _band(frame["age"].to_numpy(), age_bounds), age_bounds) + age["published_people"] = [b.taxpayers for b in conditioning.age_bands] + age["published_gains"] = [b.gains for b in conditioning.age_bands] + tables["age_bands"] = age + region_names = [r.region for r in conditioning.regions] + region = _by(frame, frame["region"].to_numpy(), region_names) + share_people = conditioning.table1.individuals_share("taxpayers") + share_gains = conditioning.table1.individuals_share("gains") + region["published_people_individuals_basis"] = [ + r.taxpayers * share_people for r in conditioning.regions + ] + region["published_gains_individuals_basis"] = [ + r.gains * share_gains for r in conditioning.regions + ] + tables["regions"] = region + # The #725 joint: age band x Table 3 gain band, people and gains. + liable = frame[gains > AEA_2024] + age_key = _band(liable["age"].to_numpy(), age_bounds) + gain_key = _band(liable["gains"].to_numpy(), HMRC_CGT_GAIN_BAND_LOWER_BOUNDS) + joint = [] + for a in age_bounds: + for g in HMRC_CGT_GAIN_BAND_LOWER_BOUNDS: + mask = (age_key == a) & (gain_key == g) + joint.append( + { + "age_lower": a, + "gain_lower": g, + "people": float(liable["weight"][mask].sum()), + "gains": float( + (liable["weight"][mask] * liable["gains"][mask]).sum() + ), + } + ) + tables["age_by_gain_band"] = pd.DataFrame(joint) + return tables + + +def _headline(frame: pd.DataFrame) -> dict[str, float]: + liable = frame[frame["gains"] > AEA_2024] + top = liable[liable["gains"] >= TOP_BAND] + older = liable["age"] >= 65 + older_top = top["age"] >= 65 + return { + "liable_taxpayers": float(liable["weight"].sum()), + "liable_gains": float((liable["weight"] * liable["gains"]).sum()), + "share_65_plus_of_taxpayers": float( + liable["weight"][older].sum() / liable["weight"].sum() + ), + "share_65_plus_of_gains": float( + (liable["weight"] * liable["gains"])[older].sum() + / (liable["weight"] * liable["gains"]).sum() + ), + "share_65_plus_of_2m_plus_gainers": float( + top["weight"][older_top].sum() / top["weight"].sum() + ) + if len(top) + else float("nan"), + "share_65_plus_of_2m_plus_gains": float( + (top["weight"] * top["gains"])[older_top].sum() + / (top["weight"] * top["gains"]).sum() + ) + if len(top) + else float("nan"), + "top_2m_plus_taxpayers": float(top["weight"].sum()), + "top_2m_plus_gains": float((top["weight"] * top["gains"]).sum()), + } + + +def _asset_types(frame: pd.DataFrame) -> pd.DataFrame | None: + if "asset_type" not in frame.columns: + return None + facts = load_hmrc_cgt_asset_type_facts() + liable = frame[frame["gains"] > AEA_2024] + rows = [] + for name in (CGT_ASSET_TYPE_RESIDENTIAL, *CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES): + mask = liable["asset_type"] == name + rows.append( + { + "asset_type": name, + "people": float(liable["weight"][mask].sum()), + "gains": float((liable["weight"][mask] * liable["gains"][mask]).sum()), + } + ) + table = pd.DataFrame(rows).set_index("asset_type") + table.loc[CGT_ASSET_TYPE_RESIDENTIAL, "published_people_individuals_basis"] = ( + facts.residential_taxpayers_individuals_basis + ) + table.loc[CGT_ASSET_TYPE_RESIDENTIAL, "published_gains_individuals_basis"] = ( + facts.residential_gains_individuals_basis + ) + shares = facts.non_residential_gains_shares() + non_res = table.loc[list(CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES), "gains"].sum() + for name in CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES: + table.loc[name, "achieved_gains_share"] = ( + table.loc[name, "gains"] / non_res if non_res else float("nan") + ) + table.loc[name, "table7_gains_share"] = shares[name] + return table + + +def _provenance(h5: Path) -> dict[str, object]: + """What the twin was built from: commit, digest, seeds, feed pin, sampling. + + The build launcher writes ``TREE_HEAD`` next to the H5 and the spine + tool writes the ``.build.json`` sidecar and the ``.h5.sha256`` digest; + the Chronicle pin is the one the CGT conditioning resource records + (absent on a control built before the vendored resource existed). + """ + + provenance: dict[str, object] = {"h5": h5.name} + head = h5.parent / "TREE_HEAD" + if head.exists(): + provenance["build_commit"] = head.read_text(encoding="utf-8").strip() + digest = h5.with_suffix(".h5.sha256") + if digest.exists(): + provenance["h5_sha256"] = digest.read_text(encoding="utf-8").split()[0] + sidecar = h5.with_suffix(".build.json") + if sidecar.exists(): + payload = json.loads(sidecar.read_text(encoding="utf-8")) + for key in ( + "time_period", + "declared_seeds", + "sampling", + "stochastic_contract_sha256", + "uk_frame_content_identity", + "source_vintages", + ): + if key in payload: + provenance[key] = payload[key] + conditioning = ( + (payload.get("stage_evidence") or {}) + .get("hmrc_cgt_gains_spine", {}) + .get("allocation", {}) + .get("conditioning") + ) + if isinstance(conditioning, dict): + provenance["chronicle_feed"] = { + key: conditioning.get(key) + for key in ("source_commit", "resource", "resource_sha256") + } + return provenance + + +def _stage_evidence(sidecar: Path) -> dict[str, object]: + if not sidecar.exists(): + return {} + payload = json.loads(sidecar.read_text(encoding="utf-8")) + evidence = payload.get("stage_evidence") or {} + return { + stage: evidence[stage] + for stage in ("hmrc_cgt_gains_spine", "hmrc_cgt_asset_type_spine") + if stage in evidence + } + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--control", type=Path, required=True) + parser.add_argument("--candidate", type=Path, required=True) + parser.add_argument("--out", type=Path, required=True) + parser.add_argument("--label", default="") + args = parser.parse_args() + args.out.mkdir(parents=True, exist_ok=True) + frames = {"control": _frame(args.control), "candidate": _frame(args.candidate)} + receipt: dict[str, object] = { + "label": args.label, + # File names only: the provenance blocks below carry commit, digest, + # seeds and pin, and a home-directory path is not evidence. + "inputs": { + k: v.name + for k, v in (("control", args.control), ("candidate", args.candidate)) + }, + } + for name, frame in frames.items(): + receipt[f"{name}_provenance"] = _provenance(args.__dict__[name]) + receipt[f"{name}_headline"] = _headline(frame) + tables = _summaries(frame) + for table_name, table in tables.items(): + table.to_csv(args.out / f"{name}-{table_name}{args.label}.csv") + assets = _asset_types(frame) + if assets is not None: + assets.to_csv(args.out / f"{name}-asset-types{args.label}.csv") + receipt[f"{name}_stage_evidence"] = _stage_evidence( + args.__dict__[name].with_suffix(".build.json") + ) + (args.out / f"receipt{args.label}.json").write_text( + json.dumps(receipt, indent=2, default=float) + "\n", encoding="utf-8" + ) + for name in frames: + print(name, json.dumps(receipt[f"{name}_headline"], indent=1)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/microcosm-build/src/microcosm/build/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/ledger_targets.py index 539eb29b34..1d4d899b66 100644 --- a/packages/microcosm-build/src/microcosm/build/ledger_targets.py +++ b/packages/microcosm-build/src/microcosm/build/ledger_targets.py @@ -47,6 +47,7 @@ "calendar_year_average", "latest_plateau", "count_x_mean", + "scaled_by_ratio", *MONTHLY_WINDOW_OPERATIONS, ) ) @@ -58,12 +59,26 @@ "calendar_year_average", "latest_plateau", "count_x_mean", + "scaled_by_ratio", *MONTHLY_WINDOW_OPERATIONS, ) ) EXACT_PERIOD_VALUE_OPERATIONS = frozenset( - ("identity", "sum", "difference", "linear_combination", "count_x_mean") + ( + "identity", + "sum", + "difference", + "linear_combination", + "count_x_mean", + "scaled_by_ratio", + ) ) +#: Ordered operand roles of ``scaled_by_ratio``: the published cell the +#: reference selects, then the two national facts whose quotient translates +#: it (a subset share of the publisher's universe, so the ratio lies in +#: (0, 1]). The base operand carries no selector of its own; the other two +#: are complete selectors, inheriting only the source name and period pins. +SCALED_BY_RATIO_OPERAND_ROLES = ("base", "numerator", "denominator") #: Keys of a ``linear_combination`` operand that are not selector overlays. LINEAR_COMBINATION_OPERAND_KEYS = frozenset( ("weight", "expected_member_count", "label", "dimension_values") @@ -221,6 +236,8 @@ def __post_init__(self) -> None: ) if self.value_operation == "linear_combination": _validate_linear_combination_operands(self.name, self.value_operands) + if self.value_operation == "scaled_by_ratio": + _validate_scaled_by_ratio_operands(self.name, self.value_operands) if self.assertion_policy not in ALLOWED_ASSERTION_POLICIES: raise ValueError( f"LedgerTargetReference {self.name!r}: unsupported " @@ -719,6 +736,7 @@ def target_spec_from_ledger_reference( numeric_values.append(_numeric_fact_value(member, reference)) _validate_fact_aggregation(member, reference) + value_metadata: dict[str, str] = {} if reference.value_operation in MONTHLY_WINDOW_OPERATIONS: numeric_value = sum(numeric_values) / len(_declared_source_months(reference)) elif reference.value_operation == "calendar_year_average": @@ -736,6 +754,10 @@ def target_spec_from_ledger_reference( f"Ledger target reference {reference.name!r}: difference " f"produced invalid value {numeric_value!r}." ) + elif reference.value_operation == "scaled_by_ratio": + numeric_value, value_metadata = _scaled_by_ratio_value( + reference, numeric_values + ) elif reference.value_operation == "linear_combination": weights = _linear_combination_weights(reference, facts) numeric_value = sum( @@ -753,7 +775,15 @@ def target_spec_from_ledger_reference( facts, operation=reference.value_operation, ) - publication_metadata = {} + # A ratio-scaled cell keeps the base cell's identity: the national + # numerator and denominator translate its value, they do not relocate it, + # so the hierarchy and label read the base alone. + identity_facts = ( + (representative_fact,) + if reference.value_operation == "scaled_by_ratio" + else facts + ) + publication_metadata = dict(value_metadata) if reference.value_operation in MONTHLY_WINDOW_OPERATIONS: # The window guard has proved these identities common to every member. publication_metadata = { @@ -803,18 +833,59 @@ def target_spec_from_ledger_reference( ), **_multi_fact_reference_metadata(facts), **publication_metadata, - **_diagnostic_target_label_metadata(facts, target_period=period), + **_diagnostic_target_label_metadata(identity_facts, target_period=period), "ledger_resolved_assertion": _fact_assertion(representative_fact), **_reference_metadata(reference), }, hierarchy=_calibration_hierarchy( - facts, + identity_facts, reference=reference, target_period=period, ), ) +def _scaled_by_ratio_value( + reference: LedgerTargetReference, + numeric_values: list[float], +) -> tuple[float, dict[str, str]]: + """Translate a published cell by the quotient of two facts. + + The result is ``base * numerator / denominator`` where the quotient must + be a finite share in ``(0, 1]``: the operation exists to restate a cell + published for a wider universe (all CGT taxpayers including trusts) in + the narrower universe the model measures (individuals), never to + inflate it. Every input and the ratio are recorded on the spec. + """ + + base, numerator, denominator = numeric_values + if not math.isfinite(denominator) or denominator <= 0: + raise ValueError( + f"Ledger target reference {reference.name!r}: scaled_by_ratio " + f"denominator {denominator!r} must be a finite positive value." + ) + ratio = numerator / denominator + if not math.isfinite(ratio) or ratio <= 0 or ratio > 1: + raise ValueError( + f"Ledger target reference {reference.name!r}: scaled_by_ratio " + f"produced ratio {ratio!r} from numerator {numerator!r} and " + f"denominator {denominator!r}; a translated cell is a subset " + "share of the published cell, so the ratio must lie in (0, 1]." + ) + value = base * ratio + if not math.isfinite(value) or value < 0: + raise ValueError( + f"Ledger target reference {reference.name!r}: scaled_by_ratio " + f"produced invalid value {value!r}." + ) + return value, { + "ledger_value_base": repr(float(base)), + "ledger_value_numerator": repr(float(numerator)), + "ledger_value_denominator": repr(float(denominator)), + "ledger_value_ratio": repr(float(ratio)), + } + + def _value_representative_fact( facts: tuple[object, ...], *, @@ -822,6 +893,8 @@ def _value_representative_fact( ) -> object: if len(facts) == 1 or operation not in MULTI_FACT_VALUE_OPERATIONS: return facts[0] + if operation == "scaled_by_ratio": + return facts[0] return max(enumerate(facts), key=lambda item: (_period_key(item[1]), item[0]))[1] @@ -1609,6 +1682,10 @@ def _resolve_reference_fact( return _resolve_sum_reference_facts(reference, eligible_matches) if reference.value_operation == "difference" and eligible_matches: return _resolve_difference_reference_facts(reference, eligible_matches) + if reference.value_operation == "scaled_by_ratio" and eligible_matches: + return _resolve_scaled_by_ratio_reference_facts( + reference, eligible_matches, fact_index.facts + ) if reference.value_operation == "linear_combination" and eligible_matches: return _resolve_linear_combination_reference_facts( reference, eligible_matches @@ -1750,6 +1827,131 @@ def _resolve_difference_reference_facts( return tuple(resolved) +#: Base-selector pins a ``scaled_by_ratio`` operand inherits unless it +#: overrides them: the publisher and the observation period, so the quotient +#: is taken from the same release and year as the cell it translates. +_SCALED_BY_RATIO_INHERITED_SELECTOR_KEYS = ( + "source_name", + "period_type", + "period_value", + "assertion", +) + + +def _validate_scaled_by_ratio_operands( + name: str, operands: tuple[Mapping[str, object], ...] +) -> None: + roles = [ + str(operand.get("role")) if isinstance(operand, Mapping) else "" + for operand in operands + ] + if roles != list(SCALED_BY_RATIO_OPERAND_ROLES): + raise ValueError( + f"LedgerTargetReference {name!r}: scaled_by_ratio requires exactly " + f"ordered {'/'.join(SCALED_BY_RATIO_OPERAND_ROLES)} operands, got " + f"{roles!r}." + ) + base_overrides = {key for key in operands[0] if key != "role"} + if base_overrides: + raise ValueError( + f"LedgerTargetReference {name!r}: the scaled_by_ratio base operand " + "is the reference's own selector and takes no overrides, got " + f"{sorted(base_overrides)!r}." + ) + for operand in operands[1:]: + selector = {key for key in operand if key != "role"} + if not selector: + raise ValueError( + f"LedgerTargetReference {name!r}: scaled_by_ratio operand " + f"{operand.get('role')!r} needs at least one selector field." + ) + + +def _scaled_by_ratio_operand_selectors( + reference: LedgerTargetReference, +) -> tuple[Mapping[str, object], ...]: + """The numerator and denominator selectors, with the base pins inherited.""" + + inherited = { + key: reference.ledger_selector[key] + for key in _SCALED_BY_RATIO_INHERITED_SELECTOR_KEYS + if key in reference.ledger_selector + } + return tuple( + { + **inherited, + **{str(key): value for key, value in operand.items() if key != "role"}, + } + for operand in reference.value_operands[1:] + ) + + +def reference_fact_selectors( + reference: LedgerTargetReference, +) -> tuple[Mapping[str, object], ...]: + """Every selector a reference resolves facts through. + + The reference's own selector first; a ``scaled_by_ratio`` reference adds + its numerator and denominator selectors, which lie outside the base cell + (national facts for a region-pinned cell). Callers that pre-filter the + facts they hand to :func:`compile_ledger_target_references` must keep a + fact matching any of these, or the quotient can never resolve. + """ + + selectors: list[Mapping[str, object]] = [] + if reference.ledger_selector: + selectors.append(dict(reference.ledger_selector)) + if reference.value_operation == "scaled_by_ratio": + selectors.extend(_scaled_by_ratio_operand_selectors(reference)) + return tuple(selectors) + + +def _resolve_scaled_by_ratio_reference_facts( + reference: LedgerTargetReference, + eligible_matches: list[object], + facts: tuple[object, ...], +) -> tuple[object, ...]: + """Resolve the base cell from the selector and the quotient from the feed. + + The numerator and denominator are national facts outside the cell's own + selector (a region-pinned selector never matches a UK-level row), so they + are matched over every fact the compile was given, with the base + selector's source and period pins inherited unless the operand overrides + them. All three must resolve exactly once at the same period. + """ + + base = _latest_period_selector_match(reference, eligible_matches) + if base is None: + raise ValueError( + f"Ledger target reference {reference.name!r}: scaled_by_ratio base " + f"cell did not resolve exactly once ({len(eligible_matches)} " + "eligible matches)." + ) + resolved: list[object] = [base] + for operand, selector in zip( + reference.value_operands[1:], + _scaled_by_ratio_operand_selectors(reference), + strict=True, + ): + matches = [fact for fact in facts if _fact_matches_selector(fact, selector)] + eligible = _eligible_selector_matches(reference, matches) + match = _latest_period_selector_match(reference, eligible) + if match is None: + raise ValueError( + f"Ledger target reference {reference.name!r}: scaled_by_ratio " + f"operand {operand.get('role')!r} did not resolve exactly once " + f"({len(eligible)} eligible matches)." + ) + resolved.append(match) + periods = {_period_key(fact) for fact in resolved} + if len(periods) != 1: + raise ValueError( + f"Ledger target reference {reference.name!r}: scaled_by_ratio " + "operands must resolve at the same period as the base cell." + ) + return tuple(resolved) + + def _validate_linear_combination_operands( name: str, operands: tuple[Mapping[str, object], ...] ) -> None: @@ -2847,6 +3049,8 @@ def _reference_metadata(reference: LedgerTargetReference) -> dict[str, str]: ) if reference.value_operation == "difference": metadata["ledger_value_formula"] = "minuend - subtrahend" + if reference.value_operation == "scaled_by_ratio": + metadata["ledger_value_formula"] = "base * numerator / denominator" if reference.value_operation == "linear_combination": metadata["ledger_value_formula"] = _linear_combination_formula(reference) if reference.metadata.get("composed_from_level"): @@ -3252,12 +3456,62 @@ def _ledger_metadata(fact: object, *, fact_key: str) -> dict[str, str]: constraint_rows = _constraint_rows(fact) if constraint_rows: metadata["ledger_universe_constraint_count"] = str(len(constraint_rows)) - for key, value in sorted(_dimensions(fact).items()): + dimensions = _dimensions(fact) + for key, value in sorted(dimensions.items()): if value is not None: metadata[f"ledger_filter_{key}"] = str(value) + for key, value in sorted(_constraint_bound_filters(fact, dimensions).items()): + metadata.setdefault(f"ledger_filter_{key}", value) return {key: value for key, value in metadata.items() if value} +#: Constraint operators that publish a numeric band edge, and the +#: ``ledger_filter_`` key each one is stamped under. The +#: ``_lower_bound`` suffix is the one the band materialization reads +#: (``target_materialization._band_lower_edge``); the others record the +#: publisher's upper edge and its openness for readers and receipts. +_CONSTRAINT_BOUND_SUFFIXES: Mapping[str, str] = { + ">=": "_lower_bound", + ">": "_lower_bound_exclusive", + "<": "_upper_bound", + "<=": "_upper_bound_inclusive", +} + + +def _constraint_bound_filters( + fact: object, dimensions: Mapping[str, object] +) -> dict[str, str]: + """Numeric band edges a fact declares as universe constraints. + + Some publishers state a band as a categorical dimension plus explicit + numeric constraints (HMRC's CGT size-of-gain and age tables: + ``cgt_gain_band == gain_3000_to_5999`` with ``cgt_gain >= 3000`` and + ``cgt_gain < 6000``) rather than as a ``*_lower_bound`` dimension the way + the SPI income-band tables do. The edges are stamped under the same + ``ledger_filter_`` vocabulary so a banded measure can slice on them. A + variable that is already a dimension key is left to the dimension stamp; + non-numeric or non-filter constraints are ignored. + """ + + bounds: dict[str, str] = {} + for row in _constraint_rows(fact): + role = _str_at(row, "role") or "filter" + if role != "filter": + continue + variable = _str_at(row, "variable") + operator = _str_at(row, "operator") + suffix = _CONSTRAINT_BOUND_SUFFIXES.get(operator) + if not variable or suffix is None or variable in dimensions: + continue + value = _at(row, "value") + if isinstance(value, bool) or not isinstance(value, int | float): + continue + if not math.isfinite(float(value)): + continue + bounds[f"{variable}{suffix}"] = str(value) + return bounds + + def _diagnostic_target_label_metadata( facts: tuple[object, ...], *, diff --git a/packages/microcosm-build/src/microcosm/build/source_manifest.py b/packages/microcosm-build/src/microcosm/build/source_manifest.py index 70ecef363c..c8476167d1 100644 --- a/packages/microcosm-build/src/microcosm/build/source_manifest.py +++ b/packages/microcosm-build/src/microcosm/build/source_manifest.py @@ -50,6 +50,8 @@ "assign_clipped_normal", "assign_period_constant", "assign_student_loan_plan_cohorts", + "assign_main_asset_type", + "assign_residential_property_flag", "assign_uniform_draw", "aggregate_person_to_benunit", "allocate_per_capita_from_cell_table", @@ -60,6 +62,7 @@ "attribute_self_employed_health_premiums", "calibrate_binary_assignment", "calibrate_binary_assignment_joint_targets", + "classify_cgt_asset_type_facts_with_reviewed_fence", "classify_cgt_band_facts_with_reviewed_fence", "classify_hmrc_income_facts_with_reviewed_fences", "clone_records", @@ -131,6 +134,7 @@ "map_uniform_to_categorical", "materialize_hmrc_income_bands_fail_closed", "materialize_rules_engine_predictors", + "rake_allocation_targets", "rank_preserving_allocation", "read_table", "read_tables", @@ -155,7 +159,7 @@ "uprate_donor_columns", "uprate_to_regional_reference", "verify_certified_candidate", - "verify_pinned_cgt_ods", + "verify_vendored_fact_resource", "verify_pinned_hmrc_source_pair", "within_band_draws", "zero_when_false", 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 a3531b458b..11abb21818 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 @@ -4543,6 +4543,105 @@ "vintage" ] }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "age_group_lower_bounds": { + "type": "array", + "items": { + "type": "number" + } + }, + "age_margin": { + "type": "string" + }, + "band_aggregation": { + "type": "string" + }, + "conditioning_dimensions": { + "type": "array", + "items": { + "type": "string" + } + }, + "fallback_policy": { + "type": "string" + }, + "gains_margin": { + "type": "string" + }, + "gains_tilt": { + "type": "string" + }, + "joint_margin": { + "type": "string" + }, + "kind": { + "const": "rake_allocation_targets" + }, + "margin_normalization": { + "type": "string" + }, + "rake_rounds": { + "type": "integer", + "minimum": 1 + }, + "rake_tolerance": { + "type": "number", + "exclusiveMinimum": 0 + }, + "region_groups": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "region_margin": { + "type": "string" + }, + "reporting_grain": { + "type": "string" + }, + "resource": { + "type": "string" + }, + "seed_joint": { + "type": "string" + }, + "solver": { + "type": "string" + }, + "unattainable_policy": { + "type": "string" + }, + "zero_seed_policy": { + "type": "string" + } + }, + "required": [ + "age_group_lower_bounds", + "age_margin", + "band_aggregation", + "conditioning_dimensions", + "fallback_policy", + "gains_margin", + "gains_tilt", + "joint_margin", + "kind", + "margin_normalization", + "rake_rounds", + "rake_tolerance", + "region_groups", + "region_margin", + "reporting_grain", + "resource", + "seed_joint", + "solver", + "unattainable_policy", + "zero_seed_policy" + ] + }, { "type": "object", "additionalProperties": false, @@ -4550,6 +4649,9 @@ "band_order": { "type": "string" }, + "cell_order": { + "type": "string" + }, "column_reconciliation": { "type": "string" }, @@ -4562,6 +4664,9 @@ "ordering": { "type": "string" }, + "rounding": { + "type": "string" + }, "shortfall_policy": { "type": "string" }, @@ -4577,10 +4682,12 @@ }, "required": [ "band_order", + "cell_order", "column_reconciliation", "kind", "minimum_allocation_people", "ordering", + "rounding", "shortfall_policy", "suppressed_cell_allocation", "weights", @@ -5343,22 +5450,225 @@ "fail_on_mismatch": { "type": "boolean" }, + "feed_pin": { + "type": "string" + }, "kind": { - "const": "verify_pinned_cgt_ods" + "const": "verify_vendored_fact_resource" + }, + "mapped_build_period": { + "type": "number" + }, + "period_mapping": { + "type": "string" + }, + "record_sets": { + "type": "array", + "items": { + "type": "string" + } }, "require_before_source_read": { "type": "boolean" }, + "resource": { + "type": "string" + }, "runtime_sha256_required": { "type": "boolean" + }, + "source_vintage": { + "type": "string" } }, "required": [ "artifact_role", "fail_on_mismatch", + "feed_pin", "kind", + "record_sets", "require_before_source_read", - "runtime_sha256_required" + "resource", + "runtime_sha256_required", + "source_vintage" + ] + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "basis_assumption": { + "type": "string" + }, + "count_target": { + "type": "string" + }, + "gains_target": { + "type": "string" + }, + "kind": { + "const": "assign_residential_property_flag" + }, + "model": { + "type": "string" + }, + "output_column": { + "type": "string" + }, + "output_semantics": { + "type": "string" + }, + "parameter_solver": { + "type": "string" + }, + "population": { + "type": "string" + }, + "realization": { + "type": "string" + }, + "seed": { + "type": "number" + }, + "seed_mixing": { + "type": "string" + } + }, + "required": [ + "basis_assumption", + "count_target", + "gains_target", + "kind", + "model", + "output_column", + "output_semantics", + "parameter_solver", + "population", + "realization", + "seed", + "seed_mixing" + ] + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "categories": { + "type": "array", + "items": { + "type": "string" + } + }, + "diagnostic_only": { + "const": true + }, + "kernel": { + "type": "string" + }, + "kind": { + "const": "assign_main_asset_type" + }, + "log_sigma": { + "type": "number" + }, + "none_semantics": { + "type": "string" + }, + "output_column": { + "type": "string" + }, + "population": { + "type": "string" + }, + "realization": { + "type": "string" + }, + "seed": { + "type": "number" + }, + "seed_mixing": { + "type": "string" + }, + "share_targets": { + "type": "string" + }, + "sub_aea_semantics": { + "type": "string" + }, + "value_domain": { + "type": "array", + "items": { + "type": "string" + } + }, + "weight_fitting": { + "type": "string" + }, + "weight_fitting_iterations": { + "type": "number" + }, + "weight_fitting_tolerance": { + "type": "number" + } + }, + "required": [ + "categories", + "diagnostic_only", + "kernel", + "kind", + "log_sigma", + "none_semantics", + "output_column", + "population", + "realization", + "seed", + "seed_mixing", + "share_targets", + "sub_aea_semantics", + "value_domain", + "weight_fitting", + "weight_fitting_iterations", + "weight_fitting_tolerance" + ] + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "adjudication": { + "type": "string" + }, + "calibrated_facts": { + "type": "string" + }, + "calibration_permitted": { + "const": false + }, + "classification_rationale": { + "type": "string" + }, + "fact_fence_id": { + "type": "string" + }, + "fenced_fact_composition": { + "type": "string" + }, + "fenced_fact_count": { + "type": "number" + }, + "kind": { + "const": "classify_cgt_asset_type_facts_with_reviewed_fence" + } + }, + "required": [ + "adjudication", + "calibrated_facts", + "calibration_permitted", + "classification_rationale", + "fact_fence_id", + "fenced_fact_composition", + "fenced_fact_count", + "kind" ] }, { @@ -5543,6 +5853,9 @@ "bounded_band_family": { "type": "string" }, + "cell_means": { + "type": "string" + }, "deterministic": { "type": "boolean" }, @@ -5558,6 +5871,12 @@ "open_band_family": { "type": "string" }, + "open_band_realization": { + "type": "string" + }, + "quantile_scheme": { + "type": "string" + }, "seed_base": { "type": "number" }, @@ -5568,11 +5887,14 @@ "required": [ "bottom_band_floor", "bounded_band_family", + "cell_means", "deterministic", "kind", "mean_repair_margin", "mean_repair_reason", "open_band_family", + "open_band_realization", + "quantile_scheme", "seed_base", "seed_mixing" ] @@ -7558,7 +7880,10 @@ "initial_weight", "never_zero_weight", "weight_kind_out", - "reason" + "reason", + "size_band_vintage", + "retained_taxpayers", + "retained_gains_gbp" ], "properties": { "kind": { @@ -7614,6 +7939,15 @@ }, "reason": { "type": "string" + }, + "size_band_vintage": { + "type": "string" + }, + "retained_taxpayers": { + "type": "number" + }, + "retained_gains_gbp": { + "type": "number" } } }, diff --git a/packages/microcosm-build/src/microcosm/build/target_materialization.py b/packages/microcosm-build/src/microcosm/build/target_materialization.py index 9e2a5361f8..1a383c4c0b 100644 --- a/packages/microcosm-build/src/microcosm/build/target_materialization.py +++ b/packages/microcosm-build/src/microcosm/build/target_materialization.py @@ -42,6 +42,14 @@ ) _MISSING_COLUMN = re.compile(r"^'(?:([a-z_0-9]+)\.)?([A-Za-z_0-9]+)'$") +#: Provider kinds whose values are additionally masked by the binding's +#: ``filters`` and ``household_conditions`` (and by a declared band on +#: ``groupby_variable``) after the provider runs. A gated measure can then be +#: scoped by a geography fan-out predicate or sliced into published bands the +#: same way a plain prepared column is. Other providers compute their own +#: population and stay closed to filters. +FILTER_AWARE_PROVIDER_KINDS = frozenset({"parameter_gated_threshold"}) + class MeasureProvider(Protocol): """Provider of adapter-level variables needed for target materialization. @@ -520,19 +528,27 @@ def materialize_target_bindings( f"observation period {spec.metadata.get('ledger_fact_period')!r} " f"does not match declared measurement period {measurement_period}" ) + filter_aware = not kind or str(kind) in FILTER_AWARE_PROVIDER_KINDS + band = None + if filter_aware and binding.get("groupby_variable"): + band = _band_bounds( + spec, + binding, + band_edges.get(str(contract_target_id), ()), + ) if kind: provider = provider_registry.get(str(kind)) if provider is None: raise ValueError(f"unsupported binding kind {kind!r}") values = provider(adapter, binding, measurement_period) - else: - band = None - if binding.get("groupby_variable"): - band = _band_bounds( - spec, - binding, - band_edges.get(str(contract_target_id), ()), + if filter_aware: + entity = str(binding.get("from_entity") or spec.entity) + values = np.where( + _binding_mask(adapter, entity, binding, values, band=band), + values, + 0.0, ) + else: values = _prepared_column_values( adapter, spec.entity, binding, band=band ) @@ -643,6 +659,9 @@ def _with_geography_predicate( the ordinary predicate vocabulary). It is appended to the binding's ``filters`` verbatim. References without the key are untouched, so no existing country-level reference is re-scoped by its geography stamp. + Provider bindings accept the predicate only when their kind is in + :data:`FILTER_AWARE_PROVIDER_KINDS`; other providers never read filters, + so scoping them would silently publish the unscoped population. """ metadata = getattr(spec, "metadata", None) or {} @@ -661,10 +680,11 @@ def _with_geography_predicate( f"{name!r}: metadata.geography_predicate must be a predicate object " "naming a variable." ) - if binding.get("kind"): + if binding.get("kind") and str(binding["kind"]) not in FILTER_AWARE_PROVIDER_KINDS: raise ValueError( f"{name!r}: a geography predicate cannot scope a provider binding " - f"of kind {binding['kind']!r}; providers do not read filters." + f"of kind {binding['kind']!r}; only filter-aware providers " + f"({', '.join(sorted(FILTER_AWARE_PROVIDER_KINDS))}) read filters." ) map_to = predicate.get("map_to") entity = getattr(spec, "entity", None) @@ -691,6 +711,27 @@ def _prepared_column_values( values = _expression(adapter, entity, str(binding["value_expression"])) else: values = _column(adapter, entity, binding["value_variable"]) + return np.where( + _binding_mask(adapter, entity, binding, values, band=band), values, 0.0 + ) + + +def _binding_mask( + adapter: Any, + entity: str, + binding: Mapping[str, Any], + values: np.ndarray, + *, + band: tuple[float, float] | None = None, +) -> np.ndarray: + """The population a binding measures: its filters, conditions and band. + + Shared by plain prepared columns and by filter-aware providers, so a + geography fan-out predicate (appended to ``filters`` by + :func:`_with_geography_predicate`) and a published band slice mean the + same thing on both paths. + """ + mask = np.ones_like(values, dtype=bool) for predicate in binding.get("filters", ()): mask &= _predicate_mask(adapter, entity, predicate) @@ -700,7 +741,7 @@ def _prepared_column_values( lower, upper = band banded = _column(adapter, entity, binding["groupby_variable"]).astype(float) mask &= (banded >= lower) & (banded < upper) - return np.where(mask, values, 0.0) + return mask def _entity_reduction(adapter: Any, reduction: Mapping[str, Any]) -> np.ndarray: 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 e64197af52..32f3026cb6 100644 --- a/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py +++ b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py @@ -24,6 +24,7 @@ _period_key, _period_key_from_value, compile_ledger_target_references, + reference_fact_selectors, ) if TYPE_CHECKING: @@ -80,6 +81,14 @@ class TargetReferenceAuthoringConfig: default_factory=dict ) signed_exclusions_by_target_id: Mapping[str, str] = field(default_factory=dict) + #: Row-level sign-outs inside a dimension fan-out: ``target_id -> { + #: (dimension, json-encoded value): rationale }``. The matching fan-out + #: row is recorded as ``signed_excluded`` and never compiled, while the + #: target's other rows stay active. A declared row that no fan-out row + #: matches is stale and refuses the run. + signed_row_exclusions_by_target_id: Mapping[str, Mapping[tuple[str, str], str]] = ( + field(default_factory=dict) + ) #: Targets that fan out over a declared geography roster instead of pinning #: one geography: one reference per ``(geography_level, geography_id)``, #: named ``target_id@geography_id`` with its own measure column, the same @@ -310,7 +319,45 @@ def author_target_references( ) ) candidate_entries: list[dict[str, Any]] = [] + row_exclusions = dict( + config.signed_row_exclusions_by_target_id.get(target_id, {}) + ) + unmatched_row_exclusions = set(row_exclusions) for row in candidates: + signed_row = _signed_row_exclusion(row, row_exclusions) + if signed_row is not None: + row_key, rationale = signed_row + unmatched_row_exclusions.discard(row_key) + matched = [ + fact + for fact in source_facts + if _fact_matches_selector(fact, row["ledger_selector"]) + ] + candidate_entries.append( + { + "name": row["name"], + "status": "signed_excluded", + "matched_fact_count_overall": len(matched), + "matched_fact_count_at_or_before_period": len( + [ + fact + for fact in matched + if _not_after_target_period( + _period_key(fact), + _period_key_from_value(config.target_period), + ) + ] + ), + # The row key carries the value JSON-encoded so it can + # be hashed; the membership record shows the value itself. + "signed_row": { + "dimension": row_key[0], + "value": json.loads(row_key[1]), + }, + "signed_rationale": rationale, + } + ) + continue reference = LedgerTargetReference(**row) matched = [ fact @@ -332,9 +379,25 @@ def author_target_references( entry["matched_fact_count_in_source_window"] = sum( _assertion_allowed(reference, fact) for fact in matched ) + compile_facts = matched + operand_selectors = reference_fact_selectors(reference)[1:] + if operand_selectors: + # A ratio-scaled cell resolves its quotient from facts the + # row selector never matches (national rows for a region + # cell), so the compile sees the source's facts that match + # any operand selector as well. + compile_facts = [ + fact + for fact in source_facts + if fact in matched + or any( + _fact_matches_selector(fact, selector) + for selector in operand_selectors + ) + ] try: registry = compile_ledger_target_references( - matched, + compile_facts, [reference], country=str(contract["country"]), ) @@ -392,6 +455,14 @@ def author_target_references( if uprating: entry["uprating"] = uprating candidate_entries.append(entry) + if unmatched_row_exclusions: + stale = sorted( + f"{dimension}={value}" for dimension, value in unmatched_row_exclusions + ) + raise ValueError( + f"Stale row-level signed exclusion for {target_id!r}: no fan-out " + f"row carries {stale!r}." + ) target_entries[target_id] = { "status": _target_status(candidate_entries), "candidates": candidate_entries, @@ -720,6 +791,7 @@ def target_references_resource( "monthly_window_average", "monthly_window_sum_average", "linear_combination", + "scaled_by_ratio", } } ), @@ -1342,14 +1414,40 @@ def _classify_area_deferral( def _target_status(candidate_entries: list[dict[str, Any]]) -> str: if not candidate_entries: return "not_applicable" - if any(entry["status"] == "active" for entry in candidate_entries): - if all(entry["status"] == "active" for entry in candidate_entries): + # A row signed out of a fan-out is an adjudicated absence, not a deferral: + # it neither makes the target partial nor hides a real deferral. + considered = [ + entry for entry in candidate_entries if entry["status"] != "signed_excluded" + ] + if not considered: + return "signed_excluded" + if any(entry["status"] == "active" for entry in considered): + if all(entry["status"] == "active" for entry in considered): return "active" return "partially_active" - statuses = sorted({entry["status"] for entry in candidate_entries}) + statuses = sorted({entry["status"] for entry in considered}) return statuses[0] if len(statuses) == 1 else "multiple_deferrals" +def _signed_row_exclusion( + row: Mapping[str, Any], + row_exclusions: Mapping[tuple[str, str], str], +) -> tuple[tuple[str, str], str] | None: + """The row-level sign-out this fan-out row matches, if any.""" + + if not row_exclusions: + return None + dimension_values = row.get("ledger_selector", {}).get("dimension_values") + if not isinstance(dimension_values, Mapping): + return None + for dimension, value in dimension_values.items(): + key = (str(dimension), json.dumps(value, sort_keys=True)) + rationale = row_exclusions.get(key) + if rationale is not None: + return key, rationale + return None + + def _apply_declared_uprating( row: Mapping[str, Any], registry: TargetRegistry, diff --git a/packages/microcosm-build/src/microcosm/build/uk/cgt_band_donor_support_bounds.json b/packages/microcosm-build/src/microcosm/build/uk/cgt_band_donor_support_bounds.json index 3e6e4dda0b..6f61216077 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/cgt_band_donor_support_bounds.json +++ b/packages/microcosm-build/src/microcosm/build/uk/cgt_band_donor_support_bounds.json @@ -1,25 +1,56 @@ { "version": 1, "country": "uk", - "policy": "Disclosure-free support intervals derived from published HMRC Table 2.1a gain bands retained by the CGT donor stage. Intervals are lower-inclusive and upper-exclusive.", + "policy": "Disclosure-free support intervals derived from published HMRC Table 2.1a gain bands (2024-25 individuals, vendored from the pinned Chronicle feed) retained by the CGT donor stage. Intervals are lower-inclusive and upper-exclusive.", "source": { - "resource": "hmrc_cgt_size_bands.json", + "resource": "hmrc_cgt_conditioning_facts.json", "table": "2.1a", + "tax_year": 2024, "minimum_lower_limit": 12300 }, "bounds": { - "capital_gains": [12300, null] + "capital_gains": [ + 12300, + null + ] }, "bands": [ - {"lower": 12300, "upper": 25000}, - {"lower": 25000, "upper": 50000}, - {"lower": 50000, "upper": 100000}, - {"lower": 100000, "upper": 250000}, - {"lower": 250000, "upper": 500000}, - {"lower": 500000, "upper": 1000000}, - {"lower": 1000000, "upper": 2000000}, - {"lower": 2000000, "upper": 5000000}, - {"lower": 5000000, "upper": null} + { + "lower": 12300, + "upper": 25000 + }, + { + "lower": 25000, + "upper": 50000 + }, + { + "lower": 50000, + "upper": 100000 + }, + { + "lower": 100000, + "upper": 250000 + }, + { + "lower": 250000, + "upper": 500000 + }, + { + "lower": 500000, + "upper": 1000000 + }, + { + "lower": 1000000, + "upper": 2000000 + }, + { + "lower": 2000000, + "upper": 5000000 + }, + { + "lower": 5000000, + "upper": null + } ], "semantic_fit_note": "These intervals describe donor-stage initial support. The later Table 3 redraw can move amounts within a different band surface, so terminal support-gate applicability requires reviewer confirmation." } diff --git a/packages/microcosm-build/src/microcosm/build/uk/cgt_source_stages.json b/packages/microcosm-build/src/microcosm/build/uk/cgt_source_stages.json index 9e237c095d..a3749b572d 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/cgt_source_stages.json +++ b/packages/microcosm-build/src/microcosm/build/uk/cgt_source_stages.json @@ -1,12 +1,12 @@ { "version": 1, "country": "uk", - "policy": "The UK capital gains family is source-manifest-defined. The published joint distribution must be SHA-256 verified before it is read, the stage redraws amounts only (incidence and household weights pass through unchanged), policy amounts come from the policyengine-uk parameter tree through the uk extra's deferred import, and the published band facts are fenced from calibration as policy-endogenous and proxy-conditioned.", + "policy": "The UK capital gains family is source-manifest-defined. The vendored joint distribution must be checked against the pinned Chronicle feed identity before it is read, the stage redraws amounts only (incidence and household weights pass through unchanged), policy amounts come from the policyengine-uk parameter tree through the uk extra's deferred import, and the published band facts are fenced from calibration as policy-endogenous and proxy-conditioned.", "stages": [ { "stage": "hmrc_cgt_gains", - "survey": "HMRC Capital Gains Tax statistics table 3 (size of gain by taxable income), 2020-21 to 2023-24", - "source": "https://assets.publishing.service.gov.uk/media/6878ac62760bf6cedaf5bd93/Table_3_2025_Size_of_gain_by_income.ods", + "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 3 2024-25 (individual taxpayers and gains by size of gain and taxable income) conditioned on the 2024-25 Tables 2.1a, 5, 6 and 1, all vendored from the pinned Chronicle feed", + "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "grain": "person", "base_candidate": { "filename": "populace_uk_2023.h5", @@ -17,33 +17,10 @@ "runtime_sha256_required": true }, "artifacts": [ - { - "role": "published_fact_surface", - "kind": "administrative_table", - "format": "ods", - "survey": "HMRC Capital Gains Tax statistics table 3", - "publication": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", - "vintage": "2023-24", - "tax_year_start": 2023, - "locator": "https://assets.publishing.service.gov.uk/media/6878ac62760bf6cedaf5bd93/Table_3_2025_Size_of_gain_by_income.ods", - "sha256": "8e75c00bab949348a7238fea6d995f626c85e5d02813b46606dd7fea85e9d0c3", - "size_bytes": 11996, - "mime_type": "application/vnd.oasis.opendocument.spreadsheet", - "sheets": [ - "3_1_2023-24", - "3_2_2022-23", - "3_3_2021-22", - "3_4_2020-21" - ], - "mapped_build_period": 2024, - "period_mapping": "latest_published_tax_year", - "basis": "Individuals with a CGT liability only; gains after losses and attributed gains but before the annual exempt amount; taxable income after reliefs and the Personal Allowance; trusts excluded; counts publish in thousands and amounts in GBP millions.", - "runtime_sha256_required": true - }, { "role": "policy_parameters", "kind": "versioned_parameter_tree", - "dependency": "policyengine-uk>=2.88 via microcosm-build[uk]", + "dependency": "policyengine-uk>=2.98.0 via microcosm-build[uk]", "parameters": [ "gov.hmrc.income_tax.allowances.personal_allowance.amount", "gov.hmrc.income_tax.allowances.personal_allowance.maximum_ANI", @@ -53,6 +30,13 @@ "instant_rule": "raw dated parameter files evaluated at 1 June of the build period's tax year", "runtime_sha256_required": false, "dependency_discipline": "deferred inside uk_cgt_policy_parameters; the base package never imports policyengine-uk at import time" + }, + { + "role": "cgt_conditioning_facts", + "kind": "public_aggregate_reference", + "resource": "hmrc_cgt_conditioning_facts.json", + "format": "json", + "runtime_sha256_required": true } ], "operations": [ @@ -63,8 +47,20 @@ "fail_on_mismatch": true }, { - "kind": "verify_pinned_cgt_ods", - "artifact_role": "published_fact_surface", + "kind": "verify_vendored_fact_resource", + "artifact_role": "cgt_conditioning_facts", + "resource": "hmrc_cgt_conditioning_facts.json", + "feed_pin": "chronicle_feed.json", + "record_sets": [ + "hmrc.cgt_table3_2026.ty2024.", + "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.", + "hmrc.cgt_table6_2026.age.ty2024", + "hmrc.cgt_table5_2026.country_region.ty2024", + "hmrc.cgt_statistics_2026.table1.ty2024" + ], + "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 @@ -85,27 +81,79 @@ "allowance": "tapered Personal Allowance from the policy_parameters artifact", "fail_on_missing_component": true }, + { + "kind": "rake_allocation_targets", + "resource": "hmrc_cgt_conditioning_facts.json", + "joint_margin": "Table 3 2024-25 reconciled cells (2026 release; individuals with a liability by size of gain and taxable income), every income column rescaled onto its published All-row taxpayer total; the same tax year as the Table 1 observations the calibration fits, so no vintage move is applied", + "band_aggregation": "Table 2.1a bands 0, 3,000 and 6,000 fold into Table 3 band 0; 10,000 and 12,300 fold into 10,000; the remaining bands map one to one; the folded rows must agree with Table 3's row totals within publication rounding and the difference is reported per band", + "age_margin": "Table 6 2024-25 individual taxpayers by age band, folded to the age groups; the 0-15 band, which adult carriers cannot hold, is spread across the groups by the normalisation rather than folded into the youngest group", + "gains_margin": "Table 6 2024-25 individual gains by age band, folded to the age groups the same way, as one linear constraint per group, the raked people in the group's cells times their Table 3 cell means summing to the group's gains, so each age group carries its published gains as well as its count instead of the frame's band mix (the amounts-consistent tilt; microcosm#725)", + "region_margin": "Table 5 2024-25 taxpayers by country and region (all taxpayers) times the Table 1 2024-25 individuals/total taxpayer share, folded to the region groups", + "margin_normalization": "every count margin is rescaled onto the joint's total taxpayer mass and the gains margin onto the joint's gains at cell means before raking, so rounding cannot make the margins mutually infeasible", + "seed_joint": "joint cell mass times the frame's household-weighted (age group, region group | income band) shares among gainers", + "age_group_lower_bounds": [ + 16, + 25, + 35, + 45, + 55, + 65, + 75 + ], + "region_groups": { + "LONDON": "london", + "SOUTH_EAST": "south_east_and_east_of_england", + "EAST_OF_ENGLAND": "south_east_and_east_of_england", + "NORTH_EAST": "rest_of_england", + "NORTH_WEST": "rest_of_england", + "YORKSHIRE": "rest_of_england", + "EAST_MIDLANDS": "rest_of_england", + "WEST_MIDLANDS": "rest_of_england", + "SOUTH_WEST": "rest_of_england", + "WALES": "wales_scotland_northern_ireland", + "SCOTLAND": "wales_scotland_northern_ireland", + "NORTHERN_IRELAND": "wales_scotland_northern_ireland" + }, + "gains_tilt": "exponential tilt per age group; the group's cells are multiplied by exp(lambda x cell mean / largest cell mean) with lambda solved by bisection so the group's people-weighted mean gain meets its target while the group's count is held, alternated with the three count margins until every margin holds to the tolerance", + "solver": "microcosm.build.uk_runtime.cgt_imputation._rake_with_gains_tilt (proportional scaling of the count margins and the gains tilt on the four-way array; the generic mean-raking helper scales columns independently and cannot hold a people-weighted gains constraint)", + "rake_rounds": 500, + "rake_tolerance": 1e-09, + "unattainable_policy": "a group whose target mean gain lies outside the means of its seeded cells takes the nearest attainable tilt and is reported", + "zero_seed_policy": "a cell with no frame support keeps a zero target and is reported; its joint mass is met from the income band's pooled fallback where support exists", + "fallback_policy": "pooled_income_band_rank_walk", + "conditioning_dimensions": [ + "income band", + "age group", + "region group" + ], + "reporting_grain": "Table 6 age bands and the twelve region-tier areas" + }, { "kind": "rank_preserving_allocation", - "within": "income band", + "within": "income band x age group x region group cell, then the income band's pooled unassigned gainers", "ordering": "existing gains descending, person_id ascending on ties", "band_order": "highest gain band first", "suppressed_cell_allocation": "count implied by the cell's published gains at the band-total mean", "column_reconciliation": "every income column rescales onto its published All-row taxpayer total", - "shortfall_policy": "proportional scale-down when the population holds less gainer mass than published taxpayers", + "shortfall_policy": "proportional scale-down inside a cell that holds less gainer mass than its raked target; the income band's net shortfall after every cell walk, apportioned to gain bands in proportion to their positive shortfalls, is walked over the income band's pooled unassigned gainers, scaled down proportionally when the pool is short, so cell-walk rounding overshoot is netted rather than compounded", "minimum_allocation_people": 1, - "weights": "household_weight mapped to persons; no person splits across bands" + "weights": "household_weight mapped to persons; no person splits across bands", + "rounding": "systematic with one seeded offset per walk: a person joins the band whose cumulative boundary first covers (1 - offset) of their weight, so a band boundary smaller than a person's weight still receives that person on the share of walks it implies and the rounding is unbiased across the conditioning cells; each cell walk's signed rounding error is carried into the next cell's boundaries for the same gain band (error diffusion), so each gain band's walked total within an income band stays within one person's weight of its raked total instead of accumulating the overshoot of many cell walks", + "cell_order": "income band ascending, age group ascending, region group ascending, gain bands highest first inside a cell; then the pooled walk per income band" }, { "kind": "within_band_draws", "bounded_band_family": "truncated exponential matched to the cell's published mean", "open_band_family": "Pareto with alpha = mean / (mean - lower bound)", + "quantile_scheme": "stratified by weight: the persons a (gain band, income band) plan receives across every cell and the pooled walk take the quantile strata that partition (0, 1) in proportion to their household weights, in ascending prior-gain order with one seeded jitter per plan, so the plan's weighted realised mean sits on its published mean rather than carrying n independent draws or the weight-rank mix of equal strata", + "open_band_realization": "each open-band person takes the conditional mean of their weight-proportional quantile stratum, which averages back to the published mean exactly under the household weights; an iid draw from a Pareto with infinite variance sits well below it on a few dozen carriers, and equal strata on unequal weights put the tail's mass on whichever rows happen to be light", "mean_repair_margin": 0.02, - "mean_repair_reason": "Published counts round to the nearest thousand and amounts to the nearest million; four cells of the 2023-24 table imply a mean outside their own band, and repaired means clamp just inside the violated boundary.", + "mean_repair_reason": "Published counts round to the nearest thousand and amounts to the nearest million; two cells of the 2024-25 table (gains of GBP 1m to 2m at taxable incomes of GBP 37,700 to 49,999 and GBP 100,000 to 125,139) imply a mean below their own band, and repaired means clamp just inside the violated boundary.", "bottom_band_floor": "annual exempt amount plus one pound, since every allocated person is a taxpayer with a liability", "seed_base": 552, - "seed_mixing": "seed combined with the build period; draws ordered by allocation rank", - "deterministic": true + "seed_mixing": "seed combined with the build period; each walk draws its rounding offset in cell order then pooled-fallback order, then each plan draws its quantile jitter, income bands ascending and gain bands highest first", + "deterministic": true, + "cell_means": "ratios of the published Table 3 2024-25 cell gains to cell taxpayers, both rounded by the publisher (counts to the nearest thousand, amounts to the nearest million), so derived rather than published numbers; suppressed-count cells take the band-total mean; every mean is repaired into its band" }, { "kind": "sub_aea_remainder", @@ -124,17 +172,17 @@ "calibration_permitted": false, "fact_fence_id": "cgt_band_facts_policy_endogenous_proxy_conditioned", "fenced_fact_count": 76, - "fenced_fact_composition": "60 joint cells, 10 gain-band row totals, 6 income-column totals", + "fenced_fact_composition": "60 joint cells, 10 gain-band row totals, 6 income-column totals (Table 3 2024-25, 2026 release)", "classification_rationale": "The taxpayer count is endogenous to policy (liability requires gains above the annual exempt amount computed by the model under simulation), the income conditioning is an arithmetic proxy that can move a person one band, and the published surface needs rounding and suppression reconciliation before any per-band fact is exact. The SPI 208-fact fence is the precedent.", - "calibrated_facts_unchanged": "The two aggregate facts in UK_CGT_TARGET_SPECS (total gains, taxpayer count; table 1 basis including trusts) remain the only calibrated CGT facts.", - "promotion_path": "A separately reviewed target profile may lift specific band facts out of the fence after the rounding/suppression reconciliation and the taxable-income-proxy adequacy are adjudicated on their own evidence.", + "calibrated_facts_unchanged": "The calibrated CGT facts are the FY2024-25 individual Table 1 references (hmrc.cgt.taxpayers_total, hmrc.cgt.gains_total, hmrc.cgt.liability_total; UK_CGT_TARGET_COVERAGE_REQUIREMENTS) and the Table 2.1a size-of-gain, Table 6 age-band and Table 5 region rows declared in uk_population_targets.json (microcosm#467, #725); the 76 Table 3 2024-25 joint and marginal cells stay fenced and condition the imputation only, and Table 3's all-gains, all-incomes pair restates the Table 1 individual observations already bound.", + "promotion_path": "A separately reviewed target profile may lift specific band facts after the reconciliation and proxy adequacy are adjudicated; the Table 2.1a, 6 and 5 rows were promoted under microcosm#467 and #725 on the FY2024-25 individual observations, while the Table 3 joint cells remain fenced because the taxable-income proxy is still an arithmetic approximation.", "adjudication": "https://github.com/PolicyEngine/microcosm/issues/552" } ], "outputs": [ "capital_gains" ], - "notes": "Amounts-only replacement: who has gains comes from the candidate, how much they have comes from the published joint distribution, and household weights pass through unchanged, the weight kind carries through, and the stage appends the mass-conservation receipt the terminal family gate requires. Only persons with positive existing gains are redrawn; the candidate's net losses (negative amounts) and zeros pass through byte-identical, since Table 3 covers only individuals with a liability and says nothing about losses. The stage runs after hmrc_spi_income so the taxable-income proxy sees the restored income surface. Requires the microcosm-build uk extra at build time for the policy_parameters artifact.", + "notes": "Amounts-only replacement: who has gains comes from the candidate, how much they have comes from the published joint distribution, and household weights pass through unchanged, the weight kind carries through, and the stage appends the mass-conservation receipt the terminal family gate requires. Only persons with positive existing gains are redrawn; the candidate's net losses (negative amounts) and zeros pass through byte-identical, since Table 3 covers only individuals with a liability and says nothing about losses. The stage runs after hmrc_spi_income so the taxable-income proxy sees the restored income surface. Requires the microcosm-build uk extra at build time for the policy_parameters artifact. The allocation targets are raked to the 2024-25 Table 6 age and Table 5 region margins from the vendored conditioning resource and walked inside income x age x region cells (microcosm#725).", "output_weight_kind": "importance", "output_weight_kind_rationale": "The stage preserves whatever kind it receives; it runs after hmrc_spi_income, whose prior allocation establishes importance-kind household weights, so the final frame carries importance." } diff --git a/packages/microcosm-build/src/microcosm/build/uk/chronicle_feed.json b/packages/microcosm-build/src/microcosm/build/uk/chronicle_feed.json index adba143773..83e8de39ed 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/chronicle_feed.json +++ b/packages/microcosm-build/src/microcosm/build/uk/chronicle_feed.json @@ -3,14 +3,14 @@ "country": "uk", "scope": "uk_calibration", "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", "consumer_fact_schema_versions": [ "chronicle.consumer_fact.v3" ], "consumer_fact_schema_sha256": "bdb51e2a8115634633ba7448c4005930fd9c0bfbade5e1b079b6bc24da485d3d", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" } 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 4ab4e8cb3f..4255b9f48c 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/country_package.json +++ b/packages/microcosm-build/src/microcosm/build/uk/country_package.json @@ -83,7 +83,12 @@ "schema_id": "legacy_json" }, { - "path": "hmrc_cgt_size_bands.json", + "path": "hmrc_cgt_conditioning_facts.json", + "kind": "legacy_json", + "schema_id": "legacy_json" + }, + { + "path": "hmrc_cgt_asset_type_facts.json", "kind": "legacy_json", "schema_id": "legacy_json" }, diff --git a/packages/microcosm-build/src/microcosm/build/uk/desnz_domestic_energy_facts.json b/packages/microcosm-build/src/microcosm/build/uk/desnz_domestic_energy_facts.json index e338213acb..a3be7cd4b6 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/desnz_domestic_energy_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/desnz_domestic_energy_facts.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/devolved_bus_finance.json b/packages/microcosm-build/src/microcosm/build/uk/devolved_bus_finance.json index ec5423914e..821b693e3a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/devolved_bus_finance.json +++ b/packages/microcosm-build/src/microcosm/build/uk/devolved_bus_finance.json @@ -16,12 +16,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/dft_bus_value_anchors.json b/packages/microcosm-build/src/microcosm/build/uk/dft_bus_value_anchors.json index dac113ca28..e409c5f314 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/dft_bus_value_anchors.json +++ b/packages/microcosm-build/src/microcosm/build/uk/dft_bus_value_anchors.json @@ -17,12 +17,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index db07315f2c..d3e48e3f66 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -382,6 +382,21 @@ }, "notes": "Stage-time CGT redraw summary gate wired through the existing UKCGTImputationSummary receipt rather than fabricating a terminal support verdict." }, + { + "id": "uk_stage_hmrc_cgt_asset_type_spine_summary", + "gate": "stage_health", + "phase": "transferred", + "criticality": "release_blocking", + "evidence_absent_blocks": true, + "parameters": { + "stage": "hmrc_cgt_asset_type_spine", + "check": "cgt_asset_type_summary", + "maximum_relative_deviation": 0.05, + "maximum_gains_sigma": 3.0, + "maximum_solve_relative_error": 1e-06 + }, + "notes": "Stage-time gate over the CGT asset-type receipt (microcosm#725): the logistic solve reproduces the Table 8a 2024-25 totals on the individuals basis in expectation, the realised residential taxpayer count sits within one carrier row's weight of the expectation (the weighted systematic walk's own bound, max_liable_weight, about 3,300 people at full scale), and the realised residential gains sit within the wider of the reviewed relative band and three Bernoulli sigmas of the draw (an envelope that overstates a systematic draw's noise, so conservative), so a small frame is judged by its noise floor and a production frame by the band. Every liable gainer carries an asset type and the Table 7 composition receipt is finite; the calibration binds the same two totals." + }, { "id": "uk_stage_salary_sacrifice_realization", "gate": "stage_health", @@ -626,6 +641,8 @@ "person.admitted_patient_visits", "person.age_started_or_accepted_current_education_or_training", "person.attends_private_school_random_draw", + "person.capital_gains_asset_type", + "person.capital_gains_residential_property", "person.care_hours", "person.charitable_investment_gifts", "person.dla_m_category", @@ -698,6 +715,18 @@ }, "notes": "The household ONS household-type value must be one of the ten Chronicle ons.household_type value ids the frs_relationships stage declares (the build supplies the declared domain as evidence; the column is a frame input, not a PolicyEngine-UK enum). Evaluated at the assembled boundary like the BRMA enum: membership is a property of the values themselves." }, + { + "id": "uk_capital_gains_asset_type_enum_domain", + "gate": "enum_domain", + "phase": "transferred", + "criticality": "release_blocking", + "parameters": { + "columns": [ + "capital_gains_asset_type" + ] + }, + "notes": "The person capital_gains_asset_type value must be one of the eight values the hmrc_cgt_asset_type_spine stage declares (none, sub_aea, the Chronicle Table 7 asset-type value ids); the build supplies the declared domain as evidence because the column is a frame input, not a PolicyEngine-UK enum (microcosm#725). Evaluated at the transferred boundary, after the stage that writes the column has run." + }, { "id": "uk_uc_deduction_combination_enum_domain", "gate": "enum_domain", diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_cgt_asset_type_facts.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_cgt_asset_type_facts.json new file mode 100644 index 0000000000..74f3eec914 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk/hmrc_cgt_asset_type_facts.json @@ -0,0 +1,2800 @@ +{ + "schema_version": 1, + "country": "uk", + "kind": "uk_vendored_ledger_facts", + "resource": "hmrc_cgt_asset_type_facts.json", + "purpose": "HMRC Capital Gains Tax statistics 2026 release rows the CGT asset-type stage assigns from and reports against: Table 8a tax year 2024-25 UK residents reporting residential property disposals (taxpayers, disposals, gains and tax by reporting channel: the CGT on UK Property service, the Self Assessment component and their total), Table 8b tax year 2024-25 UK Property service returns by taxpayer type (individuals, trusts and all; the individuals/all shares that restate Table 8a on the individuals basis of the national targets) and Table 7 tax year 2023-24 disposals, disposal proceeds and gains by asset category and asset type (sample-based; the composition prior for the non-residential asset-type draw, fenced from calibration). No value is derived here.", + "consumers": [ + "uk_runtime.cgt_asset_type" + ], + "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": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "build": "build-bundle --suite uk -> build-consumer-artifact", + "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" + }, + "selections": [ + { + "label": "table8a_ty2024_residential_property_by_channel", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024" + }, + "row_count": 12 + }, + { + "label": "table8b_ty2024_uk_property_service_by_taxpayer_type", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024" + }, + "row_count": 15 + }, + { + "label": "table7_ty2023_by_asset_category", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table7_2026.asset_category.ty2023" + }, + "row_count": 6 + }, + { + "label": "table7_ty2023_asset_category_total", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table7_2026.asset_category_total.ty2023" + }, + "row_count": 3 + }, + { + "label": "table7_ty2023_by_financial_asset_type", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023" + }, + "row_count": 12 + }, + { + "label": "table7_ty2023_by_non_financial_asset_type", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023" + }, + "row_count": 12 + } + ], + "row_count": 60, + "rows": [ + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5f7c45cfe5adcdc68ec6921b", + "semantic_fact_key": "ledger_semantic_fact_v2_2bccef0b574e44308098b4be", + "source_record_id": "hmrc.cgt_table7_2026.asset_category.ty2023.financial.disposal_proceeds", + "concept": "hmrc.cgt_table7_1.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.asset_category.ty2023", + "groupby_dimension": "cgt_asset_category", + "groupby_value_id": "financial", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 151170000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_050f22b23e20f728b7c16afd", + "semantic_fact_key": "ledger_semantic_fact_v2_cbe5c72029aedc4d4dbe5129", + "source_record_id": "hmrc.cgt_table7_2026.asset_category.ty2023.non_financial.disposal_proceeds", + "concept": "hmrc.cgt_table7_1.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.asset_category.ty2023", + "groupby_dimension": "cgt_asset_category", + "groupby_value_id": "non_financial", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 43251000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8d5a0a253b39b43f3ceee2bc", + "semantic_fact_key": "ledger_semantic_fact_v2_89a349e1d266c0d5643d5a1f", + "source_record_id": "hmrc.cgt_table7_2026.asset_category.ty2023.total.disposal_proceeds", + "concept": "hmrc.cgt_table7_1.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.asset_category_total.ty2023", + "groupby_dimension": "cgt_asset_category", + "groupby_value_id": "total", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 194420000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_797d1b2cb036b23adaa4c26e", + "semantic_fact_key": "ledger_semantic_fact_v2_e61ceba8a3c833dcfd577002", + "source_record_id": "hmrc.cgt_table7_2026.asset_category.ty2023.financial.disposals", + "concept": "hmrc.cgt_table7_1.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.asset_category.ty2023", + "groupby_dimension": "cgt_asset_category", + "groupby_value_id": "financial", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 2465000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7ee3cf12d5f1a48f0888b5e2", + "semantic_fact_key": "ledger_semantic_fact_v2_a1b05dcd34f5e12d074380d3", + "source_record_id": "hmrc.cgt_table7_2026.asset_category.ty2023.non_financial.disposals", + "concept": "hmrc.cgt_table7_1.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.asset_category.ty2023", + "groupby_dimension": "cgt_asset_category", + "groupby_value_id": "non_financial", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 201000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3b0fe20e57f9982ed3becbef", + "semantic_fact_key": "ledger_semantic_fact_v2_8845ef55c8b58d34dca83a0e", + "source_record_id": "hmrc.cgt_table7_2026.asset_category.ty2023.total.disposals", + "concept": "hmrc.cgt_table7_1.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.asset_category_total.ty2023", + "groupby_dimension": "cgt_asset_category", + "groupby_value_id": "total", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 2665000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_74b78854d1764fc48e1bad6d", + "semantic_fact_key": "ledger_semantic_fact_v2_5166659f25b2384c052214ad", + "source_record_id": "hmrc.cgt_table7_2026.asset_category.ty2023.financial.gains", + "concept": "hmrc.cgt_table7_1.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.asset_category.ty2023", + "groupby_dimension": "cgt_asset_category", + "groupby_value_id": "financial", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 55327000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_dc8445bc642a73b4f027e440", + "semantic_fact_key": "ledger_semantic_fact_v2_ed2fec1737dcdfdda1692164", + "source_record_id": "hmrc.cgt_table7_2026.asset_category.ty2023.non_financial.gains", + "concept": "hmrc.cgt_table7_1.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.asset_category.ty2023", + "groupby_dimension": "cgt_asset_category", + "groupby_value_id": "non_financial", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 14535000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b536b89ec2d75fe674bff7ac", + "semantic_fact_key": "ledger_semantic_fact_v2_6ad7e1343da03e00fadd6fcd", + "source_record_id": "hmrc.cgt_table7_2026.asset_category.ty2023.total.gains", + "concept": "hmrc.cgt_table7_1.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.asset_category_total.ty2023", + "groupby_dimension": "cgt_asset_category", + "groupby_value_id": "total", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 69861000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_95d10014144d6074bb8915d8", + "semantic_fact_key": "ledger_semantic_fact_v2_d926797683d4230e36ae9f02", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.listed_shares.disposal_proceeds", + "concept": "hmrc.cgt_table7_2.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "listed_shares", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial", + "cgt_asset_type": "listed_shares" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 31959000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cdadcf7febd3e0e5393383b4", + "semantic_fact_key": "ledger_semantic_fact_v2_9cca5694ee98ca1b83923f9f", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.other_financial_assets.disposal_proceeds", + "concept": "hmrc.cgt_table7_2.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "other_financial_assets", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial", + "cgt_asset_type": "other_financial_assets" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 70100000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_125dc1a53bd62d88a39f7174", + "semantic_fact_key": "ledger_semantic_fact_v2_2bccef0b574e44308098b4be", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.total.disposal_proceeds", + "concept": "hmrc.cgt_table7_2.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "total", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_asset_category": "financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 151170000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b95a74dbb1956345fab862df", + "semantic_fact_key": "ledger_semantic_fact_v2_dddbe773c55cff27a3db9092", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.unlisted_shares.disposal_proceeds", + "concept": "hmrc.cgt_table7_2.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "unlisted_shares", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial", + "cgt_asset_type": "unlisted_shares" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 49111000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d2e6998ffd556e2631d77cfe", + "semantic_fact_key": "ledger_semantic_fact_v2_e5f0505f98b0d5e112186626", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.listed_shares.disposals", + "concept": "hmrc.cgt_table7_2.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "listed_shares", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial", + "cgt_asset_type": "listed_shares" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 1077000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8e232f6b3d32cfe1ade5daef", + "semantic_fact_key": "ledger_semantic_fact_v2_47cbfb9cb97cf7003fad28d9", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.other_financial_assets.disposals", + "concept": "hmrc.cgt_table7_2.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "other_financial_assets", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial", + "cgt_asset_type": "other_financial_assets" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 1097000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_eef1455d9fdb035bed509120", + "semantic_fact_key": "ledger_semantic_fact_v2_e61ceba8a3c833dcfd577002", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.total.disposals", + "concept": "hmrc.cgt_table7_2.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "total", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_asset_category": "financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 2465000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6e7e399854897bb9f825eb71", + "semantic_fact_key": "ledger_semantic_fact_v2_27b885627fda4030b175f789", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.unlisted_shares.disposals", + "concept": "hmrc.cgt_table7_2.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "unlisted_shares", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial", + "cgt_asset_type": "unlisted_shares" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 290000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fde10012157f3cf569bfcc1e", + "semantic_fact_key": "ledger_semantic_fact_v2_5d9676dd11662e5127e93e00", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.listed_shares.gains", + "concept": "hmrc.cgt_table7_2.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "listed_shares", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial", + "cgt_asset_type": "listed_shares" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 5925000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b43a1243f3f8c97f22a0bb4a", + "semantic_fact_key": "ledger_semantic_fact_v2_a59ac8701f854d627b8635fd", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.other_financial_assets.gains", + "concept": "hmrc.cgt_table7_2.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "other_financial_assets", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial", + "cgt_asset_type": "other_financial_assets" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 16086000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_345f360270efeb550b1560ea", + "semantic_fact_key": "ledger_semantic_fact_v2_5166659f25b2384c052214ad", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.total.gains", + "concept": "hmrc.cgt_table7_2.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "total", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_asset_category": "financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 55327000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0cd1566de4c7393a453789b8", + "semantic_fact_key": "ledger_semantic_fact_v2_e25bacebe13603d43fa11c12", + "source_record_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023.unlisted_shares.gains", + "concept": "hmrc.cgt_table7_2.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "unlisted_shares", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "financial", + "cgt_asset_type": "unlisted_shares" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 33315000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_793792e4ef24dd61fe96a6f4", + "semantic_fact_key": "ledger_semantic_fact_v2_1c18a6f4be76528498f276f3", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.agricultural_commercial_industrial_land_buildings.disposal_proceeds", + "concept": "hmrc.cgt_table7_5.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "agricultural_commercial_industrial_land_buildings", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial", + "cgt_asset_type": "agricultural_commercial_industrial_land_buildings" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 3883000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_970b28746fe6f81768da384b", + "semantic_fact_key": "ledger_semantic_fact_v2_88012b2c542fe33feab43bbd", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.other_non_financial_assets.disposal_proceeds", + "concept": "hmrc.cgt_table7_5.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "other_non_financial_assets", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial", + "cgt_asset_type": "other_non_financial_assets" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 4068000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d091f950ab6dea951e57840b", + "semantic_fact_key": "ledger_semantic_fact_v2_d32335f528d24cf38503ac8f", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.residential_land_buildings.disposal_proceeds", + "concept": "hmrc.cgt_table7_5.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "residential_land_buildings", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial", + "cgt_asset_type": "residential_land_buildings" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 35300000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4a20e41f1885d230499dbf76", + "semantic_fact_key": "ledger_semantic_fact_v2_cbe5c72029aedc4d4dbe5129", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.total.disposal_proceeds", + "concept": "hmrc.cgt_table7_5.disposal_proceeds", + "measure_id": "disposal_proceeds", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "total", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_asset_category": "non_financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 43251000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1b25affd396df77f63718bf0", + "semantic_fact_key": "ledger_semantic_fact_v2_520bfcf8190ac3ccb35929ef", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.agricultural_commercial_industrial_land_buildings.disposals", + "concept": "hmrc.cgt_table7_5.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "agricultural_commercial_industrial_land_buildings", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial", + "cgt_asset_type": "agricultural_commercial_industrial_land_buildings" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 13000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f09a98ccb2e285a87c04b668", + "semantic_fact_key": "ledger_semantic_fact_v2_b5936ad48f9a0916eba4ad17", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.other_non_financial_assets.disposals", + "concept": "hmrc.cgt_table7_5.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "other_non_financial_assets", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial", + "cgt_asset_type": "other_non_financial_assets" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 20000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_468ba88a239294f5dd475368", + "semantic_fact_key": "ledger_semantic_fact_v2_f34991c0c30f730c0e555ef6", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.residential_land_buildings.disposals", + "concept": "hmrc.cgt_table7_5.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "residential_land_buildings", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial", + "cgt_asset_type": "residential_land_buildings" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 167000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b5fcd239ad8d46c6bdbdb5ca", + "semantic_fact_key": "ledger_semantic_fact_v2_a1b05dcd34f5e12d074380d3", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.total.disposals", + "concept": "hmrc.cgt_table7_5.disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "total", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_asset_category": "non_financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 201000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3a00ac9714521b09ae90e1d2", + "semantic_fact_key": "ledger_semantic_fact_v2_6dbace2ac2d91b3717314ce8", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.agricultural_commercial_industrial_land_buildings.gains", + "concept": "hmrc.cgt_table7_5.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "agricultural_commercial_industrial_land_buildings", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial", + "cgt_asset_type": "agricultural_commercial_industrial_land_buildings" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 2037000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_53d0a1ba7246cb3ad96f088e", + "semantic_fact_key": "ledger_semantic_fact_v2_f3c6dba9ddfa1a844d3e48c1", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.other_non_financial_assets.gains", + "concept": "hmrc.cgt_table7_5.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "other_non_financial_assets", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial", + "cgt_asset_type": "other_non_financial_assets" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 2872000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_dbc37a56035b1c01c9e1a885", + "semantic_fact_key": "ledger_semantic_fact_v2_d596ef5501ee2f72dd86765a", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.residential_land_buildings.gains", + "concept": "hmrc.cgt_table7_5.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "residential_land_buildings", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_asset_category": "non_financial", + "cgt_asset_type": "residential_land_buildings" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 9626000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1e823f6f8bef7bb6f5d9597b", + "semantic_fact_key": "ledger_semantic_fact_v2_ed2fec1737dcdfdda1692164", + "source_record_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023.total.gains", + "concept": "hmrc.cgt_table7_5.gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2023 + }, + "period_coverage": { + "start_date": "2023-04-06", + "end_date": "2024-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023", + "groupby_dimension": "cgt_asset_type", + "groupby_value_id": "total", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_asset_category": "non_financial" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 7: taxpayer disposals, disposal proceeds and gains by asset type and period of ownership", + "source_file": "Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods", + "source_sha256": "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-asset-type-2026/2026/a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd/Table_7_2026_Statistics_by_asset_type_in_the_2023_to_2024_tax_year.ods" + }, + "value": 14535000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0eeb70d01235e3bd5c499f8e", + "semantic_fact_key": "ledger_semantic_fact_v2_559005ca16cdc1a85a366cbf", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.disposals_self_assessment_component", + "concept": "hmrc.cgt_table8a.residential_property_disposals", + "measure_id": "disposals_self_assessment_component", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "self_assessment_component" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 35000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6e8dd1052d0346daf105ef1b", + "semantic_fact_key": "ledger_semantic_fact_v2_59f4351de6c44853ec2fe80b", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.disposals_total", + "concept": "hmrc.cgt_table8a.residential_property_disposals", + "measure_id": "disposals_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "total" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 230000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_38c80053a410e0e939cf2cfa", + "semantic_fact_key": "ledger_semantic_fact_v2_dc5cf28d52e302086ee779dc", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.disposals_uk_property_service", + "concept": "hmrc.cgt_table8a.residential_property_disposals", + "measure_id": "disposals_uk_property_service", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "uk_property_service" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 195000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d3db04a621eb17c9ea54bdca", + "semantic_fact_key": "ledger_semantic_fact_v2_259fd9c98b796c6f878c7c8d", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.gains_self_assessment_component", + "concept": "hmrc.cgt_table8a.residential_property_gains", + "measure_id": "gains_self_assessment_component", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "self_assessment_component" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 2009000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1f8003c937764e4184da3f24", + "semantic_fact_key": "ledger_semantic_fact_v2_4b0efb3b37b1c24a86d22c02", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.gains_total", + "concept": "hmrc.cgt_table8a.residential_property_gains", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "total" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 12914000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d6894d416d485d2f88cc262a", + "semantic_fact_key": "ledger_semantic_fact_v2_3452c1aaf696cb83ccab3483", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.gains_uk_property_service", + "concept": "hmrc.cgt_table8a.residential_property_gains", + "measure_id": "gains_uk_property_service", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "uk_property_service" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 10904000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f30c0649e8ea02628ff31835", + "semantic_fact_key": "ledger_semantic_fact_v2_9ff499390c745bb1730781b2", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.tax_self_assessment_component", + "concept": "hmrc.cgt_table8a.residential_property_tax", + "measure_id": "tax_self_assessment_component", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "self_assessment_component" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 456000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fe50788c9e95f3fea9c5643f", + "semantic_fact_key": "ledger_semantic_fact_v2_2343dfdd6323627c2c6e6b9a", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.tax_total", + "concept": "hmrc.cgt_table8a.residential_property_tax", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "total" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 2809000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3aa3d4cf7d9fa5edd6a45987", + "semantic_fact_key": "ledger_semantic_fact_v2_b2ac8fa010d9593b42c8c604", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.tax_uk_property_service", + "concept": "hmrc.cgt_table8a.residential_property_tax", + "measure_id": "tax_uk_property_service", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "uk_property_service" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 2353000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_62b888c7680528330b30ff60", + "semantic_fact_key": "ledger_semantic_fact_v2_89feca81e5eec664917475b6", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.taxpayers_self_assessment_only", + "concept": "hmrc.cgt_table8a.residential_property_taxpayers", + "measure_id": "taxpayers_self_assessment_only", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "self_assessment_only" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 32000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a26f1261bd153727b83045de", + "semantic_fact_key": "ledger_semantic_fact_v2_2741e3bd65b00256a83800a7", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.taxpayers_total", + "concept": "hmrc.cgt_table8a.residential_property_taxpayers", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "total" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 205000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d6475894d328290678ed8bda", + "semantic_fact_key": "ledger_semantic_fact_v2_4a5fe72a200421858f896cca", + "source_record_id": "hmrc.cgt_table8_2026.table8a.ty2024.ty2024.taxpayers_uk_property_service", + "concept": "hmrc.cgt_table8a.residential_property_taxpayers", + "measure_id": "taxpayers_uk_property_service", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "uk_property_service" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 173000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_49e342a62d689694c21fe33d", + "semantic_fact_key": "ledger_semantic_fact_v2_dc5cf28d52e302086ee779dc", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.all.disposals", + "concept": "hmrc.cgt_table8b.residential_property_disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "all", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "uk_property_service" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 195000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ca19b6f2801007bf718db7a6", + "semantic_fact_key": "ledger_semantic_fact_v2_96dfc79de8a0233da54e20d5", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.individuals.disposals", + "concept": "hmrc.cgt_table8b.residential_property_disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "individuals", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "individuals" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 192000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c9ee3d9ddfeb36f9a2be7829", + "semantic_fact_key": "ledger_semantic_fact_v2_1874bb37a96a81c0c677ce49", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.trusts.disposals", + "concept": "hmrc.cgt_table8b.residential_property_disposals", + "measure_id": "disposals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "trusts", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "trusts" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0be097fa0d180fb2c5c66661", + "semantic_fact_key": "ledger_semantic_fact_v2_3452c1aaf696cb83ccab3483", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.all.gains", + "concept": "hmrc.cgt_table8b.residential_property_gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "all", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "uk_property_service" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 10904000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a0b79c3ba46671e0dfd8f878", + "semantic_fact_key": "ledger_semantic_fact_v2_cdf5fd8d429bf61271d52e43", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.individuals.gains", + "concept": "hmrc.cgt_table8b.residential_property_gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "individuals", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "individuals" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 10337000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ca24903c8aa77cc8a075059a", + "semantic_fact_key": "ledger_semantic_fact_v2_178af53b891202a49d9a925b", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.trusts.gains", + "concept": "hmrc.cgt_table8b.residential_property_gains", + "measure_id": "gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "trusts", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "trusts" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 567000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3d13c67355d8eed45b0edfe5", + "semantic_fact_key": "ledger_semantic_fact_v2_ec0e0da4746133c522e6ab69", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.all.returns", + "concept": "hmrc.cgt_table8b.residential_property_returns", + "measure_id": "returns", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "all", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "uk_property_service" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 187000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f1c6e5522b6acd315fe54a74", + "semantic_fact_key": "ledger_semantic_fact_v2_b266a103ef87c24c808ceff8", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.individuals.returns", + "concept": "hmrc.cgt_table8b.residential_property_returns", + "measure_id": "returns", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "individuals", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "individuals" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 184000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8e0ddfae08e8c20ab1b9e5c8", + "semantic_fact_key": "ledger_semantic_fact_v2_91a4065849698a18da039842", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.trusts.returns", + "concept": "hmrc.cgt_table8b.residential_property_returns", + "measure_id": "returns", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "trusts", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "trusts" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_dccafc283059b6ede776f234", + "semantic_fact_key": "ledger_semantic_fact_v2_b2ac8fa010d9593b42c8c604", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.all.tax", + "concept": "hmrc.cgt_table8b.residential_property_tax", + "measure_id": "tax", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "all", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "uk_property_service" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 2353000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d8e8a12c386b72540a98f433", + "semantic_fact_key": "ledger_semantic_fact_v2_6c92174ae1c3da8fd46b51c3", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.individuals.tax", + "concept": "hmrc.cgt_table8b.residential_property_tax", + "measure_id": "tax", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "individuals", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "individuals" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 2213000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3615def485bf22f7fbfd3fba", + "semantic_fact_key": "ledger_semantic_fact_v2_5c8e9b9155df6033b784d031", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.trusts.tax", + "concept": "hmrc.cgt_table8b.residential_property_tax", + "measure_id": "tax", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "trusts", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "trusts" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 140000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7a9a96e371320c0f4e21261f", + "semantic_fact_key": "ledger_semantic_fact_v2_4a5fe72a200421858f896cca", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.all.taxpayers", + "concept": "hmrc.cgt_table8b.residential_property_taxpayers", + "measure_id": "taxpayers", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "all", + "table_record_kind": "total" + }, + "dimensions": { + "channel": "uk_property_service" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 173000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7ea881ca1e22de079bf8d892", + "semantic_fact_key": "ledger_semantic_fact_v2_ff132d5e2ac1dce0f521b7bb", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.individuals.taxpayers", + "concept": "hmrc.cgt_table8b.residential_property_taxpayers", + "measure_id": "taxpayers", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "individuals", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "individuals" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 171000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d26496af5dcb4319201be187", + "semantic_fact_key": "ledger_semantic_fact_v2_a0ab6baa3a3b92d7fea7e227", + "source_record_id": "hmrc.cgt_table8_2026.table8b.ty2024.trusts.taxpayers", + "concept": "hmrc.cgt_table8b.residential_property_taxpayers", + "measure_id": "taxpayers", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024", + "groupby_dimension": "taxpayer_type", + "groupby_value_id": "trusts", + "table_record_kind": "detail" + }, + "dimensions": { + "channel": "uk_property_service", + "taxpayer_type": "trusts" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_file": "Table_8_2026_Statistics_on_UK_residential_property.ods", + "source_sha256": "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-residential-property-2026/2026/fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952/Table_8_2026_Statistics_on_UK_residential_property.ods" + }, + "value": 3000 + } + ] +} diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_cgt_conditioning_facts.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_cgt_conditioning_facts.json new file mode 100644 index 0000000000..acb45a6062 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk/hmrc_cgt_conditioning_facts.json @@ -0,0 +1,11513 @@ +{ + "schema_version": 1, + "country": "uk", + "kind": "uk_vendored_ledger_facts", + "resource": "hmrc_cgt_conditioning_facts.json", + "purpose": "HMRC Capital Gains Tax statistics 2026 release, tax year 2024-25 individual observations the CGT amounts imputation draws from and conditions on and the size-band donor stage weights by: Table 3 individuals by size of gain crossed with taxable income (the joint the amounts are drawn from: 10 gain bands x 6 income bands, the all-incomes row totals, the all-gains column totals and the grand total; cells too small to publish are absent), Table 2.1a individuals by size of gain (taxpayers and gains, 13 bands), Table 6 individuals by age band (taxpayers, gains and tax, 9 bands plus the all-ages total), Table 5 taxpayers, gains and tax by UK country and region (all taxpayers including trusts; 12 region-tier areas plus the England and UK totals) and Table 1 individuals, trusts and total lines (the individuals/total shares that translate Table 5 onto the individuals basis). The stage rakes its allocation targets to these margins and reports achieved versus published at the same grain; no value is derived here.", + "consumers": [ + "uk_runtime.hmrc_capital_gains", + "uk_runtime.cgt_structure" + ], + "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": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", + "build": "build-bundle --suite uk -> build-consumer-artifact", + "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" + }, + "selections": [ + { + "label": "table3_ty2024_individuals_by_size_of_gain_and_taxable_income", + "selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024 + }, + "row_count": 147 + }, + { + "label": "table2_1a_ty2024_individuals_by_size_of_gain", + "selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "source_concept": [ + "hmrc.cgt_taxpayers_individuals", + "hmrc.cgt_gains_individuals" + ], + "period_type": "tax_year", + "period_value": 2024 + }, + "row_count": 26 + }, + { + "label": "table6_ty2024_individuals_by_age_band", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024" + }, + "row_count": 30 + }, + { + "label": "table5_ty2024_all_taxpayers_by_country_region", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024" + }, + "row_count": 42 + }, + { + "label": "table1_ty2024_individuals_trusts_total", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024" + }, + "row_count": 9 + } + ], + "row_count": 254, + "rows": [ + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bca8c14c307ca3e97c9ff444", + "semantic_fact_key": "ledger_semantic_fact_v2_5dd0b61c8a8c947b0ad46421", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_0_to_15.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_0_to_15", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_0_to_15" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 54000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_af584dedce4184d834502e56", + "semantic_fact_key": "ledger_semantic_fact_v2_b6285e0ed0154334a2d2f0a7", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_16_to_24.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_16_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_16_to_24" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 319000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_40c8b42d3904c8eb44297559", + "semantic_fact_key": "ledger_semantic_fact_v2_af905bdefd512d8c5d64ced5", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_25_to_34.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 2499000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_375b4cb880dcb4caacc5f003", + "semantic_fact_key": "ledger_semantic_fact_v2_d20070b14ed1ad07062c675d", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_35_to_44.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 11775000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_567f8babf11f6356f72398de", + "semantic_fact_key": "ledger_semantic_fact_v2_18bab36c18a27167ab0f4fc0", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_45_to_54.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 28422000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_38da5aa08efc20c32951a860", + "semantic_fact_key": "ledger_semantic_fact_v2_5cda6c02b852685c07ebccd2", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_55_to_64.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 38118000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_69e2dec98e4cdbe34c3a0572", + "semantic_fact_key": "ledger_semantic_fact_v2_466f23cae9e113a6f83dab94", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_65_to_74.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 24260000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9d0fb4e1a0c63f6d06b73e61", + "semantic_fact_key": "ledger_semantic_fact_v2_368547a6338a44531009ec28", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_75_to_84.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_75_to_84", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_to_84" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 11736000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ca2b09a93c8a40ea4766b341", + "semantic_fact_key": "ledger_semantic_fact_v2_b9bf0d167d4e8810c75ec90f", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_85_plus.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_85_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_85_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 2076000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fe706a0e8298c94322653b24", + "semantic_fact_key": "ledger_semantic_fact_v2_4d5f1ef7fbc86dd79d1c669e", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.all_ages.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "all_ages", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 119258000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_34883c3349b61fb7875b85ce", + "semantic_fact_key": "ledger_semantic_fact_v2_bb1812400ee2c1561a16775c", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 24551000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f4f922a95f792326faf77ec8", + "semantic_fact_key": "ledger_semantic_fact_v2_12e328483f79d182551cdeb0", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 5293000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_62b93eaa7a9e2acf76ef70e2", + "semantic_fact_key": "ledger_semantic_fact_v2_c0d64654e981286da9cd9afd", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 10948000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f5177011b130ef1ad4338bb4", + "semantic_fact_key": "ledger_semantic_fact_v2_a56a1864fe05d64141fc6d57", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 55127000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_738e2f54bc21206d6af1b64d", + "semantic_fact_key": "ledger_semantic_fact_v2_bcf1216d8b3178a5d191386e", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 6178000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_342eca3641c9a9dd39b88c16", + "semantic_fact_key": "ledger_semantic_fact_v2_1bd60df10028b5374fe585d0", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 17160000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_570f541549d2b32a4629e3f4", + "semantic_fact_key": "ledger_semantic_fact_v2_4d5f1ef7fbc86dd79d1c669e", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 119258000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_dbfb0ef0e721759972a72895", + "semantic_fact_key": "ledger_semantic_fact_v2_a7aaa545664f945dba784858", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_0_to_2999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_0_to_2999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_2999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_2999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 1000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f477134add2504fb3560185c", + "semantic_fact_key": "ledger_semantic_fact_v2_c3be8a632c473592fc3ff1d2", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 414000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b528b9e2d38307000de8005a", + "semantic_fact_key": "ledger_semantic_fact_v2_e020f7a4faf0291230525a1e", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 28000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5a0ff5fc7a99450469f494f9", + "semantic_fact_key": "ledger_semantic_fact_v2_5716b50e631acd0a2a9df4c1", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 46000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e9050b4de8815ba022d06547", + "semantic_fact_key": "ledger_semantic_fact_v2_32583c5bdce20eb08fcead1f", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 72000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5d946c1eddec119c031e702e", + "semantic_fact_key": "ledger_semantic_fact_v2_3189f1b3dcf17a5e4f48a8d6", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 71000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c337e55ae40f01ce23a8e38a", + "semantic_fact_key": "ledger_semantic_fact_v2_917add8e2fa8be0a2a99b09d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 128000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a7849142a7c14a1bae50b46f", + "semantic_fact_key": "ledger_semantic_fact_v2_38c5f18c2a146a931067d2b0", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 759000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4e92511f5e656853ca4878b6", + "semantic_fact_key": "ledger_semantic_fact_v2_778e6558acbdd726e32879b6", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2715000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9e949e9b656769cd21d57d3b", + "semantic_fact_key": "ledger_semantic_fact_v2_86bcc6e26e63bc4853c297e4", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 863000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_50553ee2cb15c50f951fdd8d", + "semantic_fact_key": "ledger_semantic_fact_v2_b50b3b13637adccccdd1408d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1507000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e73ae2a81e1d63e5dc28d79c", + "semantic_fact_key": "ledger_semantic_fact_v2_9f1508ca313b9e4fb0e105e8", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3887000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c57b970e630523ac7c384d30", + "semantic_fact_key": "ledger_semantic_fact_v2_5e35a46ac1679f70e4d72f4c", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 980000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_24c062f12a32466f7eb6d91c", + "semantic_fact_key": "ledger_semantic_fact_v2_834aec2e80afe2d4ba48d452", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2854000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e8a066c98f276f2cad2f3c45", + "semantic_fact_key": "ledger_semantic_fact_v2_34a813f514cdec162a4a91e3", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 12806000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d4ad617897f228660a6a6be3", + "semantic_fact_key": "ledger_semantic_fact_v2_34a813f514cdec162a4a91e3", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_1000000_to_1999999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 12806000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a07fc25f9806563a83a722a5", + "semantic_fact_key": "ledger_semantic_fact_v2_aebd115ba759121e86ecda27", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 4333000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6b17c98e71310153bc279c60", + "semantic_fact_key": "ledger_semantic_fact_v2_8bdd7b203ece216e2b14a5fb", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 431000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5bd0d579b08af5989879c08c", + "semantic_fact_key": "ledger_semantic_fact_v2_0d8e89cec9abc492ad3564e0", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 716000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6a67ff29636773c26bf6ccd9", + "semantic_fact_key": "ledger_semantic_fact_v2_6ac180db048ccf9263bb6346", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1250000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cc7cc386d2688c64af9f65e7", + "semantic_fact_key": "ledger_semantic_fact_v2_49d9a1ea903abc26c8d54b9f", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 913000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8701ea171cd8c5387a66e061", + "semantic_fact_key": "ledger_semantic_fact_v2_e7ecfe31a4424d43ed6069d1", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1844000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6df6d3709ad6fda809d60e49", + "semantic_fact_key": "ledger_semantic_fact_v2_2ad9b63c21ba798f4e1acda3", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 9487000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ed181e27011def0336c6cd99", + "semantic_fact_key": "ledger_semantic_fact_v2_2ad9b63c21ba798f4e1acda3", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_100000_to_249999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 9487000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0ce43b4d53bb602f1b9fb49a", + "semantic_fact_key": "ledger_semantic_fact_v2_3c0c7b33c6dbd1823408cfa0", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_10000_to_12299.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_10000_to_12299", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_12299", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_12299" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 289000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ba5395d3e062ac3636a5da46", + "semantic_fact_key": "ledger_semantic_fact_v2_374a551748d5a0850306ce8d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1195000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9ac942c15cd85fa3e3ea93a7", + "semantic_fact_key": "ledger_semantic_fact_v2_c2a229422ae0e8dedb4ea80c", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 65000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7f2af305b36e2f5aa6ec14a3", + "semantic_fact_key": "ledger_semantic_fact_v2_a75bdf519427fbaac234d6b8", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 98000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_41e8313f2037df4d296ab8d8", + "semantic_fact_key": "ledger_semantic_fact_v2_52a57e22098f9a2eb5a7db45", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 180000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_358a4f1b69297c7a7dd97c79", + "semantic_fact_key": "ledger_semantic_fact_v2_c4e5b0b78abaeee2cf59910d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 179000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4cd77c53844e548c8c6b3859", + "semantic_fact_key": "ledger_semantic_fact_v2_2dfb8551f8c1b95929214ecf", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 318000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_07701560556c6193cff37ba5", + "semantic_fact_key": "ledger_semantic_fact_v2_2ba86f2289b4e976a2f3d272", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2036000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_52d8b43cd07113d29860cd06", + "semantic_fact_key": "ledger_semantic_fact_v2_918185dcb5312069b9a2b410", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_12300_to_24999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_12300_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_12300_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_12300_to_24999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 1747000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_105001284acd24ebfed9349c", + "semantic_fact_key": "ledger_semantic_fact_v2_39bc82edfdddaf8b8ab08b18", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2279000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_06fc345bc9c7b05c5e97c2b5", + "semantic_fact_key": "ledger_semantic_fact_v2_5a58e86f22eeb45eb7862a14", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1045000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_57276cec3bd19d490b68d241", + "semantic_fact_key": "ledger_semantic_fact_v2_cbaf7fcebc7b84bf2c9ea1c9", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2325000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_58bf1229558604bf49a5bd18", + "semantic_fact_key": "ledger_semantic_fact_v2_a3e9115d064b2e8890b63291", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 7141000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_981280aa07331a90ec821241", + "semantic_fact_key": "ledger_semantic_fact_v2_6324a5e0df330b23d0c1a0a2", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 805000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a8147ea72c801b45d4eb1be9", + "semantic_fact_key": "ledger_semantic_fact_v2_787c8a8bd3950ba8e9da0ad8", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2882000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_41b0f52eaaf2ac05422c046f", + "semantic_fact_key": "ledger_semantic_fact_v2_71f756933bc4231ca6641169", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 16477000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_36a58e75b04a937aa837b211", + "semantic_fact_key": "ledger_semantic_fact_v2_71f756933bc4231ca6641169", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_2000000_to_4999999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 16477000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_717acc9223ba6fffc080be5e", + "semantic_fact_key": "ledger_semantic_fact_v2_edcc875ce749e43fbcc793b4", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3091000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c904da3f67a4928044f3c16d", + "semantic_fact_key": "ledger_semantic_fact_v2_d23cd0347dd7185677196bcc", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 486000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_454b79becf60a0ff9230b297", + "semantic_fact_key": "ledger_semantic_fact_v2_54fc689021f4ed1e11ea3e80", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 840000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_10d15907519b4a6aadb2f2ed", + "semantic_fact_key": "ledger_semantic_fact_v2_32705875987744842f1d5de5", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1665000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7b2f7e30216a13d2fa827a19", + "semantic_fact_key": "ledger_semantic_fact_v2_6fadce6db5a2a94c3ac8870c", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 821000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_179827c4a1525264a90b57e6", + "semantic_fact_key": "ledger_semantic_fact_v2_57f437b6a42d56d22e0263a9", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1916000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_102aebeb9d9c1a5ac3fb0319", + "semantic_fact_key": "ledger_semantic_fact_v2_f03de569657aedd6bdc21c96", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 8820000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e79c0dd87ea41c5469aa88af", + "semantic_fact_key": "ledger_semantic_fact_v2_f03de569657aedd6bdc21c96", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_250000_to_499999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 8820000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a0e99e6571775cafc7fd969a", + "semantic_fact_key": "ledger_semantic_fact_v2_30310ea28bc68f8c61de4694", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2152000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a09c5a7b5b9b8e1f37919fac", + "semantic_fact_key": "ledger_semantic_fact_v2_5e94ff76fe08242581d0ecbd", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 101000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_be7ae6652a7c230be71ed7ba", + "semantic_fact_key": "ledger_semantic_fact_v2_cea0855287bbe25bff065ca3", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 157000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_038d1a43eea49092720b5e1c", + "semantic_fact_key": "ledger_semantic_fact_v2_90597dd7694c1f332f84e9b5", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 284000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_70dad5138f3dd83560d5629e", + "semantic_fact_key": "ledger_semantic_fact_v2_b7559fa86a8e248861d27714", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 303000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cbdc02ac4b37106066759825", + "semantic_fact_key": "ledger_semantic_fact_v2_b4f6020f79a19cb916ce3ed0", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 519000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_187d908f626d40758060291b", + "semantic_fact_key": "ledger_semantic_fact_v2_602fe1ba623ede2cd0657e18", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3516000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_12a05bb18f0245343b24c882", + "semantic_fact_key": "ledger_semantic_fact_v2_602fe1ba623ede2cd0657e18", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_25000_to_49999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 3516000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_68d13fca859e018be0915149", + "semantic_fact_key": "ledger_semantic_fact_v2_7e8f870a1c33a411f9867e14", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_3000_to_5999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_3000_to_5999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_3000_to_5999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_3000_to_5999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 311000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_212b538a34f9601cbce6cef8", + "semantic_fact_key": "ledger_semantic_fact_v2_3fa217523453bdf2e2dc6c1d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2088000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cad33ab58d20ac910b1f2650", + "semantic_fact_key": "ledger_semantic_fact_v2_b205ba19254a5b300a1d3d0f", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1363000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7a9f058cbc93d1d0dd059ae6", + "semantic_fact_key": "ledger_semantic_fact_v2_7289eff9683aace1ebebdbe4", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3729000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e80b32f4bb0a85c5a5edf8eb", + "semantic_fact_key": "ledger_semantic_fact_v2_21521b792ed4f5d26d214be9", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 37479000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a8fb9d422a09f835584994a5", + "semantic_fact_key": "ledger_semantic_fact_v2_7fd8207c4ec5bc6787abf22e", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 533000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_30aac28cc10d2a5f66c2de86", + "semantic_fact_key": "ledger_semantic_fact_v2_5a5da53aab41ece92af3753b", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3282000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ac6b3076287269de5d2c46b7", + "semantic_fact_key": "ledger_semantic_fact_v2_aab1cc68ae696f34c0d23885", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 48474000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e86658beb663c322dfe3f311", + "semantic_fact_key": "ledger_semantic_fact_v2_aab1cc68ae696f34c0d23885", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_5000000_plus.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 48474000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bcb4a6e61dded5b9c1f3749e", + "semantic_fact_key": "ledger_semantic_fact_v2_61d68003300c720d9a3a5396", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3195000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fbc443f167db2ec5e8dca28d", + "semantic_fact_key": "ledger_semantic_fact_v2_e66c5e6676bffeeee082be83", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 715000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c332817e771308c85989b1ef", + "semantic_fact_key": "ledger_semantic_fact_v2_980352881d02e54b54982963", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1224000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_338cf45837cafd138b8f6b97", + "semantic_fact_key": "ledger_semantic_fact_v2_c9e972b7d5342dbc1fe03b48", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2660000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c7f4b0cc63ed9366d925a7c3", + "semantic_fact_key": "ledger_semantic_fact_v2_d103043797432f9ef19ab9b3", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1087000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ff8a0ad1e6c7ba52c9ca510c", + "semantic_fact_key": "ledger_semantic_fact_v2_3737120907ef3549721d013f", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2491000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_920bb484f7ed87782e64debb", + "semantic_fact_key": "ledger_semantic_fact_v2_55bc34f803390bec5f83c797", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 11372000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bcee60127caf8ba271530f73", + "semantic_fact_key": "ledger_semantic_fact_v2_55bc34f803390bec5f83c797", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_500000_to_999999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 11372000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6a14e89719a03321b0fd68fb", + "semantic_fact_key": "ledger_semantic_fact_v2_15619e9684f3b5b6344c544a", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.gains_income_0_to_37699", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_0_to_37699", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3089000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ba38510a8e6304ca573eb8b3", + "semantic_fact_key": "ledger_semantic_fact_v2_b0055971c8dacd349c27abda", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.gains_income_100000_to_125139", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_100000_to_125139", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 196000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_45545a635cf32d8bb6cca432", + "semantic_fact_key": "ledger_semantic_fact_v2_92679bc7cf427358e1b8e27c", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.gains_income_125140_to_199999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_125140_to_199999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 304000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c8169ebac06a7202ca58d5da", + "semantic_fact_key": "ledger_semantic_fact_v2_62bbcfc63050668805023bac", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.gains_income_200000_plus", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_200000_plus", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 508000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6daab0cf9b5937f28ebc81f8", + "semantic_fact_key": "ledger_semantic_fact_v2_3fc915dc31a3c6601c9fa75a", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.gains_income_37700_to_49999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_37700_to_49999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 485000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ec0a34ae3034c9eb79a2f49f", + "semantic_fact_key": "ledger_semantic_fact_v2_c42eb87bf05be07f46639a1c", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.gains_income_50000_to_99999", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_income_50000_to_99999", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 927000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6f990a47b39808d5856d4455", + "semantic_fact_key": "ledger_semantic_fact_v2_dc7b67c49c314a9e2c64b8fc", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.gains_all_incomes", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_all_incomes", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 5510000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6854e6a3ad1abc041042f35d", + "semantic_fact_key": "ledger_semantic_fact_v2_dc7b67c49c314a9e2c64b8fc", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_50000_to_99999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 5510000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f808792afed121cadff6f396", + "semantic_fact_key": "ledger_semantic_fact_v2_3858372b298900fbba7b3e91", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_6000_to_9999.gains_individuals", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "gains_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_6000_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_6000_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_6000_to_9999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 448000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_12060d20a417d85d67cf24e8", + "semantic_fact_key": "ledger_semantic_fact_v2_1c1a1339fa42073bcb95e119", + "source_record_id": "hmrc.cgt_statistics_2026.table1.ty2024.ty2024.individuals_gains", + "concept": "hmrc.cgt_gains_individuals", + "measure_id": "individuals_gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": null, + "end_date": null, + "basis": null + }, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", + "source_file": "Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods", + "source_sha256": "d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-statistics-2026/2026/d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef/Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods" + }, + "value": 119258000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c56796163e95a924ef066aeb", + "semantic_fact_key": "ledger_semantic_fact_v2_1a52b0ec48ae6f77731ab535", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.north_east.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000001", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "north_east", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 1599000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_07d5a851c664d71dad2233c6", + "semantic_fact_key": "ledger_semantic_fact_v2_e681112967bfe8ea1b6b8328", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.north_west.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000002", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "north_west", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 9384000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6b4137649b34773c10d9731d", + "semantic_fact_key": "ledger_semantic_fact_v2_e0b0c178d9e90679fee97893", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.yorkshire_humber.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000003", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "yorkshire_humber", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 7442000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_61b52be8ce7d4fc692817ba9", + "semantic_fact_key": "ledger_semantic_fact_v2_39cdd06b16dab53ce6540002", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.east_midlands.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000004", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "east_midlands", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 6725000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_34a10615174b9297afe221b7", + "semantic_fact_key": "ledger_semantic_fact_v2_659bb752d85e8b6b3467b9b1", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.west_midlands.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000005", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "west_midlands", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 6289000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f15225d0bcd17c6de4da7274", + "semantic_fact_key": "ledger_semantic_fact_v2_6d4b194ccdfc3dfe61da6d98", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.east.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000006", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "east", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 12326000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1c9e621227b5e9e0de086a29", + "semantic_fact_key": "ledger_semantic_fact_v2_054c9798d675b4b188cb5d62", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.london.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000007", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "london", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 34717000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e292074b43a3aaf4dbd7700e", + "semantic_fact_key": "ledger_semantic_fact_v2_54b9917679dff3d3b82b1ef5", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.south_east.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000008", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "south_east", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 27337000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c7cfe6f18b190daed3153cfc", + "semantic_fact_key": "ledger_semantic_fact_v2_c3af0dad88efbbae1887d871", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.south_west.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000009", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "south_west", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 11040000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f64100d179188f457b587977", + "semantic_fact_key": "ledger_semantic_fact_v2_3da1d90251a3ffa51f41fe53", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.england.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E92000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "england", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 116859000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a9969c2a306f713f6bb203fc", + "semantic_fact_key": "ledger_semantic_fact_v2_b3278862060c7036e8477ea5", + "source_record_id": "hmrc.cgt_statistics_2026.table1.ty2024.ty2024.total_gains", + "concept": "hmrc.cgt_gains_total", + "measure_id": "total_gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": null, + "end_date": null, + "basis": null + }, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", + "source_file": "Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods", + "source_sha256": "d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-statistics-2026/2026/d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef/Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods" + }, + "value": 127316000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d22ed55a7a2e1c97abc7a881", + "semantic_fact_key": "ledger_semantic_fact_v2_b3278862060c7036e8477ea5", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.united_kingdom.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 127316000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8b23977ac0a2db5257dc6bfe", + "semantic_fact_key": "ledger_semantic_fact_v2_39f26f51e187f51d0e57fe00", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.northern_ireland.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "N92000002", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "northern_ireland", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 1876000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4af3f233994240b66f222933", + "semantic_fact_key": "ledger_semantic_fact_v2_03d7c36142bf210fb95000b0", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.scotland.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "S92000003", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "scotland", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 6064000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6cf6ec1d6cf7a4545c25ccb3", + "semantic_fact_key": "ledger_semantic_fact_v2_bfc4588b97c42242c66c0ecb", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.wales.gains_total", + "concept": "hmrc.cgt_gains_total", + "measure_id": "gains_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "W92000004", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "wales", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 2518000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5a20a960eef81c041accc2b7", + "semantic_fact_key": "ledger_semantic_fact_v2_f442a22fe4737b7e12fc353d", + "source_record_id": "hmrc.cgt_statistics_2026.table1.ty2024.ty2024.trusts_gains", + "concept": "hmrc.cgt_gains_trusts", + "measure_id": "trusts_gains", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": null, + "end_date": null, + "basis": null + }, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", + "source_file": "Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods", + "source_sha256": "d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-statistics-2026/2026/d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef/Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods" + }, + "value": 8057000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1501d79f7352f63b01f1ea14", + "semantic_fact_key": "ledger_semantic_fact_v2_ef8eecdd2e94d475222c4146", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_0_to_15.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_0_to_15", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_0_to_15" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 9000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5e45e49cdf5771a4f3dbc0c6", + "semantic_fact_key": "ledger_semantic_fact_v2_abf2878a22a4c8e310928752", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_16_to_24.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_16_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_16_to_24" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 59000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4f0a20f8646020c518ec1a6c", + "semantic_fact_key": "ledger_semantic_fact_v2_85a1f608ab9319c74068dd7d", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_25_to_34.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 456000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_041101c10e8ee3a674596ab2", + "semantic_fact_key": "ledger_semantic_fact_v2_76b126ce6f1658fda578f854", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_35_to_44.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 2246000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c678a6f27d3dc149131419ee", + "semantic_fact_key": "ledger_semantic_fact_v2_fcd950398af11e9420dc66ab", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_45_to_54.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 5522000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_76990ed6855fce16817d5289", + "semantic_fact_key": "ledger_semantic_fact_v2_e48fb35fb17d9923018112df", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_55_to_64.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 7152000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3d4b0b5873bbe5bce9c14381", + "semantic_fact_key": "ledger_semantic_fact_v2_b82d9b99b1905af9aa6f7bab", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_65_to_74.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 4409000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9c1150dfbd7f4f3b6235050b", + "semantic_fact_key": "ledger_semantic_fact_v2_574b03dc310106a670cc4c31", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_75_to_84.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_75_to_84", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_to_84" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 2260000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e60df0c2438533341e2f4b08", + "semantic_fact_key": "ledger_semantic_fact_v2_4b2fefd32dd984ee0c70d506", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_85_plus.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_85_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_85_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 390000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4d034cd5cdc3141e0aab937e", + "semantic_fact_key": "ledger_semantic_fact_v2_614dce4828b709c69e55cf72", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.all_ages.tax_individuals", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "tax_individuals", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "all_ages", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 22503000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_222c397017de7bff0a6583a7", + "semantic_fact_key": "ledger_semantic_fact_v2_9bcc5d8064b3b8a364fb8093", + "source_record_id": "hmrc.cgt_statistics_2026.table1.ty2024.ty2024.individuals_tax", + "concept": "hmrc.cgt_tax_individuals", + "measure_id": "individuals_tax", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": null, + "end_date": null, + "basis": null + }, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", + "source_file": "Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods", + "source_sha256": "d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-statistics-2026/2026/d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef/Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods" + }, + "value": 22503000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_76e65ef3cf8c61eceba34785", + "semantic_fact_key": "ledger_semantic_fact_v2_7e6056983802f9c3fd470b70", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.north_east.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000001", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "north_east", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 274000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a779be8d30ce3b18904a2c30", + "semantic_fact_key": "ledger_semantic_fact_v2_9ef42526f5b1347c8d739de2", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.north_west.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000002", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "north_west", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 1711000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_564ca1c8f8adfbbdabc73c00", + "semantic_fact_key": "ledger_semantic_fact_v2_34ccccee580e5066daa41aa1", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.yorkshire_humber.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000003", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "yorkshire_humber", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 1385000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bc913fd19d9a62a161605265", + "semantic_fact_key": "ledger_semantic_fact_v2_144d32dc27943c9ebb41ef8a", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.east_midlands.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000004", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "east_midlands", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 1224000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6992cb599e4f10777ec618d4", + "semantic_fact_key": "ledger_semantic_fact_v2_5cd44c20c23960a634a888e9", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.west_midlands.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000005", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "west_midlands", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 1136000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_981952a0a88f9d227ca4f63c", + "semantic_fact_key": "ledger_semantic_fact_v2_d2ab0da99fd4a0bd7aa8b8ea", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.east.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000006", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "east", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 2324000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_076b33cf58d4ee90969991c8", + "semantic_fact_key": "ledger_semantic_fact_v2_9986001fcbdf36cccfbc1720", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.london.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000007", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "london", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 7036000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cc9c8878ae90aa8a63dcf327", + "semantic_fact_key": "ledger_semantic_fact_v2_b5eba3651a60108d8b51c83b", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.south_east.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000008", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "south_east", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 5150000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b29f6b8a84ee7290c931a055", + "semantic_fact_key": "ledger_semantic_fact_v2_87f88fbe461a06a35d5370bb", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.south_west.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000009", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "south_west", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 2059000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c4fc72553fc302b77a588cc3", + "semantic_fact_key": "ledger_semantic_fact_v2_179eed1d77422e4dbe46c837", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.england.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E92000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "england", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 22299000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_aa87a0bd1fe6700d48f0dc80", + "semantic_fact_key": "ledger_semantic_fact_v2_027911c8a8414df2698ace57", + "source_record_id": "hmrc.cgt_statistics_2026.table1.ty2024.ty2024.total_tax", + "concept": "hmrc.cgt_tax_total", + "measure_id": "total_tax", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": null, + "end_date": null, + "basis": null + }, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", + "source_file": "Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods", + "source_sha256": "d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-statistics-2026/2026/d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef/Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods" + }, + "value": 24169000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2e6098699736f64d4d3d35f5", + "semantic_fact_key": "ledger_semantic_fact_v2_027911c8a8414df2698ace57", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.united_kingdom.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 24169000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_15f6637258381a4996bca1f3", + "semantic_fact_key": "ledger_semantic_fact_v2_23373a4c84576b5ba564e399", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.northern_ireland.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "N92000002", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "northern_ireland", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 332000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_29f08497d9341ce8f91cd0d1", + "semantic_fact_key": "ledger_semantic_fact_v2_5bafcca3d0cd1931d857cdb6", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.scotland.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "S92000003", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "scotland", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 1090000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_990919a5a5fd36a42604aedb", + "semantic_fact_key": "ledger_semantic_fact_v2_4eed494932e149c29ba47b6e", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.wales.tax_total", + "concept": "hmrc.cgt_tax_total", + "measure_id": "tax_total", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "W92000004", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "wales", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 447000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ae9ac44489e0779eb7718310", + "semantic_fact_key": "ledger_semantic_fact_v2_b68d592a2ccb8bb1aa89d67c", + "source_record_id": "hmrc.cgt_statistics_2026.table1.ty2024.ty2024.trusts_tax", + "concept": "hmrc.cgt_tax_trusts", + "measure_id": "trusts_tax", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": null, + "end_date": null, + "basis": null + }, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", + "source_file": "Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods", + "source_sha256": "d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-statistics-2026/2026/d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef/Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods" + }, + "value": 1666000000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e5423dfbc233e26052672b42", + "semantic_fact_key": "ledger_semantic_fact_v2_4c5f2aa34d3c93b974769da9", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_0_to_15.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_0_to_15", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_0_to_15" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 1000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8c3d294de4cbdbe292815164", + "semantic_fact_key": "ledger_semantic_fact_v2_422945d3d86d62aa7d87959a", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_16_to_24.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_16_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_16_to_24" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 4000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cc8ef619f52f7f44a885ce52", + "semantic_fact_key": "ledger_semantic_fact_v2_5b1c60e06cd04fa5405d4588", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_25_to_34.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 27000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8554e7f842699a5f49816a0d", + "semantic_fact_key": "ledger_semantic_fact_v2_1d547ad82a45c9eb283cbb73", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_35_to_44.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 65000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_794376b60fba0684412fdff8", + "semantic_fact_key": "ledger_semantic_fact_v2_1db44226a7b70ce461aac5dc", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_45_to_54.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 98000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0d6b6c36290ab598f74f6669", + "semantic_fact_key": "ledger_semantic_fact_v2_faa019b7094feb90a2a32503", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_55_to_64.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 144000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a725972fe4ee87a3bddee1cf", + "semantic_fact_key": "ledger_semantic_fact_v2_fdf2f314a04503659912a591", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_65_to_74.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 125000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1e4899d950c2b2be8ae21459", + "semantic_fact_key": "ledger_semantic_fact_v2_41cca4757d803a52ad6820b6", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_75_to_84.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_75_to_84", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_to_84" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 68000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7c419e2a82d25fae0127fd1d", + "semantic_fact_key": "ledger_semantic_fact_v2_893a832c90019c65969ec018", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.age_85_plus.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "age_85_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_85_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 19000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4fd72cd3c2a4d4ab60fe2e79", + "semantic_fact_key": "ledger_semantic_fact_v2_dbf2d7fa5b63cae2dda83f3f", + "source_record_id": "hmrc.cgt_table6_2026.age.ty2024.all_ages.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024", + "groupby_dimension": "age_band", + "groupby_value_id": "all_ages", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_file": "Table_6_2026_Age_statistics.ods", + "source_sha256": "03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-age-2026/2026/03207433a4b07f9bb065bd9a45631cd4a48f97f9afef36fdfeab7819c81073fb/Table_6_2026_Age_statistics.ods" + }, + "value": 551000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f28b96212db4bd74331f8289", + "semantic_fact_key": "ledger_semantic_fact_v2_d5fea2079bcc9e46a5df8733", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 292000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bc20105eff5e931018c0ec5b", + "semantic_fact_key": "ledger_semantic_fact_v2_aa177c3b31a5b6e31f595e63", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.taxpayers_income_100000_to_125139", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_100000_to_125139", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 21000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3ccfaab45013135497556c05", + "semantic_fact_key": "ledger_semantic_fact_v2_f537a65b526f63e8db35dde4", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 34000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_265a5ff96328902a64f2ec39", + "semantic_fact_key": "ledger_semantic_fact_v2_a9c26b0c9171e2fa32137471", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 62000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2a4327f9ee7eaa9258805572", + "semantic_fact_key": "ledger_semantic_fact_v2_5582eb0e75cd09aa02ccc31e", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.taxpayers_income_37700_to_49999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_37700_to_49999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 49000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_63ee0a3a5a137316b60dc445", + "semantic_fact_key": "ledger_semantic_fact_v2_cc3802618967d9b46ecff92d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": { + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 93000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d4772343512ae31a814e3b96", + "semantic_fact_key": "ledger_semantic_fact_v2_dbf2d7fa5b63cae2dda83f3f", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.all_gains.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.all_gains", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "all_gains", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 551000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ac7f90209feb119ae9750061", + "semantic_fact_key": "ledger_semantic_fact_v2_0f0fd1e91f268ca8ad2b6457", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_0_to_2999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_0_to_2999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_2999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_2999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c178e5393098d93bd276ebd7", + "semantic_fact_key": "ledger_semantic_fact_v2_25d296ca2d5c443aa46e9ce1", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 71000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f8430d37745d9331515bbf3d", + "semantic_fact_key": "ledger_semantic_fact_v2_9a091784f2c958a91509c997", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.taxpayers_income_100000_to_125139", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_100000_to_125139", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 5000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b5747dae9f421324ce5cf037", + "semantic_fact_key": "ledger_semantic_fact_v2_66d7929c115237f444e4c997", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 8000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_41da0c117909abc5dcabc144", + "semantic_fact_key": "ledger_semantic_fact_v2_3e6836896158a036b8581035", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 13000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_af585cba537ccbef2e721e25", + "semantic_fact_key": "ledger_semantic_fact_v2_9062b67326ab7a933d410d32", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.taxpayers_income_37700_to_49999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_37700_to_49999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 13000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7e6a05784f5b5a789b4905cb", + "semantic_fact_key": "ledger_semantic_fact_v2_daab587ada22fe957ac74814", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 23000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_82976e8692e074f979ee539a", + "semantic_fact_key": "ledger_semantic_fact_v2_6723123a605a859bdaf23457", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_0_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_0_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_0_to_9999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 133000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2c425f553fd2ed83c745d197", + "semantic_fact_key": "ledger_semantic_fact_v2_ce2acb594a3beacad6d16970", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f97901caa7d24864741496bb", + "semantic_fact_key": "ledger_semantic_fact_v2_c2784244ffd262ea430f9300", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.taxpayers_income_100000_to_125139", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_100000_to_125139", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9e446153c6c40c9778b39a60", + "semantic_fact_key": "ledger_semantic_fact_v2_882a919ed015f2efd92e6694", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ef21e8f405fcc215b5a7b1bb", + "semantic_fact_key": "ledger_semantic_fact_v2_86eb0bef34fe6db1da5aea41", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_98608bf81588cba9b74247e7", + "semantic_fact_key": "ledger_semantic_fact_v2_c701d24c17e3230062bcea92", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.taxpayers_income_37700_to_49999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_37700_to_49999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e9b992e68e5ea03b06331bef", + "semantic_fact_key": "ledger_semantic_fact_v2_75f163dc0905f4e5efb4f3c4", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8b46f0d03a4b3ff975d228df", + "semantic_fact_key": "ledger_semantic_fact_v2_7897cf5c29ea2ebcecabf6ab", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 9000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6a760ffb56140426b69a5269", + "semantic_fact_key": "ledger_semantic_fact_v2_7897cf5c29ea2ebcecabf6ab", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_1000000_to_1999999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_1000000_to_1999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_1000000_to_1999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_1000000_to_1999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 9000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_55b399cb2dc3d8898dc007d2", + "semantic_fact_key": "ledger_semantic_fact_v2_2c435d97fce49b7f9ea90ea1", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 28000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9fca3fbd05f40dbdfb27bd28", + "semantic_fact_key": "ledger_semantic_fact_v2_02dbb4db243e294054db5896", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.taxpayers_income_100000_to_125139", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_100000_to_125139", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7ca2ec471814dbe59c81ac17", + "semantic_fact_key": "ledger_semantic_fact_v2_e53c5f178188570cf0fdce37", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 4000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_859de06293ef52217562bb7a", + "semantic_fact_key": "ledger_semantic_fact_v2_23fbecf440854f53f25a7f15", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 8000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_838c658576751621c74c5ff4", + "semantic_fact_key": "ledger_semantic_fact_v2_ee660be13ac8998cba017c58", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.taxpayers_income_37700_to_49999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_37700_to_49999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 6000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9521e87427a142c908c3c3e8", + "semantic_fact_key": "ledger_semantic_fact_v2_1fafbc9912873554df0b078a", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 12000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e758640b508607c14d34ec69", + "semantic_fact_key": "ledger_semantic_fact_v2_964e09464bd1c28d22dfbd50", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 61000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9abad7ce7e36bcbf61e93db0", + "semantic_fact_key": "ledger_semantic_fact_v2_964e09464bd1c28d22dfbd50", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_100000_to_249999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_100000_to_249999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_100000_to_249999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_100000_to_249999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 61000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2393740ba1c11b1a31e54e75", + "semantic_fact_key": "ledger_semantic_fact_v2_b26bdc92814d8fb50811faef", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_10000_to_12299.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_10000_to_12299", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_12299", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_12299" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 26000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f56ae6f60ab010080fd09f13", + "semantic_fact_key": "ledger_semantic_fact_v2_6f0a74cf60553e9a9444460e", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 72000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5224c20277886fe681f6bb98", + "semantic_fact_key": "ledger_semantic_fact_v2_d4ea9bc962879b7c7a15c0f3", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.taxpayers_income_100000_to_125139", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_100000_to_125139", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 4000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_96dfdf36785aefbaaa30cd7a", + "semantic_fact_key": "ledger_semantic_fact_v2_1adbd97da9609f87d156f6c2", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 6000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2e7c7d2a72ac10dcbf757ca2", + "semantic_fact_key": "ledger_semantic_fact_v2_14d7ac11c37285a947a1bb9a", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 11000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b56547984a5a9f82d8764a28", + "semantic_fact_key": "ledger_semantic_fact_v2_28bf672f2332aa52a38c613f", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.taxpayers_income_37700_to_49999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_37700_to_49999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 11000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ba8409b6efd622dcd98d4e5d", + "semantic_fact_key": "ledger_semantic_fact_v2_8ba62746495cc0a9800083da", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 19000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4b419702afb49b0734c31722", + "semantic_fact_key": "ledger_semantic_fact_v2_690fbe2182082becc44dc012", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_10000_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_10000_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_10000_to_24999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 123000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c5a351873a7b2c4cc4150711", + "semantic_fact_key": "ledger_semantic_fact_v2_c41e2e24d8eee83f3263191a", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_12300_to_24999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_12300_to_24999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_12300_to_24999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_12300_to_24999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 97000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d75544f9c5da40164531366b", + "semantic_fact_key": "ledger_semantic_fact_v2_86fa13f0f96fa7fffeacab4d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ef23721acc9496d6a8fcd26b", + "semantic_fact_key": "ledger_semantic_fact_v2_ca635038890cdeade406e82d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_00b4e955faf6170006b80acf", + "semantic_fact_key": "ledger_semantic_fact_v2_1873872ad46d599c3f35c295", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5329c6dedfb8780e9e665846", + "semantic_fact_key": "ledger_semantic_fact_v2_78a69e3dc38d5f2acc90f84c", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_48950af2a9f922e5a2160d5d", + "semantic_fact_key": "ledger_semantic_fact_v2_8b7f715bd5016a4577c8d9de", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 5000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7a32f131c687a8bed9ec747a", + "semantic_fact_key": "ledger_semantic_fact_v2_8b7f715bd5016a4577c8d9de", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_2000000_to_4999999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_2000000_to_4999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_2000000_to_4999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_2000000_to_4999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 5000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a9a72dc79c4a2b0e08326949", + "semantic_fact_key": "ledger_semantic_fact_v2_7e62eac190ab9d7e0274b2a8", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 9000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c312756020494207ca80fc51", + "semantic_fact_key": "ledger_semantic_fact_v2_ac1ec69262ce1c2ded12db95", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.taxpayers_income_100000_to_125139", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_100000_to_125139", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cf9bdd746ff4950447be5a50", + "semantic_fact_key": "ledger_semantic_fact_v2_b4fbe267a17974aa5496954a", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_00ef767c08a9a6bbee2b79b9", + "semantic_fact_key": "ledger_semantic_fact_v2_28c96a25634f682153cb33d8", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 5000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ad37db021529849c35d6352e", + "semantic_fact_key": "ledger_semantic_fact_v2_6844759cfa33881a98b61f5d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.taxpayers_income_37700_to_49999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_37700_to_49999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a63c7c72e2b7826c033c6a47", + "semantic_fact_key": "ledger_semantic_fact_v2_045fd4041621783a79269b00", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 5000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_edebb8930f5396414c77e0c3", + "semantic_fact_key": "ledger_semantic_fact_v2_68f7d4608e2edc5a14ed1fc0", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 25000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9df6b0435f02114bbff8b83e", + "semantic_fact_key": "ledger_semantic_fact_v2_68f7d4608e2edc5a14ed1fc0", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_250000_to_499999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_250000_to_499999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_250000_to_499999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_250000_to_499999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 25000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b12ee304166de6ec249a25fc", + "semantic_fact_key": "ledger_semantic_fact_v2_f1e8c39f0870dfe6cee93c6d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 60000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6f43085a3da8db31f1425f7b", + "semantic_fact_key": "ledger_semantic_fact_v2_663ca937524bc4de82ea30c4", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.taxpayers_income_100000_to_125139", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_100000_to_125139", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b892142cae8e700c83c0db86", + "semantic_fact_key": "ledger_semantic_fact_v2_09d7a19bd92922434116d00b", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 4000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b8bdd03f5f3c6235e3bd1bc0", + "semantic_fact_key": "ledger_semantic_fact_v2_e6cc4233ae2aa6436d2a794d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 8000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_24a736c83951cd035437ef91", + "semantic_fact_key": "ledger_semantic_fact_v2_160e3606a96729745801c283", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.taxpayers_income_37700_to_49999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_37700_to_49999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 8000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e9c741a8c0ce822313757765", + "semantic_fact_key": "ledger_semantic_fact_v2_7d88c847898b7c6ea90b767b", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 14000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2d59ed7c200203b6d6798b0f", + "semantic_fact_key": "ledger_semantic_fact_v2_e3317f3970b655bbfd02985d", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 98000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_dbb814e164ce932da9f110e3", + "semantic_fact_key": "ledger_semantic_fact_v2_e3317f3970b655bbfd02985d", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_25000_to_49999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_25000_to_49999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_25000_to_49999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_25000_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 98000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_445cdec889b5a04a38bfc529", + "semantic_fact_key": "ledger_semantic_fact_v2_08f343edb5fa441fd5121500", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_3000_to_5999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_3000_to_5999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_3000_to_5999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_3000_to_5999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 73000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3a84c871638be32354305e86", + "semantic_fact_key": "ledger_semantic_fact_v2_e94623554476cc4371cc66d8", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_98dd1a74890447517eb353de", + "semantic_fact_key": "ledger_semantic_fact_v2_3cd3130605dfeea1fddd407a", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_185d64390d180e168f174c93", + "semantic_fact_key": "ledger_semantic_fact_v2_3cd3130605dfeea1fddd407a", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_5000000_plus.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_5000000_plus", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_5000000_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_5000000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fe1953e4ba4d0f46e0558c54", + "semantic_fact_key": "ledger_semantic_fact_v2_9a51a9ce47026e18880d83be", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 5000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_50b2b04e9932589f6e2c417a", + "semantic_fact_key": "ledger_semantic_fact_v2_429a7ce8573b88a28ccba6df", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.taxpayers_income_100000_to_125139", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_100000_to_125139", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 1000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b93765e9e6b80cc81ed4b8d5", + "semantic_fact_key": "ledger_semantic_fact_v2_dde97ba36dcc099203b8f6fa", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ce9b9aac9ae05956efe9cf1a", + "semantic_fact_key": "ledger_semantic_fact_v2_8a2aed6ec468b1e6b2279325", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 4000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_923cb94cfcc4639db5d2957a", + "semantic_fact_key": "ledger_semantic_fact_v2_804d70bd3ebf18a805001245", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.taxpayers_income_37700_to_49999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_37700_to_49999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 2000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1e22a90b42c1932fee4e43ee", + "semantic_fact_key": "ledger_semantic_fact_v2_8f466347960dc32a179d74c2", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_eb7e2f04ca72877989a44717", + "semantic_fact_key": "ledger_semantic_fact_v2_223cc1886d61900a88ee834a", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 16000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ff1311e347cb11ab13a55da8", + "semantic_fact_key": "ledger_semantic_fact_v2_223cc1886d61900a88ee834a", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_500000_to_999999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_500000_to_999999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_500000_to_999999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_500000_to_999999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 16000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bfb632faa21b48408ff604c1", + "semantic_fact_key": "ledger_semantic_fact_v2_f09adabb49a36ba8b6bdaa10", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.taxpayers_income_0_to_37699", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_0_to_37699", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_0_to_37699" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 44000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d2838572ddaf399408aaf1bf", + "semantic_fact_key": "ledger_semantic_fact_v2_d3f61ac0d2914091c54e0e1c", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.taxpayers_income_100000_to_125139", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_100000_to_125139", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_100000_to_125139" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 3000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8919edf0798ca97c2ed649be", + "semantic_fact_key": "ledger_semantic_fact_v2_67714662abe0e3372fdd57df", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.taxpayers_income_125140_to_199999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_125140_to_199999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_125140_to_199999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 4000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_81094d935a4a19de73bcea1c", + "semantic_fact_key": "ledger_semantic_fact_v2_7fca5f890732cb397f343825", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.taxpayers_income_200000_plus", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_200000_plus", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_200000_plus" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 7000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_108d8b0f91960fb07c094258", + "semantic_fact_key": "ledger_semantic_fact_v2_5d8340343ed72317f3377dd8", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.taxpayers_income_37700_to_49999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_37700_to_49999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_37700_to_49999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 7000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_239853998f03b2c0a7c2865c", + "semantic_fact_key": "ledger_semantic_fact_v2_a962cab5baf9eddc0e718f6e", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.taxpayers_income_50000_to_99999", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_income_50000_to_99999", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999", + "cgt_taxable_income_band": "income_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 13000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_dd6145046903de27ef4a9e3d", + "semantic_fact_key": "ledger_semantic_fact_v2_64d13add00bfec9df7e7f2f7", + "source_record_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999.taxpayers_all_incomes", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_all_incomes", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table3_2026.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "source_file": "Table_3_2026_Size_of_gain_by_income.ods", + "source_sha256": "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-gain-by-income-2026/2026/0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14/Table_3_2026_Size_of_gain_by_income.ods" + }, + "value": 78000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_16303d73f7eadbadac68edc5", + "semantic_fact_key": "ledger_semantic_fact_v2_64d13add00bfec9df7e7f2f7", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_50000_to_99999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_50000_to_99999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_50000_to_99999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_50000_to_99999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 78000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2f1e03f344a1e1de11bf0fe3", + "semantic_fact_key": "ledger_semantic_fact_v2_326c04f6b0186980bf7381d5", + "source_record_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_6000_to_9999.taxpayers_individuals", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "taxpayers_individuals", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.gain_6000_to_9999", + "groupby_dimension": "cgt_gain_band", + "groupby_value_id": "gain_6000_to_9999", + "table_record_kind": "detail" + }, + "dimensions": { + "cgt_gain_band": "gain_6000_to_9999" + }, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_file": "Table_2_2026_Size_of_gain.ods", + "source_sha256": "ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-size-of-gain-2026/2026/ad29223cc99f6e417a65f8de1d5415366e3bd918660cbcfc6232757597db667e/Table_2_2026_Size_of_gain.ods" + }, + "value": 57000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_31d709fc393c2bf4d04efca5", + "semantic_fact_key": "ledger_semantic_fact_v2_813226f79ce5af29f274cef7", + "source_record_id": "hmrc.cgt_statistics_2026.table1.ty2024.ty2024.individuals_count", + "concept": "hmrc.cgt_taxpayers_individuals", + "measure_id": "individuals_count", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": null, + "end_date": null, + "basis": null + }, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", + "source_file": "Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods", + "source_sha256": "d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-statistics-2026/2026/d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef/Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods" + }, + "value": 551000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_06f4adc777a4a3036026872f", + "semantic_fact_key": "ledger_semantic_fact_v2_4bfc7fa5ae6baeb5322a64b1", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.north_east.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000001", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "north_east", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 12000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9c0d0cc201d3d0f86df9f485", + "semantic_fact_key": "ledger_semantic_fact_v2_a41f3f13c705ca274218a1c2", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.north_west.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000002", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "north_west", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 44000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_abfee7a635221f3a6573857f", + "semantic_fact_key": "ledger_semantic_fact_v2_fa577f123e5f8fade8a1649e", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.yorkshire_humber.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000003", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "yorkshire_humber", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 34000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d8b059af35df8fc34df0ebfa", + "semantic_fact_key": "ledger_semantic_fact_v2_df8dbf1b81b76ba01eaee1e8", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.east_midlands.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000004", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "east_midlands", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 33000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d003284169d6847765c66221", + "semantic_fact_key": "ledger_semantic_fact_v2_1beb836df367b7ac3aa99ab9", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.west_midlands.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000005", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "west_midlands", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 35000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a48acd5e86822a82360de3c3", + "semantic_fact_key": "ledger_semantic_fact_v2_29c1a8de871ec2e6df24a418", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.east.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000006", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "east", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 62000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7bde136c5103f6b31dc478ef", + "semantic_fact_key": "ledger_semantic_fact_v2_b5130373305aa013f2bb17fe", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.london.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000007", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "london", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 113000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_228fb212eb226981e6213fb1", + "semantic_fact_key": "ledger_semantic_fact_v2_1e8b530b329fea3c8d766656", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.south_east.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000008", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "south_east", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 121000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_af8dd206a47ffbc3651ece3b", + "semantic_fact_key": "ledger_semantic_fact_v2_1efaf1bb8768472840f2bfd4", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.south_west.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E12000009", + "level": "region", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "south_west", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 64000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ca68e642bbbbf2909dd570d4", + "semantic_fact_key": "ledger_semantic_fact_v2_95e7b51cba975a82cb43ea99", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.england.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "E92000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "england", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 519000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ec8cf88ffb8304ce72228e8b", + "semantic_fact_key": "ledger_semantic_fact_v2_d8d5e36429e422aaaa00ae63", + "source_record_id": "hmrc.cgt_statistics_2026.table1.ty2024.ty2024.total_taxpayers", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "total_taxpayers", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": null, + "end_date": null, + "basis": null + }, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", + "source_file": "Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods", + "source_sha256": "d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-statistics-2026/2026/d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef/Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods" + }, + "value": 584000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6e1e95655544beac4dc9e457", + "semantic_fact_key": "ledger_semantic_fact_v2_d8d5e36429e422aaaa00ae63", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.united_kingdom.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 584000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2779d0ba66235d3ec59280b8", + "semantic_fact_key": "ledger_semantic_fact_v2_fb4604558a1f25daeee3e7ff", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.northern_ireland.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "N92000002", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "northern_ireland", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 10000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e3b5a134b920d7bcf071dc5c", + "semantic_fact_key": "ledger_semantic_fact_v2_4ab94c80c58a2d7b36e71395", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.scotland.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "S92000003", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "scotland", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 37000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c3fb868cb38397d0420cd136", + "semantic_fact_key": "ledger_semantic_fact_v2_4279e37b14eb922407ae6f2d", + "source_record_id": "hmrc.cgt_table5_2026.country_region.ty2024.wales.taxpayers_total", + "concept": "hmrc.cgt_taxpayers_total", + "measure_id": "taxpayers_total", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "W92000004", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-06", + "end_date": "2025-04-05", + "basis": "tax" + }, + "layout": { + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024", + "groupby_dimension": "geography", + "groupby_value_id": "wales", + "table_record_kind": "detail" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 5: taxpayers, gains and liabilities by UK country and region", + "source_file": "Table_5_2026_Regional_and_country_statistics.ods", + "source_sha256": "dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-country-region-2026/2026/dd3efb61a06bd794e605fc3b4a18401bb51828ba8f6dcb44e67c8fc3f6037509/Table_5_2026_Regional_and_country_statistics.ods" + }, + "value": 18000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6f7f13193d14a25c19df5632", + "semantic_fact_key": "ledger_semantic_fact_v2_a8b5ae8bb1e03513eb8f1572", + "source_record_id": "hmrc.cgt_statistics_2026.table1.ty2024.ty2024.trusts_count", + "concept": "hmrc.cgt_taxpayers_trusts", + "measure_id": "trusts_count", + "unit": "count", + "aggregation": "sum", + "entity": { + "name": "tax_unit", + "role": "taxpayer" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "tax_year", + "value": 2024 + }, + "period_coverage": { + "start_date": null, + "end_date": null, + "basis": null + }, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2024", + "table_record_kind": "total" + }, + "dimensions": {}, + "source": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", + "source_file": "Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods", + "source_sha256": "d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef", + "vintage": "cgt_statistics_2026", + "raw_r2_key": "raw/uk/hmrc/hmrc-cgt-statistics-2026/2026/d1413c30486f590d952d6e9c8940af6356ec796414418781412a89ba4c90c1ef/Table_1_2026_Taxpayer_numbers_gains_and_tax_liabilities.ods" + }, + "value": 32000 + } + ] +} diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_cgt_size_bands.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_cgt_size_bands.json deleted file mode 100644 index f17ec7fa16..0000000000 --- a/packages/microcosm-build/src/microcosm/build/uk/hmrc_cgt_size_bands.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "version": 1, - "country": "uk", - "source": { - "citation": "HMRC, Capital Gains Tax statistics, Table 2.1a: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain, individuals, 2023 to 2024 (provisional).", - "collection_url": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", - "url": "https://assets.publishing.service.gov.uk/media/6878ac562bad77c3dae4dcef/Table_2_2025_Size_of_gain.ods", - "artifact": "Table_2_2025_Size_of_gain.ods", - "sheet": "2_1a_2023-24", - "published": "2025-07-24", - "ods_sha256": "696456114f408edd84c004fbe6175d918c5a511b6aaa7a53a95ca8936db22491", - "ods_size_bytes": 10658, - "ods_retrieved": "2026-08-21", - "ods_content_check": "Sheet 2_1a_2023-24 present; taxpayer (79/74/53 thousand) and gains (1418/2645/22714 GBP million) cell values match the committed extraction.", - "extracted_csv_sha256": "97e6bfc60d35eec230a62f4412e3adc034f58c46b3699570415a547f59628ecb", - "mapped_build_period": "2024", - "period_mapping": "latest_published_tax_year", - "units": { - "taxpayers_thousands": "thousand taxpayers", - "gains_gbp_millions": "GBP million", - "tax_gbp_millions": "GBP million" - }, - "definition_note": "Published figures include only taxpayers with a CGT liability; they are narrower than all people with positive gains or gains above the annual exempt amount." - }, - "rows": [ - { - "lower_limit": 0, - "taxpayers_thousands": 2, - "gains_gbp_millions": 1, - "tax_gbp_millions": 9 - }, - { - "lower_limit": 3000, - "taxpayers_thousands": 0, - "gains_gbp_millions": 1, - "tax_gbp_millions": 0 - }, - { - "lower_limit": 6000, - "taxpayers_thousands": 61, - "gains_gbp_millions": 461, - "tax_gbp_millions": 18 - }, - { - "lower_limit": 10000, - "taxpayers_thousands": 23, - "gains_gbp_millions": 251, - "tax_gbp_millions": 20 - }, - { - "lower_limit": 12300, - "taxpayers_thousands": 79, - "gains_gbp_millions": 1418, - "tax_gbp_millions": 169 - }, - { - "lower_limit": 25000, - "taxpayers_thousands": 74, - "gains_gbp_millions": 2645, - "tax_gbp_millions": 423 - }, - { - "lower_limit": 50000, - "taxpayers_thousands": 53, - "gains_gbp_millions": 3731, - "tax_gbp_millions": 706 - }, - { - "lower_limit": 100000, - "taxpayers_thousands": 37, - "gains_gbp_millions": 5649, - "tax_gbp_millions": 1077 - }, - { - "lower_limit": 250000, - "taxpayers_thousands": 14, - "gains_gbp_millions": 4766, - "tax_gbp_millions": 826 - }, - { - "lower_limit": 500000, - "taxpayers_thousands": 8, - "gains_gbp_millions": 5705, - "tax_gbp_millions": 895 - }, - { - "lower_limit": 1000000, - "taxpayers_thousands": 5, - "gains_gbp_millions": 6390, - "tax_gbp_millions": 1067 - }, - { - "lower_limit": 2000000, - "taxpayers_thousands": 3, - "gains_gbp_millions": 9189, - "tax_gbp_millions": 1718 - }, - { - "lower_limit": 5000000, - "taxpayers_thousands": 2, - "gains_gbp_millions": 22714, - "tax_gbp_millions": 4532 - } - ], - "retained_band_checksums": { - "minimum_lower_limit": 12300, - "band_count": 9, - "taxpayers": 275000, - "gains_gbp": 62207000000 - } -} 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 d3b5b3e9b5..8900a99e2e 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json @@ -1,11 +1,11 @@ { - "compiled_count": 631, + "compiled_count": 705, "counts_by_kind": { - "calibration_drift": 370, - "fixture_only": 71, - "ledger_only": 65 + "calibration_drift": 388, + "fixture_only": 53, + "ledger_only": 121 }, - "difference_count": 506, + "difference_count": 562, "differences": [ { "fixture_value": 1608000.0, @@ -56,132 +56,6 @@ "period": 2025, "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." }, - { - "fixture_value": 5805652941.176472, - "kind": "fixture_only", - "name": "hmrc/capital_gains_band_100000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 6567201680.67227, - "kind": "fixture_only", - "name": "hmrc/capital_gains_band_1000000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 1457322689.0756304, - "kind": "fixture_only", - "name": "hmrc/capital_gains_band_12300", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 9443821008.403362, - "kind": "fixture_only", - "name": "hmrc/capital_gains_band_2000000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 2718348739.4957986, - "kind": "fixture_only", - "name": "hmrc/capital_gains_band_25000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 4898166386.554623, - "kind": "fixture_only", - "name": "hmrc/capital_gains_band_250000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 3834464705.8823533, - "kind": "fixture_only", - "name": "hmrc/capital_gains_band_50000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 5863205882.3529415, - "kind": "fixture_only", - "name": "hmrc/capital_gains_band_500000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 23343884033.61345, - "kind": "fixture_only", - "name": "hmrc/capital_gains_band_5000000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 37000.0, - "kind": "fixture_only", - "name": "hmrc/cgt_taxpayers_band_100000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 5000.0, - "kind": "fixture_only", - "name": "hmrc/cgt_taxpayers_band_1000000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 79000.0, - "kind": "fixture_only", - "name": "hmrc/cgt_taxpayers_band_12300", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 3000.0, - "kind": "fixture_only", - "name": "hmrc/cgt_taxpayers_band_2000000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 74000.0, - "kind": "fixture_only", - "name": "hmrc/cgt_taxpayers_band_25000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 14000.0, - "kind": "fixture_only", - "name": "hmrc/cgt_taxpayers_band_250000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 53000.0, - "kind": "fixture_only", - "name": "hmrc/cgt_taxpayers_band_50000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 8000.0, - "kind": "fixture_only", - "name": "hmrc/cgt_taxpayers_band_500000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, - { - "fixture_value": 2000.0, - "kind": "fixture_only", - "name": "hmrc/cgt_taxpayers_band_5000000", - "period": 2025, - "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." - }, { "fixture_value": 4845000000.0, "kind": "fixture_only", @@ -833,6 +707,146 @@ "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." }, + { + "kind": "ledger_only", + "ledger_value": 319000000.0, + "name": "hmrc.cgt.gains_by_age_band.age_16_to_24", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 2499000000.0, + "name": "hmrc.cgt.gains_by_age_band.age_25_to_34", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 11775000000.0, + "name": "hmrc.cgt.gains_by_age_band.age_35_to_44", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 28422000000.0, + "name": "hmrc.cgt.gains_by_age_band.age_45_to_54", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 38118000000.0, + "name": "hmrc.cgt.gains_by_age_band.age_55_to_64", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 24260000000.0, + "name": "hmrc.cgt.gains_by_age_band.age_65_to_74", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 11736000000.0, + "name": "hmrc.cgt.gains_by_age_band.age_75_to_84", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 2076000000.0, + "name": "hmrc.cgt.gains_by_age_band.age_85_plus", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 1497797150.3974364, + "name": "hmrc.cgt.gains_by_region@E12000001", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 8790074083.38308, + "name": "hmrc.cgt.gains_by_region@E12000002", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 6970985861.949795, + "name": "hmrc.cgt.gains_by_region@E12000003", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 6299365751.358824, + "name": "hmrc.cgt.gains_by_region@E12000004", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 5890960774.765152, + "name": "hmrc.cgt.gains_by_region@E12000005", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 11545870966.728456, + "name": "hmrc.cgt.gains_by_region@E12000006", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 32519714615.602127, + "name": "hmrc.cgt.gains_by_region@E12000007", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 25606804690.69088, + "name": "hmrc.cgt.gains_by_region@E12000008", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 10341263627.509504, + "name": "hmrc.cgt.gains_by_region@E12000009", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 1757265449.747086, + "name": "hmrc.cgt.gains_by_region@N92000002", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 5680201325.83493, + "name": "hmrc.cgt.gains_by_region@S92000003", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 2358632410.6946497, + "name": "hmrc.cgt.gains_by_region@W92000004", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, { "kind": "ledger_only", "ledger_value": 22503000000.0, @@ -840,6 +854,216 @@ "period": 2025, "reason": "PR #889 adds HMRC FY2024-25 individuals-only liability of GBP 22,503,000,000 to the observed-year fit. The historical fixture has no equivalent liability row; this is a declared ledger-only observation, not a cash-receipts reconciliation." }, + { + "kind": "ledger_only", + "ledger_value": 12242481474.688189, + "name": "hmrc.cgt.residential_property_gains.ty2024", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 202630.0578034682, + "name": "hmrc.cgt.residential_property_taxpayers.ty2024", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 59000000.0, + "name": "hmrc.cgt.tax_by_age_band.age_16_to_24", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 456000000.0, + "name": "hmrc.cgt.tax_by_age_band.age_25_to_34", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 2246000000.0, + "name": "hmrc.cgt.tax_by_age_band.age_35_to_44", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 5522000000.0, + "name": "hmrc.cgt.tax_by_age_band.age_45_to_54", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 7152000000.0, + "name": "hmrc.cgt.tax_by_age_band.age_55_to_64", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 4409000000.0, + "name": "hmrc.cgt.tax_by_age_band.age_65_to_74", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 2260000000.0, + "name": "hmrc.cgt.tax_by_age_band.age_75_to_84", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 390000000.0, + "name": "hmrc.cgt.tax_by_age_band.age_85_plus", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 4000.0, + "name": "hmrc.cgt.taxpayers_by_age_band.age_16_to_24", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 27000.0, + "name": "hmrc.cgt.taxpayers_by_age_band.age_25_to_34", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 65000.0, + "name": "hmrc.cgt.taxpayers_by_age_band.age_35_to_44", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 98000.0, + "name": "hmrc.cgt.taxpayers_by_age_band.age_45_to_54", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 144000.0, + "name": "hmrc.cgt.taxpayers_by_age_band.age_55_to_64", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 125000.0, + "name": "hmrc.cgt.taxpayers_by_age_band.age_65_to_74", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 68000.0, + "name": "hmrc.cgt.taxpayers_by_age_band.age_75_to_84", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 19000.0, + "name": "hmrc.cgt.taxpayers_by_age_band.age_85_plus", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 11321.91780821918, + "name": "hmrc.cgt.taxpayers_by_region@E12000001", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 41513.69863013699, + "name": "hmrc.cgt.taxpayers_by_region@E12000002", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 32078.767123287675, + "name": "hmrc.cgt.taxpayers_by_region@E12000003", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 31135.273972602743, + "name": "hmrc.cgt.taxpayers_by_region@E12000004", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 33022.260273972606, + "name": "hmrc.cgt.taxpayers_by_region@E12000005", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 58496.57534246576, + "name": "hmrc.cgt.taxpayers_by_region@E12000006", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 106614.72602739726, + "name": "hmrc.cgt.taxpayers_by_region@E12000007", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 114162.67123287672, + "name": "hmrc.cgt.taxpayers_by_region@E12000008", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 60383.56164383562, + "name": "hmrc.cgt.taxpayers_by_region@E12000009", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 9434.931506849316, + "name": "hmrc.cgt.taxpayers_by_region@N92000002", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 34909.24657534247, + "name": "hmrc.cgt.taxpayers_by_region@S92000003", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 16982.87671232877, + "name": "hmrc.cgt.taxpayers_by_region@W92000004", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, { "kind": "ledger_only", "ledger_value": 1800000000.0, @@ -875,6 +1099,48 @@ "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." }, + { + "kind": "ledger_only", + "ledger_value": 289000000.0, + "name": "hmrc/capital_gains_band_10000", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 311000000.0, + "name": "hmrc/capital_gains_band_3000", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 448000000.0, + "name": "hmrc/capital_gains_band_6000", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 26000.0, + "name": "hmrc/cgt_taxpayers_band_10000", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 73000.0, + "name": "hmrc/cgt_taxpayers_band_3000", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, + { + "kind": "ledger_only", + "ledger_value": 57000.0, + "name": "hmrc/cgt_taxpayers_band_6000", + "period": 2025, + "reason": "Declared ledger-only observation: HMRC CGT statistics 2026 release, FY2024-25 individual rows by age band (Table 6), by country and region on the individuals basis via the Table 1 share (Table 5), and the size-of-gain bands the incumbent never carried (Table 2.1a), and the residential property taxpayers and gains on the individuals basis via the Table 8b share (Table 8a). The frozen incumbent fixture has no equivalent row (microcosm#725, #467)." + }, { "kind": "ledger_only", "ledger_value": 111700000.0, @@ -1911,6 +2177,150 @@ "period": 2025, "reason": "Ledger-compiled value differs from the fixture value at this comparison period." }, + { + "fixture_value": 5805652941.176472, + "kind": "calibration_drift", + "ledger_value": 9487000000.0, + "name": "hmrc/capital_gains_band_100000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 6567201680.67227, + "kind": "calibration_drift", + "ledger_value": 12806000000.0, + "name": "hmrc/capital_gains_band_1000000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 1457322689.0756304, + "kind": "calibration_drift", + "ledger_value": 1747000000.0, + "name": "hmrc/capital_gains_band_12300", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 9443821008.403362, + "kind": "calibration_drift", + "ledger_value": 16477000000.0, + "name": "hmrc/capital_gains_band_2000000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 2718348739.4957986, + "kind": "calibration_drift", + "ledger_value": 3516000000.0, + "name": "hmrc/capital_gains_band_25000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 4898166386.554623, + "kind": "calibration_drift", + "ledger_value": 8820000000.0, + "name": "hmrc/capital_gains_band_250000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 3834464705.8823533, + "kind": "calibration_drift", + "ledger_value": 5510000000.0, + "name": "hmrc/capital_gains_band_50000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 5863205882.3529415, + "kind": "calibration_drift", + "ledger_value": 11372000000.0, + "name": "hmrc/capital_gains_band_500000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 23343884033.61345, + "kind": "calibration_drift", + "ledger_value": 48474000000.0, + "name": "hmrc/capital_gains_band_5000000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 37000.0, + "kind": "calibration_drift", + "ledger_value": 61000.0, + "name": "hmrc/cgt_taxpayers_band_100000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 5000.0, + "kind": "calibration_drift", + "ledger_value": 9000.0, + "name": "hmrc/cgt_taxpayers_band_1000000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 79000.0, + "kind": "calibration_drift", + "ledger_value": 97000.0, + "name": "hmrc/cgt_taxpayers_band_12300", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 3000.0, + "kind": "calibration_drift", + "ledger_value": 5000.0, + "name": "hmrc/cgt_taxpayers_band_2000000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 74000.0, + "kind": "calibration_drift", + "ledger_value": 98000.0, + "name": "hmrc/cgt_taxpayers_band_25000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 14000.0, + "kind": "calibration_drift", + "ledger_value": 25000.0, + "name": "hmrc/cgt_taxpayers_band_250000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 53000.0, + "kind": "calibration_drift", + "ledger_value": 78000.0, + "name": "hmrc/cgt_taxpayers_band_50000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 8000.0, + "kind": "calibration_drift", + "ledger_value": 16000.0, + "name": "hmrc/cgt_taxpayers_band_500000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, + { + "fixture_value": 2000.0, + "kind": "calibration_drift", + "ledger_value": 3000.0, + "name": "hmrc/cgt_taxpayers_band_5000000", + "period": 2025, + "reason": "Vintage and basis class: the incumbent banded CGT row reads uk-data's 2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, while the current reference binds the published FY2024-25 individuals cell for the same band at identity (Chronicle cgt_size_of_gain_2026), measured in 2024 at calibration index 2025 like the national CGT observations (microcosm#467, #725). The frozen incumbent fixture keeps its historical value." + }, { "fixture_value": 557000.0, "kind": "calibration_drift", 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 bd2c6112be..4d8b3895cd 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 @@ -450,6 +450,126 @@ "expected_row_count": 1465 } ] + }, + { + "resource": "hmrc_cgt_conditioning_facts.json", + "purpose": "HMRC Capital Gains Tax statistics 2026 release, tax year 2024-25 individual observations the CGT amounts imputation draws from and conditions on and the size-band donor stage weights by: Table 3 individuals by size of gain crossed with taxable income (the joint the amounts are drawn from: 10 gain bands x 6 income bands, the all-incomes row totals, the all-gains column totals and the grand total; cells too small to publish are absent), Table 2.1a individuals by size of gain (taxpayers and gains, 13 bands), Table 6 individuals by age band (taxpayers, gains and tax, 9 bands plus the all-ages total), Table 5 taxpayers, gains and tax by UK country and region (all taxpayers including trusts; 12 region-tier areas plus the England and UK totals) and Table 1 individuals, trusts and total lines (the individuals/total shares that translate Table 5 onto the individuals basis). The stage rakes its allocation targets to these margins and reports achieved versus published at the same grain; no value is derived here.", + "consumers": [ + "uk_runtime.hmrc_capital_gains", + "uk_runtime.cgt_structure" + ], + "planned_consumers": [], + "selections": [ + { + "label": "table3_ty2024_individuals_by_size_of_gain_and_taxable_income", + "selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 3: individual taxpayers and gains by size of gain and taxable income", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024 + }, + "expected_row_count": 147 + }, + { + "label": "table2_1a_ty2024_individuals_by_size_of_gain", + "selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "source_concept": [ + "hmrc.cgt_taxpayers_individuals", + "hmrc.cgt_gains_individuals" + ], + "period_type": "tax_year", + "period_value": 2024 + }, + "expected_row_count": 26 + }, + { + "label": "table6_ty2024_individuals_by_age_band", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table6_2026.age.ty2024" + }, + "expected_row_count": 30 + }, + { + "label": "table5_ty2024_all_taxpayers_by_country_region", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table5_2026.country_region.ty2024" + }, + "expected_row_count": 42 + }, + { + "label": "table1_ty2024_individuals_trusts_total", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_statistics_2026.table1.ty2024" + }, + "expected_row_count": 9 + } + ] + }, + { + "resource": "hmrc_cgt_asset_type_facts.json", + "purpose": "HMRC Capital Gains Tax statistics 2026 release rows the CGT asset-type stage assigns from and reports against: Table 8a tax year 2024-25 UK residents reporting residential property disposals (taxpayers, disposals, gains and tax by reporting channel: the CGT on UK Property service, the Self Assessment component and their total), Table 8b tax year 2024-25 UK Property service returns by taxpayer type (individuals, trusts and all; the individuals/all shares that restate Table 8a on the individuals basis of the national targets) and Table 7 tax year 2023-24 disposals, disposal proceeds and gains by asset category and asset type (sample-based; the composition prior for the non-residential asset-type draw, fenced from calibration). No value is derived here.", + "consumers": [ + "uk_runtime.cgt_asset_type" + ], + "planned_consumers": [], + "selections": [ + { + "label": "table8a_ty2024_residential_property_by_channel", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table8_2026.table8a.ty2024" + }, + "expected_row_count": 12 + }, + { + "label": "table8b_ty2024_uk_property_service_by_taxpayer_type", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table8_2026.table8b.ty2024" + }, + "expected_row_count": 15 + }, + { + "label": "table7_ty2023_by_asset_category", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table7_2026.asset_category.ty2023" + }, + "expected_row_count": 6 + }, + { + "label": "table7_ty2023_asset_category_total", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table7_2026.asset_category_total.ty2023" + }, + "expected_row_count": 3 + }, + { + "label": "table7_ty2023_by_financial_asset_type", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table7_2026.financial_asset_type.ty2023" + }, + "expected_row_count": 12 + }, + { + "label": "table7_ty2023_by_non_financial_asset_type", + "selector": { + "source_name": "hmrc", + "record_set_id": "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023" + }, + "expected_row_count": 12 + } + ] } ] } diff --git a/packages/microcosm-build/src/microcosm/build/uk/licensed_cars_fuel_type.json b/packages/microcosm-build/src/microcosm/build/uk/licensed_cars_fuel_type.json index 00a9886359..5f80e8ec3d 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/licensed_cars_fuel_type.json +++ b/packages/microcosm-build/src/microcosm/build/uk/licensed_cars_fuel_type.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/local_target_reference_membership.json b/packages/microcosm-build/src/microcosm/build/uk/local_target_reference_membership.json index 14184dbcdd..98563ed70b 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/local_target_reference_membership.json +++ b/packages/microcosm-build/src/microcosm/build/uk/local_target_reference_membership.json @@ -1,5 +1,5 @@ { - "source_fact_feed": "chronicle-uk-ec200856-consumer-facts", + "source_fact_feed": "chronicle-uk-c5e5bf8a-consumer-facts", "target_period": 2025, "candidate_count": 22464, "contract_target_count": 51, diff --git a/packages/microcosm-build/src/microcosm/build/uk/local_validation_levels.json b/packages/microcosm-build/src/microcosm/build/uk/local_validation_levels.json index 4abae4ea06..39c2645c77 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/local_validation_levels.json +++ b/packages/microcosm-build/src/microcosm/build/uk/local_validation_levels.json @@ -5,10 +5,10 @@ "source_feed": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", + "sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85" + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f" }, "rows": [ { @@ -19,7 +19,10 @@ "in_sample": false, "geography_id": "S92000003", "period": 2025, - "estimate": {"metric_name": "rent/private_rent", "reduction": "sum"}, + "estimate": { + "metric_name": "rent/private_rent", + "reduction": "sum" + }, "available_component_selector": { "record_set_id": "ons.pipr.june2026.average_rent_by_area", "source_measure_id": "private_rent", @@ -36,7 +39,10 @@ "in_sample": false, "geography_id": "W92000004", "period": 2025, - "estimate": {"metric_name": "rent/private_rent", "reduction": "sum"}, + "estimate": { + "metric_name": "rent/private_rent", + "reduction": "sum" + }, "available_component_selector": { "record_set_id": "ons.pipr.june2026.average_rent_by_area", "source_measure_id": "private_rent", @@ -53,7 +59,10 @@ "in_sample": true, "geography_id": "W92000004", "period": 2025, - "estimate": {"target_id": "dwp.uc.households_by_area", "reduction": "sum"}, + "estimate": { + "target_id": "dwp.uc.households_by_area", + "reduction": "sum" + }, "needs_facts": "The pinned feed has constituency UC households but no Wales-country UC household benchmark row.", "evidence": "uk-data#206 and uk-data#316 Welsh constituency-sum credibility check." }, @@ -65,10 +74,16 @@ "in_sample": true, "geography_id": "W92000004", "period": 2025, - "estimate": {"target_id": "hmrc.employment_income.amount", "reduction": "sum"}, + "estimate": { + "target_id": "hmrc.employment_income.amount", + "reduction": "sum" + }, "benchmark_selector": { "record_set_id": "hmrc.ty2023_24.spi.by_parliamentary_constituency", - "source_measure_ids": ["employment_income_count", "employment_income_mean"], + "source_measure_ids": [ + "employment_income_count", + "employment_income_mean" + ], "geography_id": "W92000004", "fact_period": 2023, "reduction": "count_x_mean" @@ -83,10 +98,16 @@ "in_sample": true, "geography_id": "W92000004", "period": 2025, - "estimate": {"target_id": "hmrc.self_employment_income.amount", "reduction": "sum"}, + "estimate": { + "target_id": "hmrc.self_employment_income.amount", + "reduction": "sum" + }, "benchmark_selector": { "record_set_id": "hmrc.ty2023_24.spi.by_parliamentary_constituency", - "source_measure_ids": ["self_employment_income_count", "self_employment_income_mean"], + "source_measure_ids": [ + "self_employment_income_count", + "self_employment_income_mean" + ], "geography_id": "W92000004", "fact_period": 2023, "reduction": "count_x_mean" @@ -101,7 +122,10 @@ "in_sample": false, "geography_id": "E92000001", "period": 2025, - "estimate": {"metric_name": "council_tax/net", "reduction": "sum"}, + "estimate": { + "metric_name": "council_tax/net", + "reduction": "sum" + }, "benchmark_selector": { "record_set_id": "mhclg.ct_collection_2025_26.table_5.net_collectable_debit.fy2025", "source_measure_id": "amount", @@ -118,7 +142,10 @@ "in_sample": false, "geography_id": "W92000004", "period": 2025, - "estimate": {"metric_name": "council_tax/net", "reduction": "sum"}, + "estimate": { + "metric_name": "council_tax/net", + "reduction": "sum" + }, "benchmark_selector": { "record_set_id": "welshgov.ct_collection_2025_26.table_2.wales", "source_measure_id": "net_collectable_debit", @@ -135,7 +162,10 @@ "in_sample": false, "geography_id": "S92000003", "period": 2025, - "estimate": {"metric_name": "council_tax/net", "reduction": "sum"}, + "estimate": { + "metric_name": "council_tax/net", + "reduction": "sum" + }, "benchmark_selector": { "record_set_id": "scotgov.slgfs_2024_25.table_2_8.council_tax_income_after_ctr.scotland", "source_measure_id": "council_tax_income_after_ctr", @@ -152,7 +182,10 @@ "in_sample": false, "geography_id": "all_uk_regions", "period": 2025, - "estimate": {"target_id": "ons.public_sector_employment", "reduction": "sum_by_region"}, + "estimate": { + "target_id": "ons.public_sector_employment", + "reduction": "sum_by_region" + }, "needs_facts": "The pinned feed carries the national ONS PSE control but no regional PSE record set; a Chronicle fact package is required.", "evidence": "uk-data national PSE credibility test; microcosm#147 I7 regional placeholder ruling." } diff --git a/packages/microcosm-build/src/microcosm/build/uk/need_energy_facts.json b/packages/microcosm-build/src/microcosm/build/uk/need_energy_facts.json index 3c39d251cf..32c5f08cf2 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/need_energy_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/need_energy_facts.json @@ -17,12 +17,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/nts_bus_use_frequency.json b/packages/microcosm-build/src/microcosm/build/uk/nts_bus_use_frequency.json index 490848d045..d20f33412c 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/nts_bus_use_frequency.json +++ b/packages/microcosm-build/src/microcosm/build/uk/nts_bus_use_frequency.json @@ -16,12 +16,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/ofgem_price_cap_facts.json b/packages/microcosm-build/src/microcosm/build/uk/ofgem_price_cap_facts.json index db3f5a2c6a..cf30e8d11c 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ofgem_price_cap_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ofgem_price_cap_facts.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/ons_household_expenditure_facts.json b/packages/microcosm-build/src/microcosm/build/uk/ons_household_expenditure_facts.json index 39b87684e5..2e8f6aaa2a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ons_household_expenditure_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ons_household_expenditure_facts.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/orr_rail_facts.json b/packages/microcosm-build/src/microcosm/build/uk/orr_rail_facts.json index 60ff3e7669..5f5e401ea3 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/orr_rail_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/orr_rail_facts.json @@ -17,12 +17,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/qep_energy_prices.json b/packages/microcosm-build/src/microcosm/build/uk/qep_energy_prices.json index a12821772c..28833abbd2 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/qep_energy_prices.json +++ b/packages/microcosm-build/src/microcosm/build/uk/qep_energy_prices.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { 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 06c92806c2..29faa7eddc 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 @@ -473,10 +473,10 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "source_vintages": { - "source": "HMRC Capital Gains Tax statistics, July 2025, Table 2.1a", - "survey": "HMRC Capital Gains Tax statistics Table 2.1a and Advani-Summers capital-gains incidence" + "source": "HMRC Capital Gains Tax statistics, July 2026 release, Table 2.1a for 2024-25, via the vendored conditioning facts", + "survey": "HMRC Capital Gains Tax statistics Table 2.1a (2024-25 individuals) and Advani-Summers capital-gains incidence" }, "stage": "cgt_band_donors", "status": "required_at_build" @@ -496,7 +496,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "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" @@ -525,7 +525,7 @@ "required_mass_change_reason": "E5 source-stage transform preserves household rows and typed household weights; total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "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" @@ -545,7 +545,7 @@ "required_mass_change_reason": "E5 source-stage transform preserves household rows and typed household weights; total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "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" @@ -553,6 +553,27 @@ "stage": "etb_vat", "status": "required_at_build" }, + "hmrc_cgt_asset_type_spine": { + "base_candidate_sha256": "f17306ccb2aad7ff0130be3589b560afb2e2a12a943570911cd0c77f07934833", + "base_candidate_tier": "frs", + "effective_mass_requirements": {}, + "mass_change_semantics": "mass_conserving", + "output_weight_kind": "importance", + "outputs": [ + "capital_gains_asset_type", + "capital_gains_residential_property" + ], + "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": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", + "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) and Table 7 (disposals, proceeds and gains by asset type, 2023-24, sample-based), vendored from the pinned Chronicle feed" + }, + "stage": "hmrc_cgt_asset_type_spine", + "status": "required_at_build" + }, "hmrc_cgt_gains": { "base_candidate_sha256": "f17306ccb2aad7ff0130be3589b560afb2e2a12a943570911cd0c77f07934833", "base_candidate_tier": "frs", @@ -566,9 +587,12 @@ ], "required_mass_change_reason": "Amounts-only capital gains redraw: household weights pass through unchanged and total household mass is conserved.", "source_manifest": "cgt_source_stages.json", - "source_manifest_sha256": "71104111b4b9f2da00ce49ad5abec54a35d300196032c9742d62e02aa1730774", + "source_manifest_sha256": "1b7e6c10728255c3fe2d6d0a33288fae50b282e348e0db9832b7f6073e66d9b7", "source_vintages": { - "hmrc_surface": "2023-24", + "conditioning_resource": "hmrc_cgt_conditioning_facts.json", + "conditioning_resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "conditioning_surface": "2024-25", + "hmrc_surface": "2024-25", "mapped_build_period": "2024" }, "stage": "hmrc_cgt_gains", @@ -576,7 +600,7 @@ "superseded_by": { "reason": "The FRS spine build executes hmrc_cgt_gains_spine, which applies the same HMRC Table 3 amounts redraw directly in source_stages.json before calibration.", "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "stage": "hmrc_cgt_gains_spine" } }, @@ -596,9 +620,12 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "source_vintages": { - "hmrc_surface": "2023-24", + "conditioning_resource": "hmrc_cgt_conditioning_facts.json", + "conditioning_resource_sha256": "f5bb0ad93fff3332b7ae8fb580f002d13207b3f95e44a3103c50108279d94797", + "conditioning_surface": "2024-25", + "hmrc_surface": "2024-25", "mapped_build_period": "2024" }, "stage": "hmrc_cgt_gains_spine", @@ -610,7 +637,7 @@ "base_candidate_tier": "frs", "calibration_permitted": false, "canonical_source_manifest": "source_stages.json", - "canonical_source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "canonical_source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "effective_mass_requirements": { "charitable_investment_gifts": { "mass_share_denominator": "all_person_effective_mass", @@ -693,7 +720,7 @@ "superseded_by": { "reason": "The FRS spine build executes hmrc_spi_income_spine, which supersedes the June retained-leaves/hmrc_spi_income pair inside source_stages.json.", "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "stage": "hmrc_spi_income_spine" } }, @@ -727,7 +754,7 @@ "required_mass_change_reason": "E5 source-stage transform preserves household rows and typed household weights; total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "source_vintages": { "source": "UK Data Service SN 9468 Living Costs and Food Survey 2023-24 household/person tabs and the vendored Chronicle facts for NEED 2023 mean kWh, the FY2024-25 Ofgem cap levels, road-fuel outturn (DESNZ, HMRC, ONS), the DfT VEH1103 licensed-car stock, NTS bus use and the DfT and devolved bus finance tables.", "survey": "Living Costs and Food Survey 2023-24" @@ -748,7 +775,7 @@ "property_wealth" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "source_vintages": { "source": "MHCLG dwellings and ONS UK House Price Index December 2025 regional average prices.", "survey": "Public regional property reference" @@ -772,7 +799,7 @@ "employee_pension_contributions" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "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" @@ -794,7 +821,7 @@ "student_loan_plan" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "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" @@ -829,7 +856,7 @@ "required_mass_change_reason": "E5 source-stage transform preserves household rows and typed household weights; total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "5689601d1e3656655bc7eadc9c77068928138b03e1a24b171893025a0eee12b4", + "source_manifest_sha256": "dd405553c28d556cf1444301913705931ebe01fa156ac827188286953dc7738e", "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/road_fuel_anchors.json b/packages/microcosm-build/src/microcosm/build/uk/road_fuel_anchors.json index 76d98e4121..1f993775f3 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/road_fuel_anchors.json +++ b/packages/microcosm-build/src/microcosm/build/uk/road_fuel_anchors.json @@ -17,12 +17,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" }, "selections": [ { 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 584d569c88..c95606d41c 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json +++ b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json @@ -3498,14 +3498,14 @@ }, { "stage": "cgt_band_donors", - "survey": "HMRC Capital Gains Tax statistics Table 2.1a and Advani-Summers capital-gains incidence", - "source": "HMRC Capital Gains Tax statistics, July 2025, Table 2.1a", + "survey": "HMRC Capital Gains Tax statistics Table 2.1a (2024-25 individuals) and Advani-Summers capital-gains incidence", + "source": "HMRC Capital Gains Tax statistics, July 2026 release, Table 2.1a for 2024-25, via the vendored conditioning facts", "grain": "household", "artifacts": [ { - "role": "hmrc_cgt_size_bands", + "role": "cgt_conditioning_facts", "kind": "public_aggregate_reference", - "resource": "hmrc_cgt_size_bands.json", + "resource": "hmrc_cgt_conditioning_facts.json", "format": "json", "runtime_sha256_required": true }, @@ -3520,7 +3520,10 @@ "operations": [ { "kind": "stack_band_donor_households", - "size_band_resource": "hmrc_cgt_size_bands.json", + "size_band_resource": "hmrc_cgt_conditioning_facts.json", + "size_band_vintage": "2024-25", + "retained_taxpayers": 392000.0, + "retained_gains_gbp": 118209000000.0, "incidence_resource": "advani_summers_capital_gains_distribution.json", "minimum_band_lower": 12300, "donors_per_band": 30, @@ -3545,40 +3548,18 @@ "rewrites": [ "capital_gains" ], - "notes": "Adds 270 positive-weight band donors. Rows below GBP 12,300 are excluded because they mix annual-exempt-amount regimes and the spline body already supplies that support." + "notes": "Adds 270 positive-weight band donors. Rows below GBP 12,300 are excluded because they mix annual-exempt-amount regimes and the spline body already supplies that support. Band weights and starting gains come from the 2024-25 Table 2.1a rows of the vendored conditioning resource, the vintage the size-of-gain calibration targets fit (microcosm#725)." }, { "stage": "hmrc_cgt_gains_spine", - "survey": "HMRC Capital Gains Tax statistics table 3 (size of gain by taxable income), 2020-21 to 2023-24", - "source": "https://assets.publishing.service.gov.uk/media/6878ac62760bf6cedaf5bd93/Table_3_2025_Size_of_gain_by_income.ods", + "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 3 2024-25 (individual taxpayers and gains by size of gain and taxable income) conditioned on the 2024-25 Tables 2.1a, 5, 6 and 1, all vendored from the pinned Chronicle feed", + "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "grain": "person", "artifacts": [ - { - "role": "cgt_published_fact_surface", - "kind": "administrative_table", - "format": "ods", - "survey": "HMRC Capital Gains Tax statistics table 3", - "publication": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", - "vintage": "2023-24", - "tax_year_start": 2023, - "locator": "https://assets.publishing.service.gov.uk/media/6878ac62760bf6cedaf5bd93/Table_3_2025_Size_of_gain_by_income.ods", - "sha256": "8e75c00bab949348a7238fea6d995f626c85e5d02813b46606dd7fea85e9d0c3", - "size_bytes": 11996, - "mime_type": "application/vnd.oasis.opendocument.spreadsheet", - "sheets": [ - "3_1_2023-24", - "3_2_2022-23", - "3_3_2021-22", - "3_4_2020-21" - ], - "mapped_build_period": 2024, - "period_mapping": "latest_published_tax_year", - "runtime_sha256_required": true - }, { "role": "policy_parameters", "kind": "versioned_parameter_tree", - "dependency": "policyengine-uk>=2.88 via microcosm-build[uk]", + "dependency": "policyengine-uk>=2.98.0 via microcosm-build[uk]", "parameters": [ "gov.hmrc.income_tax.allowances.personal_allowance.amount", "gov.hmrc.income_tax.allowances.personal_allowance.maximum_ANI", @@ -3588,12 +3569,31 @@ "instant_rule": "raw dated parameter files evaluated at 1 June of the build period's tax year", "runtime_sha256_required": false, "dependency_discipline": "deferred inside uk_cgt_policy_parameters; the base package never imports policyengine-uk at import time" + }, + { + "role": "cgt_conditioning_facts", + "kind": "public_aggregate_reference", + "resource": "hmrc_cgt_conditioning_facts.json", + "format": "json", + "runtime_sha256_required": true } ], "operations": [ { - "kind": "verify_pinned_cgt_ods", - "artifact_role": "cgt_published_fact_surface", + "kind": "verify_vendored_fact_resource", + "artifact_role": "cgt_conditioning_facts", + "resource": "hmrc_cgt_conditioning_facts.json", + "feed_pin": "chronicle_feed.json", + "record_sets": [ + "hmrc.cgt_table3_2026.ty2024.", + "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.", + "hmrc.cgt_table6_2026.age.ty2024", + "hmrc.cgt_table5_2026.country_region.ty2024", + "hmrc.cgt_statistics_2026.table1.ty2024" + ], + "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 @@ -3614,27 +3614,79 @@ "allowance": "tapered Personal Allowance from the policy_parameters artifact", "fail_on_missing_component": true }, + { + "kind": "rake_allocation_targets", + "resource": "hmrc_cgt_conditioning_facts.json", + "joint_margin": "Table 3 2024-25 reconciled cells (2026 release; individuals with a liability by size of gain and taxable income), every income column rescaled onto its published All-row taxpayer total; the same tax year as the Table 1 observations the calibration fits, so no vintage move is applied", + "band_aggregation": "Table 2.1a bands 0, 3,000 and 6,000 fold into Table 3 band 0; 10,000 and 12,300 fold into 10,000; the remaining bands map one to one; the folded rows must agree with Table 3's row totals within publication rounding and the difference is reported per band", + "age_margin": "Table 6 2024-25 individual taxpayers by age band, folded to the age groups; the 0-15 band, which adult carriers cannot hold, is spread across the groups by the normalisation rather than folded into the youngest group", + "gains_margin": "Table 6 2024-25 individual gains by age band, folded to the age groups the same way, as one linear constraint per group, the raked people in the group's cells times their Table 3 cell means summing to the group's gains, so each age group carries its published gains as well as its count instead of the frame's band mix (the amounts-consistent tilt; microcosm#725)", + "region_margin": "Table 5 2024-25 taxpayers by country and region (all taxpayers) times the Table 1 2024-25 individuals/total taxpayer share, folded to the region groups", + "margin_normalization": "every count margin is rescaled onto the joint's total taxpayer mass and the gains margin onto the joint's gains at cell means before raking, so rounding cannot make the margins mutually infeasible", + "seed_joint": "joint cell mass times the frame's household-weighted (age group, region group | income band) shares among gainers", + "age_group_lower_bounds": [ + 16, + 25, + 35, + 45, + 55, + 65, + 75 + ], + "region_groups": { + "LONDON": "london", + "SOUTH_EAST": "south_east_and_east_of_england", + "EAST_OF_ENGLAND": "south_east_and_east_of_england", + "NORTH_EAST": "rest_of_england", + "NORTH_WEST": "rest_of_england", + "YORKSHIRE": "rest_of_england", + "EAST_MIDLANDS": "rest_of_england", + "WEST_MIDLANDS": "rest_of_england", + "SOUTH_WEST": "rest_of_england", + "WALES": "wales_scotland_northern_ireland", + "SCOTLAND": "wales_scotland_northern_ireland", + "NORTHERN_IRELAND": "wales_scotland_northern_ireland" + }, + "gains_tilt": "exponential tilt per age group; the group's cells are multiplied by exp(lambda x cell mean / largest cell mean) with lambda solved by bisection so the group's people-weighted mean gain meets its target while the group's count is held, alternated with the three count margins until every margin holds to the tolerance", + "solver": "microcosm.build.uk_runtime.cgt_imputation._rake_with_gains_tilt (proportional scaling of the count margins and the gains tilt on the four-way array; the generic mean-raking helper scales columns independently and cannot hold a people-weighted gains constraint)", + "rake_rounds": 500, + "rake_tolerance": 1e-09, + "unattainable_policy": "a group whose target mean gain lies outside the means of its seeded cells takes the nearest attainable tilt and is reported", + "zero_seed_policy": "a cell with no frame support keeps a zero target and is reported; its joint mass is met from the income band's pooled fallback where support exists", + "fallback_policy": "pooled_income_band_rank_walk", + "conditioning_dimensions": [ + "income band", + "age group", + "region group" + ], + "reporting_grain": "Table 6 age bands and the twelve region-tier areas" + }, { "kind": "rank_preserving_allocation", - "within": "income band", + "within": "income band x age group x region group cell, then the income band's pooled unassigned gainers", "ordering": "existing gains descending, person_id ascending on ties", "band_order": "highest gain band first", "suppressed_cell_allocation": "count implied by the cell's published gains at the band-total mean", "column_reconciliation": "every income column rescales onto its published All-row taxpayer total", - "shortfall_policy": "proportional scale-down when the population holds less gainer mass than published taxpayers", + "shortfall_policy": "proportional scale-down inside a cell that holds less gainer mass than its raked target; the income band's net shortfall after every cell walk, apportioned to gain bands in proportion to their positive shortfalls, is walked over the income band's pooled unassigned gainers, scaled down proportionally when the pool is short, so cell-walk rounding overshoot is netted rather than compounded", "minimum_allocation_people": 1, - "weights": "household_weight mapped to persons; no person splits across bands" + "weights": "household_weight mapped to persons; no person splits across bands", + "rounding": "systematic with one seeded offset per walk: a person joins the band whose cumulative boundary first covers (1 - offset) of their weight, so a band boundary smaller than a person's weight still receives that person on the share of walks it implies and the rounding is unbiased across the conditioning cells; each cell walk's signed rounding error is carried into the next cell's boundaries for the same gain band (error diffusion), so each gain band's walked total within an income band stays within one person's weight of its raked total instead of accumulating the overshoot of many cell walks", + "cell_order": "income band ascending, age group ascending, region group ascending, gain bands highest first inside a cell; then the pooled walk per income band" }, { "kind": "within_band_draws", "bounded_band_family": "truncated exponential matched to the cell's published mean", "open_band_family": "Pareto with alpha = mean / (mean - lower bound)", + "quantile_scheme": "stratified by weight: the persons a (gain band, income band) plan receives across every cell and the pooled walk take the quantile strata that partition (0, 1) in proportion to their household weights, in ascending prior-gain order with one seeded jitter per plan, so the plan's weighted realised mean sits on its published mean rather than carrying n independent draws or the weight-rank mix of equal strata", + "open_band_realization": "each open-band person takes the conditional mean of their weight-proportional quantile stratum, which averages back to the published mean exactly under the household weights; an iid draw from a Pareto with infinite variance sits well below it on a few dozen carriers, and equal strata on unequal weights put the tail's mass on whichever rows happen to be light", "mean_repair_margin": 0.02, - "mean_repair_reason": "Published counts round to the nearest thousand and amounts to the nearest million; four cells of the 2023-24 table imply a mean outside their own band, and repaired means clamp just inside the violated boundary.", + "mean_repair_reason": "Published counts round to the nearest thousand and amounts to the nearest million; two cells of the 2024-25 table (gains of GBP 1m to 2m at taxable incomes of GBP 37,700 to 49,999 and GBP 100,000 to 125,139) imply a mean below their own band, and repaired means clamp just inside the violated boundary.", "bottom_band_floor": "annual exempt amount plus one pound", "seed_base": 552, - "seed_mixing": "seed combined with the build period; draws ordered by allocation rank", - "deterministic": true + "seed_mixing": "seed combined with the build period; each walk draws its rounding offset in cell order then pooled-fallback order, then each plan draws its quantile jitter, income bands ascending and gain bands highest first", + "deterministic": true, + "cell_means": "ratios of the published Table 3 2024-25 cell gains to cell taxpayers, both rounded by the publisher (counts to the nearest thousand, amounts to the nearest million), so derived rather than published numbers; suppressed-count cells take the band-total mean; every mean is repaired into its band" }, { "kind": "sub_aea_remainder", @@ -3653,10 +3705,10 @@ "calibration_permitted": false, "fact_fence_id": "cgt_band_facts_policy_endogenous_proxy_conditioned", "fenced_fact_count": 76, - "fenced_fact_composition": "60 joint cells, 10 gain-band row totals, 6 income-column totals", + "fenced_fact_composition": "60 joint cells, 10 gain-band row totals, 6 income-column totals (Table 3 2024-25, 2026 release)", "classification_rationale": "The taxpayer count is endogenous to policy, the income conditioning is an arithmetic proxy, and the published surface needs rounding and suppression reconciliation before any per-band fact is exact.", - "calibrated_facts_unchanged": "The two aggregate facts in UK_CGT_TARGET_SPECS remain the only calibrated CGT facts.", - "promotion_path": "A separately reviewed target profile may lift specific band facts after the reconciliation and proxy adequacy are adjudicated.", + "calibrated_facts_unchanged": "The calibrated CGT facts are the FY2024-25 individual Table 1 references (hmrc.cgt.taxpayers_total, hmrc.cgt.gains_total, hmrc.cgt.liability_total; UK_CGT_TARGET_COVERAGE_REQUIREMENTS) and the Table 2.1a size-of-gain, Table 6 age-band and Table 5 region rows declared in uk_population_targets.json (microcosm#467, #725); the 76 Table 3 2024-25 joint and marginal cells stay fenced and condition the imputation only, and Table 3's all-gains, all-incomes pair restates the Table 1 individual observations already bound.", + "promotion_path": "A separately reviewed target profile may lift specific band facts after the reconciliation and proxy adequacy are adjudicated; the Table 2.1a, 6 and 5 rows were promoted under microcosm#467 and #725 on the FY2024-25 individual observations, while the Table 3 joint cells remain fenced because the taxable-income proxy is still an arithmetic approximation.", "adjudication": "https://github.com/PolicyEngine/microcosm/issues/552" } ], @@ -3666,7 +3718,128 @@ "rewrites": [ "capital_gains" ], - "notes": "Spine manifest projection of the merged HMRC Table 3 amounts stage. It deliberately omits base_candidate and verify_certified_candidate, which belong only to the certified-H5 path." + "notes": "Spine manifest projection of the merged HMRC Table 3 amounts stage. It deliberately omits base_candidate and verify_certified_candidate, which belong only to the certified-H5 path. The allocation targets are raked to the 2024-25 Table 6 age and Table 5 region margins from the vendored conditioning resource and walked inside income x age x region cells, so large gains land on the kind of person who holds them (microcosm#725)." + }, + { + "stage": "hmrc_cgt_asset_type_spine", + "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative) and Table 7 (disposals, proceeds and gains by asset type, 2023-24, sample-based), vendored from the pinned Chronicle feed", + "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", + "grain": "person", + "artifacts": [ + { + "role": "policy_parameters", + "kind": "versioned_parameter_tree", + "dependency": "policyengine-uk>=2.98.0 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", + "runtime_sha256_required": false, + "dependency_discipline": "deferred inside uk_cgt_policy_parameters; the base package never imports policyengine-uk at import time" + }, + { + "role": "cgt_asset_type_facts", + "kind": "public_aggregate_reference", + "resource": "hmrc_cgt_asset_type_facts.json", + "format": "json", + "runtime_sha256_required": true + } + ], + "operations": [ + { + "kind": "verify_vendored_fact_resource", + "artifact_role": "cgt_asset_type_facts", + "resource": "hmrc_cgt_asset_type_facts.json", + "feed_pin": "chronicle_feed.json", + "record_sets": [ + "hmrc.cgt_table8_2026.table8a.ty2024", + "hmrc.cgt_table8_2026.table8b.ty2024", + "hmrc.cgt_table7_2026.asset_category.ty2023", + "hmrc.cgt_table7_2026.asset_category_total.ty2023", + "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023" + ], + "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": "assign_residential_property_flag", + "population": "persons with net capital gains above the annual exempt amount (the national taxpayer proxy)", + "model": "logistic probability in centred log gains, p = 1 / (1 + exp(-(a + b (log g - c)))) with c the weighted mean log gain of the population", + "parameter_solver": "nested bisection; the intercept matches the expected weighted count at each trial slope, the slope matches the expected weighted gains", + "count_target": "Table 8a 2024-25 total taxpayers reporting residential property disposals times the Table 8b 2024-25 individuals/all taxpayer share on the UK Property service", + "gains_target": "Table 8a 2024-25 total residential property gains times the Table 8b 2024-25 individuals/all gains share on the UK Property service", + "basis_assumption": "trusts hold the same share of the Self Assessment component as of the UK Property service, and a flagged person's whole net gain is attributed to residential property", + "realization": "weighted systematic sampling in ascending gain order with one seeded offset: a person is flagged when the expected weight owed so far reaches their own weight, so the flagged weight tracks the expected weight within one person's weight along the gains axis and the realised count and gains sit close to their expectations; the Bernoulli sigma of each is reported as the envelope", + "seed": 553, + "seed_mixing": "seed combined with the build period", + "output_column": "capital_gains_residential_property", + "output_semantics": "the person's capital_gains where flagged residential, 0 otherwise" + }, + { + "kind": "assign_main_asset_type", + "population": "liable gainers not flagged residential", + "categories": [ + "listed_shares", + "unlisted_shares", + "other_financial_assets", + "agricultural_commercial_industrial_land_buildings", + "other_non_financial_assets" + ], + "kernel": "log-normal density in log gains centred on each type's Table 7 2023-24 mean gain per disposal, one common log-scale width", + "log_sigma": 1.5, + "share_targets": "Table 7 2023-24 gains by asset type excluding residential land and buildings, as shares", + "weight_fitting": "multiplicative updates of the type weights until the household-weighted expected gains shares by type match the share targets", + "weight_fitting_iterations": 200, + "weight_fitting_tolerance": 1e-06, + "realization": "one seeded uniform per person against the cumulative type probabilities, consumed in person_id order", + "seed": 554, + "seed_mixing": "seed combined with the build period", + "output_column": "capital_gains_asset_type", + "value_domain": [ + "none", + "sub_aea", + "residential_land_buildings", + "listed_shares", + "unlisted_shares", + "other_financial_assets", + "agricultural_commercial_industrial_land_buildings", + "other_non_financial_assets" + ], + "none_semantics": "no positive net gains", + "sub_aea_semantics": "positive net gains at or below the annual exempt amount; never a taxpayer, so never classified", + "diagnostic_only": true + }, + { + "kind": "record_mass_conservation_receipt", + "entity": "household", + "reason": "CGT asset-type assignment 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." + }, + { + "kind": "classify_cgt_asset_type_facts_with_reviewed_fence", + "calibration_permitted": false, + "fact_fence_id": "cgt_asset_type_facts_sample_based_prior_vintage", + "fenced_fact_count": 33, + "fenced_fact_composition": "Table 7 2023-24 rows: 6 asset-category rows, 3 category totals, 12 financial asset-type rows, 12 non-financial asset-type rows", + "classification_rationale": "Table 7 is sample-based, published for 2023-24 only, counts disposals rather than taxpayers and includes trusts and non-UK assets; it seeds the asset-type draw and is reported against, never fitted.", + "calibrated_facts": "The Table 8a 2024-25 total residential property taxpayers and gains restated on the individuals basis (hmrc.cgt.residential_property_taxpayers, hmrc.cgt.residential_property_gains in uk_population_targets.json).", + "adjudication": "https://github.com/PolicyEngine/microcosm/issues/725" + } + ], + "outputs": [ + "capital_gains_asset_type", + "capital_gains_residential_property" + ], + "nonnegative_outputs": [ + "capital_gains_residential_property" + ], + "notes": "Spine stage after the amounts redraw: every liable gainer carries one main asset type and, where flagged residential, its net gain restated in capital_gains_residential_property. The residential flag is solved to the Table 8a 2024-25 totals on the individuals basis, which the hmrc.cgt.residential_property_taxpayers and hmrc.cgt.residential_property_gains targets bind; the non-residential composition follows the fenced Table 7 2023-24 prior and is diagnostic only. Carried interest (Table 9) is not modelled (microcosm#725)." }, { "stage": "salary_sacrifice", 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 2b28501787..05cbc7dac5 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml +++ b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml @@ -2690,13 +2690,13 @@ stages: - capital_gains notes: Spine-only equal-mass incidence clone. The A&S prior fixes the gainer set and order for the following HMRC Table 3 redraw; negative extrapolated draws remain loss-makers. - stage: cgt_band_donors - survey: HMRC Capital Gains Tax statistics Table 2.1a and Advani-Summers capital-gains incidence - source: HMRC Capital Gains Tax statistics, July 2025, Table 2.1a + survey: HMRC Capital Gains Tax statistics Table 2.1a (2024-25 individuals) and Advani-Summers capital-gains incidence + source: HMRC Capital Gains Tax statistics, July 2026 release, Table 2.1a for 2024-25, via the vendored conditioning facts grain: household artifacts: - - role: hmrc_cgt_size_bands + - role: cgt_conditioning_facts kind: public_aggregate_reference - resource: hmrc_cgt_size_bands.json + resource: hmrc_cgt_conditioning_facts.json format: json runtime_sha256_required: true - role: capital_gains_incidence @@ -2706,7 +2706,10 @@ stages: runtime_sha256_required: true operations: - kind: stack_band_donor_households - size_band_resource: hmrc_cgt_size_bands.json + size_band_resource: hmrc_cgt_conditioning_facts.json + size_band_vintage: 2024-25 + retained_taxpayers: 392000.0 + retained_gains_gbp: 118209000000.0 incidence_resource: advani_summers_capital_gains_distribution.json minimum_band_lower: 12300 donors_per_band: 30 @@ -2727,34 +2730,15 @@ stages: - capital_gains rewrites: - capital_gains - notes: Adds 270 positive-weight band donors. Rows below GBP 12,300 are excluded because they mix annual-exempt-amount regimes and the spline body already supplies that support. + notes: Adds 270 positive-weight band donors. Rows below GBP 12,300 are excluded because they mix annual-exempt-amount regimes and the spline body already supplies that support. Band weights and starting gains come from the 2024-25 Table 2.1a rows of the vendored conditioning resource, the vintage the size-of-gain calibration targets fit (microcosm#725). - stage: hmrc_cgt_gains_spine - survey: HMRC Capital Gains Tax statistics table 3 (size of gain by taxable income), 2020-21 to 2023-24 - source: https://assets.publishing.service.gov.uk/media/6878ac62760bf6cedaf5bd93/Table_3_2025_Size_of_gain_by_income.ods + survey: HMRC Capital Gains Tax statistics 2026 release, Table 3 2024-25 (individual taxpayers and gains by size of gain and taxable income) conditioned on the 2024-25 Tables 2.1a, 5, 6 and 1, all vendored from the pinned Chronicle feed + source: https://www.gov.uk/government/statistics/capital-gains-tax-statistics grain: person artifacts: - - role: cgt_published_fact_surface - kind: administrative_table - format: ods - survey: HMRC Capital Gains Tax statistics table 3 - publication: https://www.gov.uk/government/statistics/capital-gains-tax-statistics - vintage: 2023-24 - tax_year_start: 2023 - locator: https://assets.publishing.service.gov.uk/media/6878ac62760bf6cedaf5bd93/Table_3_2025_Size_of_gain_by_income.ods - sha256: 8e75c00bab949348a7238fea6d995f626c85e5d02813b46606dd7fea85e9d0c3 - size_bytes: 11996 - mime_type: application/vnd.oasis.opendocument.spreadsheet - sheets: - - 3_1_2023-24 - - 3_2_2022-23 - - 3_3_2021-22 - - 3_4_2020-21 - mapped_build_period: 2024 - period_mapping: latest_published_tax_year - runtime_sha256_required: true - role: policy_parameters kind: versioned_parameter_tree - dependency: policyengine-uk>=2.88 via microcosm-build[uk] + dependency: policyengine-uk>=2.98.0 via microcosm-build[uk] parameters: - gov.hmrc.income_tax.allowances.personal_allowance.amount - gov.hmrc.income_tax.allowances.personal_allowance.maximum_ANI @@ -2763,9 +2747,25 @@ stages: instant_rule: raw dated parameter files evaluated at 1 June of the build period's tax year runtime_sha256_required: false dependency_discipline: deferred inside uk_cgt_policy_parameters; the base package never imports policyengine-uk at import time + - role: cgt_conditioning_facts + kind: public_aggregate_reference + resource: hmrc_cgt_conditioning_facts.json + format: json + runtime_sha256_required: true operations: - - kind: verify_pinned_cgt_ods - artifact_role: cgt_published_fact_surface + - kind: verify_vendored_fact_resource + artifact_role: cgt_conditioning_facts + resource: hmrc_cgt_conditioning_facts.json + feed_pin: chronicle_feed.json + record_sets: + - hmrc.cgt_table3_2026.ty2024. + - hmrc.cgt_size_of_gain_2026.table2_1a.ty2024. + - hmrc.cgt_table6_2026.age.ty2024 + - hmrc.cgt_table5_2026.country_region.ty2024 + - hmrc.cgt_statistics_2026.table1.ty2024 + 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 @@ -2782,24 +2782,71 @@ stages: components_semantics: Persisted leaves of the model's total_income concept (ITA 2007 s.23); state_pension_reported stands in for social_security_income, whose other taxable benefits are not persisted; reliefs such as pension contributions and Gift Aid are not deducted. allowance: tapered Personal Allowance from the policy_parameters artifact fail_on_missing_component: true + - kind: rake_allocation_targets + resource: hmrc_cgt_conditioning_facts.json + joint_margin: Table 3 2024-25 reconciled cells (2026 release; individuals with a liability by size of gain and taxable income), every income column rescaled onto its published All-row taxpayer total; the same tax year as the Table 1 observations the calibration fits, so no vintage move is applied + band_aggregation: 'Table 2.1a bands 0, 3,000 and 6,000 fold into Table 3 band 0; 10,000 and 12,300 fold into 10,000; the remaining bands map one to one; the folded rows must agree with Table 3''s row totals within publication rounding and the difference is reported per band' + age_margin: Table 6 2024-25 individual taxpayers by age band, folded to the age groups; the 0-15 band, which adult carriers cannot hold, is spread across the groups by the normalisation rather than folded into the youngest group + gains_margin: Table 6 2024-25 individual gains by age band, folded to the age groups the same way, as one linear constraint per group, the raked people in the group's cells times their Table 3 cell means summing to the group's gains, so each age group carries its published gains as well as its count instead of the frame's band mix (the amounts-consistent tilt; microcosm#725) + region_margin: Table 5 2024-25 taxpayers by country and region (all taxpayers) times the Table 1 2024-25 individuals/total taxpayer share, folded to the region groups + margin_normalization: every count margin is rescaled onto the joint's total taxpayer mass and the gains margin onto the joint's gains at cell means before raking, so rounding cannot make the margins mutually infeasible + seed_joint: joint cell mass times the frame's household-weighted (age group, region group | income band) shares among gainers + age_group_lower_bounds: + - 16 + - 25 + - 35 + - 45 + - 55 + - 65 + - 75 + region_groups: + LONDON: london + SOUTH_EAST: south_east_and_east_of_england + EAST_OF_ENGLAND: south_east_and_east_of_england + NORTH_EAST: rest_of_england + NORTH_WEST: rest_of_england + YORKSHIRE: rest_of_england + EAST_MIDLANDS: rest_of_england + WEST_MIDLANDS: rest_of_england + SOUTH_WEST: rest_of_england + WALES: wales_scotland_northern_ireland + SCOTLAND: wales_scotland_northern_ireland + NORTHERN_IRELAND: wales_scotland_northern_ireland + gains_tilt: exponential tilt per age group; the group's cells are multiplied by exp(lambda x cell mean / largest cell mean) with lambda solved by bisection so the group's people-weighted mean gain meets its target while the group's count is held, alternated with the three count margins until every margin holds to the tolerance + solver: microcosm.build.uk_runtime.cgt_imputation._rake_with_gains_tilt (proportional scaling of the count margins and the gains tilt on the four-way array; the generic mean-raking helper scales columns independently and cannot hold a people-weighted gains constraint) + rake_rounds: 500 + rake_tolerance: 1.0e-09 + unattainable_policy: a group whose target mean gain lies outside the means of its seeded cells takes the nearest attainable tilt and is reported + zero_seed_policy: a cell with no frame support keeps a zero target and is reported; its joint mass is met from the income band's pooled fallback where support exists + fallback_policy: pooled_income_band_rank_walk + conditioning_dimensions: + - income band + - age group + - region group + reporting_grain: Table 6 age bands and the twelve region-tier areas - kind: rank_preserving_allocation - within: income band + within: income band x age group x region group cell, then the income band's pooled unassigned gainers ordering: existing gains descending, person_id ascending on ties band_order: highest gain band first suppressed_cell_allocation: count implied by the cell's published gains at the band-total mean column_reconciliation: every income column rescales onto its published All-row taxpayer total - shortfall_policy: proportional scale-down when the population holds less gainer mass than published taxpayers + shortfall_policy: proportional scale-down inside a cell that holds less gainer mass than its raked target; the income band's net shortfall after every cell walk, apportioned to gain bands in proportion to their positive shortfalls, is walked over the income band's pooled unassigned gainers, scaled down proportionally when the pool is short, so cell-walk rounding overshoot is netted rather than compounded minimum_allocation_people: 1 weights: household_weight mapped to persons; no person splits across bands + rounding: 'systematic with one seeded offset per walk: a person joins the band whose cumulative boundary first covers (1 - offset) of their weight, so a band boundary smaller than a person''s weight still receives that person on the share of walks it implies and the rounding is unbiased across the conditioning cells; each cell walk''s signed rounding error is carried into the next cell''s boundaries for the same gain band (error diffusion), so each gain band''s walked total within an income band stays within one person''s weight of its raked total instead of accumulating the overshoot of many cell walks' + cell_order: income band ascending, age group ascending, region group ascending, gain bands highest first inside a cell; then the pooled walk per income band - kind: within_band_draws bounded_band_family: truncated exponential matched to the cell's published mean open_band_family: Pareto with alpha = mean / (mean - lower bound) + quantile_scheme: 'stratified by weight: the persons a (gain band, income band) plan receives across every cell and the pooled walk take the quantile strata that partition (0, 1) in proportion to their household weights, in ascending prior-gain order with one seeded jitter per plan, so the plan''s weighted realised mean sits on its published mean rather than carrying n independent draws or the weight-rank mix of equal strata' + open_band_realization: each open-band person takes the conditional mean of their weight-proportional quantile stratum, which averages back to the published mean exactly under the household weights; an iid draw from a Pareto with infinite variance sits well below it on a few dozen carriers, and equal strata on unequal weights put the tail's mass on whichever rows happen to be light mean_repair_margin: 0.02 - mean_repair_reason: Published counts round to the nearest thousand and amounts to the nearest million; four cells of the 2023-24 table imply a mean outside their own band, and repaired means clamp just inside the violated boundary. + mean_repair_reason: Published counts round to the nearest thousand and amounts to the nearest million; two cells of the 2024-25 table (gains of GBP 1m to 2m at taxable incomes of GBP 37,700 to 49,999 and GBP 100,000 to 125,139) imply a mean below their own band, and repaired means clamp just inside the violated boundary. bottom_band_floor: annual exempt amount plus one pound seed_base: 552 - seed_mixing: seed combined with the build period; draws ordered by allocation rank + seed_mixing: seed combined with the build period; each walk draws its rounding offset in cell order then pooled-fallback order, then each plan draws its quantile jitter, income bands ascending and gain bands highest first deterministic: true + cell_means: ratios of the published Table 3 2024-25 cell gains to cell taxpayers, both rounded by the publisher (counts to the nearest thousand, amounts to the nearest million), so derived rather than published numbers; suppressed-count cells take the band-total mean; every mean is repaired into its band - kind: sub_aea_remainder policy: gainers beyond the published taxpayer mass keep their existing amounts capped at the annual exempt amount rationale: Table 3 covers only individuals with a CGT liability; remaining gainers are treated as sub-AEA gainers rather than invented into the liability distribution or deleted. @@ -2812,16 +2859,113 @@ stages: calibration_permitted: false fact_fence_id: cgt_band_facts_policy_endogenous_proxy_conditioned fenced_fact_count: 76 - fenced_fact_composition: 60 joint cells, 10 gain-band row totals, 6 income-column totals + fenced_fact_composition: 60 joint cells, 10 gain-band row totals, 6 income-column totals (Table 3 2024-25, 2026 release) classification_rationale: The taxpayer count is endogenous to policy, the income conditioning is an arithmetic proxy, and the published surface needs rounding and suppression reconciliation before any per-band fact is exact. - calibrated_facts_unchanged: The two aggregate facts in UK_CGT_TARGET_SPECS remain the only calibrated CGT facts. - promotion_path: A separately reviewed target profile may lift specific band facts after the reconciliation and proxy adequacy are adjudicated. + calibrated_facts_unchanged: 'The calibrated CGT facts are the FY2024-25 individual Table 1 references (hmrc.cgt.taxpayers_total, hmrc.cgt.gains_total, hmrc.cgt.liability_total; UK_CGT_TARGET_COVERAGE_REQUIREMENTS) and the Table 2.1a size-of-gain, Table 6 age-band and Table 5 region rows declared in uk_population_targets.json (microcosm#467, #725); the 76 Table 3 2024-25 joint and marginal cells stay fenced and condition the imputation only, and Table 3''s all-gains, all-incomes pair restates the Table 1 individual observations already bound.' + promotion_path: 'A separately reviewed target profile may lift specific band facts after the reconciliation and proxy adequacy are adjudicated; the Table 2.1a, 6 and 5 rows were promoted under microcosm#467 and #725 on the FY2024-25 individual observations, while the Table 3 joint cells remain fenced because the taxable-income proxy is still an arithmetic approximation.' adjudication: https://github.com/PolicyEngine/microcosm/issues/552 outputs: - capital_gains rewrites: - capital_gains - notes: Spine manifest projection of the merged HMRC Table 3 amounts stage. It deliberately omits base_candidate and verify_certified_candidate, which belong only to the certified-H5 path. + notes: Spine manifest projection of the merged HMRC Table 3 amounts stage. It deliberately omits base_candidate and verify_certified_candidate, which belong only to the certified-H5 path. The allocation targets are raked to the 2024-25 Table 6 age and Table 5 region margins from the vendored conditioning resource and walked inside income x age x region cells, so large gains land on the kind of person who holds them (microcosm#725). +- stage: hmrc_cgt_asset_type_spine + survey: HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative) and Table 7 (disposals, proceeds and gains by asset type, 2023-24, sample-based), vendored from the pinned Chronicle feed + source: https://www.gov.uk/government/statistics/capital-gains-tax-statistics + grain: person + artifacts: + - role: policy_parameters + kind: versioned_parameter_tree + dependency: policyengine-uk>=2.98.0 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 + runtime_sha256_required: false + dependency_discipline: deferred inside uk_cgt_policy_parameters; the base package never imports policyengine-uk at import time + - role: cgt_asset_type_facts + kind: public_aggregate_reference + resource: hmrc_cgt_asset_type_facts.json + format: json + runtime_sha256_required: true + operations: + - kind: verify_vendored_fact_resource + artifact_role: cgt_asset_type_facts + resource: hmrc_cgt_asset_type_facts.json + feed_pin: chronicle_feed.json + record_sets: + - hmrc.cgt_table8_2026.table8a.ty2024 + - hmrc.cgt_table8_2026.table8b.ty2024 + - hmrc.cgt_table7_2026.asset_category.ty2023 + - hmrc.cgt_table7_2026.asset_category_total.ty2023 + - hmrc.cgt_table7_2026.financial_asset_type.ty2023 + - hmrc.cgt_table7_2026.non_financial_asset_type.ty2023 + 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: assign_residential_property_flag + population: persons with net capital gains above the annual exempt amount (the national taxpayer proxy) + model: logistic probability in centred log gains, p = 1 / (1 + exp(-(a + b (log g - c)))) with c the weighted mean log gain of the population + parameter_solver: nested bisection; the intercept matches the expected weighted count at each trial slope, the slope matches the expected weighted gains + count_target: Table 8a 2024-25 total taxpayers reporting residential property disposals times the Table 8b 2024-25 individuals/all taxpayer share on the UK Property service + gains_target: Table 8a 2024-25 total residential property gains times the Table 8b 2024-25 individuals/all gains share on the UK Property service + basis_assumption: trusts hold the same share of the Self Assessment component as of the UK Property service, and a flagged person's whole net gain is attributed to residential property + realization: 'weighted systematic sampling in ascending gain order with one seeded offset: a person is flagged when the expected weight owed so far reaches their own weight, so the flagged weight tracks the expected weight within one person''s weight along the gains axis and the realised count and gains sit close to their expectations; the Bernoulli sigma of each is reported as the envelope' + seed: 553 + seed_mixing: seed combined with the build period + output_column: capital_gains_residential_property + output_semantics: the person's capital_gains where flagged residential, 0 otherwise + - kind: assign_main_asset_type + population: liable gainers not flagged residential + categories: + - listed_shares + - unlisted_shares + - other_financial_assets + - agricultural_commercial_industrial_land_buildings + - other_non_financial_assets + kernel: log-normal density in log gains centred on each type's Table 7 2023-24 mean gain per disposal, one common log-scale width + log_sigma: 1.5 + share_targets: Table 7 2023-24 gains by asset type excluding residential land and buildings, as shares + weight_fitting: multiplicative updates of the type weights until the household-weighted expected gains shares by type match the share targets + weight_fitting_iterations: 200 + weight_fitting_tolerance: 1.0e-06 + realization: one seeded uniform per person against the cumulative type probabilities, consumed in person_id order + seed: 554 + seed_mixing: seed combined with the build period + output_column: capital_gains_asset_type + value_domain: + - none + - sub_aea + - residential_land_buildings + - listed_shares + - unlisted_shares + - other_financial_assets + - agricultural_commercial_industrial_land_buildings + - other_non_financial_assets + none_semantics: no positive net gains + sub_aea_semantics: positive net gains at or below the annual exempt amount; never a taxpayer, so never classified + diagnostic_only: true + - kind: record_mass_conservation_receipt + entity: household + reason: 'CGT asset-type assignment 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. + - kind: classify_cgt_asset_type_facts_with_reviewed_fence + calibration_permitted: false + fact_fence_id: cgt_asset_type_facts_sample_based_prior_vintage + fenced_fact_count: 33 + fenced_fact_composition: 'Table 7 2023-24 rows: 6 asset-category rows, 3 category totals, 12 financial asset-type rows, 12 non-financial asset-type rows' + classification_rationale: Table 7 is sample-based, published for 2023-24 only, counts disposals rather than taxpayers and includes trusts and non-UK assets; it seeds the asset-type draw and is reported against, never fitted. + calibrated_facts: The Table 8a 2024-25 total residential property taxpayers and gains restated on the individuals basis (hmrc.cgt.residential_property_taxpayers, hmrc.cgt.residential_property_gains in uk_population_targets.json). + adjudication: https://github.com/PolicyEngine/microcosm/issues/725 + outputs: + - capital_gains_asset_type + - capital_gains_residential_property + nonnegative_outputs: + - capital_gains_residential_property + notes: 'Spine stage after the amounts redraw: every liable gainer carries one main asset type and, where flagged residential, its net gain restated in capital_gains_residential_property. The residential flag is solved to the Table 8a 2024-25 totals on the individuals basis, which the hmrc.cgt.residential_property_taxpayers and hmrc.cgt.residential_property_gains targets bind; the non-residential composition follows the fenced Table 7 2023-24 prior and is diagnostic only. Carried interest (Table 9) is not modelled (microcosm#725).' - stage: salary_sacrifice survey: Family Resources Survey 2024-25 salary-sacrifice respondents and HMRC salary-sacrifice reform analysis source: HMRC, Salary sacrifice reform for pension contributions effective from 6 April 2029 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 ca57f9f9e3..881be3965a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json @@ -1,13 +1,13 @@ { - "source_fact_feed": "chronicle-uk-ec200856-consumer-facts", + "source_fact_feed": "chronicle-uk-c5e5bf8a-consumer-facts", "target_period": 2025, - "candidate_count": 646, - "contract_target_count": 247, - "active_reference_count": 631, + "candidate_count": 725, + "contract_target_count": 256, + "active_reference_count": 705, "status_counts": { - "active": 631, + "active": 705, "no_fact_at_or_before_period": 7, - "signed_excluded": 8 + "signed_excluded": 13 }, "geography_pins": { "obr.income_tax": { @@ -2095,6 +2095,138 @@ "dwp.benefit_cap.capped_households_1300_01_and_above": { "geography_level": "country", "geography_id": "K03000001" + }, + "hmrc.cgt.taxpayers_by_age_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.cgt.gains_by_age_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.cgt.tax_by_age_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.cgt.taxpayers_by_region": { + "geography_fanout": [ + { + "geography_level": "region", + "geography_id": "E12000001" + }, + { + "geography_level": "region", + "geography_id": "E12000002" + }, + { + "geography_level": "region", + "geography_id": "E12000003" + }, + { + "geography_level": "region", + "geography_id": "E12000004" + }, + { + "geography_level": "region", + "geography_id": "E12000005" + }, + { + "geography_level": "region", + "geography_id": "E12000006" + }, + { + "geography_level": "region", + "geography_id": "E12000007" + }, + { + "geography_level": "region", + "geography_id": "E12000008" + }, + { + "geography_level": "region", + "geography_id": "E12000009" + }, + { + "geography_level": "country", + "geography_id": "W92000004" + }, + { + "geography_level": "country", + "geography_id": "S92000003" + }, + { + "geography_level": "country", + "geography_id": "N92000002" + } + ] + }, + "hmrc.cgt.gains_by_region": { + "geography_fanout": [ + { + "geography_level": "region", + "geography_id": "E12000001" + }, + { + "geography_level": "region", + "geography_id": "E12000002" + }, + { + "geography_level": "region", + "geography_id": "E12000003" + }, + { + "geography_level": "region", + "geography_id": "E12000004" + }, + { + "geography_level": "region", + "geography_id": "E12000005" + }, + { + "geography_level": "region", + "geography_id": "E12000006" + }, + { + "geography_level": "region", + "geography_id": "E12000007" + }, + { + "geography_level": "region", + "geography_id": "E12000008" + }, + { + "geography_level": "region", + "geography_id": "E12000009" + }, + { + "geography_level": "country", + "geography_id": "W92000004" + }, + { + "geography_level": "country", + "geography_id": "S92000003" + }, + { + "geography_level": "country", + "geography_id": "N92000002" + } + ] + }, + "hmrc.cgt.taxpayers_by_gain_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.cgt.gains_by_gain_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.cgt.residential_property_taxpayers": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.cgt.residential_property_gains": { + "geography_level": "country", + "geography_id": "K02000001" } }, "genuine_sum_residue": [ @@ -5040,125 +5172,495 @@ "name": "dwp.benefit_cap.capped_households_1300_01_and_above", "from": "2025-11", "to": "2025" - } - ], - "targets": { - "obr.income_tax": { - "status": "active", - "candidates": [ - { - "name": "obr.income_tax", - "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, - "resolved_period": 2025, - "resolved_value": 331437583074.4429, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_d928e7da0fbfe088ca1a30d7" - } - ] }, - "obr.ni": { - "status": "active", - "candidates": [ - { - "name": "obr.ni", - "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, - "resolved_period": 2025, - "resolved_value": 200081395082.7125, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_eccab3ee763d68bb782276a7" - } - ] + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_16_to_24", + "from": "2024", + "to": "2025" }, - "obr.ni_employee": { - "status": "active", - "candidates": [ - { - "name": "obr.ni_employee", - "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, - "resolved_period": 2025, - "resolved_value": 49544363784.26465, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_7e3e3e637a9134760a0a530a" - } - ] + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_25_to_34", + "from": "2024", + "to": "2025" }, - "obr.ni_employer": { - "status": "active", - "candidates": [ - { - "name": "obr.ni_employer", - "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, - "resolved_period": 2025, - "resolved_value": 145324007512.71753, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_c8719021c501d9757e0e0814" - } - ] + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_35_to_44", + "from": "2024", + "to": "2025" }, - "obr.ni_self_employed": { - "status": "active", - "candidates": [ - { - "name": "obr.ni_self_employed", - "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, - "resolved_period": 2025, - "resolved_value": 2902816090.4147716, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_b94b7d74d7df7ff5f9309f3b" - } - ] + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_45_to_54", + "from": "2024", + "to": "2025" }, - "obr.vat": { - "status": "active", - "candidates": [ - { - "name": "obr.vat", - "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, - "resolved_period": 2025, - "resolved_value": 180168938685.41794, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_3c534c3e6313150f8081b777" - } - ] + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_55_to_64", + "from": "2024", + "to": "2025" }, - "obr.fuel_duties": { - "status": "signed_excluded", - "candidates": [ - { - "name": "obr.fuel_duties", - "status": "signed_excluded", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, - "signed_rationale": "The OBR fuel duties fact is all-road-users receipts (freight, vans, business mileage) against a household frame; obr.fuel_duties_cars binds the cars receipts from the OBR vehicle-type release instead (ruling 2026-09-10). The all-road-users row is retained in the contract for registry parity and signed out here rather than carried as a calibration measure exclusion." - } - ] + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_65_to_74", + "from": "2024", + "to": "2025" }, - "hmrc.cgt.liability_total": { - "status": "active", - "candidates": [ - { - "name": "hmrc.cgt.liability_total", - "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, - "resolved_period": 2025, - "resolved_value": 22503000000.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_222c397017de7bff0a6583a7" - } - ] + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_75_to_84", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_85_plus", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_16_to_24", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_25_to_34", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_35_to_44", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_45_to_54", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_55_to_64", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_65_to_74", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_75_to_84", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_85_plus", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_16_to_24", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_25_to_34", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_35_to_44", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_45_to_54", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_55_to_64", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_65_to_74", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_75_to_84", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_85_plus", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000001", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000002", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000003", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000004", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000005", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000006", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000007", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000008", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000009", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@W92000004", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@S92000003", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@N92000002", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@E12000001", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@E12000002", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@E12000003", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@E12000004", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@E12000005", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@E12000006", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@E12000007", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@E12000008", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@E12000009", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@W92000004", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@S92000003", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_by_region@N92000002", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_1000000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_100000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_10000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_12300", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_2000000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_250000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_25000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_3000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_5000000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_500000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_50000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/cgt_taxpayers_band_6000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_1000000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_100000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_10000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_12300", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_2000000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_250000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_25000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_3000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_5000000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_500000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_50000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/capital_gains_band_6000", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.residential_property_taxpayers.ty2024", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.cgt.residential_property_gains.ty2024", + "from": "2024", + "to": "2025" + } + ], + "targets": { + "obr.income_tax": { + "status": "active", + "candidates": [ + { + "name": "obr.income_tax", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 331437583074.4429, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_d928e7da0fbfe088ca1a30d7" + } + ] + }, + "obr.ni": { + "status": "active", + "candidates": [ + { + "name": "obr.ni", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 200081395082.7125, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_eccab3ee763d68bb782276a7" + } + ] + }, + "obr.ni_employee": { + "status": "active", + "candidates": [ + { + "name": "obr.ni_employee", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 49544363784.26465, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_7e3e3e637a9134760a0a530a" + } + ] + }, + "obr.ni_employer": { + "status": "active", + "candidates": [ + { + "name": "obr.ni_employer", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 145324007512.71753, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_c8719021c501d9757e0e0814" + } + ] + }, + "obr.ni_self_employed": { + "status": "active", + "candidates": [ + { + "name": "obr.ni_self_employed", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 2902816090.4147716, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_b94b7d74d7df7ff5f9309f3b" + } + ] + }, + "obr.vat": { + "status": "active", + "candidates": [ + { + "name": "obr.vat", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 180168938685.41794, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_3c534c3e6313150f8081b777" + } + ] + }, + "obr.fuel_duties": { + "status": "signed_excluded", + "candidates": [ + { + "name": "obr.fuel_duties", + "status": "signed_excluded", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "signed_rationale": "The OBR fuel duties fact is all-road-users receipts (freight, vans, business mileage) against a household frame; obr.fuel_duties_cars binds the cars receipts from the OBR vehicle-type release instead (ruling 2026-09-10). The all-road-users row is retained in the contract for registry parity and signed out here rather than carried as a calibration measure exclusion." + } + ] + }, + "hmrc.cgt.liability_total": { + "status": "active", + "candidates": [ + { + "name": "hmrc.cgt.liability_total", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 22503000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_222c397017de7bff0a6583a7" + } + ] }, "obr.sdlt": { "status": "active", @@ -5224,7880 +5726,8768 @@ "status": "active", "candidates": [ { - "name": "obr.council_tax", + "name": "obr.council_tax", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 50925163826.30539, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_16bcd3e2a16bfa44c0b1ea74" + } + ] + }, + "obr.council_tax_england": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "obr.council_tax_england", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "obr.council_tax_scotland": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "obr.council_tax_scotland", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "obr.council_tax_wales": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "obr.council_tax_wales", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "obr.domestic_rates": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "obr.domestic_rates", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "obr.esa": { + "status": "active", + "candidates": [ + { + "name": "obr.esa", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 7206287181.538654, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_632a67850494984d9b35e639" + } + ] + }, + "obr.housing_benefit": { + "status": "active", + "candidates": [ + { + "name": "obr.housing_benefit", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 12103254163.788864, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_984cc88cfc4242bd80c679f3" + } + ] + }, + "obr.jobseekers_allowance": { + "status": "active", + "candidates": [ + { + "name": "obr.jobseekers_allowance", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 280558748.04472804, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_d505f8a08a29411dcf69287b" + } + ] + }, + "obr.pension_credit": { + "status": "active", + "candidates": [ + { + "name": "obr.pension_credit", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 6146422389.476461, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_95ea9bc008361c26f90591d4" + } + ] + }, + "obr.pip": { + "status": "active", + "candidates": [ + { + "name": "obr.pip", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 36910059270.5278, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_548ebadeb7d774b32fa6f4ff" + } + ] + }, + "obr.state_pension": { + "status": "active", + "candidates": [ + { + "name": "obr.state_pension", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 146185954351.57382, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_567e55f9f73df2808c1c4be8" + } + ] + }, + "obr.statutory_maternity_pay": { + "status": "active", + "candidates": [ + { + "name": "obr.statutory_maternity_pay", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 3194800881.520547, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_0c45b526e2b233b22d955cc6" + } + ] + }, + "obr.tv_licence_fee": { + "status": "active", + "candidates": [ + { + "name": "obr.tv_licence_fee", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 3872000000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_b0f0afcd44c93532837c9f2a" + } + ] + }, + "obr.universal_credit_in_cap": { + "status": "active", + "candidates": [ + { + "name": "obr.universal_credit_in_cap", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 66410800011.47837, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_e680fe36115d1372d12072e1" + } + ] + }, + "obr.universal_credit_outside_cap": { + "status": "active", + "candidates": [ + { + "name": "obr.universal_credit_outside_cap", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 12875549128.065746, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_4c927d7b33d1eee2455bdbd0" + } + ] + }, + "obr.winter_fuel_allowance": { + "status": "active", + "candidates": [ + { + "name": "obr.winter_fuel_allowance", "status": "active", "matched_fact_count_overall": 7, "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 50925163826.30539, + "resolved_value": 1911040880.4619167, "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_16bcd3e2a16bfa44c0b1ea74" + "resolved_fact_key": "ledger_aggregate_fact_v2_575778670363b5890c8de847" } ] }, - "obr.council_tax_england": { - "status": "no_fact_at_or_before_period", + "isc.private_school_students": { + "status": "active", "candidates": [ { - "name": "obr.council_tax_england", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + "name": "isc.private_school_students", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 556551.0, + "resolved_fact_period": "2024-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_67bd24e7f9158af756625865" } ] }, - "obr.council_tax_scotland": { - "status": "no_fact_at_or_before_period", + "hmrc.salary_sacrifice.it_relief_basic_rate": { + "status": "active", "candidates": [ { - "name": "obr.council_tax_scotland", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + "name": "hmrc.salary_sacrifice.it_relief_basic_rate", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1600000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_7320889e57785e6997224191" } ] }, - "obr.council_tax_wales": { - "status": "no_fact_at_or_before_period", + "hmrc.salary_sacrifice.it_relief_higher_rate": { + "status": "active", "candidates": [ { - "name": "obr.council_tax_wales", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + "name": "hmrc.salary_sacrifice.it_relief_higher_rate", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5500000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_7d9ff26814151157071301e9" } ] }, - "obr.domestic_rates": { - "status": "no_fact_at_or_before_period", + "hmrc.salary_sacrifice.it_relief_additional_rate": { + "status": "active", "candidates": [ { - "name": "obr.domestic_rates", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + "name": "hmrc.salary_sacrifice.it_relief_additional_rate", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1800000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_49a712ba4b22f0b4b2925ef9" } ] }, - "obr.esa": { + "hmrc.salary_sacrifice.nics_relief_employee": { "status": "active", "candidates": [ { - "name": "obr.esa", + "name": "hmrc.salary_sacrifice.nics_relief_employee", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 7206287181.538654, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_632a67850494984d9b35e639" + "resolved_value": 1000000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_341767859ef6030c06c7a153" } ] }, - "obr.housing_benefit": { + "hmrc.salary_sacrifice.nics_relief_employer": { "status": "active", "candidates": [ { - "name": "obr.housing_benefit", + "name": "hmrc.salary_sacrifice.nics_relief_employer", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 12103254163.788864, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_984cc88cfc4242bd80c679f3" + "resolved_value": 3400000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_026ae1169f5f0f997bb06479" } ] }, - "obr.jobseekers_allowance": { + "hmrc.salary_sacrifice.users_total": { "status": "active", "candidates": [ { - "name": "obr.jobseekers_allowance", + "name": "hmrc.salary_sacrifice.users_total", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 280558748.04472804, + "resolved_value": 7700000.0, "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_d505f8a08a29411dcf69287b" + "resolved_fact_key": "ledger_aggregate_fact_v2_06d585b8684b5fe0ce25f6ec" } ] }, - "obr.pension_credit": { + "hmrc.salary_sacrifice.users_below_cap": { "status": "active", "candidates": [ { - "name": "obr.pension_credit", + "name": "hmrc.salary_sacrifice.users_below_cap", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 6146422389.476461, + "resolved_value": 4300000.0, "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_95ea9bc008361c26f90591d4" + "resolved_fact_key": "ledger_aggregate_fact_v2_a48e584180a6f33d07112d3c" } ] }, - "obr.pip": { + "hmrc.salary_sacrifice.users_above_cap": { "status": "active", "candidates": [ { - "name": "obr.pip", + "name": "hmrc.salary_sacrifice.users_above_cap", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 36910059270.5278, + "resolved_value": 3300000.0, "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_548ebadeb7d774b32fa6f4ff" + "resolved_fact_key": "ledger_aggregate_fact_v2_0331d77688891a3c3c3307b6" } ] }, - "obr.state_pension": { + "hmrc.spi.employment_income.amount_by_total_income_band": { "status": "active", "candidates": [ { - "name": "obr.state_pension", + "name": "hmrc/employment_income_income_band_100_000_to_150_000", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 82300000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_b1c634a871c843888ab00545" + }, + { + "name": "hmrc/employment_income_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 35500000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_16019afa59e224b690877826" + }, + { + "name": "hmrc/employment_income_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 16900000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_a82c84f67b40867564d2c847" + }, + { + "name": "hmrc/employment_income_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 48600000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_42eb325b6a29afb3e6d157fa" + }, + { + "name": "hmrc/employment_income_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 39200000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1f93702eb88f381f0701c4f8" + }, + { + "name": "hmrc/employment_income_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 172000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_794fd9633d6a2018fee633e7" + }, + { + "name": "hmrc/employment_income_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 36600000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_d85ad655daaa164b1ab33231" + }, + { + "name": "hmrc/employment_income_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 170000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3607635c72d16b4059b6a3f6" + }, + { + "name": "hmrc/employment_income_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 29000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_5c3674b48269ffe3c7b28a1b" + }, + { + "name": "hmrc/employment_income_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 139000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_525aeb02ab9a831608756200" + }, + { + "name": "hmrc/employment_income_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 174000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_9f1a70b4e0995af34d7dbbfb" + }, + { + "name": "hmrc/employment_income_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 146185954351.57382, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_567e55f9f73df2808c1c4be8" - } - ] - }, - "obr.statutory_maternity_pay": { - "status": "active", - "candidates": [ + "resolved_value": 23100000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1944a2f33309b41b2d5f348d" + }, { - "name": "obr.statutory_maternity_pay", + "name": "hmrc/employment_income_income_band_70_000_to_100_000", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3194800881.520547, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_0c45b526e2b233b22d955cc6" + "resolved_value": 118000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_6178d003a4c1a6198294f174" } ] }, - "obr.tv_licence_fee": { + "hmrc.spi.employment_income.count_by_total_income_band": { "status": "active", "candidates": [ { - "name": "obr.tv_licence_fee", + "name": "hmrc/employment_income_count_income_band_100_000_to_150_000", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3872000000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_b0f0afcd44c93532837c9f2a" - } - ] - }, - "obr.universal_credit_in_cap": { - "status": "active", - "candidates": [ + "resolved_value": 791000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_b83fec2e722ef22cbe28ee76" + }, { - "name": "obr.universal_credit_in_cap", + "name": "hmrc/employment_income_count_income_band_1_000_000_to_inf", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 66410800011.47837, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_e680fe36115d1372d12072e1" - } - ] - }, - "obr.universal_credit_outside_cap": { - "status": "active", - "candidates": [ + "resolved_value": 21000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_618b4f84a2b10fdf0d901df6" + }, { - "name": "obr.universal_credit_outside_cap", + "name": "hmrc/employment_income_count_income_band_12_570_to_15_000", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 12875549128.065746, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_4c927d7b33d1eee2455bdbd0" - } - ] - }, - "obr.winter_fuel_allowance": { - "status": "active", - "candidates": [ + "resolved_value": 1360000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_5a2e006ccd94f8754760661c" + }, { - "name": "obr.winter_fuel_allowance", + "name": "hmrc/employment_income_count_income_band_15_000_to_20_000", "status": "active", - "matched_fact_count_overall": 7, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1911040880.4619167, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_575778670363b5890c8de847" - } - ] - }, - "isc.private_school_students": { - "status": "active", - "candidates": [ + "resolved_value": 3100000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_a4ecaa65aa113092a1c8fcf7" + }, { - "name": "isc.private_school_students", + "name": "hmrc/employment_income_count_income_band_150_000_to_200_000", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 556551.0, - "resolved_fact_period": "2024-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_67bd24e7f9158af756625865" - } - ] - }, - "hmrc.salary_sacrifice.it_relief_basic_rate": { - "status": "active", - "candidates": [ + "resolved_value": 264000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_ffcb46afae1c469de75ee9b3" + }, { - "name": "hmrc.salary_sacrifice.it_relief_basic_rate", + "name": "hmrc/employment_income_count_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1600000000.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_7320889e57785e6997224191" - } - ] - }, - "hmrc.salary_sacrifice.it_relief_higher_rate": { - "status": "active", - "candidates": [ + "resolved_value": 7470000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1bbafa142b4bfc426ce5bdac" + }, { - "name": "hmrc.salary_sacrifice.it_relief_higher_rate", + "name": "hmrc/employment_income_count_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 5500000000.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_7d9ff26814151157071301e9" - } - ] - }, - "hmrc.salary_sacrifice.it_relief_additional_rate": { - "status": "active", - "candidates": [ + "resolved_value": 180000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_dd00b1e66c3254ddc0e108a6" + }, { - "name": "hmrc.salary_sacrifice.it_relief_additional_rate", + "name": "hmrc/employment_income_count_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1800000000.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_49a712ba4b22f0b4b2925ef9" - } - ] - }, - "hmrc.salary_sacrifice.nics_relief_employee": { - "status": "active", - "candidates": [ + "resolved_value": 5370000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3bd51396d03aee4164d7c1d6" + }, { - "name": "hmrc.salary_sacrifice.nics_relief_employee", + "name": "hmrc/employment_income_count_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1000000000.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_341767859ef6030c06c7a153" - } - ] - }, - "hmrc.salary_sacrifice.nics_relief_employer": { - "status": "active", - "candidates": [ + "resolved_value": 93000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_d1f4ceb7f4e676d9ff044d80" + }, { - "name": "hmrc.salary_sacrifice.nics_relief_employer", + "name": "hmrc/employment_income_count_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3400000000.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_026ae1169f5f0f997bb06479" - } - ] - }, - "hmrc.salary_sacrifice.users_total": { - "status": "active", - "candidates": [ + "resolved_value": 3500000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_874b13ae1da1064e73055c39" + }, { - "name": "hmrc.salary_sacrifice.users_total", + "name": "hmrc/employment_income_count_income_band_50_000_to_70_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 7700000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_06d585b8684b5fe0ce25f6ec" - } - ] - }, - "hmrc.salary_sacrifice.users_below_cap": { - "status": "active", - "candidates": [ + "resolved_value": 3430000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_572104f32689df4a2dc4c334" + }, { - "name": "hmrc.salary_sacrifice.users_below_cap", + "name": "hmrc/employment_income_count_income_band_500_000_to_1_000_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4300000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_a48e584180a6f33d07112d3c" - } - ] - }, - "hmrc.salary_sacrifice.users_above_cap": { - "status": "active", - "candidates": [ + "resolved_value": 44000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3b99d6944753bf5696bdc8f9" + }, { - "name": "hmrc.salary_sacrifice.users_above_cap", + "name": "hmrc/employment_income_count_income_band_70_000_to_100_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3300000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_0331d77688891a3c3c3307b6" + "resolved_value": 1640000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_8eec35d25c57e9c2e2c7962b" } ] }, - "hmrc.spi.employment_income.amount_by_total_income_band": { + "hmrc.spi.self_employment_income.amount_by_total_income_band": { "status": "active", "candidates": [ { - "name": "hmrc/employment_income_income_band_100_000_to_150_000", + "name": "hmrc/self_employment_income_income_band_100_000_to_150_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 82300000000.0, + "resolved_value": 4980000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_b1c634a871c843888ab00545" + "resolved_fact_key": "ledger_aggregate_fact_v2_5b616c7ebeb21ef5305b8beb" }, { - "name": "hmrc/employment_income_income_band_1_000_000_to_inf", + "name": "hmrc/self_employment_income_income_band_1_000_000_to_inf", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 35500000000.0, + "resolved_value": 19500000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_16019afa59e224b690877826" + "resolved_fact_key": "ledger_aggregate_fact_v2_761827852b6a2fccb3d15132" }, { - "name": "hmrc/employment_income_income_band_12_570_to_15_000", + "name": "hmrc/self_employment_income_income_band_12_570_to_15_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 16900000000.0, + "resolved_value": 4810000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_a82c84f67b40867564d2c847" + "resolved_fact_key": "ledger_aggregate_fact_v2_1a69068db718770de7df525e" }, { - "name": "hmrc/employment_income_income_band_15_000_to_20_000", + "name": "hmrc/self_employment_income_income_band_15_000_to_20_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 48600000000.0, + "resolved_value": 8030000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_42eb325b6a29afb3e6d157fa" + "resolved_fact_key": "ledger_aggregate_fact_v2_c1df7ca022a9c007f122de6d" }, { - "name": "hmrc/employment_income_income_band_150_000_to_200_000", + "name": "hmrc/self_employment_income_income_band_150_000_to_200_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 39200000000.0, + "resolved_value": 3650000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_1f93702eb88f381f0701c4f8" + "resolved_fact_key": "ledger_aggregate_fact_v2_7183b7c143f8e897552ad685" }, { - "name": "hmrc/employment_income_income_band_20_000_to_30_000", + "name": "hmrc/self_employment_income_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 172000000000.0, + "resolved_value": 15700000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_794fd9633d6a2018fee633e7" + "resolved_fact_key": "ledger_aggregate_fact_v2_33c4f0779c40ec91ff6761da" }, { - "name": "hmrc/employment_income_income_band_200_000_to_300_000", + "name": "hmrc/self_employment_income_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 36600000000.0, + "resolved_value": 4390000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_d85ad655daaa164b1ab33231" + "resolved_fact_key": "ledger_aggregate_fact_v2_90652f32ebe0ff36c569998d" }, { - "name": "hmrc/employment_income_income_band_30_000_to_40_000", + "name": "hmrc/self_employment_income_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 170000000000.0, + "resolved_value": 12600000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_3607635c72d16b4059b6a3f6" + "resolved_fact_key": "ledger_aggregate_fact_v2_1b9ad3f39e949b92a26ec28c" }, { - "name": "hmrc/employment_income_income_band_300_000_to_500_000", + "name": "hmrc/self_employment_income_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 29000000000.0, + "resolved_value": 4840000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_5c3674b48269ffe3c7b28a1b" + "resolved_fact_key": "ledger_aggregate_fact_v2_96f921ffdb56a575057076f8" }, { - "name": "hmrc/employment_income_income_band_40_000_to_50_000", + "name": "hmrc/self_employment_income_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 139000000000.0, + "resolved_value": 8730000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_525aeb02ab9a831608756200" + "resolved_fact_key": "ledger_aggregate_fact_v2_645090db5db62f7c47a34f60" }, { - "name": "hmrc/employment_income_income_band_50_000_to_70_000", + "name": "hmrc/self_employment_income_income_band_50_000_to_70_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 174000000000.0, + "resolved_value": 8220000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_9f1a70b4e0995af34d7dbbfb" + "resolved_fact_key": "ledger_aggregate_fact_v2_f0d7af3458463a645af3cb76" }, { - "name": "hmrc/employment_income_income_band_500_000_to_1_000_000", + "name": "hmrc/self_employment_income_income_band_500_000_to_1_000_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 23100000000.0, + "resolved_value": 6670000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_1944a2f33309b41b2d5f348d" + "resolved_fact_key": "ledger_aggregate_fact_v2_fc7a985c6a2a3d69e2c9ae75" }, { - "name": "hmrc/employment_income_income_band_70_000_to_100_000", + "name": "hmrc/self_employment_income_income_band_70_000_to_100_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 118000000000.0, + "resolved_value": 5360000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_6178d003a4c1a6198294f174" + "resolved_fact_key": "ledger_aggregate_fact_v2_c588886840e4e7e4a141ac75" } ] }, - "hmrc.spi.employment_income.count_by_total_income_band": { + "hmrc.spi.self_employment_income.count_by_total_income_band": { "status": "active", "candidates": [ { - "name": "hmrc/employment_income_count_income_band_100_000_to_150_000", + "name": "hmrc/self_employment_income_count_income_band_100_000_to_150_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 791000.0, + "resolved_value": 85000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_b83fec2e722ef22cbe28ee76" + "resolved_fact_key": "ledger_aggregate_fact_v2_db16ef55b3b0f60d292b745b" }, { - "name": "hmrc/employment_income_count_income_band_1_000_000_to_inf", + "name": "hmrc/self_employment_income_count_income_band_1_000_000_to_inf", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 21000.0, + "resolved_value": 11000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_618b4f84a2b10fdf0d901df6" + "resolved_fact_key": "ledger_aggregate_fact_v2_315a063dab8497ed5b8837b6" }, { - "name": "hmrc/employment_income_count_income_band_12_570_to_15_000", + "name": "hmrc/self_employment_income_count_income_band_12_570_to_15_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1360000.0, + "resolved_value": 444000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_5a2e006ccd94f8754760661c" + "resolved_fact_key": "ledger_aggregate_fact_v2_498ad10a35b58ff55819bc8b" }, { - "name": "hmrc/employment_income_count_income_band_15_000_to_20_000", + "name": "hmrc/self_employment_income_count_income_band_15_000_to_20_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3100000.0, + "resolved_value": 651000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_a4ecaa65aa113092a1c8fcf7" + "resolved_fact_key": "ledger_aggregate_fact_v2_eb849a98f57c60bd507d621b" }, { - "name": "hmrc/employment_income_count_income_band_150_000_to_200_000", + "name": "hmrc/self_employment_income_count_income_band_150_000_to_200_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 264000.0, + "resolved_value": 40000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_ffcb46afae1c469de75ee9b3" + "resolved_fact_key": "ledger_aggregate_fact_v2_cfb6ca3c4eff6a83bd5c10ac" }, { - "name": "hmrc/employment_income_count_income_band_20_000_to_30_000", + "name": "hmrc/self_employment_income_count_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 7470000.0, + "resolved_value": 961000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_1bbafa142b4bfc426ce5bdac" + "resolved_fact_key": "ledger_aggregate_fact_v2_72bd71f362434b2260a4b407" }, { - "name": "hmrc/employment_income_count_income_band_200_000_to_300_000", + "name": "hmrc/self_employment_income_count_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 180000.0, + "resolved_value": 34000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_dd00b1e66c3254ddc0e108a6" + "resolved_fact_key": "ledger_aggregate_fact_v2_fe86d957cb9590b3292e1757" }, { - "name": "hmrc/employment_income_count_income_band_30_000_to_40_000", + "name": "hmrc/self_employment_income_count_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 5370000.0, + "resolved_value": 595000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_3bd51396d03aee4164d7c1d6" + "resolved_fact_key": "ledger_aggregate_fact_v2_84b75f0a77e11de0182b9d87" }, { - "name": "hmrc/employment_income_count_income_band_300_000_to_500_000", + "name": "hmrc/self_employment_income_count_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 93000.0, + "resolved_value": 21000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_d1f4ceb7f4e676d9ff044d80" + "resolved_fact_key": "ledger_aggregate_fact_v2_5c668fd92047d28d73d7c36d" }, { - "name": "hmrc/employment_income_count_income_band_40_000_to_50_000", + "name": "hmrc/self_employment_income_count_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3500000.0, + "resolved_value": 359000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_874b13ae1da1064e73055c39" + "resolved_fact_key": "ledger_aggregate_fact_v2_876b5e55461ed15a7456d8b3" }, { - "name": "hmrc/employment_income_count_income_band_50_000_to_70_000", + "name": "hmrc/self_employment_income_count_income_band_50_000_to_70_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3430000.0, + "resolved_value": 311000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_572104f32689df4a2dc4c334" + "resolved_fact_key": "ledger_aggregate_fact_v2_09e5a5c61ccf990f6104a903" }, { - "name": "hmrc/employment_income_count_income_band_500_000_to_1_000_000", + "name": "hmrc/self_employment_income_count_income_band_500_000_to_1_000_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 44000.0, + "resolved_value": 15000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_3b99d6944753bf5696bdc8f9" + "resolved_fact_key": "ledger_aggregate_fact_v2_73031eb82b28c872e4371fae" }, { - "name": "hmrc/employment_income_count_income_band_70_000_to_100_000", + "name": "hmrc/self_employment_income_count_income_band_70_000_to_100_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1640000.0, + "resolved_value": 143000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_8eec35d25c57e9c2e2c7962b" + "resolved_fact_key": "ledger_aggregate_fact_v2_c35c3f72e5f7901457970c8d" } ] }, - "hmrc.spi.self_employment_income.amount_by_total_income_band": { + "hmrc.spi.dividend_income.amount_by_total_income_band": { "status": "active", "candidates": [ { - "name": "hmrc/self_employment_income_income_band_100_000_to_150_000", + "name": "hmrc/dividend_income_income_band_100_000_to_150_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4980000000.0, + "resolved_value": 6870000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_5b616c7ebeb21ef5305b8beb" + "resolved_fact_key": "ledger_aggregate_fact_v2_6fd01f132dc6b218c02326b1" }, { - "name": "hmrc/self_employment_income_income_band_1_000_000_to_inf", + "name": "hmrc/dividend_income_income_band_1_000_000_to_inf", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 19500000000.0, + "resolved_value": 11100000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_761827852b6a2fccb3d15132" + "resolved_fact_key": "ledger_aggregate_fact_v2_3c0cd54a0f0609d8ebc58a25" }, { - "name": "hmrc/self_employment_income_income_band_12_570_to_15_000", + "name": "hmrc/dividend_income_income_band_12_570_to_15_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4810000000.0, + "resolved_value": 175000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_1a69068db718770de7df525e" + "resolved_fact_key": "ledger_aggregate_fact_v2_b63a84056f85bed14b8ab8fd" }, { - "name": "hmrc/self_employment_income_income_band_15_000_to_20_000", + "name": "hmrc/dividend_income_income_band_15_000_to_20_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 8030000000.0, + "resolved_value": 855000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_c1df7ca022a9c007f122de6d" + "resolved_fact_key": "ledger_aggregate_fact_v2_3c4f22fc63944665033b18b3" }, { - "name": "hmrc/self_employment_income_income_band_150_000_to_200_000", + "name": "hmrc/dividend_income_income_band_150_000_to_200_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3650000000.0, + "resolved_value": 3450000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_7183b7c143f8e897552ad685" + "resolved_fact_key": "ledger_aggregate_fact_v2_ced1a5840ced099b471d4e84" }, { - "name": "hmrc/self_employment_income_income_band_20_000_to_30_000", + "name": "hmrc/dividend_income_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 15700000000.0, + "resolved_value": 3330000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_33c4f0779c40ec91ff6761da" + "resolved_fact_key": "ledger_aggregate_fact_v2_8a115e840b38a6603d618bc0" }, { - "name": "hmrc/self_employment_income_income_band_200_000_to_300_000", + "name": "hmrc/dividend_income_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4390000000.0, + "resolved_value": 3700000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_90652f32ebe0ff36c569998d" + "resolved_fact_key": "ledger_aggregate_fact_v2_0394e55216df7f3dcab84fb5" }, { - "name": "hmrc/self_employment_income_income_band_30_000_to_40_000", + "name": "hmrc/dividend_income_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 12600000000.0, + "resolved_value": 4700000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_1b9ad3f39e949b92a26ec28c" + "resolved_fact_key": "ledger_aggregate_fact_v2_ea93d59adaf66ef73e9dddbf" }, { - "name": "hmrc/self_employment_income_income_band_300_000_to_500_000", + "name": "hmrc/dividend_income_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4840000000.0, + "resolved_value": 3430000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_96f921ffdb56a575057076f8" + "resolved_fact_key": "ledger_aggregate_fact_v2_8d09d2287cbdb2e4f4004521" }, { - "name": "hmrc/self_employment_income_income_band_40_000_to_50_000", + "name": "hmrc/dividend_income_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 8730000000.0, + "resolved_value": 8400000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_645090db5db62f7c47a34f60" + "resolved_fact_key": "ledger_aggregate_fact_v2_0a4329a3eb027a530c6f02ec" }, { - "name": "hmrc/self_employment_income_income_band_50_000_to_70_000", + "name": "hmrc/dividend_income_income_band_50_000_to_70_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 8220000000.0, + "resolved_value": 12500000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_f0d7af3458463a645af3cb76" + "resolved_fact_key": "ledger_aggregate_fact_v2_c11497ffe45250b909593f1d" }, { - "name": "hmrc/self_employment_income_income_band_500_000_to_1_000_000", + "name": "hmrc/dividend_income_income_band_500_000_to_1_000_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 6670000000.0, + "resolved_value": 3820000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_fc7a985c6a2a3d69e2c9ae75" + "resolved_fact_key": "ledger_aggregate_fact_v2_dafc8ca1cd03e5d461b11d4e" }, { - "name": "hmrc/self_employment_income_income_band_70_000_to_100_000", + "name": "hmrc/dividend_income_income_band_70_000_to_100_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 5360000000.0, + "resolved_value": 9440000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_c588886840e4e7e4a141ac75" + "resolved_fact_key": "ledger_aggregate_fact_v2_940e6ce9db10080ed5613faa" } ] }, - "hmrc.spi.self_employment_income.count_by_total_income_band": { + "hmrc.spi.dividend_income.count_by_total_income_band": { "status": "active", "candidates": [ { - "name": "hmrc/self_employment_income_count_income_band_100_000_to_150_000", + "name": "hmrc/dividend_income_count_income_band_100_000_to_150_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 85000.0, + "resolved_value": 222000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_db16ef55b3b0f60d292b745b" + "resolved_fact_key": "ledger_aggregate_fact_v2_35b535ef60b7e9e8ddad45af" }, { - "name": "hmrc/self_employment_income_count_income_band_1_000_000_to_inf", + "name": "hmrc/dividend_income_count_income_band_1_000_000_to_inf", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 11000.0, + "resolved_value": 19000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_315a063dab8497ed5b8837b6" + "resolved_fact_key": "ledger_aggregate_fact_v2_fbe097b0ffbcc0e7a301478d" }, { - "name": "hmrc/self_employment_income_count_income_band_12_570_to_15_000", + "name": "hmrc/dividend_income_count_income_band_12_570_to_15_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 444000.0, + "resolved_value": 115000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_498ad10a35b58ff55819bc8b" + "resolved_fact_key": "ledger_aggregate_fact_v2_3a657db84b033007853ec14b" }, { - "name": "hmrc/self_employment_income_count_income_band_15_000_to_20_000", + "name": "hmrc/dividend_income_count_income_band_15_000_to_20_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 651000.0, + "resolved_value": 372000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_eb849a98f57c60bd507d621b" + "resolved_fact_key": "ledger_aggregate_fact_v2_418541677821ff087753a7b4" }, { - "name": "hmrc/self_employment_income_count_income_band_150_000_to_200_000", + "name": "hmrc/dividend_income_count_income_band_150_000_to_200_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 40000.0, + "resolved_value": 92000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_cfb6ca3c4eff6a83bd5c10ac" + "resolved_fact_key": "ledger_aggregate_fact_v2_426db10645b611899a770dbd" }, { - "name": "hmrc/self_employment_income_count_income_band_20_000_to_30_000", + "name": "hmrc/dividend_income_count_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 961000.0, + "resolved_value": 843000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_72bd71f362434b2260a4b407" + "resolved_fact_key": "ledger_aggregate_fact_v2_937f405149e37c0c900a62ee" }, { - "name": "hmrc/self_employment_income_count_income_band_200_000_to_300_000", + "name": "hmrc/dividend_income_count_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 34000.0, + "resolved_value": 75000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_fe86d957cb9590b3292e1757" + "resolved_fact_key": "ledger_aggregate_fact_v2_6c0e32c82b968ba545457cab" }, { - "name": "hmrc/self_employment_income_count_income_band_30_000_to_40_000", + "name": "hmrc/dividend_income_count_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 595000.0, + "resolved_value": 667000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_84b75f0a77e11de0182b9d87" + "resolved_fact_key": "ledger_aggregate_fact_v2_c8fc2a8e3993c51b68cc6f8a" }, { - "name": "hmrc/self_employment_income_count_income_band_300_000_to_500_000", + "name": "hmrc/dividend_income_count_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 21000.0, + "resolved_value": 49000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_5c668fd92047d28d73d7c36d" + "resolved_fact_key": "ledger_aggregate_fact_v2_439d9908bf6880e33103ea7d" }, { - "name": "hmrc/self_employment_income_count_income_band_40_000_to_50_000", + "name": "hmrc/dividend_income_count_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 359000.0, + "resolved_value": 627000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_876b5e55461ed15a7456d8b3" + "resolved_fact_key": "ledger_aggregate_fact_v2_60bb54980a6ca69ff77d07f0" }, { - "name": "hmrc/self_employment_income_count_income_band_50_000_to_70_000", + "name": "hmrc/dividend_income_count_income_band_50_000_to_70_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 311000.0, + "resolved_value": 643000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_09e5a5c61ccf990f6104a903" + "resolved_fact_key": "ledger_aggregate_fact_v2_56b8b1dd7aec08c3abddc3a0" }, { - "name": "hmrc/self_employment_income_count_income_band_500_000_to_1_000_000", + "name": "hmrc/dividend_income_count_income_band_500_000_to_1_000_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 15000.0, + "resolved_value": 32000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_73031eb82b28c872e4371fae" + "resolved_fact_key": "ledger_aggregate_fact_v2_c9f024b8595617fc8dd8e416" }, { - "name": "hmrc/self_employment_income_count_income_band_70_000_to_100_000", + "name": "hmrc/dividend_income_count_income_band_70_000_to_100_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 143000.0, + "resolved_value": 336000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_c35c3f72e5f7901457970c8d" + "resolved_fact_key": "ledger_aggregate_fact_v2_2ed13533e012fdd1fec68a67" } ] }, - "hmrc.spi.dividend_income.amount_by_total_income_band": { + "hmrc.spi.property_income.amount_by_total_income_band": { + "status": "signed_excluded", + "candidates": [ + { + "name": "hmrc.spi.property_income.amount_by_total_income_band", + "status": "signed_excluded", + "matched_fact_count_overall": 13, + "matched_fact_count_at_or_before_period": 13, + "signed_rationale": "Signed out pending a first-class value-scaling operation or a Chronicle package for HMRC Property Rental Income Statistics with declared reconciliation: the Ledger facts are official HMRC SPI Table 3.7 net property-income amounts, while the incumbent calibration target applies the populace-side x1.9 property-income undercount adjustment. The x1.9 trace is uk-data PR #311 / issue uk-data#230: SPI covers only taxpayers with liability, and HMRC Property Rental Income Statistics show GBP 46.68bn versus SPI about GBP 24.5bn for 2020-21. Binding the raw SPI facts would knowingly calibrate to 10/19 of the incumbent surface." + } + ] + }, + "hmrc.spi.property_income.count_by_total_income_band": { "status": "active", "candidates": [ { - "name": "hmrc/dividend_income_income_band_100_000_to_150_000", + "name": "hmrc/property_income_count_income_band_100_000_to_150_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 6870000000.0, + "resolved_value": 137000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_6fd01f132dc6b218c02326b1" + "resolved_fact_key": "ledger_aggregate_fact_v2_50e02eb85969a4773af5cade" }, { - "name": "hmrc/dividend_income_income_band_1_000_000_to_inf", + "name": "hmrc/property_income_count_income_band_1_000_000_to_inf", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 11100000000.0, + "resolved_value": 7000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_3c0cd54a0f0609d8ebc58a25" + "resolved_fact_key": "ledger_aggregate_fact_v2_d286366fea43c9f897936709" }, { - "name": "hmrc/dividend_income_income_band_12_570_to_15_000", + "name": "hmrc/property_income_count_income_band_12_570_to_15_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 175000000.0, + "resolved_value": 101000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_b63a84056f85bed14b8ab8fd" + "resolved_fact_key": "ledger_aggregate_fact_v2_80d817cee2f3592809f3a194" }, { - "name": "hmrc/dividend_income_income_band_15_000_to_20_000", + "name": "hmrc/property_income_count_income_band_15_000_to_20_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 855000000.0, + "resolved_value": 232000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_3c4f22fc63944665033b18b3" + "resolved_fact_key": "ledger_aggregate_fact_v2_2c0d78b9f9dff4e5fdfa250c" }, { - "name": "hmrc/dividend_income_income_band_150_000_to_200_000", + "name": "hmrc/property_income_count_income_band_150_000_to_200_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3450000000.0, + "resolved_value": 54000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_ced1a5840ced099b471d4e84" + "resolved_fact_key": "ledger_aggregate_fact_v2_5ec672db73bb4f35958a409e" }, { - "name": "hmrc/dividend_income_income_band_20_000_to_30_000", + "name": "hmrc/property_income_count_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3330000000.0, + "resolved_value": 431000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_8a115e840b38a6603d618bc0" + "resolved_fact_key": "ledger_aggregate_fact_v2_3eb40c70c3de0d0c29253566" }, { - "name": "hmrc/dividend_income_income_band_200_000_to_300_000", + "name": "hmrc/property_income_count_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3700000000.0, + "resolved_value": 41000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_0394e55216df7f3dcab84fb5" + "resolved_fact_key": "ledger_aggregate_fact_v2_0394669c5734865fda5f0541" }, { - "name": "hmrc/dividend_income_income_band_30_000_to_40_000", + "name": "hmrc/property_income_count_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4700000000.0, + "resolved_value": 364000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_ea93d59adaf66ef73e9dddbf" + "resolved_fact_key": "ledger_aggregate_fact_v2_6564bb4b662365729676a9e1" }, { - "name": "hmrc/dividend_income_income_band_300_000_to_500_000", + "name": "hmrc/property_income_count_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3430000000.0, + "resolved_value": 23000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_8d09d2287cbdb2e4f4004521" + "resolved_fact_key": "ledger_aggregate_fact_v2_87c457b7ee2392ee8360893b" }, { - "name": "hmrc/dividend_income_income_band_40_000_to_50_000", + "name": "hmrc/property_income_count_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 8400000000.0, + "resolved_value": 325000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_0a4329a3eb027a530c6f02ec" + "resolved_fact_key": "ledger_aggregate_fact_v2_7187a98d8342886b08e3f9e2" }, { - "name": "hmrc/dividend_income_income_band_50_000_to_70_000", + "name": "hmrc/property_income_count_income_band_50_000_to_70_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 12500000000.0, + "resolved_value": 397000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_c11497ffe45250b909593f1d" + "resolved_fact_key": "ledger_aggregate_fact_v2_c44a33c3bc4454de20132027" }, { - "name": "hmrc/dividend_income_income_band_500_000_to_1_000_000", + "name": "hmrc/property_income_count_income_band_500_000_to_1_000_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3820000000.0, + "resolved_value": 13000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_dafc8ca1cd03e5d461b11d4e" + "resolved_fact_key": "ledger_aggregate_fact_v2_831e0c70ca80d37c785d4122" }, { - "name": "hmrc/dividend_income_income_band_70_000_to_100_000", + "name": "hmrc/property_income_count_income_band_70_000_to_100_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 9440000000.0, + "resolved_value": 226000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_940e6ce9db10080ed5613faa" + "resolved_fact_key": "ledger_aggregate_fact_v2_f93d04a399cee892e5ec86b6" } ] }, - "hmrc.spi.dividend_income.count_by_total_income_band": { + "hmrc.spi.private_pension_income.amount_by_total_income_band": { "status": "active", "candidates": [ { - "name": "hmrc/dividend_income_count_income_band_100_000_to_150_000", + "name": "hmrc/private_pension_income_income_band_100_000_to_150_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 222000.0, + "resolved_value": 5430000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_35b535ef60b7e9e8ddad45af" + "resolved_fact_key": "ledger_aggregate_fact_v2_cb943439ee9edfb445bc3fa5" }, { - "name": "hmrc/dividend_income_count_income_band_1_000_000_to_inf", + "name": "hmrc/private_pension_income_income_band_1_000_000_to_inf", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 19000.0, + "resolved_value": 370000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_fbe097b0ffbcc0e7a301478d" + "resolved_fact_key": "ledger_aggregate_fact_v2_7dcf8568040de10d9b3765da" }, { - "name": "hmrc/dividend_income_count_income_band_12_570_to_15_000", + "name": "hmrc/private_pension_income_income_band_12_570_to_15_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 115000.0, + "resolved_value": 4350000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_3a657db84b033007853ec14b" + "resolved_fact_key": "ledger_aggregate_fact_v2_699889c2fb48479e27e44a4a" }, { - "name": "hmrc/dividend_income_count_income_band_15_000_to_20_000", + "name": "hmrc/private_pension_income_income_band_15_000_to_20_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 372000.0, + "resolved_value": 13600000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_418541677821ff087753a7b4" + "resolved_fact_key": "ledger_aggregate_fact_v2_0f977d0b50c1d0f1d1364e88" }, { - "name": "hmrc/dividend_income_count_income_band_150_000_to_200_000", + "name": "hmrc/private_pension_income_income_band_150_000_to_200_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 92000.0, + "resolved_value": 1810000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_426db10645b611899a770dbd" + "resolved_fact_key": "ledger_aggregate_fact_v2_d29aac0680380c80bd842bae" }, { - "name": "hmrc/dividend_income_count_income_band_20_000_to_30_000", + "name": "hmrc/private_pension_income_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 843000.0, + "resolved_value": 30200000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_937f405149e37c0c900a62ee" + "resolved_fact_key": "ledger_aggregate_fact_v2_bafcebe21a05cb0ca19d5e4f" }, { - "name": "hmrc/dividend_income_count_income_band_200_000_to_300_000", + "name": "hmrc/private_pension_income_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 75000.0, + "resolved_value": 1570000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_6c0e32c82b968ba545457cab" + "resolved_fact_key": "ledger_aggregate_fact_v2_de0ed091681463c4ddec5b85" }, { - "name": "hmrc/dividend_income_count_income_band_30_000_to_40_000", + "name": "hmrc/private_pension_income_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 667000.0, + "resolved_value": 24900000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_c8fc2a8e3993c51b68cc6f8a" + "resolved_fact_key": "ledger_aggregate_fact_v2_2884a006a8d7c144a8570a7d" }, { - "name": "hmrc/dividend_income_count_income_band_300_000_to_500_000", + "name": "hmrc/private_pension_income_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 49000.0, + "resolved_value": 1120000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_439d9908bf6880e33103ea7d" + "resolved_fact_key": "ledger_aggregate_fact_v2_73e8de3b1ac198cc75c2b696" }, { - "name": "hmrc/dividend_income_count_income_band_40_000_to_50_000", + "name": "hmrc/private_pension_income_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 627000.0, + "resolved_value": 16900000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_60bb54980a6ca69ff77d07f0" + "resolved_fact_key": "ledger_aggregate_fact_v2_6b29cd5a1d665a00bb3e8046" }, { - "name": "hmrc/dividend_income_count_income_band_50_000_to_70_000", + "name": "hmrc/private_pension_income_income_band_50_000_to_70_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 643000.0, + "resolved_value": 17400000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_56b8b1dd7aec08c3abddc3a0" + "resolved_fact_key": "ledger_aggregate_fact_v2_8f911d955de4f80e87dc69d8" }, { - "name": "hmrc/dividend_income_count_income_band_500_000_to_1_000_000", + "name": "hmrc/private_pension_income_income_band_500_000_to_1_000_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 32000.0, + "resolved_value": 640000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_c9f024b8595617fc8dd8e416" + "resolved_fact_key": "ledger_aggregate_fact_v2_a13e6165bec82537c5c2883c" }, { - "name": "hmrc/dividend_income_count_income_band_70_000_to_100_000", + "name": "hmrc/private_pension_income_income_band_70_000_to_100_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 336000.0, + "resolved_value": 9470000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_2ed13533e012fdd1fec68a67" - } - ] - }, - "hmrc.spi.property_income.amount_by_total_income_band": { - "status": "signed_excluded", - "candidates": [ - { - "name": "hmrc.spi.property_income.amount_by_total_income_band", - "status": "signed_excluded", - "matched_fact_count_overall": 13, - "matched_fact_count_at_or_before_period": 13, - "signed_rationale": "Signed out pending a first-class value-scaling operation or a Chronicle package for HMRC Property Rental Income Statistics with declared reconciliation: the Ledger facts are official HMRC SPI Table 3.7 net property-income amounts, while the incumbent calibration target applies the populace-side x1.9 property-income undercount adjustment. The x1.9 trace is uk-data PR #311 / issue uk-data#230: SPI covers only taxpayers with liability, and HMRC Property Rental Income Statistics show GBP 46.68bn versus SPI about GBP 24.5bn for 2020-21. Binding the raw SPI facts would knowingly calibrate to 10/19 of the incumbent surface." + "resolved_fact_key": "ledger_aggregate_fact_v2_0a1db235b87cad00eeddbfd8" } ] }, - "hmrc.spi.property_income.count_by_total_income_band": { + "hmrc.spi.private_pension_income.count_by_total_income_band": { "status": "active", "candidates": [ { - "name": "hmrc/property_income_count_income_band_100_000_to_150_000", + "name": "hmrc/private_pension_income_count_income_band_100_000_to_150_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 137000.0, + "resolved_value": 109000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_50e02eb85969a4773af5cade" + "resolved_fact_key": "ledger_aggregate_fact_v2_1fa1ba97628c6c2c315f0e15" }, { - "name": "hmrc/property_income_count_income_band_1_000_000_to_inf", + "name": "hmrc/private_pension_income_count_income_band_1_000_000_to_inf", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 7000.0, + "resolved_value": 2000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_d286366fea43c9f897936709" + "resolved_fact_key": "ledger_aggregate_fact_v2_188f8f1a0535263e4db7c9a8" }, { - "name": "hmrc/property_income_count_income_band_12_570_to_15_000", + "name": "hmrc/private_pension_income_count_income_band_12_570_to_15_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 101000.0, + "resolved_value": 1070000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_80d817cee2f3592809f3a194" + "resolved_fact_key": "ledger_aggregate_fact_v2_853f104082cf479b98952c1a" }, { - "name": "hmrc/property_income_count_income_band_15_000_to_20_000", + "name": "hmrc/private_pension_income_count_income_band_15_000_to_20_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 232000.0, + "resolved_value": 2140000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_2c0d78b9f9dff4e5fdfa250c" + "resolved_fact_key": "ledger_aggregate_fact_v2_c785199ee1d08fabfe927ff0" }, { - "name": "hmrc/property_income_count_income_band_150_000_to_200_000", + "name": "hmrc/private_pension_income_count_income_band_150_000_to_200_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 54000.0, + "resolved_value": 29000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_5ec672db73bb4f35958a409e" + "resolved_fact_key": "ledger_aggregate_fact_v2_a98ec830dee0eceb16b452e7" }, { - "name": "hmrc/property_income_count_income_band_20_000_to_30_000", + "name": "hmrc/private_pension_income_count_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 431000.0, + "resolved_value": 2660000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_3eb40c70c3de0d0c29253566" + "resolved_fact_key": "ledger_aggregate_fact_v2_1df6f17a33011c1c026dbc09" }, { - "name": "hmrc/property_income_count_income_band_200_000_to_300_000", + "name": "hmrc/private_pension_income_count_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 41000.0, + "resolved_value": 20000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_0394669c5734865fda5f0541" + "resolved_fact_key": "ledger_aggregate_fact_v2_042ab8896eb0214e7bbad477" }, { - "name": "hmrc/property_income_count_income_band_30_000_to_40_000", + "name": "hmrc/private_pension_income_count_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 364000.0, + "resolved_value": 1450000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_6564bb4b662365729676a9e1" + "resolved_fact_key": "ledger_aggregate_fact_v2_0a28fd76533fc93cf8dbfe4a" }, { - "name": "hmrc/property_income_count_income_band_300_000_to_500_000", + "name": "hmrc/private_pension_income_count_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 23000.0, + "resolved_value": 10000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_87c457b7ee2392ee8360893b" + "resolved_fact_key": "ledger_aggregate_fact_v2_7fccfc3ee4246841b3ed391b" }, { - "name": "hmrc/property_income_count_income_band_40_000_to_50_000", + "name": "hmrc/private_pension_income_count_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 325000.0, + "resolved_value": 779000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_7187a98d8342886b08e3f9e2" + "resolved_fact_key": "ledger_aggregate_fact_v2_0f808aa135a13e5aa4668d22" }, { - "name": "hmrc/property_income_count_income_band_50_000_to_70_000", + "name": "hmrc/private_pension_income_count_income_band_50_000_to_70_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 397000.0, + "resolved_value": 643000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_c44a33c3bc4454de20132027" + "resolved_fact_key": "ledger_aggregate_fact_v2_097efdacf2adf0f90f90d1de" }, { - "name": "hmrc/property_income_count_income_band_500_000_to_1_000_000", + "name": "hmrc/private_pension_income_count_income_band_500_000_to_1_000_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 13000.0, + "resolved_value": 4000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_831e0c70ca80d37c785d4122" + "resolved_fact_key": "ledger_aggregate_fact_v2_8abdd0aa368c3d693e6d0989" }, { - "name": "hmrc/property_income_count_income_band_70_000_to_100_000", + "name": "hmrc/private_pension_income_count_income_band_70_000_to_100_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 226000.0, + "resolved_value": 259000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_f93d04a399cee892e5ec86b6" + "resolved_fact_key": "ledger_aggregate_fact_v2_f75fc4c3e2cb06bbdb7543f8" } ] }, - "hmrc.spi.private_pension_income.amount_by_total_income_band": { + "hmrc.spi.state_pension.amount_by_total_income_band": { "status": "active", "candidates": [ { - "name": "hmrc/private_pension_income_income_band_100_000_to_150_000", + "name": "hmrc/state_pension_income_band_100_000_to_150_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 5430000000.0, + "resolved_value": 847000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_cb943439ee9edfb445bc3fa5" + "resolved_fact_key": "ledger_aggregate_fact_v2_d63e1a96cab57582f482b8c2" }, { - "name": "hmrc/private_pension_income_income_band_1_000_000_to_inf", + "name": "hmrc/state_pension_income_band_1_000_000_to_inf", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 370000000.0, + "resolved_value": 20000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_7dcf8568040de10d9b3765da" + "resolved_fact_key": "ledger_aggregate_fact_v2_9a20bd62d4d5984865242929" }, { - "name": "hmrc/private_pension_income_income_band_12_570_to_15_000", + "name": "hmrc/state_pension_income_band_12_570_to_15_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4350000000.0, + "resolved_value": 11800000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_699889c2fb48479e27e44a4a" + "resolved_fact_key": "ledger_aggregate_fact_v2_45083c1383ea711226aebd1b" }, { - "name": "hmrc/private_pension_income_income_band_15_000_to_20_000", + "name": "hmrc/state_pension_income_band_15_000_to_20_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 13600000000.0, + "resolved_value": 22200000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_0f977d0b50c1d0f1d1364e88" + "resolved_fact_key": "ledger_aggregate_fact_v2_310febb949c686fad2b71a94" }, { - "name": "hmrc/private_pension_income_income_band_150_000_to_200_000", + "name": "hmrc/state_pension_income_band_150_000_to_200_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1810000000.0, + "resolved_value": 265000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_d29aac0680380c80bd842bae" + "resolved_fact_key": "ledger_aggregate_fact_v2_e79668076aadc063559585e9" }, { - "name": "hmrc/private_pension_income_income_band_20_000_to_30_000", + "name": "hmrc/state_pension_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 30200000000.0, + "resolved_value": 24900000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_bafcebe21a05cb0ca19d5e4f" + "resolved_fact_key": "ledger_aggregate_fact_v2_3d18e138c32f6581d6dafdd7" }, { - "name": "hmrc/private_pension_income_income_band_200_000_to_300_000", + "name": "hmrc/state_pension_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1570000000.0, + "resolved_value": 179000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_de0ed091681463c4ddec5b85" + "resolved_fact_key": "ledger_aggregate_fact_v2_e1dda799099ac0f4f439700d" }, { - "name": "hmrc/private_pension_income_income_band_30_000_to_40_000", + "name": "hmrc/state_pension_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 24900000000.0, + "resolved_value": 12300000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_2884a006a8d7c144a8570a7d" + "resolved_fact_key": "ledger_aggregate_fact_v2_151045b793ac454ab29260fc" }, { - "name": "hmrc/private_pension_income_income_band_300_000_to_500_000", + "name": "hmrc/state_pension_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1120000000.0, + "resolved_value": 96000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_73e8de3b1ac198cc75c2b696" + "resolved_fact_key": "ledger_aggregate_fact_v2_c95154893499181b7f3a8903" }, { - "name": "hmrc/private_pension_income_income_band_40_000_to_50_000", + "name": "hmrc/state_pension_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 16900000000.0, + "resolved_value": 6020000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_6b29cd5a1d665a00bb3e8046" + "resolved_fact_key": "ledger_aggregate_fact_v2_bc4cee7d39f5e1c311464a55" }, { - "name": "hmrc/private_pension_income_income_band_50_000_to_70_000", + "name": "hmrc/state_pension_income_band_50_000_to_70_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 17400000000.0, + "resolved_value": 4660000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_8f911d955de4f80e87dc69d8" + "resolved_fact_key": "ledger_aggregate_fact_v2_7f09c940c0fbc3cc42b9e510" }, { - "name": "hmrc/private_pension_income_income_band_500_000_to_1_000_000", + "name": "hmrc/state_pension_income_band_500_000_to_1_000_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 640000000.0, + "resolved_value": 43000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_a13e6165bec82537c5c2883c" + "resolved_fact_key": "ledger_aggregate_fact_v2_d265dfcd4ba09d10053a78a4" }, { - "name": "hmrc/private_pension_income_income_band_70_000_to_100_000", + "name": "hmrc/state_pension_income_band_70_000_to_100_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 9470000000.0, + "resolved_value": 1890000000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_0a1db235b87cad00eeddbfd8" + "resolved_fact_key": "ledger_aggregate_fact_v2_41c1df25454fdf413d5765d7" } ] }, - "hmrc.spi.private_pension_income.count_by_total_income_band": { + "hmrc.spi.state_pension.count_by_total_income_band": { "status": "active", "candidates": [ { - "name": "hmrc/private_pension_income_count_income_band_100_000_to_150_000", + "name": "hmrc/state_pension_count_income_band_100_000_to_150_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 109000.0, + "resolved_value": 74000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_1fa1ba97628c6c2c315f0e15" + "resolved_fact_key": "ledger_aggregate_fact_v2_01b8f391c006c09d3ed51865" }, { - "name": "hmrc/private_pension_income_count_income_band_1_000_000_to_inf", + "name": "hmrc/state_pension_count_income_band_1_000_000_to_inf", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, "resolved_value": 2000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_188f8f1a0535263e4db7c9a8" + "resolved_fact_key": "ledger_aggregate_fact_v2_b8c359bb976d919bedb9076a" }, { - "name": "hmrc/private_pension_income_count_income_band_12_570_to_15_000", + "name": "hmrc/state_pension_count_income_band_12_570_to_15_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1070000.0, + "resolved_value": 1140000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_853f104082cf479b98952c1a" + "resolved_fact_key": "ledger_aggregate_fact_v2_05f2cd00648c7f8225723a9c" }, { - "name": "hmrc/private_pension_income_count_income_band_15_000_to_20_000", + "name": "hmrc/state_pension_count_income_band_15_000_to_20_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 2140000.0, + "resolved_value": 2050000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_c785199ee1d08fabfe927ff0" + "resolved_fact_key": "ledger_aggregate_fact_v2_ced75bd10fbfa56ef2eabeae" }, { - "name": "hmrc/private_pension_income_count_income_band_150_000_to_200_000", + "name": "hmrc/state_pension_count_income_band_150_000_to_200_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 29000.0, + "resolved_value": 21000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_a98ec830dee0eceb16b452e7" + "resolved_fact_key": "ledger_aggregate_fact_v2_73d438db1a168d794e290b0e" }, { - "name": "hmrc/private_pension_income_count_income_band_20_000_to_30_000", + "name": "hmrc/state_pension_count_income_band_20_000_to_30_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 2660000.0, + "resolved_value": 2320000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_1df6f17a33011c1c026dbc09" + "resolved_fact_key": "ledger_aggregate_fact_v2_69b521bf537da156d2afa48e" }, { - "name": "hmrc/private_pension_income_count_income_band_200_000_to_300_000", + "name": "hmrc/state_pension_count_income_band_200_000_to_300_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 20000.0, + "resolved_value": 14000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_042ab8896eb0214e7bbad477" + "resolved_fact_key": "ledger_aggregate_fact_v2_3edcf70605856bb8b906ea19" }, { - "name": "hmrc/private_pension_income_count_income_band_30_000_to_40_000", + "name": "hmrc/state_pension_count_income_band_30_000_to_40_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1450000.0, + "resolved_value": 1160000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_0a28fd76533fc93cf8dbfe4a" + "resolved_fact_key": "ledger_aggregate_fact_v2_1cafb0f484a7d8191b7fb989" }, { - "name": "hmrc/private_pension_income_count_income_band_300_000_to_500_000", + "name": "hmrc/state_pension_count_income_band_300_000_to_500_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 10000.0, + "resolved_value": 8000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_7fccfc3ee4246841b3ed391b" + "resolved_fact_key": "ledger_aggregate_fact_v2_7f510c873457703c57c16983" }, { - "name": "hmrc/private_pension_income_count_income_band_40_000_to_50_000", + "name": "hmrc/state_pension_count_income_band_40_000_to_50_000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 779000.0, + "resolved_value": 568000.0, "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_0f808aa135a13e5aa4668d22" + "resolved_fact_key": "ledger_aggregate_fact_v2_d4ff6839b2d936396ae33f67" + }, + { + "name": "hmrc/state_pension_count_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 441000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_2b5023baae0b6814c07afbe9" + }, + { + "name": "hmrc/state_pension_count_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9a834c26fa7c215c052f4f5" }, { - "name": "hmrc/private_pension_income_count_income_band_50_000_to_70_000", + "name": "hmrc/state_pension_count_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 176000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_7514fbdbf5f909008b617d06" + } + ] + }, + "hmrc.cgt.taxpayers_total": { + "status": "active", + "candidates": [ + { + "name": "hmrc.cgt.taxpayers_total", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 551000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_31d709fc393c2bf4d04efca5" + } + ] + }, + "hmrc.cgt.gains_total": { + "status": "active", + "candidates": [ + { + "name": "hmrc.cgt.gains_total", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 119258000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_12060d20a417d85d67cf24e8" + } + ] + }, + "dwp.benefit_cap.capped_households": { + "status": "active", + "candidates": [ + { + "name": "dwp.benefit_cap.capped_households", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 643000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_097efdacf2adf0f90f90d1de" - }, + "resolved_value": 110637.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_b698397897ed849f096cdd94" + } + ] + }, + "dwp.pip.daily_living_standard_claimants": { + "status": "no_fact_at_or_before_period", + "candidates": [ { - "name": "hmrc/private_pension_income_count_income_band_500_000_to_1_000_000", + "name": "dwp.pip.daily_living_standard_claimants", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "dwp.pip.daily_living_enhanced_claimants": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "dwp.pip.daily_living_enhanced_claimants", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "dwp.esa_claimants": { + "status": "active", + "candidates": [ + { + "name": "dwp.esa_claimants", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_8abdd0aa368c3d693e6d0989" - }, + "resolved_value": 1000000.0, + "resolved_fact_period": "2025-08", + "resolved_fact_key": "ledger_aggregate_fact_v2_16ef67af9274891abd5e4fdc" + } + ] + }, + "dwp.esa_contrib_claimants": { + "status": "active", + "candidates": [ { - "name": "hmrc/private_pension_income_count_income_band_70_000_to_100_000", + "name": "dwp.esa_contrib_claimants", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 259000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_f75fc4c3e2cb06bbdb7543f8" + "resolved_value": 620000.0, + "resolved_fact_period": "2025-08", + "resolved_fact_key": "ledger_aggregate_fact_v2_bf22883b03cf631864b2ae1d" } ] }, - "hmrc.spi.state_pension.amount_by_total_income_band": { + "dwp.esa_income_claimants": { "status": "active", "candidates": [ { - "name": "hmrc/state_pension_income_band_100_000_to_150_000", + "name": "dwp.esa_income_claimants", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 847000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_d63e1a96cab57582f482b8c2" - }, + "resolved_value": 180000.0, + "resolved_fact_period": "2025-08", + "resolved_fact_key": "ledger_aggregate_fact_v2_8684f0c35a1d71a291e61c81" + } + ] + }, + "dwp.jsa_claimants": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_1_000_000_to_inf", + "name": "dwp.jsa_claimants", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 20000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_9a20bd62d4d5984865242929" - }, + "resolved_value": 71000.0, + "resolved_fact_period": "2025-08", + "resolved_fact_key": "ledger_aggregate_fact_v2_b5d92ff094ad2c534847291a" + } + ] + }, + "dwp.uc.households_children_1": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_12_570_to_15_000", + "name": "dwp.uc.households_children_1", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 11800000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_45083c1383ea711226aebd1b" - }, + "resolved_value": 1190123.8333333333, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_c1533879baf52aaa88758083" + } + ] + }, + "dwp.uc.households_children_2": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_15_000_to_20_000", + "name": "dwp.uc.households_children_2", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 22200000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_310febb949c686fad2b71a94" - }, + "resolved_value": 1049895.5, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_46fca4f9d4e0519f0c190824" + } + ] + }, + "dwp.uc.households_children_3": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_150_000_to_200_000", + "name": "dwp.uc.households_children_3", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 265000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_e79668076aadc063559585e9" - }, + "resolved_value": 477887.6666666667, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_ba5bce203605d4e16037d311" + } + ] + }, + "dwp.uc.households_children_4": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_20_000_to_30_000", + "name": "dwp.uc.households_children_4", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 24900000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_3d18e138c32f6581d6dafdd7" - }, + "resolved_value": 170713.66666666666, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_33541aafa05a63dcae4fc144" + } + ] + }, + "dwp.uc.households_children_5_or_more": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_200_000_to_300_000", + "name": "dwp.uc.households_children_5_or_more", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 179000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_e1dda799099ac0f4f439700d" - }, + "resolved_value": 76320.08333333333, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_33d99593d166153ca2d0adec" + } + ] + }, + "dwp.uc.households_single_no_children": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_30_000_to_40_000", + "name": "dwp.uc.households_single_no_children", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 24, + "matched_fact_count_at_or_before_period": 24, + "matched_fact_count_in_source_window": 24, "resolved_period": 2025, - "resolved_value": 12300000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_151045b793ac454ab29260fc" - }, + "resolved_value": 2990070.1666666665, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_c013630f1154eb7252466457" + } + ] + }, + "dwp.uc.households_single_with_children": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_300_000_to_500_000", + "name": "dwp.uc.households_single_with_children", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 24, + "matched_fact_count_at_or_before_period": 24, + "matched_fact_count_in_source_window": 24, "resolved_period": 2025, - "resolved_value": 96000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_c95154893499181b7f3a8903" - }, + "resolved_value": 2138780.1666666665, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_4e21ff5e364647d7c75589d2" + } + ] + }, + "dwp.uc.households_couple_no_children": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_40_000_to_50_000", + "name": "dwp.uc.households_couple_no_children", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 24, + "matched_fact_count_at_or_before_period": 24, + "matched_fact_count_in_source_window": 24, + "resolved_period": 2025, + "resolved_value": 241130.91666666666, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_ad46a5483afd6bad20dc50fe" + } + ] + }, + "dwp.uc.households_couple_with_children": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_couple_with_children", + "status": "active", + "matched_fact_count_overall": 24, + "matched_fact_count_at_or_before_period": 24, + "matched_fact_count_in_source_window": 24, "resolved_period": 2025, - "resolved_value": 6020000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_bc4cee7d39f5e1c311464a55" - }, + "resolved_value": 826160.8333333334, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_1a76243d3f616b19eaed3e0a" + } + ] + }, + "dwp.uc.payment_distribution_single": { + "status": "active", + "candidates": [ { - "name": "hmrc/state_pension_income_band_50_000_to_70_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 4660000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_7f09c940c0fbc3cc42b9e510" + "resolved_value": 89479.33333333333, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_2ab0a2ad4fff5a73eb430af0" }, { - "name": "hmrc/state_pension_income_band_500_000_to_1_000_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 43000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_d265dfcd4ba09d10053a78a4" + "resolved_value": 127403.22222222222, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_4da96f3f87204e3b63a7197e" }, { - "name": "hmrc/state_pension_income_band_70_000_to_100_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1890000000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_41c1df25454fdf413d5765d7" - } - ] - }, - "hmrc.spi.state_pension.count_by_total_income_band": { - "status": "active", - "candidates": [ + "resolved_value": 122035.55555555556, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_100f173ee4233f5ed3616bbc" + }, { - "name": "hmrc/state_pension_count_income_band_100_000_to_150_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 74000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_01b8f391c006c09d3ed51865" + "resolved_value": 197163.22222222222, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_263205affbfb94c0a87b7834" }, { - "name": "hmrc/state_pension_count_income_band_1_000_000_to_inf", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 2000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_b8c359bb976d919bedb9076a" + "resolved_value": 209497.33333333334, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_f4e51bd6399c4a72f10e625f" }, { - "name": "hmrc/state_pension_count_income_band_12_570_to_15_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1140000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_05f2cd00648c7f8225723a9c" + "resolved_value": 149963.22222222222, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_746aa1e8d116c4543251b137" }, { - "name": "hmrc/state_pension_count_income_band_15_000_to_20_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 2050000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_ced75bd10fbfa56ef2eabeae" + "resolved_value": 108689.66666666667, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_0dc82a9ba1ce7a8ea1855991" }, { - "name": "hmrc/state_pension_count_income_band_150_000_to_200_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 21000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_73d438db1a168d794e290b0e" + "resolved_value": 61718.666666666664, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_4399ab26a944d2d46a12311d" }, { - "name": "hmrc/state_pension_count_income_band_20_000_to_30_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 2320000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_69b521bf537da156d2afa48e" + "resolved_value": 34050.444444444445, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_b8ab0a63fbef46e02aa34d37" }, { - "name": "hmrc/state_pension_count_income_band_200_000_to_300_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 14000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_3edcf70605856bb8b906ea19" + "resolved_value": 22338.333333333332, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_d22d996cd3edb838030ab0dc" }, { - "name": "hmrc/state_pension_count_income_band_30_000_to_40_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1160000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_1cafb0f484a7d8191b7fb989" + "resolved_value": 14685.777777777777, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_404ce9f1ea3e17ec602a1de9" }, { - "name": "hmrc/state_pension_count_income_band_300_000_to_500_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 8000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_7f510c873457703c57c16983" + "resolved_value": 11133.666666666666, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_d2268373d3e5894e10f3f004" }, { - "name": "hmrc/state_pension_count_income_band_40_000_to_50_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 568000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_d4ff6839b2d936396ae33f67" + "resolved_value": 197136.66666666666, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_37e9e071fb187dab220f3876" }, { - "name": "hmrc/state_pension_count_income_band_50_000_to_70_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 441000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_2b5023baae0b6814c07afbe9" + "resolved_value": 6951.222222222223, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_8af773c191130cd03d9de884" }, { - "name": "hmrc/state_pension_count_income_band_500_000_to_1_000_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 3000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9a834c26fa7c215c052f4f5" + "resolved_value": 6508.222222222223, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_f46b09c321cf98f8e0d12b89" }, { - "name": "hmrc/state_pension_count_income_band_70_000_to_100_000", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 176000.0, - "resolved_fact_period": "2023", - "resolved_fact_key": "ledger_aggregate_fact_v2_7514fbdbf5f909008b617d06" - } - ] - }, - "hmrc.cgt.taxpayers_total": { - "status": "active", - "candidates": [ + "resolved_value": 5913.444444444444, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_a763ca2d87febd61de26d8b0" + }, { - "name": "hmrc.cgt.taxpayers_total", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 551000.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_31d709fc393c2bf4d04efca5" - } - ] - }, - "hmrc.cgt.gains_total": { - "status": "active", - "candidates": [ + "resolved_value": 1884.111111111111, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_8b6d8894debcbda5e38c0923" + }, { - "name": "hmrc.cgt.gains_total", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 119258000000.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_12060d20a417d85d67cf24e8" - } - ] - }, - "dwp.benefit_cap.capped_households": { - "status": "active", - "candidates": [ + "resolved_value": 1653.7777777777778, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_aa3077a36f37ae73562e57fc" + }, { - "name": "dwp.benefit_cap.capped_households", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 110637.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_b698397897ed849f096cdd94" - } - ] - }, - "dwp.pip.daily_living_standard_claimants": { - "status": "no_fact_at_or_before_period", - "candidates": [ - { - "name": "dwp.pip.daily_living_standard_claimants", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" - } - ] - }, - "dwp.pip.daily_living_enhanced_claimants": { - "status": "no_fact_at_or_before_period", - "candidates": [ + "resolved_value": 377063.1111111111, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_988e854b9584a36b1b62810f" + }, { - "name": "dwp.pip.daily_living_enhanced_claimants", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" - } - ] - }, - "dwp.esa_claimants": { - "status": "active", - "candidates": [ + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000", + "status": "active", + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, + "resolved_period": 2025, + "resolved_value": 195983.22222222222, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_7a3e7c9563c15ba28ffd3c3e" + }, { - "name": "dwp.esa_claimants", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1000000.0, - "resolved_fact_period": "2025-08", - "resolved_fact_key": "ledger_aggregate_fact_v2_16ef67af9274891abd5e4fdc" - } - ] - }, - "dwp.esa_contrib_claimants": { - "status": "active", - "candidates": [ + "resolved_value": 114033.33333333333, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_294fdb23cc02a98334267137" + }, { - "name": "dwp.esa_contrib_claimants", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 620000.0, - "resolved_fact_period": "2025-08", - "resolved_fact_key": "ledger_aggregate_fact_v2_bf22883b03cf631864b2ae1d" - } - ] - }, - "dwp.esa_income_claimants": { - "status": "active", - "candidates": [ + "resolved_value": 149043.77777777778, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_5d4a92d292c96a2f440dee5a" + }, { - "name": "dwp.esa_income_claimants", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 180000.0, - "resolved_fact_period": "2025-08", - "resolved_fact_key": "ledger_aggregate_fact_v2_8684f0c35a1d71a291e61c81" - } - ] - }, - "dwp.jsa_claimants": { - "status": "active", - "candidates": [ + "resolved_value": 399750.22222222225, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_ad92f85c0ac85ea7bb6e8ca3" + }, { - "name": "dwp.jsa_claimants", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 71000.0, - "resolved_fact_period": "2025-08", - "resolved_fact_key": "ledger_aggregate_fact_v2_b5d92ff094ad2c534847291a" - } - ] - }, - "dwp.uc.households_children_1": { - "status": "active", - "candidates": [ + "resolved_value": 386411.6666666667, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_e2bbf1fe386cfcd8db712026" + }, { - "name": "dwp.uc.households_children_1", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1190123.8333333333, + "resolved_value": 104891.11111111111, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_c1533879baf52aaa88758083" + "resolved_fact_key": "ledger_aggregate_fact_v2_de2719af6e4d5f9ffe65aaee" } ] }, - "dwp.uc.households_children_2": { + "dwp.uc.payment_distribution_lone_parent": { "status": "active", "candidates": [ { - "name": "dwp.uc.households_children_2", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1049895.5, + "resolved_value": 26670.222222222223, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_46fca4f9d4e0519f0c190824" - } - ] - }, - "dwp.uc.households_children_3": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_7b17c88cf49645b2d3ef44a6" + }, { - "name": "dwp.uc.households_children_3", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 477887.6666666667, + "resolved_value": 36208.11111111111, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_ba5bce203605d4e16037d311" - } - ] - }, - "dwp.uc.households_children_4": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_765ace417ceafd524ffda4c0" + }, { - "name": "dwp.uc.households_children_4", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 170713.66666666666, + "resolved_value": 125798.44444444444, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_33541aafa05a63dcae4fc144" - } - ] - }, - "dwp.uc.households_children_5_or_more": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_eaddee052a3861f259b93272" + }, { - "name": "dwp.uc.households_children_5_or_more", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 76320.08333333333, + "resolved_value": 129133.66666666667, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_33d99593d166153ca2d0adec" - } - ] - }, - "dwp.uc.households_single_no_children": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_b8d66013c8a68e423f507be8" + }, { - "name": "dwp.uc.households_single_no_children", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600", "status": "active", - "matched_fact_count_overall": 24, - "matched_fact_count_at_or_before_period": 24, - "matched_fact_count_in_source_window": 24, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 2990070.1666666665, + "resolved_value": 115856.66666666667, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_c013630f1154eb7252466457" - } - ] - }, - "dwp.uc.households_single_with_children": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_1bc84efe74c485d143caab7b" + }, { - "name": "dwp.uc.households_single_with_children", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800", "status": "active", - "matched_fact_count_overall": 24, - "matched_fact_count_at_or_before_period": 24, - "matched_fact_count_in_source_window": 24, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 2138780.1666666665, + "resolved_value": 125660.22222222222, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_4e21ff5e364647d7c75589d2" - } - ] - }, - "dwp.uc.households_couple_no_children": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_e26d2d7e425a94fd9fde3d17" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000", + "status": "active", + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, + "resolved_period": 2025, + "resolved_value": 135836.77777777778, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_8fa2e062c33297530d458054" + }, { - "name": "dwp.uc.households_couple_no_children", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200", "status": "active", - "matched_fact_count_overall": 24, - "matched_fact_count_at_or_before_period": 24, - "matched_fact_count_in_source_window": 24, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 241130.91666666666, + "resolved_value": 135444.88888888888, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_ad46a5483afd6bad20dc50fe" - } - ] - }, - "dwp.uc.households_couple_with_children": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_77cb72042ffb9b2b1af769e3" + }, { - "name": "dwp.uc.households_couple_with_children", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400", "status": "active", - "matched_fact_count_overall": 24, - "matched_fact_count_at_or_before_period": 24, - "matched_fact_count_in_source_window": 24, + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 826160.8333333334, + "resolved_value": 106341.88888888889, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_1a76243d3f616b19eaed3e0a" - } - ] - }, - "dwp.uc.payment_distribution_single": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_acb89a96425fd7af119e0c3b" + }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 89479.33333333333, + "resolved_value": 85490.44444444444, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_2ab0a2ad4fff5a73eb430af0" + "resolved_fact_key": "ledger_aggregate_fact_v2_3aa5825f5e5e8dbc570c0af1" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 127403.22222222222, + "resolved_value": 80226.88888888889, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_4da96f3f87204e3b63a7197e" + "resolved_fact_key": "ledger_aggregate_fact_v2_c5a0ee450c3ad7f882dfb167" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 122035.55555555556, + "resolved_value": 71259.55555555556, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_100f173ee4233f5ed3616bbc" + "resolved_fact_key": "ledger_aggregate_fact_v2_13ffca0d11c038fc7d096ec9" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 197163.22222222222, + "resolved_value": 46312.77777777778, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_263205affbfb94c0a87b7834" + "resolved_fact_key": "ledger_aggregate_fact_v2_6619e26753d01d76247e1759" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 209497.33333333334, + "resolved_value": 51301.666666666664, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_f4e51bd6399c4a72f10e625f" + "resolved_fact_key": "ledger_aggregate_fact_v2_4a935006e5c346bfe0009055" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 149963.22222222222, + "resolved_value": 43305.22222222222, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_746aa1e8d116c4543251b137" + "resolved_fact_key": "ledger_aggregate_fact_v2_e64560bd9c14d083cd03c985" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 108689.66666666667, + "resolved_value": 34910.555555555555, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_0dc82a9ba1ce7a8ea1855991" + "resolved_fact_key": "ledger_aggregate_fact_v2_8e16d0c97924701eb074c25d" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 61718.666666666664, + "resolved_value": 28513.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_4399ab26a944d2d46a12311d" + "resolved_fact_key": "ledger_aggregate_fact_v2_cf9757018b0d313f20342b59" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 34050.444444444445, + "resolved_value": 22593.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_b8ab0a63fbef46e02aa34d37" + "resolved_fact_key": "ledger_aggregate_fact_v2_6bede883f015e48e86c0a2de" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 22338.333333333332, + "resolved_value": 60310.11111111111, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_d22d996cd3edb838030ab0dc" + "resolved_fact_key": "ledger_aggregate_fact_v2_b0710535c8b6006db118eb3b" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 14685.777777777777, + "resolved_value": 67858.66666666667, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_404ce9f1ea3e17ec602a1de9" + "resolved_fact_key": "ledger_aggregate_fact_v2_b4008c8b22190b4ee185d4f6" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 11133.666666666666, + "resolved_value": 89577.44444444444, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_d2268373d3e5894e10f3f004" + "resolved_fact_key": "ledger_aggregate_fact_v2_1d1fadffae053bf60d7fcd7e" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 197136.66666666666, + "resolved_value": 116076.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_37e9e071fb187dab220f3876" + "resolved_fact_key": "ledger_aggregate_fact_v2_fae65610a14d6c22f475d757" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 6951.222222222223, + "resolved_value": 97511.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_8af773c191130cd03d9de884" + "resolved_fact_key": "ledger_aggregate_fact_v2_540c0869e23edc4a402166bf" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 6508.222222222223, + "resolved_value": 102343.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_f46b09c321cf98f8e0d12b89" + "resolved_fact_key": "ledger_aggregate_fact_v2_a170bf444a17ae88a80766b0" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 5913.444444444444, + "resolved_value": 123718.11111111111, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_a763ca2d87febd61de26d8b0" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_b7d0d6add859217e797a66ea" + } + ] + }, + "dwp.uc.payment_distribution_couple_no_children": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1884.111111111111, + "resolved_value": 7506.333333333333, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_8b6d8894debcbda5e38c0923" + "resolved_fact_key": "ledger_aggregate_fact_v2_e8af6f4ef9d70ded4a4bf6b5" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1653.7777777777778, + "resolved_value": 8797.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_aa3077a36f37ae73562e57fc" + "resolved_fact_key": "ledger_aggregate_fact_v2_28514ff922f7b00a4706e74b" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 377063.1111111111, + "resolved_value": 16121.444444444445, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_988e854b9584a36b1b62810f" + "resolved_fact_key": "ledger_aggregate_fact_v2_8b8e20276b7af9f670009f64" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 195983.22222222222, + "resolved_value": 13317.333333333334, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_7a3e7c9563c15ba28ffd3c3e" + "resolved_fact_key": "ledger_aggregate_fact_v2_22e83b92481a8b2267a15309" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 114033.33333333333, + "resolved_value": 19657.333333333332, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_294fdb23cc02a98334267137" + "resolved_fact_key": "ledger_aggregate_fact_v2_42f1cbfe9fee5eb33f69088d" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 149043.77777777778, + "resolved_value": 16443.222222222223, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_5d4a92d292c96a2f440dee5a" + "resolved_fact_key": "ledger_aggregate_fact_v2_aed9bf66bdbc046ee991fcf5" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 399750.22222222225, + "resolved_value": 13441.111111111111, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_ad92f85c0ac85ea7bb6e8ca3" + "resolved_fact_key": "ledger_aggregate_fact_v2_7ccb1420b8ca3e26048291b9" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 386411.6666666667, + "resolved_value": 10728.555555555555, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_e2bbf1fe386cfcd8db712026" + "resolved_fact_key": "ledger_aggregate_fact_v2_a7057ddde3cd2ffaed246687" }, { - "name": "dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 104891.11111111111, + "resolved_value": 9653.222222222223, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_de2719af6e4d5f9ffe65aaee" - } - ] - }, - "dwp.uc.payment_distribution_lone_parent": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_3e228ab480713f15af6e847c" + }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 26670.222222222223, + "resolved_value": 6486.888888888889, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_7b17c88cf49645b2d3ef44a6" + "resolved_fact_key": "ledger_aggregate_fact_v2_ecfd0dfe25ebc098ade1e902" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 36208.11111111111, + "resolved_value": 3981.8888888888887, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_765ace417ceafd524ffda4c0" + "resolved_fact_key": "ledger_aggregate_fact_v2_2bbf9ab64d9fde9025452375" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 125798.44444444444, + "resolved_value": 2761.4444444444443, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_eaddee052a3861f259b93272" + "resolved_fact_key": "ledger_aggregate_fact_v2_f19a927835e2aa12a94f6279" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 129133.66666666667, + "resolved_value": 12256.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_b8d66013c8a68e423f507be8" + "resolved_fact_key": "ledger_aggregate_fact_v2_46ba331006269a96f7aee844" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 115856.66666666667, + "resolved_value": 2131.222222222222, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_1bc84efe74c485d143caab7b" + "resolved_fact_key": "ledger_aggregate_fact_v2_dd2ddbef54fc0ec48f61d7b0" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 125660.22222222222, + "resolved_value": 1475.3333333333333, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_e26d2d7e425a94fd9fde3d17" + "resolved_fact_key": "ledger_aggregate_fact_v2_3ea2b4312343be8d41a37265" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 135836.77777777778, + "resolved_value": 1073.7777777777778, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_8fa2e062c33297530d458054" + "resolved_fact_key": "ledger_aggregate_fact_v2_55cf1a8742443b096e81b33e" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 135444.88888888888, + "resolved_value": 746.3333333333334, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_77cb72042ffb9b2b1af769e3" + "resolved_fact_key": "ledger_aggregate_fact_v2_6cd7a2f97a5e43ba25481719" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 106341.88888888889, + "resolved_value": 605.7777777777778, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_acb89a96425fd7af119e0c3b" + "resolved_fact_key": "ledger_aggregate_fact_v2_3f50c2d6d58a3a45681f0c5d" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 85490.44444444444, + "resolved_value": 10945.444444444445, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_3aa5825f5e5e8dbc570c0af1" + "resolved_fact_key": "ledger_aggregate_fact_v2_0ead4e96f4e609a16cf1e53e" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 80226.88888888889, + "resolved_value": 12492.444444444445, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_c5a0ee450c3ad7f882dfb167" + "resolved_fact_key": "ledger_aggregate_fact_v2_6823b2987ba44d1b85428d2b" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 71259.55555555556, + "resolved_value": 12979.666666666666, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_13ffca0d11c038fc7d096ec9" + "resolved_fact_key": "ledger_aggregate_fact_v2_3a3fc258bd18da8c60177380" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 46312.77777777778, + "resolved_value": 16484.444444444445, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_6619e26753d01d76247e1759" + "resolved_fact_key": "ledger_aggregate_fact_v2_b75ef335d484f8dd9ae13a70" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 51301.666666666664, + "resolved_value": 15272.444444444445, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_4a935006e5c346bfe0009055" + "resolved_fact_key": "ledger_aggregate_fact_v2_fcd000da1af753b61c9ac5df" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 43305.22222222222, + "resolved_value": 19142.333333333332, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_e64560bd9c14d083cd03c985" + "resolved_fact_key": "ledger_aggregate_fact_v2_3d38fa50aa9bf0e85549ec9a" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 34910.555555555555, + "resolved_value": 13313.333333333334, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_8e16d0c97924701eb074c25d" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_6697a9dc6c88a1a0b0472a1e" + } + ] + }, + "dwp.uc.payment_distribution_couple_with_children": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 28513.0, + "resolved_value": 19073.555555555555, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_cf9757018b0d313f20342b59" + "resolved_fact_key": "ledger_aggregate_fact_v2_8c1548028e499fa8399d1246" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 22593.0, + "resolved_value": 22775.777777777777, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_6bede883f015e48e86c0a2de" + "resolved_fact_key": "ledger_aggregate_fact_v2_ff2fef9bd96e583203e111d6" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 60310.11111111111, + "resolved_value": 40009.555555555555, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_b0710535c8b6006db118eb3b" + "resolved_fact_key": "ledger_aggregate_fact_v2_fee1fd2227a87871edfe2bfa" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 67858.66666666667, + "resolved_value": 39972.555555555555, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_b4008c8b22190b4ee185d4f6" + "resolved_fact_key": "ledger_aggregate_fact_v2_3b0427c86dc3df13761ab5b0" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 89577.44444444444, + "resolved_value": 40518.77777777778, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_1d1fadffae053bf60d7fcd7e" + "resolved_fact_key": "ledger_aggregate_fact_v2_bfd9a57597b46f356ef9cfc9" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 116076.0, + "resolved_value": 37118.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_fae65610a14d6c22f475d757" + "resolved_fact_key": "ledger_aggregate_fact_v2_328ed88b561971d4ee47d852" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 97511.0, + "resolved_value": 37177.77777777778, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_540c0869e23edc4a402166bf" + "resolved_fact_key": "ledger_aggregate_fact_v2_c50c761ddfaab3cbfba62bfd" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 102343.0, + "resolved_value": 37164.555555555555, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_a170bf444a17ae88a80766b0" + "resolved_fact_key": "ledger_aggregate_fact_v2_74d32efc9f1984f60cbd9397" }, { - "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 123718.11111111111, + "resolved_value": 33309.555555555555, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_b7d0d6add859217e797a66ea" - } - ] - }, - "dwp.uc.payment_distribution_couple_no_children": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_90b7e15c6554b1c74e7055f3" + }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 7506.333333333333, + "resolved_value": 29102.555555555555, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_e8af6f4ef9d70ded4a4bf6b5" + "resolved_fact_key": "ledger_aggregate_fact_v2_96f9b06f2d2afb65af9a224a" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 8797.0, + "resolved_value": 27534.666666666668, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_28514ff922f7b00a4706e74b" + "resolved_fact_key": "ledger_aggregate_fact_v2_e65a50de282324e8c188863a" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 16121.444444444445, + "resolved_value": 25584.777777777777, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_8b8e20276b7af9f670009f64" + "resolved_fact_key": "ledger_aggregate_fact_v2_16f48d435925ffa44f4d6871" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 13317.333333333334, + "resolved_value": 26502.666666666668, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_22e83b92481a8b2267a15309" + "resolved_fact_key": "ledger_aggregate_fact_v2_93fd0534df01d1dade53397e" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 19657.333333333332, + "resolved_value": 22927.777777777777, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_42f1cbfe9fee5eb33f69088d" + "resolved_fact_key": "ledger_aggregate_fact_v2_ffb787487a36c86f94d25a25" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 16443.222222222223, + "resolved_value": 20334.666666666668, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_aed9bf66bdbc046ee991fcf5" + "resolved_fact_key": "ledger_aggregate_fact_v2_2f4d504be6f184b7834f2687" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 13441.111111111111, + "resolved_value": 17535.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_7ccb1420b8ca3e26048291b9" + "resolved_fact_key": "ledger_aggregate_fact_v2_719022eef2836c069c4b02d0" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 10728.555555555555, + "resolved_value": 15399.888888888889, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_a7057ddde3cd2ffaed246687" + "resolved_fact_key": "ledger_aggregate_fact_v2_3b1d8f6516b32e39ecad3873" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 9653.222222222223, + "resolved_value": 12836.222222222223, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_3e228ab480713f15af6e847c" + "resolved_fact_key": "ledger_aggregate_fact_v2_115a9ea1e35d76db13756149" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 6486.888888888889, + "resolved_value": 29027.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_ecfd0dfe25ebc098ade1e902" + "resolved_fact_key": "ledger_aggregate_fact_v2_255e8c862df5351282c29809" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 3981.8888888888887, + "resolved_value": 32427.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_2bbf9ab64d9fde9025452375" + "resolved_fact_key": "ledger_aggregate_fact_v2_32261034f242507c0a7337b3" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 2761.4444444444443, + "resolved_value": 34956.88888888889, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_f19a927835e2aa12a94f6279" + "resolved_fact_key": "ledger_aggregate_fact_v2_6f40664df124c4dca50524b8" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 12256.0, + "resolved_value": 37410.77777777778, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_46ba331006269a96f7aee844" + "resolved_fact_key": "ledger_aggregate_fact_v2_27b091b1a00bc33ab68139f8" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 2131.222222222222, + "resolved_value": 39910.333333333336, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_dd2ddbef54fc0ec48f61d7b0" + "resolved_fact_key": "ledger_aggregate_fact_v2_22b16b470c0b51499fb2f042" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1475.3333333333333, + "resolved_value": 39368.0, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_3ea2b4312343be8d41a37265" + "resolved_fact_key": "ledger_aggregate_fact_v2_7dbca9e2f8508f1066399b73" }, { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 1073.7777777777778, + "resolved_value": 40805.444444444445, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_55cf1a8742443b096e81b33e" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_23cf62e7e58211e783c52d2e" + } + ] + }, + "dwp.uc.scotland_households_child_under_1": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800", + "name": "dwp.uc.scotland_households_child_under_1", "status": "active", "matched_fact_count_overall": 9, "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 746.3333333333334, + "resolved_value": 14333.222222222223, "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_6cd7a2f97a5e43ba25481719" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_e88b27e010e08ac8d36d0d30" + } + ] + }, + "dwp.uc.two_child_limit.households_affected": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.households_affected", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 469780.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_860a48172c62298ceb00c20b" + } + ] + }, + "dwp.uc.two_child_limit.children_affected": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.children_affected", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 597920.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_4378e45ac129e036b4a6ca03" + } + ] + }, + "dwp.uc.two_child_limit.children_in_affected_households": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000", + "name": "dwp.uc.two_child_limit.children_in_affected_households", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 605.7777777777778, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_3f50c2d6d58a3a45681f0c5d" - }, + "resolved_value": 1665540.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_05774e34488c474df7f84742" + } + ] + }, + "dwp.uc.two_child_limit.households_3_children": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800", + "name": "dwp.uc.two_child_limit.households_3_children", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 10945.444444444445, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_0ead4e96f4e609a16cf1e53e" - }, + "resolved_value": 297310.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_dca7734c17910c213e397741" + } + ] + }, + "dwp.uc.two_child_limit.children_in_3_children_households": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000", + "name": "dwp.uc.two_child_limit.children_in_3_children_households", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 12492.444444444445, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_6823b2987ba44d1b85428d2b" - }, + "resolved_value": 891930.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_515b2aeb394a9a9a1fd2d195" + } + ] + }, + "dwp.uc.two_child_limit.households_4_children": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200", + "name": "dwp.uc.two_child_limit.households_4_children", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 12979.666666666666, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_3a3fc258bd18da8c60177380" - }, + "resolved_value": 117190.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_a78a141d4018bdd92678b497" + } + ] + }, + "dwp.uc.two_child_limit.children_in_4_children_households": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400", + "name": "dwp.uc.two_child_limit.children_in_4_children_households", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 16484.444444444445, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_b75ef335d484f8dd9ae13a70" - }, + "resolved_value": 468760.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_adef094060710c5b354e7ac4" + } + ] + }, + "dwp.uc.two_child_limit.households_5_children": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600", + "name": "dwp.uc.two_child_limit.households_5_children", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 15272.444444444445, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_fcd000da1af753b61c9ac5df" - }, + "resolved_value": 37020.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_2c9cfcd7cc862c9c1dd57e4d" + } + ] + }, + "dwp.uc.two_child_limit.children_in_5_children_households": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800", + "name": "dwp.uc.two_child_limit.children_in_5_children_households", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 19142.333333333332, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_3d38fa50aa9bf0e85549ec9a" - }, + "resolved_value": 185120.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_2134e60314c98faf54df2498" + } + ] + }, + "dwp.uc.two_child_limit.households_6_plus_children": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000", + "name": "dwp.uc.two_child_limit.households_6_plus_children", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 13313.333333333334, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_6697a9dc6c88a1a0b0472a1e" + "resolved_value": 18260.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_e6302f9f933c14e97fc2fcae" } ] }, - "dwp.uc.payment_distribution_couple_with_children": { + "dwp.uc.two_child_limit.children_in_6_plus_children_households": { "status": "active", "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200", + "name": "dwp.uc.two_child_limit.children_in_6_plus_children_households", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 19073.555555555555, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_8c1548028e499fa8399d1246" - }, + "resolved_value": 119720.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_235cb4e779dd669dad2cd421" + } + ] + }, + "dwp.uc.two_child_limit.households_claimant_pip": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400", + "name": "dwp.uc.two_child_limit.households_claimant_pip", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 22775.777777777777, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff2fef9bd96e583203e111d6" - }, + "resolved_value": 65280.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_55dd86462d71be247206b5a2" + } + ] + }, + "dwp.uc.two_child_limit.children_claimant_pip": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200", + "name": "dwp.uc.two_child_limit.children_claimant_pip", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 40009.555555555555, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_fee1fd2227a87871edfe2bfa" - }, + "resolved_value": 235270.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_fe554fcdcb22a77d71c01537" + } + ] + }, + "dwp.uc.two_child_limit.households_disabled_child_element": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400", + "name": "dwp.uc.two_child_limit.households_disabled_child_element", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 39972.555555555555, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_3b0427c86dc3df13761ab5b0" - }, + "resolved_value": 129630.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_535ef3b4afd474ea14d16d27" + } + ] + }, + "dwp.uc.two_child_limit.children_disabled_child_element": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600", + "name": "dwp.uc.two_child_limit.children_disabled_child_element", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 40518.77777777778, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_bfd9a57597b46f356ef9cfc9" - }, + "resolved_value": 479460.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_ac642b7002518167b56e1537" + } + ] + }, + "ons.population.uk_total": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800", + "name": "ons.population.uk_total", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 37118.0, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_328ed88b561971d4ee47d852" - }, + "resolved_value": 69281437.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_6c212695ea75be0d2a635e9b" + } + ] + }, + "ons.population.age_0_9_by_region": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000", + "name": "ons.population.age_0_9_by_region@E12000001", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 37177.77777777778, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_c50c761ddfaab3cbfba62bfd" + "resolved_value": 285165.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_c796672d4d88aa11ab15a31a" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200", + "name": "ons.population.age_0_9_by_region@E12000002", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 37164.555555555555, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_74d32efc9f1984f60cbd9397" + "resolved_value": 865892.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_de0fc360f660f7a387628062" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400", + "name": "ons.population.age_0_9_by_region@E12000003", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 33309.555555555555, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_90b7e15c6554b1c74e7055f3" + "resolved_value": 626938.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_cbc8ee6d7552af4ba61edcb1" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600", + "name": "ons.population.age_0_9_by_region@E12000004", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 29102.555555555555, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_96f9b06f2d2afb65af9a224a" + "resolved_value": 543004.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f858f629484e7989a9dc1f0b" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800", + "name": "ons.population.age_0_9_by_region@E12000005", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 27534.666666666668, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_e65a50de282324e8c188863a" + "resolved_value": 718837.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_de2d9b45547f640fbc7ebb5a" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000", + "name": "ons.population.age_0_9_by_region@E12000006", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 25584.777777777777, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_16f48d435925ffa44f4d6871" + "resolved_value": 744698.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_fec32a4b3417958969f5f2d9" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600", + "name": "ons.population.age_0_9_by_region@E12000007", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 26502.666666666668, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_93fd0534df01d1dade53397e" + "resolved_value": 1054493.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_cdd134faa924b905bd8a36ad" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200", + "name": "ons.population.age_0_9_by_region@E12000008", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 22927.777777777777, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_ffb787487a36c86f94d25a25" + "resolved_value": 1059434.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f0ef951a6bad79d44726fe11" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400", + "name": "ons.population.age_0_9_by_region@E12000009", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 20334.666666666668, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_2f4d504be6f184b7834f2687" + "resolved_value": 575506.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d6a250010241c987a217b54f" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600", + "name": "ons.population.age_0_9_by_region@W92000004", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "country", + "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 17535.0, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_719022eef2836c069c4b02d0" + "resolved_value": 321552.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_eef268031d128fde4eec5d91" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800", + "name": "ons.population.age_0_9_by_region@S92000003", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "country", + "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 15399.888888888889, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_3b1d8f6516b32e39ecad3873" + "resolved_value": 527989.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9862176e9cdec891820dfa2" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000", + "name": "ons.population.age_0_9_by_region@N92000002", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "country", + "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 12836.222222222223, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_115a9ea1e35d76db13756149" - }, + "resolved_value": 229505.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_eb8519582dac5a21a72f8360" + } + ] + }, + "ons.population.age_10_19_by_region": { + "status": "active", + "candidates": [ { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800", + "name": "ons.population.age_10_19_by_region@E12000001", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 29027.0, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_255e8c862df5351282c29809" + "resolved_value": 326306.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ce36092d33f50f712f620485" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000", + "name": "ons.population.age_10_19_by_region@E12000002", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 32427.0, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_32261034f242507c0a7337b3" + "resolved_value": 952864.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f6fc45432de26717dc50151d" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200", + "name": "ons.population.age_10_19_by_region@E12000003", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 34956.88888888889, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_6f40664df124c4dca50524b8" + "resolved_value": 696780.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f1942c03893e2aeccb514e34" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400", + "name": "ons.population.age_10_19_by_region@E12000004", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 37410.77777777778, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_27b091b1a00bc33ab68139f8" + "resolved_value": 615630.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d96b0e1445c879a8267ef553" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600", + "name": "ons.population.age_10_19_by_region@E12000005", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 39910.333333333336, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_22b16b470c0b51499fb2f042" + "resolved_value": 785062.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ff921d8727a6c1ea11548896" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800", + "name": "ons.population.age_10_19_by_region@E12000006", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 39368.0, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_7dbca9e2f8508f1066399b73" + "resolved_value": 785091.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d66fd1b48bc1e9ae4d38f778" }, { - "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000", + "name": "ons.population.age_10_19_by_region@E12000007", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 40805.444444444445, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_23cf62e7e58211e783c52d2e" - } - ] - }, - "dwp.uc.scotland_households_child_under_1": { - "status": "active", - "candidates": [ + "resolved_value": 1068691.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f8b79fef8b80acc1deb297b7" + }, { - "name": "dwp.uc.scotland_households_child_under_1", + "name": "ons.population.age_10_19_by_region@E12000008", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 14333.222222222223, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_e88b27e010e08ac8d36d0d30" - } - ] - }, - "dwp.uc.two_child_limit.households_affected": { - "status": "active", - "candidates": [ + "resolved_value": 1183235.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ba4c8f8e6cb789626f191523" + }, { - "name": "dwp.uc.two_child_limit.households_affected", + "name": "ons.population.age_10_19_by_region@E12000009", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 469780.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_860a48172c62298ceb00c20b" - } - ] - }, - "dwp.uc.two_child_limit.children_affected": { - "status": "active", - "candidates": [ + "resolved_value": 677228.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f8ea04bba18d65ed2ac0dd74" + }, { - "name": "dwp.uc.two_child_limit.children_affected", + "name": "ons.population.age_10_19_by_region@W92000004", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "country", + "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 597920.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_4378e45ac129e036b4a6ca03" - } - ] - }, - "dwp.uc.two_child_limit.children_in_affected_households": { - "status": "active", - "candidates": [ + "resolved_value": 374851.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f040814c3de37f315671a60d" + }, { - "name": "dwp.uc.two_child_limit.children_in_affected_households", + "name": "ons.population.age_10_19_by_region@S92000003", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "country", + "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 1665540.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_05774e34488c474df7f84742" - } - ] - }, - "dwp.uc.two_child_limit.households_3_children": { - "status": "active", - "candidates": [ + "resolved_value": 612935.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d8cb95f3b8a4eb5725ec1e0d" + }, { - "name": "dwp.uc.two_child_limit.households_3_children", + "name": "ons.population.age_10_19_by_region@N92000002", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "country", + "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 297310.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_dca7734c17910c213e397741" + "resolved_value": 252764.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ef301c6ab42b35eb692e20b0" } ] }, - "dwp.uc.two_child_limit.children_in_3_children_households": { + "ons.population.age_20_29_by_region": { "status": "active", "candidates": [ { - "name": "dwp.uc.two_child_limit.children_in_3_children_households", + "name": "ons.population.age_20_29_by_region@E12000001", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 891930.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_515b2aeb394a9a9a1fd2d195" - } - ] - }, - "dwp.uc.two_child_limit.households_4_children": { - "status": "active", - "candidates": [ + "resolved_value": 343015.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ebe0b2ced4987cd701db581a" + }, { - "name": "dwp.uc.two_child_limit.households_4_children", + "name": "ons.population.age_20_29_by_region@E12000002", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 117190.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_a78a141d4018bdd92678b497" - } - ] - }, - "dwp.uc.two_child_limit.children_in_4_children_households": { - "status": "active", - "candidates": [ + "resolved_value": 986590.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_fe94b1572d6db93b57407bcd" + }, { - "name": "dwp.uc.two_child_limit.children_in_4_children_households", + "name": "ons.population.age_20_29_by_region@E12000003", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 468760.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_adef094060710c5b354e7ac4" - } - ] - }, - "dwp.uc.two_child_limit.households_5_children": { - "status": "active", - "candidates": [ + "resolved_value": 717479.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_cb721748c503839a9229a404" + }, { - "name": "dwp.uc.two_child_limit.households_5_children", + "name": "ons.population.age_20_29_by_region@E12000004", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 37020.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_2c9cfcd7cc862c9c1dd57e4d" - } - ] - }, - "dwp.uc.two_child_limit.children_in_5_children_households": { - "status": "active", - "candidates": [ + "resolved_value": 612108.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f7be7895d4f680a502caeb4b" + }, { - "name": "dwp.uc.two_child_limit.children_in_5_children_households", + "name": "ons.population.age_20_29_by_region@E12000005", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 185120.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_2134e60314c98faf54df2498" - } - ] - }, - "dwp.uc.two_child_limit.households_6_plus_children": { - "status": "active", - "candidates": [ + "resolved_value": 766058.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f539e665a5478f92346bb4d4" + }, { - "name": "dwp.uc.two_child_limit.households_6_plus_children", + "name": "ons.population.age_20_29_by_region@E12000006", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 18260.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_e6302f9f933c14e97fc2fcae" - } - ] - }, - "dwp.uc.two_child_limit.children_in_6_plus_children_households": { - "status": "active", - "candidates": [ + "resolved_value": 727218.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ff31c89cfa957bdd279c9947" + }, { - "name": "dwp.uc.two_child_limit.children_in_6_plus_children_households", + "name": "ons.population.age_20_29_by_region@E12000007", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 119720.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_235cb4e779dd669dad2cd421" - } - ] - }, - "dwp.uc.two_child_limit.households_claimant_pip": { - "status": "active", - "candidates": [ + "resolved_value": 1508607.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f0ffc4e5795625b9238d6dde" + }, { - "name": "dwp.uc.two_child_limit.households_claimant_pip", + "name": "ons.population.age_20_29_by_region@E12000008", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 65280.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_55dd86462d71be247206b5a2" - } - ] - }, - "dwp.uc.two_child_limit.children_claimant_pip": { - "status": "active", - "candidates": [ + "resolved_value": 1066121.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f3a720e9d1d4664e83307a9a" + }, { - "name": "dwp.uc.two_child_limit.children_claimant_pip", + "name": "ons.population.age_20_29_by_region@E12000009", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 235270.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_fe554fcdcb22a77d71c01537" - } - ] - }, - "dwp.uc.two_child_limit.households_disabled_child_element": { - "status": "active", - "candidates": [ + "resolved_value": 684393.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_fe520978b4f4105aa292a3f5" + }, { - "name": "dwp.uc.two_child_limit.households_disabled_child_element", + "name": "ons.population.age_20_29_by_region@W92000004", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "country", + "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 129630.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_535ef3b4afd474ea14d16d27" - } - ] - }, - "dwp.uc.two_child_limit.children_disabled_child_element": { - "status": "active", - "candidates": [ + "resolved_value": 380557.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_fe44434fdb2e33179826ee35" + }, { - "name": "dwp.uc.two_child_limit.children_disabled_child_element", + "name": "ons.population.age_20_29_by_region@S92000003", "status": "active", - "matched_fact_count_overall": 1, - "matched_fact_count_at_or_before_period": 1, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "country", + "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 479460.0, - "resolved_fact_period": "2025-04", - "resolved_fact_key": "ledger_aggregate_fact_v2_ac642b7002518167b56e1537" - } - ] - }, - "ons.population.uk_total": { - "status": "active", - "candidates": [ + "resolved_value": 703554.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_dadba40aea2eb5dcdb2e5d6e" + }, { - "name": "ons.population.uk_total", + "name": "ons.population.age_20_29_by_region@N92000002", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "geography_level": "country", + "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 69281437.0, + "resolved_value": 219525.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_6c212695ea75be0d2a635e9b" + "resolved_fact_key": "ledger_aggregate_fact_v2_afe826389a344a01c4be2862" } ] }, - "ons.population.age_0_9_by_region": { + "ons.population.age_30_39_by_region": { "status": "active", "candidates": [ { - "name": "ons.population.age_0_9_by_region@E12000001", + "name": "ons.population.age_30_39_by_region@E12000001", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 285165.0, + "resolved_value": 363357.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_c796672d4d88aa11ab15a31a" + "resolved_fact_key": "ledger_aggregate_fact_v2_ceb94ab430de1f0bc8c19ce4" }, { - "name": "ons.population.age_0_9_by_region@E12000002", + "name": "ons.population.age_30_39_by_region@E12000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 865892.0, + "resolved_value": 1064968.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_de0fc360f660f7a387628062" + "resolved_fact_key": "ledger_aggregate_fact_v2_eeb6e6194f0405a4b7010913" }, { - "name": "ons.population.age_0_9_by_region@E12000003", + "name": "ons.population.age_30_39_by_region@E12000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 626938.0, + "resolved_value": 770809.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_cbc8ee6d7552af4ba61edcb1" + "resolved_fact_key": "ledger_aggregate_fact_v2_ebc2a149da9287a3a2b28d45" }, { - "name": "ons.population.age_0_9_by_region@E12000004", + "name": "ons.population.age_30_39_by_region@E12000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 543004.0, + "resolved_value": 676709.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f858f629484e7989a9dc1f0b" + "resolved_fact_key": "ledger_aggregate_fact_v2_fefffb16e9e1a25fd0da3435" }, { - "name": "ons.population.age_0_9_by_region@E12000005", + "name": "ons.population.age_30_39_by_region@E12000005", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 718837.0, + "resolved_value": 839114.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_de2d9b45547f640fbc7ebb5a" + "resolved_fact_key": "ledger_aggregate_fact_v2_eaee3d4e99154692dbad24b9" }, { - "name": "ons.population.age_0_9_by_region@E12000006", + "name": "ons.population.age_30_39_by_region@E12000006", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 744698.0, + "resolved_value": 895639.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fec32a4b3417958969f5f2d9" + "resolved_fact_key": "ledger_aggregate_fact_v2_fbb89267af1b9a1a349f3274" }, { - "name": "ons.population.age_0_9_by_region@E12000007", + "name": "ons.population.age_30_39_by_region@E12000007", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 1054493.0, + "resolved_value": 1537372.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_cdd134faa924b905bd8a36ad" + "resolved_fact_key": "ledger_aggregate_fact_v2_c7d5874566b099143ddbac28" }, { - "name": "ons.population.age_0_9_by_region@E12000008", + "name": "ons.population.age_30_39_by_region@E12000008", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 1059434.0, + "resolved_value": 1284552.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f0ef951a6bad79d44726fe11" + "resolved_fact_key": "ledger_aggregate_fact_v2_ff4aa5baed49b53887253b70" }, { - "name": "ons.population.age_0_9_by_region@E12000009", + "name": "ons.population.age_30_39_by_region@E12000009", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 575506.0, + "resolved_value": 742082.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d6a250010241c987a217b54f" + "resolved_fact_key": "ledger_aggregate_fact_v2_f8c6ce01a5aa83ce392ccf3a" }, { - "name": "ons.population.age_0_9_by_region@W92000004", + "name": "ons.population.age_30_39_by_region@W92000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 321552.0, + "resolved_value": 410248.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_eef268031d128fde4eec5d91" + "resolved_fact_key": "ledger_aggregate_fact_v2_fa74c4da871af17e8af431d6" }, { - "name": "ons.population.age_0_9_by_region@S92000003", + "name": "ons.population.age_30_39_by_region@S92000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 527989.0, + "resolved_value": 733480.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9862176e9cdec891820dfa2" + "resolved_fact_key": "ledger_aggregate_fact_v2_f045b554aebb8f1b21df5a5c" }, { - "name": "ons.population.age_0_9_by_region@N92000002", + "name": "ons.population.age_30_39_by_region@N92000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 229505.0, + "resolved_value": 254067.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_eb8519582dac5a21a72f8360" + "resolved_fact_key": "ledger_aggregate_fact_v2_eb383d007487ef1df14f4946" } ] }, - "ons.population.age_10_19_by_region": { + "ons.population.age_40_49_by_region": { "status": "active", "candidates": [ { - "name": "ons.population.age_10_19_by_region@E12000001", + "name": "ons.population.age_40_49_by_region@E12000001", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 326306.0, + "resolved_value": 320860.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ce36092d33f50f712f620485" + "resolved_fact_key": "ledger_aggregate_fact_v2_f081bcb6c2e794e8ec3b0161" }, { - "name": "ons.population.age_10_19_by_region@E12000002", + "name": "ons.population.age_40_49_by_region@E12000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 952864.0, + "resolved_value": 930967.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f6fc45432de26717dc50151d" + "resolved_fact_key": "ledger_aggregate_fact_v2_f7744877e123c00b96511818" }, { - "name": "ons.population.age_10_19_by_region@E12000003", + "name": "ons.population.age_40_49_by_region@E12000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 696780.0, + "resolved_value": 674349.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f1942c03893e2aeccb514e34" + "resolved_fact_key": "ledger_aggregate_fact_v2_d6e708c298712163b552e6c7" }, { - "name": "ons.population.age_10_19_by_region@E12000004", + "name": "ons.population.age_40_49_by_region@E12000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 615630.0, + "resolved_value": 610611.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d96b0e1445c879a8267ef553" + "resolved_fact_key": "ledger_aggregate_fact_v2_e861cd162b6b06a1107ca177" }, { - "name": "ons.population.age_10_19_by_region@E12000005", + "name": "ons.population.age_40_49_by_region@E12000005", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 785062.0, + "resolved_value": 746341.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff921d8727a6c1ea11548896" + "resolved_fact_key": "ledger_aggregate_fact_v2_fa28a64a0b8ec87502b44a9f" }, { - "name": "ons.population.age_10_19_by_region@E12000006", + "name": "ons.population.age_40_49_by_region@E12000006", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 785091.0, + "resolved_value": 838578.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d66fd1b48bc1e9ae4d38f778" + "resolved_fact_key": "ledger_aggregate_fact_v2_f94400c214a5c3c3847cc562" }, { - "name": "ons.population.age_10_19_by_region@E12000007", + "name": "ons.population.age_40_49_by_region@E12000007", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 1068691.0, + "resolved_value": 1268973.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f8b79fef8b80acc1deb297b7" + "resolved_fact_key": "ledger_aggregate_fact_v2_fb8228a78efb8cdb3dd46764" }, { - "name": "ons.population.age_10_19_by_region@E12000008", + "name": "ons.population.age_40_49_by_region@E12000008", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 1183235.0, + "resolved_value": 1255951.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ba4c8f8e6cb789626f191523" + "resolved_fact_key": "ledger_aggregate_fact_v2_edac715ea904f29dbd3332f9" }, { - "name": "ons.population.age_10_19_by_region@E12000009", + "name": "ons.population.age_40_49_by_region@E12000009", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 677228.0, + "resolved_value": 688417.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f8ea04bba18d65ed2ac0dd74" + "resolved_fact_key": "ledger_aggregate_fact_v2_f6ecf5ebd09a5d638cf6dd15" }, { - "name": "ons.population.age_10_19_by_region@W92000004", + "name": "ons.population.age_40_49_by_region@W92000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 374851.0, + "resolved_value": 365951.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f040814c3de37f315671a60d" + "resolved_fact_key": "ledger_aggregate_fact_v2_f6496b4ebd88792d288206a1" }, { - "name": "ons.population.age_10_19_by_region@S92000003", + "name": "ons.population.age_40_49_by_region@S92000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 612935.0, + "resolved_value": 675368.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d8cb95f3b8a4eb5725ec1e0d" + "resolved_fact_key": "ledger_aggregate_fact_v2_e159eb5144ceae58dccb4dc0" }, { - "name": "ons.population.age_10_19_by_region@N92000002", + "name": "ons.population.age_40_49_by_region@N92000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 252764.0, + "resolved_value": 246140.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ef301c6ab42b35eb692e20b0" + "resolved_fact_key": "ledger_aggregate_fact_v2_b71979cb27997e512ea68888" } ] }, - "ons.population.age_20_29_by_region": { + "ons.population.age_50_59_by_region": { "status": "active", "candidates": [ { - "name": "ons.population.age_20_29_by_region@E12000001", + "name": "ons.population.age_50_59_by_region@E12000001", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 343015.0, + "resolved_value": 360074.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ebe0b2ced4987cd701db581a" + "resolved_fact_key": "ledger_aggregate_fact_v2_f8febade5d1aa4eff5515f79" }, { - "name": "ons.population.age_20_29_by_region@E12000002", + "name": "ons.population.age_50_59_by_region@E12000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 986590.0, + "resolved_value": 995810.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fe94b1572d6db93b57407bcd" + "resolved_fact_key": "ledger_aggregate_fact_v2_ce316c567d2d3919bad74247" }, { - "name": "ons.population.age_20_29_by_region@E12000003", + "name": "ons.population.age_50_59_by_region@E12000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 717479.0, + "resolved_value": 736903.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_cb721748c503839a9229a404" + "resolved_fact_key": "ledger_aggregate_fact_v2_f07e470e70895701083be7b4" }, { - "name": "ons.population.age_20_29_by_region@E12000004", + "name": "ons.population.age_50_59_by_region@E12000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 612108.0, + "resolved_value": 676307.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f7be7895d4f680a502caeb4b" + "resolved_fact_key": "ledger_aggregate_fact_v2_fc3b848c0d546908542f7522" }, { - "name": "ons.population.age_20_29_by_region@E12000005", + "name": "ons.population.age_50_59_by_region@E12000005", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 766058.0, + "resolved_value": 794143.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f539e665a5478f92346bb4d4" + "resolved_fact_key": "ledger_aggregate_fact_v2_eced9fed4ca113ee655134b7" }, { - "name": "ons.population.age_20_29_by_region@E12000006", + "name": "ons.population.age_50_59_by_region@E12000006", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 727218.0, + "resolved_value": 866946.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff31c89cfa957bdd279c9947" + "resolved_fact_key": "ledger_aggregate_fact_v2_f8011436193a375ac63a33af" }, { - "name": "ons.population.age_20_29_by_region@E12000007", + "name": "ons.population.age_50_59_by_region@E12000007", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 1508607.0, + "resolved_value": 1087518.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f0ffc4e5795625b9238d6dde" + "resolved_fact_key": "ledger_aggregate_fact_v2_c0999183e74a6f6978377427" }, { - "name": "ons.population.age_20_29_by_region@E12000008", + "name": "ons.population.age_50_59_by_region@E12000008", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 1066121.0, + "resolved_value": 1287719.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f3a720e9d1d4664e83307a9a" + "resolved_fact_key": "ledger_aggregate_fact_v2_f5b6740db34f7f702bb230fb" }, { - "name": "ons.population.age_20_29_by_region@E12000009", + "name": "ons.population.age_50_59_by_region@E12000009", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 684393.0, + "resolved_value": 784718.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fe520978b4f4105aa292a3f5" + "resolved_fact_key": "ledger_aggregate_fact_v2_cf32f90895454cdb82d3a611" }, { - "name": "ons.population.age_20_29_by_region@W92000004", + "name": "ons.population.age_50_59_by_region@W92000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 380557.0, + "resolved_value": 424694.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fe44434fdb2e33179826ee35" + "resolved_fact_key": "ledger_aggregate_fact_v2_ed905faab304a40013587ffd" }, { - "name": "ons.population.age_20_29_by_region@S92000003", + "name": "ons.population.age_50_59_by_region@S92000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 703554.0, + "resolved_value": 766715.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_dadba40aea2eb5dcdb2e5d6e" + "resolved_fact_key": "ledger_aggregate_fact_v2_f332e28940d1c94b1e2dec31" }, { - "name": "ons.population.age_20_29_by_region@N92000002", + "name": "ons.population.age_50_59_by_region@N92000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 219525.0, + "resolved_value": 255269.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_afe826389a344a01c4be2862" + "resolved_fact_key": "ledger_aggregate_fact_v2_f786aada1891e9f309902c1c" } ] }, - "ons.population.age_30_39_by_region": { + "ons.population.age_60_69_by_region": { "status": "active", "candidates": [ { - "name": "ons.population.age_30_39_by_region@E12000001", + "name": "ons.population.age_60_69_by_region@E12000001", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 363357.0, + "resolved_value": 349719.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ceb94ab430de1f0bc8c19ce4" + "resolved_fact_key": "ledger_aggregate_fact_v2_ff4466f1cb6fb29ce9b132b0" }, { - "name": "ons.population.age_30_39_by_region@E12000002", + "name": "ons.population.age_60_69_by_region@E12000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 1064968.0, + "resolved_value": 884043.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_eeb6e6194f0405a4b7010913" + "resolved_fact_key": "ledger_aggregate_fact_v2_f861d328dbb8a01929eb1e91" }, { - "name": "ons.population.age_30_39_by_region@E12000003", + "name": "ons.population.age_60_69_by_region@E12000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 770809.0, + "resolved_value": 652931.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ebc2a149da9287a3a2b28d45" + "resolved_fact_key": "ledger_aggregate_fact_v2_f9ab6846d67db88fda81fa30" }, { - "name": "ons.population.age_30_39_by_region@E12000004", + "name": "ons.population.age_60_69_by_region@E12000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 676709.0, + "resolved_value": 591429.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fefffb16e9e1a25fd0da3435" + "resolved_fact_key": "ledger_aggregate_fact_v2_e884ef403c95938c7ebf961b" }, { - "name": "ons.population.age_30_39_by_region@E12000005", + "name": "ons.population.age_60_69_by_region@E12000005", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 839114.0, + "resolved_value": 677922.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_eaee3d4e99154692dbad24b9" + "resolved_fact_key": "ledger_aggregate_fact_v2_fd4d62d07376896553d9fb66" }, { - "name": "ons.population.age_30_39_by_region@E12000006", + "name": "ons.population.age_60_69_by_region@E12000006", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 895639.0, + "resolved_value": 744651.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fbb89267af1b9a1a349f3274" + "resolved_fact_key": "ledger_aggregate_fact_v2_f77f96051d8340645148d138" }, { - "name": "ons.population.age_30_39_by_region@E12000007", + "name": "ons.population.age_60_69_by_region@E12000007", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 1537372.0, + "resolved_value": 787666.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_c7d5874566b099143ddbac28" + "resolved_fact_key": "ledger_aggregate_fact_v2_e9f63f0939b77a41ec815de0" }, { - "name": "ons.population.age_30_39_by_region@E12000008", + "name": "ons.population.age_60_69_by_region@E12000008", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 1284552.0, + "resolved_value": 1089421.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff4aa5baed49b53887253b70" + "resolved_fact_key": "ledger_aggregate_fact_v2_f8667b0358441f18c2f8e548" }, { - "name": "ons.population.age_30_39_by_region@E12000009", + "name": "ons.population.age_60_69_by_region@E12000009", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 742082.0, + "resolved_value": 736639.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f8c6ce01a5aa83ce392ccf3a" + "resolved_fact_key": "ledger_aggregate_fact_v2_f923cb193de625676c40b5c4" }, { - "name": "ons.population.age_30_39_by_region@W92000004", + "name": "ons.population.age_60_69_by_region@W92000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 410248.0, + "resolved_value": 401775.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fa74c4da871af17e8af431d6" + "resolved_fact_key": "ledger_aggregate_fact_v2_f518ad65099be8a424a62142" }, { - "name": "ons.population.age_30_39_by_region@S92000003", + "name": "ons.population.age_60_69_by_region@S92000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 733480.0, + "resolved_value": 721727.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f045b554aebb8f1b21df5a5c" + "resolved_fact_key": "ledger_aggregate_fact_v2_e893656e104d3c1c375fa5e7" }, { - "name": "ons.population.age_30_39_by_region@N92000002", + "name": "ons.population.age_60_69_by_region@N92000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 254067.0, + "resolved_value": 223111.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_eb383d007487ef1df14f4946" + "resolved_fact_key": "ledger_aggregate_fact_v2_f9f6e8f32b460fefc304aeee" } ] }, - "ons.population.age_40_49_by_region": { + "ons.population.age_70_79_by_region": { "status": "active", "candidates": [ { - "name": "ons.population.age_40_49_by_region@E12000001", + "name": "ons.population.age_70_79_by_region@E12000001", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 320860.0, + "resolved_value": 265573.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f081bcb6c2e794e8ec3b0161" + "resolved_fact_key": "ledger_aggregate_fact_v2_f135bc83bf0e2495ccab922b" }, { - "name": "ons.population.age_40_49_by_region@E12000002", + "name": "ons.population.age_70_79_by_region@E12000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 930967.0, + "resolved_value": 669277.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f7744877e123c00b96511818" + "resolved_fact_key": "ledger_aggregate_fact_v2_f18853f5a9046c59334188d3" }, { - "name": "ons.population.age_40_49_by_region@E12000003", + "name": "ons.population.age_70_79_by_region@E12000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 674349.0, + "resolved_value": 504131.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d6e708c298712163b552e6c7" + "resolved_fact_key": "ledger_aggregate_fact_v2_f71c0090e322cc6b02a80193" }, { - "name": "ons.population.age_40_49_by_region@E12000004", + "name": "ons.population.age_70_79_by_region@E12000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 610611.0, + "resolved_value": 466530.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_e861cd162b6b06a1107ca177" + "resolved_fact_key": "ledger_aggregate_fact_v2_f1eaa2a27d34d75f4fcaf147" }, { - "name": "ons.population.age_40_49_by_region@E12000005", + "name": "ons.population.age_70_79_by_region@E12000005", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 746341.0, + "resolved_value": 528207.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fa28a64a0b8ec87502b44a9f" + "resolved_fact_key": "ledger_aggregate_fact_v2_f6ed607ecc20a6bd1c0c8bef" }, { - "name": "ons.population.age_40_49_by_region@E12000006", + "name": "ons.population.age_70_79_by_region@E12000006", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 838578.0, + "resolved_value": 599882.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f94400c214a5c3c3847cc562" + "resolved_fact_key": "ledger_aggregate_fact_v2_ef2c110c9bb5462379338b17" }, { - "name": "ons.population.age_40_49_by_region@E12000007", + "name": "ons.population.age_70_79_by_region@E12000007", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 1268973.0, + "resolved_value": 485057.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb8228a78efb8cdb3dd46764" + "resolved_fact_key": "ledger_aggregate_fact_v2_d9b7f415855dd808a1aee77c" }, { - "name": "ons.population.age_40_49_by_region@E12000008", + "name": "ons.population.age_70_79_by_region@E12000008", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 1255951.0, + "resolved_value": 865392.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_edac715ea904f29dbd3332f9" + "resolved_fact_key": "ledger_aggregate_fact_v2_dea0c6655095781f862cf7ac" }, { - "name": "ons.population.age_40_49_by_region@E12000009", + "name": "ons.population.age_70_79_by_region@E12000009", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 688417.0, + "resolved_value": 618254.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f6ecf5ebd09a5d638cf6dd15" + "resolved_fact_key": "ledger_aggregate_fact_v2_e8898137aad748593321b2fb" }, { - "name": "ons.population.age_40_49_by_region@W92000004", + "name": "ons.population.age_70_79_by_region@W92000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 365951.0, + "resolved_value": 321668.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f6496b4ebd88792d288206a1" + "resolved_fact_key": "ledger_aggregate_fact_v2_f1de159eac6f90c69f7aef22" }, { - "name": "ons.population.age_40_49_by_region@S92000003", + "name": "ons.population.age_70_79_by_region@S92000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 675368.0, + "resolved_value": 519252.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_e159eb5144ceae58dccb4dc0" + "resolved_fact_key": "ledger_aggregate_fact_v2_f506930ca553f609fe076c9c" }, { - "name": "ons.population.age_40_49_by_region@N92000002", + "name": "ons.population.age_70_79_by_region@N92000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 246140.0, + "resolved_value": 155382.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_b71979cb27997e512ea68888" + "resolved_fact_key": "ledger_aggregate_fact_v2_ec559b1c9b44b3acc8de9073" } ] }, - "ons.population.age_50_59_by_region": { + "ons.population.age_80_89_by_region": { "status": "active", "candidates": [ { - "name": "ons.population.age_50_59_by_region@E12000001", + "name": "ons.population.age_80_89_by_region@E12000001", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 360074.0, + "resolved_value": 122118.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f8febade5d1aa4eff5515f79" + "resolved_fact_key": "ledger_aggregate_fact_v2_eec7f31aac48f686e0d9a343" }, { - "name": "ons.population.age_50_59_by_region@E12000002", + "name": "ons.population.age_80_89_by_region@E12000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 995810.0, + "resolved_value": 324141.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ce316c567d2d3919bad74247" + "resolved_fact_key": "ledger_aggregate_fact_v2_f5dcf6bfa6186fc6200bb9cd" }, { - "name": "ons.population.age_50_59_by_region@E12000003", + "name": "ons.population.age_80_89_by_region@E12000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 736903.0, + "resolved_value": 243274.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f07e470e70895701083be7b4" + "resolved_fact_key": "ledger_aggregate_fact_v2_ed30948324557f6bd25a0064" }, { - "name": "ons.population.age_50_59_by_region@E12000004", + "name": "ons.population.age_80_89_by_region@E12000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 676307.0, + "resolved_value": 225626.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fc3b848c0d546908542f7522" + "resolved_fact_key": "ledger_aggregate_fact_v2_f32be81803e3b527361467e0" }, { - "name": "ons.population.age_50_59_by_region@E12000005", + "name": "ons.population.age_80_89_by_region@E12000005", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 794143.0, + "resolved_value": 275030.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_eced9fed4ca113ee655134b7" + "resolved_fact_key": "ledger_aggregate_fact_v2_f252d1b20801bc91a40a9a12" }, { - "name": "ons.population.age_50_59_by_region@E12000006", + "name": "ons.population.age_80_89_by_region@E12000006", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 866946.0, + "resolved_value": 305691.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f8011436193a375ac63a33af" + "resolved_fact_key": "ledger_aggregate_fact_v2_d387c1edf10113b2b8602fc3" }, { - "name": "ons.population.age_50_59_by_region@E12000007", + "name": "ons.population.age_80_89_by_region@E12000007", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 1087518.0, + "resolved_value": 237061.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_c0999183e74a6f6978377427" + "resolved_fact_key": "ledger_aggregate_fact_v2_fa7d5971f83d3ece501a33c7" }, { - "name": "ons.population.age_50_59_by_region@E12000008", + "name": "ons.population.age_80_89_by_region@E12000008", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 1287719.0, + "resolved_value": 447958.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f5b6740db34f7f702bb230fb" + "resolved_fact_key": "ledger_aggregate_fact_v2_bb61f66f5159481b73615674" }, { - "name": "ons.population.age_50_59_by_region@E12000009", + "name": "ons.population.age_80_89_by_region@E12000009", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "region", "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 784718.0, + "resolved_value": 313605.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_cf32f90895454cdb82d3a611" + "resolved_fact_key": "ledger_aggregate_fact_v2_ea5f3461bbda1967761f0d48" }, { - "name": "ons.population.age_50_59_by_region@W92000004", + "name": "ons.population.age_80_89_by_region@W92000004", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 424694.0, + "resolved_value": 154319.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ed905faab304a40013587ffd" + "resolved_fact_key": "ledger_aggregate_fact_v2_d766d2003f1fd56635d53589" }, { - "name": "ons.population.age_50_59_by_region@S92000003", + "name": "ons.population.age_80_89_by_region@S92000003", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 766715.0, + "resolved_value": 238904.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f332e28940d1c94b1e2dec31" + "resolved_fact_key": "ledger_aggregate_fact_v2_f206015a88100a72b83bbe9f" }, { - "name": "ons.population.age_50_59_by_region@N92000002", + "name": "ons.population.age_80_89_by_region@N92000002", "status": "active", "matched_fact_count_overall": 20, "matched_fact_count_at_or_before_period": 20, "geography_level": "country", "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 255269.0, + "resolved_value": 77441.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f786aada1891e9f309902c1c" + "resolved_fact_key": "ledger_aggregate_fact_v2_fb5795d1ea12a7a7005a9ee9" } ] }, - "ons.population.age_60_69_by_region": { + "ons.population.female_0_4": { "status": "active", "candidates": [ { - "name": "ons.population.age_60_69_by_region@E12000001", + "name": "ons.population.female_0_4", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000001", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 349719.0, + "resolved_value": 1744355.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff4466f1cb6fb29ce9b132b0" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_fb55d5f20f74ee39a1e8fcb4" + } + ] + }, + "ons.population.female_10_14": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@E12000002", + "name": "ons.population.female_10_14", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000002", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 884043.0, + "resolved_value": 2052052.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f861d328dbb8a01929eb1e91" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_f9a457edc9491e5810c39f5f" + } + ] + }, + "ons.population.female_15_19": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@E12000003", + "name": "ons.population.female_15_19", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000003", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 652931.0, + "resolved_value": 2002835.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9ab6846d67db88fda81fa30" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_f0e2139b52c615925c9075dd" + } + ] + }, + "ons.population.female_20_24": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@E12000004", + "name": "ons.population.female_20_24", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000004", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 591429.0, + "resolved_value": 2034609.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_e884ef403c95938c7ebf961b" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_b4e36c0dc0a924667be47bbc" + } + ] + }, + "ons.population.female_25_29": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@E12000005", + "name": "ons.population.female_25_29", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000005", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 677922.0, + "resolved_value": 2291610.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fd4d62d07376896553d9fb66" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_d9d6a711d0cbc4919a8643c0" + } + ] + }, + "ons.population.female_30_34": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@E12000006", + "name": "ons.population.female_30_34", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000006", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2463301.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f5b1d6c400b912b05c79c477" + } + ] + }, + "ons.population.female_35_39": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_35_39", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2472291.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f927cc9b3eab0494caf1479f" + } + ] + }, + "ons.population.female_40_44": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_40_44", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2333109.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d9cdf746ffe5df2fd3d85279" + } + ] + }, + "ons.population.female_45_49": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_45_49", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2088285.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b679e4770750b86af6b1756b" + } + ] + }, + "ons.population.female_50_54": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_50_54", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2255231.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_65b8a4cc92c4565b00007877" + } + ] + }, + "ons.population.female_55_59": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_55_59", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2360202.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ba87a7d66cb9f8694b952159" + } + ] + }, + "ons.population.female_5_9": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_5_9", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1941658.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_bca9c38347810a944bbd08b3" + } + ] + }, + "ons.population.female_60_64": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_60_64", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 744651.0, + "resolved_value": 2193915.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f77f96051d8340645148d138" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_f3b1f78e4b752640465521f0" + } + ] + }, + "ons.population.female_65_69": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@E12000007", + "name": "ons.population.female_65_69", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000007", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 787666.0, + "resolved_value": 1838574.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_e9f63f0939b77a41ec815de0" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_dbeb583b16bcb530ee1296e1" + } + ] + }, + "ons.population.female_70_74": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@E12000008", + "name": "ons.population.female_70_74", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000008", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 1089421.0, + "resolved_value": 1622996.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f8667b0358441f18c2f8e548" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_b962c8b6d3d68808831aad6a" + } + ] + }, + "ons.population.female_75_79": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@E12000009", + "name": "ons.population.female_75_79", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 736639.0, + "resolved_value": 1551183.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f923cb193de625676c40b5c4" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_aa0a8a7ab2d3894db7a7d7aa" + } + ] + }, + "ons.population.female_80_84": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@W92000004", + "name": "ons.population.female_80_84", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "country", - "geography_id": "W92000004", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 401775.0, + "resolved_value": 1024480.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f518ad65099be8a424a62142" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_fcdc2e2f119de0b65769ef90" + } + ] + }, + "ons.population.female_85_89": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@S92000003", + "name": "ons.population.female_85_89", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "country", - "geography_id": "S92000003", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 721727.0, + "resolved_value": 665267.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_e893656e104d3c1c375fa5e7" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_c76df00751abbf64b5ab056b" + } + ] + }, + "ons.population.female_90_plus": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_60_69_by_region@N92000002", + "name": "ons.population.female_90_plus", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "country", - "geography_id": "N92000002", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 223111.0, + "resolved_value": 414716.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9f6e8f32b460fefc304aeee" + "resolved_fact_key": "ledger_aggregate_fact_v2_009d5dd487f317483e9d7b3d" } ] }, - "ons.population.age_70_79_by_region": { + "ons.population.male_0_4": { "status": "active", "candidates": [ { - "name": "ons.population.age_70_79_by_region@E12000001", + "name": "ons.population.male_0_4", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000001", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 265573.0, + "resolved_value": 1829801.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f135bc83bf0e2495ccab922b" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_ccdfe5dde7b46840510e21d2" + } + ] + }, + "ons.population.male_10_14": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@E12000002", + "name": "ons.population.male_10_14", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000002", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 669277.0, + "resolved_value": 2152800.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f18853f5a9046c59334188d3" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_86d603b352e77fd0c03ddaa8" + } + ] + }, + "ons.population.male_15_19": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@E12000003", + "name": "ons.population.male_15_19", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000003", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 504131.0, + "resolved_value": 2123750.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f71c0090e322cc6b02a80193" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_ecf390d4b25b71d12aae6bc7" + } + ] + }, + "ons.population.male_20_24": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@E12000004", + "name": "ons.population.male_20_24", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000004", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 466530.0, + "resolved_value": 2131646.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f1eaa2a27d34d75f4fcaf147" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_edb961b3528b22769eece352" + } + ] + }, + "ons.population.male_25_29": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@E12000005", + "name": "ons.population.male_25_29", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000005", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 528207.0, + "resolved_value": 2257360.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f6ed607ecc20a6bd1c0c8bef" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_fd52338de8e1557cdd024c36" + } + ] + }, + "ons.population.male_30_34": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@E12000006", + "name": "ons.population.male_30_34", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000006", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 599882.0, + "resolved_value": 2333326.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ef2c110c9bb5462379338b17" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_b81f56fab808ad1d38d70f3d" + } + ] + }, + "ons.population.male_35_39": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@E12000007", + "name": "ons.population.male_35_39", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000007", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 485057.0, + "resolved_value": 2303479.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d9b7f415855dd808a1aee77c" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_be9bedc792e0d419ebaf5316" + } + ] + }, + "ons.population.male_40_44": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@E12000008", + "name": "ons.population.male_40_44", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000008", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 865392.0, + "resolved_value": 2196013.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_dea0c6655095781f862cf7ac" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_d41ff91bfe885debcc12d759" + } + ] + }, + "ons.population.male_45_49": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@E12000009", + "name": "ons.population.male_45_49", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 618254.0, + "resolved_value": 2005099.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_e8898137aad748593321b2fb" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_fafcbae6e55f9ae20bc0050d" + } + ] + }, + "ons.population.male_50_54": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@W92000004", + "name": "ons.population.male_50_54", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "country", - "geography_id": "W92000004", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 321668.0, + "resolved_value": 2164862.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f1de159eac6f90c69f7aef22" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_b8fe92cfb43b9a95f8a9f7ef" + } + ] + }, + "ons.population.male_55_59": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@S92000003", + "name": "ons.population.male_55_59", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "country", - "geography_id": "S92000003", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 519252.0, + "resolved_value": 2256521.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f506930ca553f609fe076c9c" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_86b57e4ed1e5186f23dc4021" + } + ] + }, + "ons.population.male_5_9": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_70_79_by_region@N92000002", + "name": "ons.population.male_5_9", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "country", - "geography_id": "N92000002", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 155382.0, + "resolved_value": 2037199.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ec559b1c9b44b3acc8de9073" + "resolved_fact_key": "ledger_aggregate_fact_v2_e272f955c58535b8b9304759" } ] }, - "ons.population.age_80_89_by_region": { + "ons.population.male_60_64": { "status": "active", "candidates": [ { - "name": "ons.population.age_80_89_by_region@E12000001", + "name": "ons.population.male_60_64", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000001", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 122118.0, + "resolved_value": 2094462.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_eec7f31aac48f686e0d9a343" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_e60d33e33dcbc1ba2292edf5" + } + ] + }, + "ons.population.male_65_69": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@E12000002", + "name": "ons.population.male_65_69", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000002", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 324141.0, + "resolved_value": 1734083.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f5dcf6bfa6186fc6200bb9cd" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_a4878efd0023575bded6b67a" + } + ] + }, + "ons.population.male_70_74": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@E12000003", + "name": "ons.population.male_70_74", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000003", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 243274.0, + "resolved_value": 1473758.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ed30948324557f6bd25a0064" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_d34aca91f9d1621ea96e72bc" + } + ] + }, + "ons.population.male_75_79": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@E12000004", + "name": "ons.population.male_75_79", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000004", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 225626.0, + "resolved_value": 1350668.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f32be81803e3b527361467e0" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_f74158203e735d37a67c5409" + } + ] + }, + "ons.population.male_80_84": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@E12000005", + "name": "ons.population.male_80_84", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000005", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 275030.0, + "resolved_value": 815910.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f252d1b20801bc91a40a9a12" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_60aa57af44ada9286df3d649" + } + ] + }, + "ons.population.male_85_89": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@E12000006", + "name": "ons.population.male_85_89", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000006", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 305691.0, + "resolved_value": 459511.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d387c1edf10113b2b8602fc3" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_bbfd4e781a7d1151855e4edb" + } + ] + }, + "ons.population.male_90_plus": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@E12000007", + "name": "ons.population.male_90_plus", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000007", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 237061.0, + "resolved_value": 210520.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fa7d5971f83d3ece501a33c7" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_8ec6d2d034546c9693c4f6ed" + } + ] + }, + "ons.population.scotland_children_under_16": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@E12000008", + "name": "ons.population.scotland_children_under_16", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000008", + "matched_fact_count_overall": 32, + "matched_fact_count_at_or_before_period": 32, "resolved_period": 2025, - "resolved_value": 447958.0, + "resolved_value": 896833.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_bb61f66f5159481b73615674" - }, + "resolved_fact_key": "ledger_aggregate_fact_v2_f9862176e9cdec891820dfa2" + } + ] + }, + "ons.population.scotland_babies_under_1": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@E12000009", + "name": "ons.population.scotland_babies_under_1", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 313605.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ea5f3461bbda1967761f0d48" - }, + "resolved_value": 46776.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_edd043df0081e63ad0876932" + } + ] + }, + "ons.population.scotland_households_3plus_children": { + "status": "signed_excluded", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@W92000004", + "name": "ons.population.scotland_households_3plus_children", + "status": "signed_excluded", + "matched_fact_count_overall": 552, + "matched_fact_count_at_or_before_period": 552, + "signed_rationale": "Signed out pending a Scotland household-composition fact: the current selector reaches person-level ONS mid-year population age rows, not households with three or more children. microcosm#736 tracks the missing declaration." + } + ] + }, + "ons.household_composition.lone_households_under_65": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.lone_households_under_65", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "country", - "geography_id": "W92000004", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 154319.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d766d2003f1fd56635d53589" - }, + "resolved_value": 4316000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_b2ee6bff131571b7dcd4c33c" + } + ] + }, + "ons.household_composition.lone_households_over_65": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@S92000003", + "name": "ons.household_composition.lone_households_over_65", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "country", - "geography_id": "S92000003", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 238904.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f206015a88100a72b83bbe9f" - }, + "resolved_value": 4254000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_4178a72ada0e0b5b53fd62b3" + } + ] + }, + "ons.household_composition.unrelated_adult_households": { + "status": "active", + "candidates": [ { - "name": "ons.population.age_80_89_by_region@N92000002", + "name": "ons.household_composition.unrelated_adult_households", "status": "active", - "matched_fact_count_overall": 20, - "matched_fact_count_at_or_before_period": 20, - "geography_level": "country", - "geography_id": "N92000002", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 77441.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb5795d1ea12a7a7005a9ee9" + "resolved_value": 813000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_191e954854307c61fca2d539" } ] }, - "ons.population.female_0_4": { + "ons.household_composition.couple_no_children_households": { "status": "active", "candidates": [ { - "name": "ons.population.female_0_4", + "name": "ons.household_composition.couple_no_children_households", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 1744355.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb55d5f20f74ee39a1e8fcb4" + "resolved_value": 8119000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_861314257d00193080069624" } ] }, - "ons.population.female_10_14": { + "ons.household_composition.couple_under_3_children_households": { "status": "active", "candidates": [ { - "name": "ons.population.female_10_14", + "name": "ons.household_composition.couple_under_3_children_households", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 2052052.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9a457edc9491e5810c39f5f" + "resolved_value": 5439000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_04ac3660df720d6f8effbdb2" } ] }, - "ons.population.female_15_19": { + "ons.household_composition.couple_3_plus_children_households": { "status": "active", "candidates": [ { - "name": "ons.population.female_15_19", + "name": "ons.household_composition.couple_3_plus_children_households", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 2002835.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f0e2139b52c615925c9075dd" + "resolved_value": 931000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_3432d322cadb6a40f0c3ebc8" } ] }, - "ons.population.female_20_24": { + "ons.household_composition.couple_non_dependent_children_only_households": { "status": "active", "candidates": [ { - "name": "ons.population.female_20_24", + "name": "ons.household_composition.couple_non_dependent_children_only_households", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 2034609.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_b4e36c0dc0a924667be47bbc" + "resolved_value": 1848000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_4d36f952f4dd650bcab7ba7f" } ] }, - "ons.population.female_25_29": { + "ons.household_composition.lone_parent_dependent_children_households": { "status": "active", "candidates": [ { - "name": "ons.population.female_25_29", + "name": "ons.household_composition.lone_parent_dependent_children_households", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 2291610.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d9d6a711d0cbc4919a8643c0" + "resolved_value": 1835000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_e9746f29548db6f6047842cb" } ] }, - "ons.population.female_30_34": { + "ons.household_composition.lone_parent_non_dependent_children_households": { "status": "active", "candidates": [ { - "name": "ons.population.female_30_34", + "name": "ons.household_composition.lone_parent_non_dependent_children_households", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 2463301.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f5b1d6c400b912b05c79c477" + "resolved_value": 1204000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_9c7f117f90bc24f073f4e14f" } ] }, - "ons.population.female_35_39": { + "ons.household_composition.multi_family_households": { "status": "active", "candidates": [ { - "name": "ons.population.female_35_39", + "name": "ons.household_composition.multi_family_households", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 2472291.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f927cc9b3eab0494caf1479f" + "resolved_value": 244000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_a0cd8874e5334242ce7b8ce0" } ] }, - "ons.population.female_40_44": { + "mhclg.council_tax_stock.band_a": { "status": "active", "candidates": [ { - "name": "ons.population.female_40_44", + "name": "mhclg.council_tax_stock.band_a@E12000001", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 4776, + "matched_fact_count_at_or_before_period": 4728, + "geography_level": "region", + "geography_id": "E12000001", + "resolved_period": 2025, + "resolved_value": 621096.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_d0152c2791236d6ec749fb4b" + }, + { + "name": "mhclg.council_tax_stock.band_a@E12000002", + "status": "active", + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000002", + "resolved_period": 2025, + "resolved_value": 1285713.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fa7c76228b4383e695be0c57" + }, + { + "name": "mhclg.council_tax_stock.band_a@E12000003", + "status": "active", + "matched_fact_count_overall": 5970, + "matched_fact_count_at_or_before_period": 5910, + "geography_level": "region", + "geography_id": "E12000003", + "resolved_period": 2025, + "resolved_value": 988548.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_eb94428708527c6adbce48c3" + }, + { + "name": "mhclg.council_tax_stock.band_a@E12000004", + "status": "active", + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000004", + "resolved_period": 2025, + "resolved_value": 739971.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f17101c03f5970d639ddb6d7" + }, + { + "name": "mhclg.council_tax_stock.band_a@E12000005", + "status": "active", + "matched_fact_count_overall": 11940, + "matched_fact_count_at_or_before_period": 11820, + "geography_level": "region", + "geography_id": "E12000005", + "resolved_period": 2025, + "resolved_value": 728493.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_ef49e263051486267b93c7cd" + }, + { + "name": "mhclg.council_tax_stock.band_a@E12000006", + "status": "active", + "matched_fact_count_overall": 17910, + "matched_fact_count_at_or_before_period": 17730, + "geography_level": "region", + "geography_id": "E12000006", + "resolved_period": 2025, + "resolved_value": 364482.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9ada16eb0c916b22d2397bb" + }, + { + "name": "mhclg.council_tax_stock.band_a@E12000007", + "status": "active", + "matched_fact_count_overall": 13134, + "matched_fact_count_at_or_before_period": 13002, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 2333109.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d9cdf746ffe5df2fd3d85279" - } - ] - }, - "ons.population.female_45_49": { - "status": "active", - "candidates": [ + "resolved_value": 118732.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f7d8d56243116fa2f1419fe1" + }, { - "name": "ons.population.female_45_49", + "name": "mhclg.council_tax_stock.band_a@E12000008", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 25472, + "matched_fact_count_at_or_before_period": 25216, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 2088285.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_b679e4770750b86af6b1756b" - } - ] - }, - "ons.population.female_50_54": { - "status": "active", - "candidates": [ + "resolved_value": 320025.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fcc7bbe5d78c199fc6d856ca" + }, { - "name": "ons.population.female_50_54", + "name": "mhclg.council_tax_stock.band_a@E12000009", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 10746, + "matched_fact_count_at_or_before_period": 10638, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 2255231.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_65b8a4cc92c4565b00007877" + "resolved_value": 422969.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f23d41b29d6952c18d44dc26" } ] }, - "ons.population.female_55_59": { + "mhclg.council_tax_stock.band_b": { "status": "active", "candidates": [ { - "name": "ons.population.female_55_59", + "name": "mhclg.council_tax_stock.band_b@E12000001", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 4776, + "matched_fact_count_at_or_before_period": 4728, + "geography_level": "region", + "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 2360202.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ba87a7d66cb9f8694b952159" - } - ] - }, - "ons.population.female_5_9": { - "status": "active", - "candidates": [ + "resolved_value": 193309.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f84be54967344adf03fab807" + }, { - "name": "ons.population.female_5_9", + "name": "mhclg.council_tax_stock.band_b@E12000002", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 1941658.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_bca9c38347810a944bbd08b3" - } - ] - }, - "ons.population.female_60_64": { - "status": "active", - "candidates": [ + "resolved_value": 666970.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fac49fea11fd3b1110a941c5" + }, { - "name": "ons.population.female_60_64", + "name": "mhclg.council_tax_stock.band_b@E12000003", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 5970, + "matched_fact_count_at_or_before_period": 5910, + "geography_level": "region", + "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 2193915.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f3b1f78e4b752640465521f0" - } - ] - }, - "ons.population.female_65_69": { - "status": "active", - "candidates": [ + "resolved_value": 482052.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f8ef63f3e9b07a934c3f2df8" + }, { - "name": "ons.population.female_65_69", + "name": "mhclg.council_tax_stock.band_b@E12000004", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 1838574.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_dbeb583b16bcb530ee1296e1" - } - ] - }, - "ons.population.female_70_74": { - "status": "active", - "candidates": [ + "resolved_value": 478320.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f48dde558979080156b8c99f" + }, { - "name": "ons.population.female_70_74", + "name": "mhclg.council_tax_stock.band_b@E12000005", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 11940, + "matched_fact_count_at_or_before_period": 11820, + "geography_level": "region", + "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 1622996.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_b962c8b6d3d68808831aad6a" - } - ] - }, - "ons.population.female_75_79": { - "status": "active", - "candidates": [ + "resolved_value": 625673.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fc4a526b4ee56ed620ab4c14" + }, { - "name": "ons.population.female_75_79", + "name": "mhclg.council_tax_stock.band_b@E12000006", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 17910, + "matched_fact_count_at_or_before_period": 17730, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 1551183.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_aa0a8a7ab2d3894db7a7d7aa" - } - ] - }, - "ons.population.female_80_84": { - "status": "active", - "candidates": [ + "resolved_value": 568914.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fe310977523bcaadf025f7f6" + }, { - "name": "ons.population.female_80_84", + "name": "mhclg.council_tax_stock.band_b@E12000007", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 13134, + "matched_fact_count_at_or_before_period": 13002, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 1024480.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fcdc2e2f119de0b65769ef90" - } - ] - }, - "ons.population.female_85_89": { - "status": "active", - "candidates": [ + "resolved_value": 463447.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_ffadb386ab954d99278ba891" + }, { - "name": "ons.population.female_85_89", + "name": "mhclg.council_tax_stock.band_b@E12000008", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 25472, + "matched_fact_count_at_or_before_period": 25216, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 665267.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_c76df00751abbf64b5ab056b" - } - ] - }, - "ons.population.female_90_plus": { - "status": "active", - "candidates": [ + "resolved_value": 649092.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fb23fbffbee284d17da76489" + }, { - "name": "ons.population.female_90_plus", + "name": "mhclg.council_tax_stock.band_b@E12000009", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 10746, + "matched_fact_count_at_or_before_period": 10638, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 414716.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_009d5dd487f317483e9d7b3d" + "resolved_value": 609286.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f84a549115340205a9ae8951" } ] }, - "ons.population.male_0_4": { + "mhclg.council_tax_stock.band_c": { "status": "active", "candidates": [ { - "name": "ons.population.male_0_4", + "name": "mhclg.council_tax_stock.band_c@E12000001", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 4776, + "matched_fact_count_at_or_before_period": 4728, + "geography_level": "region", + "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 1829801.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ccdfe5dde7b46840510e21d2" - } - ] - }, - "ons.population.male_10_14": { - "status": "active", - "candidates": [ + "resolved_value": 186703.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_e5eaf3e7f4def06c8d938e5f" + }, + { + "name": "mhclg.council_tax_stock.band_c@E12000002", + "status": "active", + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000002", + "resolved_period": 2025, + "resolved_value": 585587.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fc2f9b5b1813a71f580f85a4" + }, { - "name": "ons.population.male_10_14", + "name": "mhclg.council_tax_stock.band_c@E12000003", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 5970, + "matched_fact_count_at_or_before_period": 5910, + "geography_level": "region", + "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 2152800.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_86d603b352e77fd0c03ddaa8" - } - ] - }, - "ons.population.male_15_19": { - "status": "active", - "candidates": [ + "resolved_value": 408440.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fe416e96e8e324e0e1647008" + }, { - "name": "ons.population.male_15_19", + "name": "mhclg.council_tax_stock.band_c@E12000004", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 2123750.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ecf390d4b25b71d12aae6bc7" - } - ] - }, - "ons.population.male_20_24": { - "status": "active", - "candidates": [ + "resolved_value": 384470.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fa1e7c770b7403c2a2663980" + }, { - "name": "ons.population.male_20_24", + "name": "mhclg.council_tax_stock.band_c@E12000005", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 11940, + "matched_fact_count_at_or_before_period": 11820, + "geography_level": "region", + "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 2131646.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_edb961b3528b22769eece352" - } - ] - }, - "ons.population.male_25_29": { - "status": "active", - "candidates": [ + "resolved_value": 503657.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_ffab2e562cd756fa9f44ac4c" + }, { - "name": "ons.population.male_25_29", + "name": "mhclg.council_tax_stock.band_c@E12000006", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 17910, + "matched_fact_count_at_or_before_period": 17730, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 2257360.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fd52338de8e1557cdd024c36" - } - ] - }, - "ons.population.male_30_34": { - "status": "active", - "candidates": [ + "resolved_value": 708146.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_ff565a1885420d902566f5be" + }, { - "name": "ons.population.male_30_34", + "name": "mhclg.council_tax_stock.band_c@E12000007", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 13134, + "matched_fact_count_at_or_before_period": 13002, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 2333326.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_b81f56fab808ad1d38d70f3d" - } - ] - }, - "ons.population.male_35_39": { - "status": "active", - "candidates": [ + "resolved_value": 991205.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_eb754d4d8153e7497df94fa9" + }, { - "name": "ons.population.male_35_39", + "name": "mhclg.council_tax_stock.band_c@E12000008", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 25472, + "matched_fact_count_at_or_before_period": 25216, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 2303479.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_be9bedc792e0d419ebaf5316" - } - ] - }, - "ons.population.male_40_44": { - "status": "active", - "candidates": [ + "resolved_value": 1024169.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_feb50a6c4dfa72419ef9e591" + }, { - "name": "ons.population.male_40_44", + "name": "mhclg.council_tax_stock.band_c@E12000009", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 10746, + "matched_fact_count_at_or_before_period": 10638, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 2196013.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d41ff91bfe885debcc12d759" + "resolved_value": 587214.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fff7d7ced3067ef09f8e6d12" } ] }, - "ons.population.male_45_49": { + "mhclg.council_tax_stock.band_d": { "status": "active", "candidates": [ { - "name": "ons.population.male_45_49", + "name": "mhclg.council_tax_stock.band_d@E12000001", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 4776, + "matched_fact_count_at_or_before_period": 4728, + "geography_level": "region", + "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 2005099.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_fafcbae6e55f9ae20bc0050d" - } - ] - }, - "ons.population.male_50_54": { - "status": "active", - "candidates": [ + "resolved_value": 108432.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fb2d7a086ad6d3c95a074ab0" + }, { - "name": "ons.population.male_50_54", + "name": "mhclg.council_tax_stock.band_d@E12000002", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 2164862.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_b8fe92cfb43b9a95f8a9f7ef" - } - ] - }, - "ons.population.male_55_59": { - "status": "active", - "candidates": [ + "resolved_value": 346489.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_ff0d7ad8c7d5d0d2f02702f0" + }, { - "name": "ons.population.male_55_59", + "name": "mhclg.council_tax_stock.band_d@E12000003", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 5970, + "matched_fact_count_at_or_before_period": 5910, + "geography_level": "region", + "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 2256521.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_86b57e4ed1e5186f23dc4021" - } - ] - }, - "ons.population.male_5_9": { - "status": "active", - "candidates": [ + "resolved_value": 237496.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f7c0b8b92776a6109a114a92" + }, { - "name": "ons.population.male_5_9", + "name": "mhclg.council_tax_stock.band_d@E12000004", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 2037199.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_e272f955c58535b8b9304759" - } - ] - }, - "ons.population.male_60_64": { - "status": "active", - "candidates": [ + "resolved_value": 238335.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fa621220d1e5d193343634ca" + }, { - "name": "ons.population.male_60_64", + "name": "mhclg.council_tax_stock.band_d@E12000005", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 11940, + "matched_fact_count_at_or_before_period": 11820, + "geography_level": "region", + "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 2094462.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_e60d33e33dcbc1ba2292edf5" - } - ] - }, - "ons.population.male_65_69": { - "status": "active", - "candidates": [ + "resolved_value": 288790.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_ff6f72e91c98eb23dfe9d09c" + }, { - "name": "ons.population.male_65_69", + "name": "mhclg.council_tax_stock.band_d@E12000006", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 17910, + "matched_fact_count_at_or_before_period": 17730, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 1734083.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_a4878efd0023575bded6b67a" - } - ] - }, - "ons.population.male_70_74": { - "status": "active", - "candidates": [ + "resolved_value": 485975.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fd87126e89fd8a33383640f1" + }, { - "name": "ons.population.male_70_74", + "name": "mhclg.council_tax_stock.band_d@E12000007", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 13134, + "matched_fact_count_at_or_before_period": 13002, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 1473758.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d34aca91f9d1621ea96e72bc" - } - ] - }, - "ons.population.male_75_79": { - "status": "active", - "candidates": [ + "resolved_value": 929941.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f7dfce8ada24dca8651cdc12" + }, { - "name": "ons.population.male_75_79", + "name": "mhclg.council_tax_stock.band_d@E12000008", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 25472, + "matched_fact_count_at_or_before_period": 25216, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 1350668.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f74158203e735d37a67c5409" - } - ] - }, - "ons.population.male_80_84": { - "status": "active", - "candidates": [ + "resolved_value": 807114.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f8129a3bae48724ddc91e4ca" + }, { - "name": "ons.population.male_80_84", + "name": "mhclg.council_tax_stock.band_d@E12000009", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 10746, + "matched_fact_count_at_or_before_period": 10638, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 815910.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_60aa57af44ada9286df3d649" + "resolved_value": 404568.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9f3dcc56f346a75bfa16137" } ] }, - "ons.population.male_85_89": { + "mhclg.council_tax_stock.band_e": { "status": "active", "candidates": [ { - "name": "ons.population.male_85_89", + "name": "mhclg.council_tax_stock.band_e@E12000001", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 4776, + "matched_fact_count_at_or_before_period": 4728, + "geography_level": "region", + "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 459511.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_bbfd4e781a7d1151855e4edb" - } - ] - }, - "ons.population.male_90_plus": { - "status": "active", - "candidates": [ + "resolved_value": 58932.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_e767a90e1f4f3985379189f5" + }, { - "name": "ons.population.male_90_plus", + "name": "mhclg.council_tax_stock.band_e@E12000002", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 210520.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_8ec6d2d034546c9693c4f6ed" - } - ] - }, - "ons.population.scotland_children_under_16": { - "status": "active", - "candidates": [ + "resolved_value": 207825.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9b8ef4202908453655767f0" + }, { - "name": "ons.population.scotland_children_under_16", + "name": "mhclg.council_tax_stock.band_e@E12000003", "status": "active", - "matched_fact_count_overall": 32, - "matched_fact_count_at_or_before_period": 32, + "matched_fact_count_overall": 5970, + "matched_fact_count_at_or_before_period": 5910, + "geography_level": "region", + "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 896833.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9862176e9cdec891820dfa2" - } - ] - }, - "ons.population.scotland_babies_under_1": { - "status": "active", - "candidates": [ + "resolved_value": 152517.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fbb09c3c4f80ba784375aa37" + }, { - "name": "ons.population.scotland_babies_under_1", + "name": "mhclg.council_tax_stock.band_e@E12000004", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 46776.0, - "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_edd043df0081e63ad0876932" - } - ] - }, - "ons.population.scotland_households_3plus_children": { - "status": "signed_excluded", - "candidates": [ + "resolved_value": 149931.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fec984442b918005ccc92238" + }, { - "name": "ons.population.scotland_households_3plus_children", - "status": "signed_excluded", - "matched_fact_count_overall": 552, - "matched_fact_count_at_or_before_period": 552, - "signed_rationale": "Signed out pending a Scotland household-composition fact: the current selector reaches person-level ONS mid-year population age rows, not households with three or more children. microcosm#736 tracks the missing declaration." - } - ] - }, - "ons.household_composition.lone_households_under_65": { - "status": "active", - "candidates": [ + "name": "mhclg.council_tax_stock.band_e@E12000005", + "status": "active", + "matched_fact_count_overall": 11940, + "matched_fact_count_at_or_before_period": 11820, + "geography_level": "region", + "geography_id": "E12000005", + "resolved_period": 2025, + "resolved_value": 185672.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_d83f9067bfa886482b6a5be7" + }, { - "name": "ons.household_composition.lone_households_under_65", + "name": "mhclg.council_tax_stock.band_e@E12000006", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 17910, + "matched_fact_count_at_or_before_period": 17730, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 4316000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_b2ee6bff131571b7dcd4c33c" - } - ] - }, - "ons.household_composition.lone_households_over_65": { - "status": "active", - "candidates": [ + "resolved_value": 301723.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fb2e48afaa19a026d3d2dbf9" + }, { - "name": "ons.household_composition.lone_households_over_65", + "name": "mhclg.council_tax_stock.band_e@E12000007", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 13134, + "matched_fact_count_at_or_before_period": 13002, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 4254000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_4178a72ada0e0b5b53fd62b3" - } - ] - }, - "ons.household_composition.unrelated_adult_households": { - "status": "active", - "candidates": [ + "resolved_value": 551952.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fe53b4ade27bba47669221bb" + }, { - "name": "ons.household_composition.unrelated_adult_households", + "name": "mhclg.council_tax_stock.band_e@E12000008", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 25472, + "matched_fact_count_at_or_before_period": 25216, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 813000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_191e954854307c61fca2d539" - } - ] - }, - "ons.household_composition.couple_no_children_households": { - "status": "active", - "candidates": [ + "resolved_value": 529137.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_ff8b7b878381855ff02392c8" + }, { - "name": "ons.household_composition.couple_no_children_households", + "name": "mhclg.council_tax_stock.band_e@E12000009", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 10746, + "matched_fact_count_at_or_before_period": 10638, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 8119000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_861314257d00193080069624" + "resolved_value": 274120.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fd8affa54b589a8f8dfa76e1" } ] }, - "ons.household_composition.couple_under_3_children_households": { + "mhclg.council_tax_stock.band_f": { "status": "active", "candidates": [ { - "name": "ons.household_composition.couple_under_3_children_households", + "name": "mhclg.council_tax_stock.band_f@E12000001", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 4776, + "matched_fact_count_at_or_before_period": 4728, + "geography_level": "region", + "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 5439000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_04ac3660df720d6f8effbdb2" - } - ] - }, - "ons.household_composition.couple_3_plus_children_households": { - "status": "active", - "candidates": [ + "resolved_value": 25729.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f1a656e56ed4ec922ab1be8a" + }, { - "name": "ons.household_composition.couple_3_plus_children_households", + "name": "mhclg.council_tax_stock.band_f@E12000002", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 931000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_3432d322cadb6a40f0c3ebc8" - } - ] - }, - "ons.household_composition.couple_non_dependent_children_only_households": { - "status": "active", - "candidates": [ + "resolved_value": 100117.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f934ec4447a2decb7d93153c" + }, { - "name": "ons.household_composition.couple_non_dependent_children_only_households", + "name": "mhclg.council_tax_stock.band_f@E12000003", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 5970, + "matched_fact_count_at_or_before_period": 5910, + "geography_level": "region", + "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 1848000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_4d36f952f4dd650bcab7ba7f" - } - ] - }, - "ons.household_composition.lone_parent_dependent_children_households": { - "status": "active", - "candidates": [ + "resolved_value": 73172.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fed1e74402841596ec02537f" + }, { - "name": "ons.household_composition.lone_parent_dependent_children_households", + "name": "mhclg.council_tax_stock.band_f@E12000004", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 13930, + "matched_fact_count_at_or_before_period": 13790, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 1835000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_e9746f29548db6f6047842cb" - } - ] - }, - "ons.household_composition.lone_parent_non_dependent_children_households": { - "status": "active", - "candidates": [ + "resolved_value": 71418.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f992d8c87d194b0dfb07b0fa" + }, { - "name": "ons.household_composition.lone_parent_non_dependent_children_households", + "name": "mhclg.council_tax_stock.band_f@E12000005", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 11940, + "matched_fact_count_at_or_before_period": 11820, + "geography_level": "region", + "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 1204000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_9c7f117f90bc24f073f4e14f" - } - ] - }, - "ons.household_composition.multi_family_households": { - "status": "active", - "candidates": [ + "resolved_value": 102077.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9f49f0636d79cb28dcc85e1" + }, { - "name": "ons.household_composition.multi_family_households", + "name": "mhclg.council_tax_stock.band_f@E12000006", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 17910, + "matched_fact_count_at_or_before_period": 17730, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 244000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_a0cd8874e5334242ce7b8ce0" + "resolved_value": 166744.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_e672d9b03691ddd1faac694d" + }, + { + "name": "mhclg.council_tax_stock.band_f@E12000007", + "status": "active", + "matched_fact_count_overall": 13134, + "matched_fact_count_at_or_before_period": 13002, + "geography_level": "region", + "geography_id": "E12000007", + "resolved_period": 2025, + "resolved_value": 279261.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_ef478a0ef6ff0cb78a65dcaa" + }, + { + "name": "mhclg.council_tax_stock.band_f@E12000008", + "status": "active", + "matched_fact_count_overall": 25472, + "matched_fact_count_at_or_before_period": 25216, + "geography_level": "region", + "geography_id": "E12000008", + "resolved_period": 2025, + "resolved_value": 325815.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fb02357269b3d262a700cf5f" + }, + { + "name": "mhclg.council_tax_stock.band_f@E12000009", + "status": "active", + "matched_fact_count_overall": 10746, + "matched_fact_count_at_or_before_period": 10638, + "geography_level": "region", + "geography_id": "E12000009", + "resolved_period": 2025, + "resolved_value": 139412.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fb77e2f50e126802cff79f21" } ] }, - "mhclg.council_tax_stock.band_a": { + "mhclg.council_tax_stock.band_g": { "status": "active", "candidates": [ { - "name": "mhclg.council_tax_stock.band_a@E12000001", + "name": "mhclg.council_tax_stock.band_g@E12000001", "status": "active", "matched_fact_count_overall": 4776, "matched_fact_count_at_or_before_period": 4728, "geography_level": "region", "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 621096.0, + "resolved_value": 14062.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_d0152c2791236d6ec749fb4b" + "resolved_fact_key": "ledger_aggregate_fact_v2_f80042add7dbd445217cde1a" }, { - "name": "mhclg.council_tax_stock.band_a@E12000002", + "name": "mhclg.council_tax_stock.band_g@E12000002", "status": "active", "matched_fact_count_overall": 13930, "matched_fact_count_at_or_before_period": 13790, "geography_level": "region", "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 1285713.0, + "resolved_value": 62587.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fa7c76228b4383e695be0c57" + "resolved_fact_key": "ledger_aggregate_fact_v2_ffc555374f59e3667468b086" }, { - "name": "mhclg.council_tax_stock.band_a@E12000003", + "name": "mhclg.council_tax_stock.band_g@E12000003", "status": "active", "matched_fact_count_overall": 5970, "matched_fact_count_at_or_before_period": 5910, "geography_level": "region", "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 988548.0, + "resolved_value": 40487.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_eb94428708527c6adbce48c3" + "resolved_fact_key": "ledger_aggregate_fact_v2_f290bf6f13fa468c2acf0be2" }, { - "name": "mhclg.council_tax_stock.band_a@E12000004", + "name": "mhclg.council_tax_stock.band_g@E12000004", "status": "active", "matched_fact_count_overall": 13930, "matched_fact_count_at_or_before_period": 13790, "geography_level": "region", "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 739971.0, + "resolved_value": 37892.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f17101c03f5970d639ddb6d7" + "resolved_fact_key": "ledger_aggregate_fact_v2_f69d9fecd8d273243af03685" }, { - "name": "mhclg.council_tax_stock.band_a@E12000005", + "name": "mhclg.council_tax_stock.band_g@E12000005", "status": "active", "matched_fact_count_overall": 11940, "matched_fact_count_at_or_before_period": 11820, "geography_level": "region", "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 728493.0, + "resolved_value": 60209.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ef49e263051486267b93c7cd" + "resolved_fact_key": "ledger_aggregate_fact_v2_ec75efe3a83bc6d9c25d7ae1" }, { - "name": "mhclg.council_tax_stock.band_a@E12000006", + "name": "mhclg.council_tax_stock.band_g@E12000006", "status": "active", "matched_fact_count_overall": 17910, "matched_fact_count_at_or_before_period": 17730, "geography_level": "region", "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 364482.0, + "resolved_value": 108700.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9ada16eb0c916b22d2397bb" + "resolved_fact_key": "ledger_aggregate_fact_v2_fd2a0529ed0a7cf9532ef8ea" }, { - "name": "mhclg.council_tax_stock.band_a@E12000007", + "name": "mhclg.council_tax_stock.band_g@E12000007", "status": "active", "matched_fact_count_overall": 13134, "matched_fact_count_at_or_before_period": 13002, "geography_level": "region", "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 118732.0, + "resolved_value": 207056.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f7d8d56243116fa2f1419fe1" + "resolved_fact_key": "ledger_aggregate_fact_v2_f7d99e8a41825169a450a9ed" }, { - "name": "mhclg.council_tax_stock.band_a@E12000008", + "name": "mhclg.council_tax_stock.band_g@E12000008", "status": "active", "matched_fact_count_overall": 25472, "matched_fact_count_at_or_before_period": 25216, "geography_level": "region", "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 320025.0, + "resolved_value": 255206.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fcc7bbe5d78c199fc6d856ca" + "resolved_fact_key": "ledger_aggregate_fact_v2_fda73631af17107d741fed93" }, { - "name": "mhclg.council_tax_stock.band_a@E12000009", + "name": "mhclg.council_tax_stock.band_g@E12000009", "status": "active", "matched_fact_count_overall": 10746, "matched_fact_count_at_or_before_period": 10638, "geography_level": "region", "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 422969.0, + "resolved_value": 75533.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f23d41b29d6952c18d44dc26" + "resolved_fact_key": "ledger_aggregate_fact_v2_ddffd3467540ebe8f71dc050" } ] }, - "mhclg.council_tax_stock.band_b": { + "mhclg.council_tax_stock.band_h": { "status": "active", "candidates": [ { - "name": "mhclg.council_tax_stock.band_b@E12000001", + "name": "mhclg.council_tax_stock.band_h@E12000001", "status": "active", "matched_fact_count_overall": 4776, "matched_fact_count_at_or_before_period": 4728, "geography_level": "region", "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 193309.0, + "resolved_value": 1151.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f84be54967344adf03fab807" + "resolved_fact_key": "ledger_aggregate_fact_v2_ff4150e637c1d82a68bb2a28" }, { - "name": "mhclg.council_tax_stock.band_b@E12000002", + "name": "mhclg.council_tax_stock.band_h@E12000002", "status": "active", "matched_fact_count_overall": 13930, "matched_fact_count_at_or_before_period": 13790, "geography_level": "region", "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 666970.0, + "resolved_value": 6230.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fac49fea11fd3b1110a941c5" + "resolved_fact_key": "ledger_aggregate_fact_v2_f742ed87e05f38e0a20ba028" }, { - "name": "mhclg.council_tax_stock.band_b@E12000003", + "name": "mhclg.council_tax_stock.band_h@E12000003", "status": "active", "matched_fact_count_overall": 5970, "matched_fact_count_at_or_before_period": 5910, "geography_level": "region", "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 482052.0, + "resolved_value": 3022.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f8ef63f3e9b07a934c3f2df8" + "resolved_fact_key": "ledger_aggregate_fact_v2_fd393adec42be55cfefb3400" }, { - "name": "mhclg.council_tax_stock.band_b@E12000004", + "name": "mhclg.council_tax_stock.band_h@E12000004", "status": "active", "matched_fact_count_overall": 13930, "matched_fact_count_at_or_before_period": 13790, "geography_level": "region", "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 478320.0, + "resolved_value": 2779.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f48dde558979080156b8c99f" + "resolved_fact_key": "ledger_aggregate_fact_v2_fe1b32af9c019b0fa366ea83" }, { - "name": "mhclg.council_tax_stock.band_b@E12000005", + "name": "mhclg.council_tax_stock.band_h@E12000005", "status": "active", "matched_fact_count_overall": 11940, "matched_fact_count_at_or_before_period": 11820, "geography_level": "region", "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 625673.0, + "resolved_value": 5285.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fc4a526b4ee56ed620ab4c14" + "resolved_fact_key": "ledger_aggregate_fact_v2_f086bebb12518f66fdd27be8" }, { - "name": "mhclg.council_tax_stock.band_b@E12000006", + "name": "mhclg.council_tax_stock.band_h@E12000006", "status": "active", "matched_fact_count_overall": 17910, "matched_fact_count_at_or_before_period": 17730, "geography_level": "region", "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 568914.0, + "resolved_value": 13447.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fe310977523bcaadf025f7f6" + "resolved_fact_key": "ledger_aggregate_fact_v2_fb031812869aaf579b6d5b62" }, { - "name": "mhclg.council_tax_stock.band_b@E12000007", + "name": "mhclg.council_tax_stock.band_h@E12000007", "status": "active", "matched_fact_count_overall": 13134, "matched_fact_count_at_or_before_period": 13002, "geography_level": "region", "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 463447.0, + "resolved_value": 59569.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ffadb386ab954d99278ba891" + "resolved_fact_key": "ledger_aggregate_fact_v2_fb5c13d22ffe09151cf3b4f8" }, { - "name": "mhclg.council_tax_stock.band_b@E12000008", + "name": "mhclg.council_tax_stock.band_h@E12000008", "status": "active", "matched_fact_count_overall": 25472, "matched_fact_count_at_or_before_period": 25216, "geography_level": "region", "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 649092.0, + "resolved_value": 36978.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb23fbffbee284d17da76489" + "resolved_fact_key": "ledger_aggregate_fact_v2_fd99e21ba622e4f2a978332a" }, { - "name": "mhclg.council_tax_stock.band_b@E12000009", + "name": "mhclg.council_tax_stock.band_h@E12000009", "status": "active", "matched_fact_count_overall": 10746, "matched_fact_count_at_or_before_period": 10638, "geography_level": "region", "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 609286.0, + "resolved_value": 6697.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f84a549115340205a9ae8951" + "resolved_fact_key": "ledger_aggregate_fact_v2_f90a5f109dfd934a167bf0e0" } ] }, - "mhclg.council_tax_stock.band_c": { + "mhclg.council_tax_stock.total": { "status": "active", "candidates": [ { - "name": "mhclg.council_tax_stock.band_c@E12000001", + "name": "mhclg.council_tax_stock.total@E12000001", "status": "active", "matched_fact_count_overall": 4776, "matched_fact_count_at_or_before_period": 4728, "geography_level": "region", "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 186703.0, + "resolved_value": 1209414.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_e5eaf3e7f4def06c8d938e5f" + "resolved_fact_key": "ledger_aggregate_fact_v2_d0495e6e8e02785ad2236142" }, { - "name": "mhclg.council_tax_stock.band_c@E12000002", + "name": "mhclg.council_tax_stock.total@E12000002", "status": "active", "matched_fact_count_overall": 13930, "matched_fact_count_at_or_before_period": 13790, "geography_level": "region", "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 585587.0, + "resolved_value": 3261518.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fc2f9b5b1813a71f580f85a4" + "resolved_fact_key": "ledger_aggregate_fact_v2_fc1af92610b38c4757aea9cd" }, { - "name": "mhclg.council_tax_stock.band_c@E12000003", + "name": "mhclg.council_tax_stock.total@E12000003", "status": "active", "matched_fact_count_overall": 5970, "matched_fact_count_at_or_before_period": 5910, "geography_level": "region", "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 408440.0, + "resolved_value": 2385734.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fe416e96e8e324e0e1647008" + "resolved_fact_key": "ledger_aggregate_fact_v2_d97752a94900433af3ad7e6f" }, { - "name": "mhclg.council_tax_stock.band_c@E12000004", + "name": "mhclg.council_tax_stock.total@E12000004", "status": "active", "matched_fact_count_overall": 13930, "matched_fact_count_at_or_before_period": 13790, "geography_level": "region", "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 384470.0, + "resolved_value": 2103116.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fa1e7c770b7403c2a2663980" + "resolved_fact_key": "ledger_aggregate_fact_v2_ef350c9b94fb54787fbca592" }, { - "name": "mhclg.council_tax_stock.band_c@E12000005", + "name": "mhclg.council_tax_stock.total@E12000005", "status": "active", "matched_fact_count_overall": 11940, "matched_fact_count_at_or_before_period": 11820, "geography_level": "region", "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 503657.0, + "resolved_value": 2499856.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ffab2e562cd756fa9f44ac4c" + "resolved_fact_key": "ledger_aggregate_fact_v2_f649a1ce99478b505d03ab91" }, { - "name": "mhclg.council_tax_stock.band_c@E12000006", + "name": "mhclg.council_tax_stock.total@E12000006", "status": "active", "matched_fact_count_overall": 17910, "matched_fact_count_at_or_before_period": 17730, "geography_level": "region", "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 708146.0, + "resolved_value": 2718131.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff565a1885420d902566f5be" + "resolved_fact_key": "ledger_aggregate_fact_v2_f27b18e8ecc0114a5b9e88e4" }, { - "name": "mhclg.council_tax_stock.band_c@E12000007", + "name": "mhclg.council_tax_stock.total@E12000007", "status": "active", "matched_fact_count_overall": 13134, "matched_fact_count_at_or_before_period": 13002, "geography_level": "region", "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 991205.0, + "resolved_value": 3601163.0, "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_eb754d4d8153e7497df94fa9" + "resolved_fact_key": "ledger_aggregate_fact_v2_f56db6353a3459ee98059504" }, { - "name": "mhclg.council_tax_stock.band_c@E12000008", + "name": "mhclg.council_tax_stock.total@E12000008", "status": "active", "matched_fact_count_overall": 25472, "matched_fact_count_at_or_before_period": 25216, "geography_level": "region", "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 1024169.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_feb50a6c4dfa72419ef9e591" - }, + "resolved_value": 3947536.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_fd4beff6e5a58b2ca5ff0b3a" + }, + { + "name": "mhclg.council_tax_stock.total@E12000009", + "status": "active", + "matched_fact_count_overall": 10746, + "matched_fact_count_at_or_before_period": 10638, + "geography_level": "region", + "geography_id": "E12000009", + "resolved_period": 2025, + "resolved_value": 2519799.0, + "resolved_fact_period": "2025-10", + "resolved_fact_key": "ledger_aggregate_fact_v2_f7339b440103ee7084920ea3" + } + ] + }, + "welshgov.council_tax_stock.band_a": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.band_a", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 194973.29, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_21e317eb3f397169fa2dc933" + } + ] + }, + "welshgov.council_tax_stock.band_b": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.band_b", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 285787.52, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_1db23c3de870c2f9704b9822" + } + ] + }, + "welshgov.council_tax_stock.band_c": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.band_c", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 301699.86, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_c8c0495e5862c06f0f268414" + } + ] + }, + "welshgov.council_tax_stock.band_d": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.band_d", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 225179.88, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_04e498c0e2dad39004885ea3" + } + ] + }, + "welshgov.council_tax_stock.band_e": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.band_e", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 185447.46, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_e8ca0bef4217724c1b6eafbb" + } + ] + }, + "welshgov.council_tax_stock.band_f": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.band_f", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 114672.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9e314273b8264de7d24a7b6" + } + ] + }, + "welshgov.council_tax_stock.band_g": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.band_g", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 52211.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_1ffc03853a7f22dbfdfd30ee" + } + ] + }, + "welshgov.council_tax_stock.band_h": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.band_h", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 12357.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_38b37ca6c167d44f1ee2b517" + } + ] + }, + "welshgov.council_tax_stock.band_i": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.band_i", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 5305.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_f94d0825d8f1f21a02667aeb" + } + ] + }, + "welshgov.council_tax_stock.total": { + "status": "active", + "candidates": [ + { + "name": "welshgov.council_tax_stock.total", + "status": "active", + "matched_fact_count_overall": 436, + "matched_fact_count_at_or_before_period": 339, + "resolved_period": 2025, + "resolved_value": 1377633.03, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_69899dbf797a73ce0c05f13d" + } + ] + }, + "scotgov.council_tax_stock.band_a": { + "status": "active", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_a", + "status": "active", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, + "resolved_period": 2025, + "resolved_value": 498707.0, + "resolved_fact_period": "2025-09", + "resolved_fact_key": "ledger_aggregate_fact_v2_d16c53fe6a1c8f4f5886b7e5" + } + ] + }, + "scotgov.council_tax_stock.band_b": { + "status": "active", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_b", + "status": "active", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, + "resolved_period": 2025, + "resolved_value": 583705.0, + "resolved_fact_period": "2025-09", + "resolved_fact_key": "ledger_aggregate_fact_v2_2f95ec98ae61f9898bd47ed9" + } + ] + }, + "scotgov.council_tax_stock.band_c": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_c@E12000009", + "name": "scotgov.council_tax_stock.band_c", "status": "active", - "matched_fact_count_overall": 10746, - "matched_fact_count_at_or_before_period": 10638, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 587214.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fff7d7ced3067ef09f8e6d12" + "resolved_value": 426388.0, + "resolved_fact_period": "2025-09", + "resolved_fact_key": "ledger_aggregate_fact_v2_c9781708df55dc5d197e6623" } ] }, - "mhclg.council_tax_stock.band_d": { + "scotgov.council_tax_stock.band_d": { "status": "active", "candidates": [ { - "name": "mhclg.council_tax_stock.band_d@E12000001", + "name": "scotgov.council_tax_stock.band_d", "status": "active", - "matched_fact_count_overall": 4776, - "matched_fact_count_at_or_before_period": 4728, - "geography_level": "region", - "geography_id": "E12000001", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 108432.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb2d7a086ad6d3c95a074ab0" - }, + "resolved_value": 369621.0, + "resolved_fact_period": "2025-09", + "resolved_fact_key": "ledger_aggregate_fact_v2_ae1fe03809a505b820479598" + } + ] + }, + "scotgov.council_tax_stock.band_e": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_d@E12000002", + "name": "scotgov.council_tax_stock.band_e", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000002", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 346489.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff0d7ad8c7d5d0d2f02702f0" - }, + "resolved_value": 366881.0, + "resolved_fact_period": "2025-09", + "resolved_fact_key": "ledger_aggregate_fact_v2_e83153e0de40fb74471c805f" + } + ] + }, + "scotgov.council_tax_stock.band_f": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_d@E12000003", + "name": "scotgov.council_tax_stock.band_f", "status": "active", - "matched_fact_count_overall": 5970, - "matched_fact_count_at_or_before_period": 5910, - "geography_level": "region", - "geography_id": "E12000003", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 237496.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f7c0b8b92776a6109a114a92" - }, + "resolved_value": 221282.0, + "resolved_fact_period": "2025-09", + "resolved_fact_key": "ledger_aggregate_fact_v2_b24b6409c1473600c03999ec" + } + ] + }, + "scotgov.council_tax_stock.band_g": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_d@E12000004", + "name": "scotgov.council_tax_stock.band_g", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000004", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 238335.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fa621220d1e5d193343634ca" - }, + "resolved_value": 142084.0, + "resolved_fact_period": "2025-09", + "resolved_fact_key": "ledger_aggregate_fact_v2_c86494a855b00998122989d6" + } + ] + }, + "scotgov.council_tax_stock.band_h": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_d@E12000005", + "name": "scotgov.council_tax_stock.band_h", "status": "active", - "matched_fact_count_overall": 11940, - "matched_fact_count_at_or_before_period": 11820, - "geography_level": "region", - "geography_id": "E12000005", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 288790.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff6f72e91c98eb23dfe9d09c" - }, + "resolved_value": 14481.0, + "resolved_fact_period": "2025-09", + "resolved_fact_key": "ledger_aggregate_fact_v2_60d9ae638eff29fc1c88907e" + } + ] + }, + "scotgov.council_tax_stock.total": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_d@E12000006", + "name": "scotgov.council_tax_stock.total", "status": "active", - "matched_fact_count_overall": 17910, - "matched_fact_count_at_or_before_period": 17730, - "geography_level": "region", - "geography_id": "E12000006", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 485975.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fd87126e89fd8a33383640f1" - }, + "resolved_value": 2623149.0, + "resolved_fact_period": "2025-09", + "resolved_fact_key": "ledger_aggregate_fact_v2_ca77a0f0a777ccba05e4bef9" + } + ] + }, + "scotgov.scottish_child_payment_spending": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_d@E12000007", + "name": "scotgov.scottish_child_payment_spending", "status": "active", - "matched_fact_count_overall": 13134, - "matched_fact_count_at_or_before_period": 13002, - "geography_level": "region", - "geography_id": "E12000007", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 929941.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f7dfce8ada24dca8651cdc12" - }, + "resolved_value": 471000000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_20b43b0f8f61e448f28895cf" + } + ] + }, + "ons.savings_interest_income": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_d@E12000008", + "name": "ons.savings_interest_income", "status": "active", - "matched_fact_count_overall": 25472, - "matched_fact_count_at_or_before_period": 25216, - "geography_level": "region", - "geography_id": "E12000008", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, "resolved_period": 2025, - "resolved_value": 807114.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f8129a3bae48724ddc91e4ca" - }, + "resolved_value": 95503000000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_8de1806d1330bcb80a1f4988" + } + ] + }, + "ons.public_sector_employment": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_d@E12000009", + "name": "ons.public_sector_employment", "status": "active", - "matched_fact_count_overall": 10746, - "matched_fact_count_at_or_before_period": 10638, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 404568.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9f3dcc56f346a75bfa16137" + "resolved_value": 6146000.0, + "resolved_fact_period": "2024-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_ff79b4e2301f564ec4203235" } ] }, - "mhclg.council_tax_stock.band_e": { + "ons.land.land_value": { "status": "active", "candidates": [ { - "name": "mhclg.council_tax_stock.band_e@E12000001", + "name": "ons.land.land_value", "status": "active", - "matched_fact_count_overall": 4776, - "matched_fact_count_at_or_before_period": 4728, - "geography_level": "region", - "geography_id": "E12000001", + "matched_fact_count_overall": 30, + "matched_fact_count_at_or_before_period": 30, "resolved_period": 2025, - "resolved_value": 58932.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_e767a90e1f4f3985379189f5" - }, + "resolved_value": 7117771000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_4daf8d1b8830f72bba924d56" + } + ] + }, + "ons.land.household_land_value": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_e@E12000002", + "name": "ons.land.household_land_value", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000002", + "matched_fact_count_overall": 30, + "matched_fact_count_at_or_before_period": 30, "resolved_period": 2025, - "resolved_value": 207825.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9b8ef4202908453655767f0" - }, + "resolved_value": 4559831000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_0e5f9867ab377dffd8a8941f" + } + ] + }, + "ons.land.corporate_land_value": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_e@E12000003", + "name": "ons.land.corporate_land_value", "status": "active", - "matched_fact_count_overall": 5970, - "matched_fact_count_at_or_before_period": 5910, - "geography_level": "region", - "geography_id": "E12000003", + "matched_fact_count_overall": 30, + "matched_fact_count_at_or_before_period": 30, "resolved_period": 2025, - "resolved_value": 152517.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fbb09c3c4f80ba784375aa37" - }, + "resolved_value": 2103053000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ab561a17be0af52de30cca88" + } + ] + }, + "slc.repayments.devolved_total": { + "status": "no_fact_at_or_before_period", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_e@E12000004", + "name": "slc.repayments.devolved_total", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.repayments.england_total_higher_education": { + "status": "active", + "candidates": [ + { + "name": "slc.repayments.england_total_higher_education", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000004", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 149931.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fec984442b918005ccc92238" - }, + "resolved_value": 5018231834.949999, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b947d1f3c3659d252194c102" + } + ] + }, + "slc.repayments.england_plan_1": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_e@E12000005", + "name": "slc.repayments.england_plan_1", "status": "active", - "matched_fact_count_overall": 11940, - "matched_fact_count_at_or_before_period": 11820, - "geography_level": "region", - "geography_id": "E12000005", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 185672.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_d83f9067bfa886482b6a5be7" - }, + "resolved_value": 1852699178.55, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_1d9680e6eaf243227fed5ef2" + } + ] + }, + "slc.repayments.england_plan_2": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_e@E12000006", + "name": "slc.repayments.england_plan_2", "status": "active", - "matched_fact_count_overall": 17910, - "matched_fact_count_at_or_before_period": 17730, - "geography_level": "region", - "geography_id": "E12000006", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 301723.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb2e48afaa19a026d3d2dbf9" - }, + "resolved_value": 2778253361.64, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_882329821c90dc683aa778d8" + } + ] + }, + "slc.repayments.england_postgraduate": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_e@E12000007", + "name": "slc.repayments.england_postgraduate", "status": "active", - "matched_fact_count_overall": 13134, - "matched_fact_count_at_or_before_period": 13002, - "geography_level": "region", - "geography_id": "E12000007", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 551952.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fe53b4ade27bba47669221bb" - }, + "resolved_value": 346409713.95000005, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ac1b07c69f1e1baa2a0fb787" + } + ] + }, + "slc.repayments.england_plan_5": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_e@E12000008", + "name": "slc.repayments.england_plan_5", "status": "active", - "matched_fact_count_overall": 25472, - "matched_fact_count_at_or_before_period": 25216, - "geography_level": "region", - "geography_id": "E12000008", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 529137.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff8b7b878381855ff02392c8" - }, + "resolved_value": 40869580.81, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_496af6b8fe31c71c43f1d292" + } + ] + }, + "slc.borrowers.plan_2_above_threshold": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_e@E12000009", + "name": "slc.borrowers.plan_2_above_threshold", "status": "active", - "matched_fact_count_overall": 10746, - "matched_fact_count_at_or_before_period": 10638, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 6, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 274120.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fd8affa54b589a8f8dfa76e1" + "resolved_value": 4460000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_02288c19caeae900fdaf1e0d" } ] }, - "mhclg.council_tax_stock.band_f": { + "slc.borrowers.plan_2_liable": { "status": "active", "candidates": [ { - "name": "mhclg.council_tax_stock.band_f@E12000001", + "name": "slc.borrowers.plan_2_liable", "status": "active", - "matched_fact_count_overall": 4776, - "matched_fact_count_at_or_before_period": 4728, - "geography_level": "region", - "geography_id": "E12000001", + "matched_fact_count_overall": 6, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 25729.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f1a656e56ed4ec922ab1be8a" - }, + "resolved_value": 9710000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_37387933e73bcc8c1e04cf78" + } + ] + }, + "slc.borrowers.plan_5_above_threshold": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_f@E12000002", + "name": "slc.borrowers.plan_5_above_threshold", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000002", + "matched_fact_count_overall": 6, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 100117.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f934ec4447a2decb7d93153c" - }, + "resolved_value": 35000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_dd16b085f81ef7708a00511e" + } + ] + }, + "slc.borrowers.plan_5_liable": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_f@E12000003", + "name": "slc.borrowers.plan_5_liable", "status": "active", - "matched_fact_count_overall": 5970, - "matched_fact_count_at_or_before_period": 5910, - "geography_level": "region", - "geography_id": "E12000003", + "matched_fact_count_overall": 6, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 73172.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fed1e74402841596ec02537f" - }, + "resolved_value": 230000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_73ff136d820950ea404ddb6b" + } + ] + }, + "slc.support.maintenance_loan_recipients": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_f@E12000004", + "name": "slc.support.maintenance_loan_recipients", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000004", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, "resolved_period": 2025, - "resolved_value": 71418.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f992d8c87d194b0dfb07b0fa" - }, + "resolved_value": 1159761.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f03bd7a10d0eee9917a3a199" + } + ] + }, + "slc.support.maintenance_loan_spend": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_f@E12000005", + "name": "slc.support.maintenance_loan_spend", "status": "active", - "matched_fact_count_overall": 11940, - "matched_fact_count_at_or_before_period": 11820, - "geography_level": "region", - "geography_id": "E12000005", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, "resolved_period": 2025, - "resolved_value": 102077.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9f49f0636d79cb28dcc85e1" - }, + "resolved_value": 8591659718.080004, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_2900e25d7ee90f79fb3b87b9" + } + ] + }, + "slc.support.parents_learning_allowance_recipients": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_f@E12000006", + "name": "slc.support.parents_learning_allowance_recipients", "status": "active", - "matched_fact_count_overall": 17910, - "matched_fact_count_at_or_before_period": 17730, - "geography_level": "region", - "geography_id": "E12000006", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, "resolved_period": 2025, - "resolved_value": 166744.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_e672d9b03691ddd1faac694d" - }, + "resolved_value": 99645.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d5df1c69846ab2fd3d0e50e1" + } + ] + }, + "slc.support.parents_learning_allowance_spend": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_f@E12000007", + "name": "slc.support.parents_learning_allowance_spend", "status": "active", - "matched_fact_count_overall": 13134, - "matched_fact_count_at_or_before_period": 13002, - "geography_level": "region", - "geography_id": "E12000007", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, "resolved_period": 2025, - "resolved_value": 279261.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ef478a0ef6ff0cb78a65dcaa" - }, + "resolved_value": 181421659.32, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_72028ce00b9569deec79d6e6" + } + ] + }, + "slc.support.adult_dependants_grant_recipients": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_f@E12000008", + "name": "slc.support.adult_dependants_grant_recipients", "status": "active", - "matched_fact_count_overall": 25472, - "matched_fact_count_at_or_before_period": 25216, - "geography_level": "region", - "geography_id": "E12000008", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, "resolved_period": 2025, - "resolved_value": 325815.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb02357269b3d262a700cf5f" - }, + "resolved_value": 18611.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_adc83b5d137ecb48fed77064" + } + ] + }, + "slc.support.adult_dependants_grant_spend": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_f@E12000009", + "name": "slc.support.adult_dependants_grant_spend", "status": "active", - "matched_fact_count_overall": 10746, - "matched_fact_count_at_or_before_period": 10638, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, "resolved_period": 2025, - "resolved_value": 139412.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb77e2f50e126802cff79f21" + "resolved_value": 55364916.81, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_5d42660596c9088248e41e90" } ] }, - "mhclg.council_tax_stock.band_g": { + "dwp.uc.households": { "status": "active", "candidates": [ { - "name": "mhclg.council_tax_stock.band_g@E12000001", + "name": "dwp.uc.households", "status": "active", - "matched_fact_count_overall": 4776, - "matched_fact_count_at_or_before_period": 4728, - "geography_level": "region", - "geography_id": "E12000001", + "matched_fact_count_overall": 120, + "matched_fact_count_at_or_before_period": 120, + "matched_fact_count_in_source_window": 120, "resolved_period": 2025, - "resolved_value": 14062.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f80042add7dbd445217cde1a" - }, + "resolved_value": 6197311.0, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_71c060f3f2a732e2f836a5d8" + } + ] + }, + "hmrc.tfc.government_top_up": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_g@E12000002", + "name": "hmrc.tfc.government_top_up", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000002", + "matched_fact_count_overall": 9, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 62587.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ffc555374f59e3667468b086" - }, + "resolved_value": 599800000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_988715985f9e98bbb332e83d" + } + ] + }, + "hmrc.tfc.children_with_used_accounts": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_g@E12000003", + "name": "hmrc.tfc.children_with_used_accounts", "status": "active", - "matched_fact_count_overall": 5970, - "matched_fact_count_at_or_before_period": 5910, - "geography_level": "region", - "geography_id": "E12000003", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 40487.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f290bf6f13fa468c2acf0be2" - }, + "resolved_value": 1151515.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_7aa1c663447037b35ea1c999" + } + ] + }, + "dfe.funded_childcare.working_parent_children_2_to_4": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_g@E12000004", + "name": "dfe.funded_childcare.working_parent_children_2_to_4", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000004", + "matched_fact_count_overall": 11, + "matched_fact_count_at_or_before_period": 9, "resolved_period": 2025, - "resolved_value": 37892.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f69d9fecd8d273243af03685" - }, + "resolved_value": 621482.0, + "resolved_fact_period": "2025-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_a57a0c03ac43b62dde04fabd" + } + ] + }, + "dfe.funded_childcare.early_learning_2_year_olds": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_g@E12000005", + "name": "dfe.funded_childcare.early_learning_2_year_olds", "status": "active", - "matched_fact_count_overall": 11940, - "matched_fact_count_at_or_before_period": 11820, - "geography_level": "region", - "geography_id": "E12000005", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 11, "resolved_period": 2025, - "resolved_value": 60209.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ec75efe3a83bc6d9c25d7ae1" - }, + "resolved_value": 95031.0, + "resolved_fact_period": "2025-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_a2b30af28303935159ba0edc" + } + ] + }, + "dfe.funded_childcare.universal_only_children": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_g@E12000006", + "name": "dfe.funded_childcare.universal_only_children", "status": "active", - "matched_fact_count_overall": 17910, - "matched_fact_count_at_or_before_period": 17730, - "geography_level": "region", - "geography_id": "E12000006", + "matched_fact_count_overall": 770, + "matched_fact_count_at_or_before_period": 686, "resolved_period": 2025, - "resolved_value": 108700.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fd2a0529ed0a7cf9532ef8ea" - }, + "resolved_value": 396965.0, + "resolved_fact_period": "2025-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_471573def13ebdc67ff1f40a" + } + ] + }, + "dft.bus_fare_receipts.england": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_g@E12000007", + "name": "dft.bus_fare_receipts.england", "status": "active", - "matched_fact_count_overall": 13134, - "matched_fact_count_at_or_before_period": 13002, - "geography_level": "region", - "geography_id": "E12000007", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 207056.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f7d99e8a41825169a450a9ed" - }, + "resolved_value": 3612036036.2194014, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_2ece7c3d283b6de43b30389f", + "uprating": { + "index": "dft.local_bus_fares_index", + "factor": "1.05695792880259", + "value_before_uprating": "3417388656.43538" + } + } + ] + }, + "dft.bus_net_support.england": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_g@E12000008", + "name": "dft.bus_net_support.england", "status": "active", - "matched_fact_count_overall": 25472, - "matched_fact_count_at_or_before_period": 25216, - "geography_level": "region", - "geography_id": "E12000008", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 255206.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fda73631af17107d741fed93" - }, + "resolved_value": 3024904320.8399997, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_a12dfcdc0662c8a5e48bf003" + } + ] + }, + "dft.bus_fare_receipts.london": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_g@E12000009", + "name": "dft.bus_fare_receipts.london", "status": "active", - "matched_fact_count_overall": 10746, - "matched_fact_count_at_or_before_period": 10638, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 75533.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ddffd3467540ebe8f71dc050" + "resolved_value": 1347434943.01459, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_33611c64d2048fe660501802", + "uprating": { + "index": "dft.local_bus_fares_index", + "factor": "1", + "value_before_uprating": "1347434943.01459" + } } ] }, - "mhclg.council_tax_stock.band_h": { + "dft.bus_net_support.london": { "status": "active", "candidates": [ { - "name": "mhclg.council_tax_stock.band_h@E12000001", + "name": "dft.bus_net_support.london", "status": "active", - "matched_fact_count_overall": 4776, - "matched_fact_count_at_or_before_period": 4728, - "geography_level": "region", - "geography_id": "E12000001", + "matched_fact_count_overall": 3, + "matched_fact_count_at_or_before_period": 3, "resolved_period": 2025, - "resolved_value": 1151.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff4150e637c1d82a68bb2a28" - }, + "resolved_value": 1130214000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d8e40cee2fc723b719ff4680" + } + ] + }, + "dft.bus_fare_receipts.england_outside_london": { + "status": "signed_excluded", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_h@E12000002", - "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000002", - "resolved_period": 2025, - "resolved_value": 6230.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f742ed87e05f38e0a20ba028" - }, + "name": "dft.bus_fare_receipts.england_outside_london", + "status": "signed_excluded", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "signed_rationale": "England outside London is England minus London: the England row and the London row (pinned at region E12000007) are both bound, so this publisher partition member is derived rather than pinned; Chronicle stamps it at statistical_scope and test_uk_bus_targets asserts the partition reconciles to England within GBP 1,000." + } + ] + }, + "dft.bus_net_support.england_outside_london": { + "status": "signed_excluded", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_h@E12000003", - "status": "active", - "matched_fact_count_overall": 5970, - "matched_fact_count_at_or_before_period": 5910, - "geography_level": "region", - "geography_id": "E12000003", - "resolved_period": 2025, - "resolved_value": 3022.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fd393adec42be55cfefb3400" - }, + "name": "dft.bus_net_support.england_outside_london", + "status": "signed_excluded", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "signed_rationale": "England outside London is England minus London: the England row and the London row (pinned at region E12000007) are both bound, so this publisher partition member is derived rather than pinned; Chronicle stamps it at statistical_scope and test_uk_bus_targets asserts the partition reconciles to England within GBP 1,000." + } + ] + }, + "dft.bus_fare_receipts.uk": { + "status": "signed_excluded", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_h@E12000004", - "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000004", - "resolved_period": 2025, - "resolved_value": 2779.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fe1b32af9c019b0fa366ea83" - }, + "name": "dft.bus_fare_receipts.uk", + "status": "signed_excluded", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "signed_rationale": "BUS05i publishes no UK total and Microcosm declares no method to construct one." + } + ] + }, + "dft.bus_net_support.uk": { + "status": "signed_excluded", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_h@E12000005", - "status": "active", - "matched_fact_count_overall": 11940, - "matched_fact_count_at_or_before_period": 11820, - "geography_level": "region", - "geography_id": "E12000005", - "resolved_period": 2025, - "resolved_value": 5285.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f086bebb12518f66fdd27be8" - }, + "name": "dft.bus_net_support.uk", + "status": "signed_excluded", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "signed_rationale": "BUS05i publishes no UK total and no England-to-UK uplift is declared. Net support binds instead as four country legs whose scopes differ: DfT BUS05bi net support (England, operators' view), Scottish Transport Statistics all government support (Scotland), StatsWales revenue outturn gross expenditure on concessionary fares and support to operators through local authorities only (Wales: no operator-side series and no Welsh Government grants outside the outturn), and the NITHC accounts' Public Service Obligation plus concessionary compensation as one bus-plus-rail cell excluding GBP 53.2m of other revenue funding (Northern Ireland). The legs are bound on their own terms; they are not a UK total under another name." + } + ] + }, + "obr.fuel_duties_cars": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_h@E12000006", + "name": "obr.fuel_duties_cars", "status": "active", - "matched_fact_count_overall": 17910, - "matched_fact_count_at_or_before_period": 17730, - "geography_level": "region", - "geography_id": "E12000006", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 13447.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb031812869aaf579b6d5b62" - }, + "resolved_value": 14400000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_de6554fe8ab7b481035a432a" + } + ] + }, + "orr.rail_government_support": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_h@E12000007", + "name": "orr.rail_government_support", "status": "active", - "matched_fact_count_overall": 13134, - "matched_fact_count_at_or_before_period": 13002, - "geography_level": "region", - "geography_id": "E12000007", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, "resolved_period": 2025, - "resolved_value": 59569.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fb5c13d22ffe09151cf3b4f8" - }, + "resolved_value": 21621100549.34064, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b16b9b3f2329455f907f9ccc" + } + ] + }, + "ons.household_energy_expenditure": { + "status": "signed_excluded", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_h@E12000008", - "status": "active", - "matched_fact_count_overall": 25472, - "matched_fact_count_at_or_before_period": 25216, - "geography_level": "region", - "geography_id": "E12000008", - "resolved_period": 2025, - "resolved_value": 36978.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fd99e21ba622e4f2a978332a" - }, + "name": "ons.household_energy_expenditure", + "status": "signed_excluded", + "matched_fact_count_overall": 6, + "matched_fact_count_at_or_before_period": 6, + "signed_rationale": "ONS Consumer Trends COICOP 04.5 (electricity, gas and other fuels) carries liquid and solid fuels the frame does not model; chronicle #271 (chronicle#270) published the 04.5.1 electricity and 04.5.2 gas sub-classes, which ons.household_electricity_expenditure and ons.household_gas_expenditure bind per fuel on the frame's own columns. The total row is retained in the contract for registry parity and signed out here (microcosm#890 F1)." + } + ] + }, + "ons.household_electricity_expenditure": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.band_h@E12000009", + "name": "ons.household_electricity_expenditure", "status": "active", - "matched_fact_count_overall": 10746, - "matched_fact_count_at_or_before_period": 10638, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 6, + "matched_fact_count_at_or_before_period": 6, "resolved_period": 2025, - "resolved_value": 6697.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f90a5f109dfd934a167bf0e0" + "resolved_value": 26522000000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_69cd660b943ae8f21761f76a" } ] }, - "mhclg.council_tax_stock.total": { + "ons.household_gas_expenditure": { "status": "active", "candidates": [ { - "name": "mhclg.council_tax_stock.total@E12000001", + "name": "ons.household_gas_expenditure", "status": "active", - "matched_fact_count_overall": 4776, - "matched_fact_count_at_or_before_period": 4728, - "geography_level": "region", - "geography_id": "E12000001", + "matched_fact_count_overall": 6, + "matched_fact_count_at_or_before_period": 6, "resolved_period": 2025, - "resolved_value": 1209414.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_d0495e6e8e02785ad2236142" - }, + "resolved_value": 15339000000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_b56be49c552300f6c02fc559" + } + ] + }, + "scotgov.bus.passenger_revenue": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.total@E12000002", + "name": "scotgov.bus.passenger_revenue", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000002", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3261518.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fc1af92610b38c4757aea9cd" - }, + "resolved_value": 391000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_c4269bb83534f1e46f5801c1" + } + ] + }, + "scotgov.bus.government_support": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.total@E12000003", + "name": "scotgov.bus.government_support", "status": "active", - "matched_fact_count_overall": 5970, - "matched_fact_count_at_or_before_period": 5910, - "geography_level": "region", - "geography_id": "E12000003", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, "resolved_period": 2025, - "resolved_value": 2385734.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_d97752a94900433af3ad7e6f" - }, + "resolved_value": 499000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ceb60fd41d0f5587be94c234" + } + ] + }, + "welshgov.bus.public_support": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.total@E12000004", + "name": "welshgov.bus.public_support", "status": "active", - "matched_fact_count_overall": 13930, - "matched_fact_count_at_or_before_period": 13790, - "geography_level": "region", - "geography_id": "E12000004", + "matched_fact_count_overall": 6, + "matched_fact_count_at_or_before_period": 6, "resolved_period": 2025, - "resolved_value": 2103116.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_ef350c9b94fb54787fbca592" - }, + "resolved_value": 131489970.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_a10fcfec7cb458fa0c8c7f10" + } + ] + }, + "dfi_ni.bus.passenger_receipts": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.total@E12000005", + "name": "dfi_ni.bus.passenger_receipts", "status": "active", - "matched_fact_count_overall": 11940, - "matched_fact_count_at_or_before_period": 11820, - "geography_level": "region", - "geography_id": "E12000005", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, "resolved_period": 2025, - "resolved_value": 2499856.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f649a1ce99478b505d03ab91" - }, + "resolved_value": 150082817.48999995, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_96f72989614e0c5faaeeabbb" + } + ] + }, + "nithc.public_transport_support": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.total@E12000006", + "name": "nithc.public_transport_support", "status": "active", - "matched_fact_count_overall": 17910, - "matched_fact_count_at_or_before_period": 17730, - "geography_level": "region", - "geography_id": "E12000006", + "matched_fact_count_overall": 4, + "matched_fact_count_at_or_before_period": 4, "resolved_period": 2025, - "resolved_value": 2718131.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f27b18e8ecc0114a5b9e88e4" - }, + "resolved_value": 111700000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_be8eb7011b6f65fa65d52fcb" + } + ] + }, + "dwp.uc.households_lcwra_element": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.total@E12000007", + "name": "dwp.uc.households_lcwra_element", "status": "active", - "matched_fact_count_overall": 13134, - "matched_fact_count_at_or_before_period": 13002, - "geography_level": "region", - "geography_id": "E12000007", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 3601163.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f56db6353a3459ee98059504" - }, + "resolved_value": 2272425.1666666665, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_f59149c4c514e1acffb728a8" + } + ] + }, + "dwp.uc.households_carer_element": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.total@E12000008", + "name": "dwp.uc.households_carer_element", "status": "active", - "matched_fact_count_overall": 25472, - "matched_fact_count_at_or_before_period": 25216, - "geography_level": "region", - "geography_id": "E12000008", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 3947536.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_fd4beff6e5a58b2ca5ff0b3a" - }, + "resolved_value": 1078514.5, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_d56ddfa58d7ebb3ff0178b0a" + } + ] + }, + "dwp.uc.households_housing_element": { + "status": "active", + "candidates": [ { - "name": "mhclg.council_tax_stock.total@E12000009", + "name": "dwp.uc.households_housing_element", "status": "active", - "matched_fact_count_overall": 10746, - "matched_fact_count_at_or_before_period": 10638, - "geography_level": "region", - "geography_id": "E12000009", + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 2519799.0, - "resolved_fact_period": "2025-10", - "resolved_fact_key": "ledger_aggregate_fact_v2_f7339b440103ee7084920ea3" + "resolved_value": 4037650.3333333335, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_04b7ec6d195e6682f0421672" } ] }, - "welshgov.council_tax_stock.band_a": { + "dwp.uc.households_housing_element_social_rented": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.band_a", + "name": "dwp.uc.households_housing_element_social_rented", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 194973.29, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_21e317eb3f397169fa2dc933" + "resolved_value": 2354587.5833333335, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_109598f6aaa42fe1387d30d1" } ] }, - "welshgov.council_tax_stock.band_b": { + "dwp.uc.households_housing_element_private_rented": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.band_b", + "name": "dwp.uc.households_housing_element_private_rented", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 285787.52, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_1db23c3de870c2f9704b9822" + "resolved_value": 1570545.4166666667, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_7a31b88dfcd4b3d0c758a1c3" } ] }, - "welshgov.council_tax_stock.band_c": { + "dwp.uc.households_childcare_element": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.band_c", + "name": "dwp.uc.households_childcare_element", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 301699.86, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_c8c0495e5862c06f0f268414" + "resolved_value": 178666.66666666666, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_0c1aa0cc56d86c50d6b2560a" } ] }, - "welshgov.council_tax_stock.band_d": { + "dwp.uc.households_with_deduction": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.band_d", + "name": "dwp.uc.households_with_deduction", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_in_source_window": 10, "resolved_period": 2025, - "resolved_value": 225179.88, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_04e498c0e2dad39004885ea3" + "resolved_value": 3130000.0, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_f7bfdb41a462c417535602d2" } ] }, - "welshgov.council_tax_stock.band_e": { + "obr.universal_credit": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.band_e", + "name": "obr.universal_credit", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 14, + "matched_fact_count_at_or_before_period": 4, "resolved_period": 2025, - "resolved_value": 185447.46, + "resolved_value": 79286349139.54411, "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_e8ca0bef4217724c1b6eafbb" + "resolved_fact_key": "ledger_aggregate_fact_v2_e680fe36115d1372d12072e1" } ] }, - "welshgov.council_tax_stock.band_f": { + "dwp.hb.households": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.band_f", + "name": "dwp.hb.households", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 114672.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_f9e314273b8264de7d24a7b6" + "resolved_value": 1685702.9166666667, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_f2ecf4d38ef4dfc796336538" } ] }, - "welshgov.council_tax_stock.band_g": { + "dwp.hb.households_social_rented": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.band_g", + "name": "dwp.hb.households_social_rented", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 52211.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_1ffc03853a7f22dbfdfd30ee" + "resolved_value": 1381089.75, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_40b45c74a40b8d085a8c28e2" } ] }, - "welshgov.council_tax_stock.band_h": { + "dwp.hb.households_private_rented": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.band_h", + "name": "dwp.hb.households_private_rented", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 12, + "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_in_source_window": 12, "resolved_period": 2025, - "resolved_value": 12357.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_38b37ca6c167d44f1ee2b517" + "resolved_value": 304422.6666666667, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_02281858b7b0d71477e429f3" } ] }, - "welshgov.council_tax_stock.band_i": { + "dwp.benefit_cap.capped_households_up_to_100": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.band_i", + "name": "dwp.benefit_cap.capped_households_up_to_100", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 5305.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_f94d0825d8f1f21a02667aeb" + "resolved_value": 38402.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_220b82ab05bec494e6dc9fe9" } ] }, - "welshgov.council_tax_stock.total": { + "dwp.benefit_cap.capped_households_100_01_to_200": { "status": "active", "candidates": [ { - "name": "welshgov.council_tax_stock.total", + "name": "dwp.benefit_cap.capped_households_100_01_to_200", "status": "active", - "matched_fact_count_overall": 436, - "matched_fact_count_at_or_before_period": 339, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1377633.03, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_69899dbf797a73ce0c05f13d" + "resolved_value": 24274.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_4a9e2cc181aee62e1eccd188" } ] }, - "scotgov.council_tax_stock.band_a": { + "dwp.benefit_cap.capped_households_200_01_to_300": { "status": "active", "candidates": [ { - "name": "scotgov.council_tax_stock.band_a", + "name": "dwp.benefit_cap.capped_households_200_01_to_300", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 498707.0, - "resolved_fact_period": "2025-09", - "resolved_fact_key": "ledger_aggregate_fact_v2_d16c53fe6a1c8f4f5886b7e5" + "resolved_value": 16240.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_5ae8289242eabcffab23f32f" } ] }, - "scotgov.council_tax_stock.band_b": { + "dwp.benefit_cap.capped_households_300_01_to_400": { "status": "active", "candidates": [ { - "name": "scotgov.council_tax_stock.band_b", + "name": "dwp.benefit_cap.capped_households_300_01_to_400", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 583705.0, - "resolved_fact_period": "2025-09", - "resolved_fact_key": "ledger_aggregate_fact_v2_2f95ec98ae61f9898bd47ed9" + "resolved_value": 10562.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_a503d4e938aaf386720b96c4" } ] }, - "scotgov.council_tax_stock.band_c": { + "dwp.benefit_cap.capped_households_400_01_to_500": { "status": "active", "candidates": [ { - "name": "scotgov.council_tax_stock.band_c", + "name": "dwp.benefit_cap.capped_households_400_01_to_500", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 426388.0, - "resolved_fact_period": "2025-09", - "resolved_fact_key": "ledger_aggregate_fact_v2_c9781708df55dc5d197e6623" + "resolved_value": 7813.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_df764409769b2078c69ff113" } ] }, - "scotgov.council_tax_stock.band_d": { + "dwp.benefit_cap.capped_households_500_01_to_600": { "status": "active", "candidates": [ { - "name": "scotgov.council_tax_stock.band_d", + "name": "dwp.benefit_cap.capped_households_500_01_to_600", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 369621.0, - "resolved_fact_period": "2025-09", - "resolved_fact_key": "ledger_aggregate_fact_v2_ae1fe03809a505b820479598" + "resolved_value": 4431.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_3d0e936b240ba62209777ee3" } ] }, - "scotgov.council_tax_stock.band_e": { + "dwp.benefit_cap.capped_households_600_01_to_700": { "status": "active", "candidates": [ { - "name": "scotgov.council_tax_stock.band_e", + "name": "dwp.benefit_cap.capped_households_600_01_to_700", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 366881.0, - "resolved_fact_period": "2025-09", - "resolved_fact_key": "ledger_aggregate_fact_v2_e83153e0de40fb74471c805f" + "resolved_value": 3116.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_1d68398dd88958a8700dcfac" } ] }, - "scotgov.council_tax_stock.band_f": { + "dwp.benefit_cap.capped_households_700_01_to_800": { "status": "active", "candidates": [ { - "name": "scotgov.council_tax_stock.band_f", + "name": "dwp.benefit_cap.capped_households_700_01_to_800", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 221282.0, - "resolved_fact_period": "2025-09", - "resolved_fact_key": "ledger_aggregate_fact_v2_b24b6409c1473600c03999ec" + "resolved_value": 1902.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_999288b0fa67d7f657810a11" } ] }, - "scotgov.council_tax_stock.band_g": { + "dwp.benefit_cap.capped_households_800_01_to_900": { "status": "active", "candidates": [ { - "name": "scotgov.council_tax_stock.band_g", + "name": "dwp.benefit_cap.capped_households_800_01_to_900", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 142084.0, - "resolved_fact_period": "2025-09", - "resolved_fact_key": "ledger_aggregate_fact_v2_c86494a855b00998122989d6" + "resolved_value": 1328.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_b7a2d0cec131abfd0cb81ba0" } ] }, - "scotgov.council_tax_stock.band_h": { + "dwp.benefit_cap.capped_households_900_01_to_1000": { "status": "active", "candidates": [ { - "name": "scotgov.council_tax_stock.band_h", + "name": "dwp.benefit_cap.capped_households_900_01_to_1000", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 14481.0, - "resolved_fact_period": "2025-09", - "resolved_fact_key": "ledger_aggregate_fact_v2_60d9ae638eff29fc1c88907e" + "resolved_value": 824.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_80c8fa82f3e07357e677ae93" } ] }, - "scotgov.council_tax_stock.total": { + "dwp.benefit_cap.capped_households_1000_01_to_1100": { "status": "active", "candidates": [ { - "name": "scotgov.council_tax_stock.total", + "name": "dwp.benefit_cap.capped_households_1000_01_to_1100", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 2623149.0, - "resolved_fact_period": "2025-09", - "resolved_fact_key": "ledger_aggregate_fact_v2_ca77a0f0a777ccba05e4bef9" + "resolved_value": 497.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_cf55cee33404d2283800b2b5" } ] }, - "scotgov.scottish_child_payment_spending": { + "dwp.benefit_cap.capped_households_1100_01_to_1200": { "status": "active", "candidates": [ { - "name": "scotgov.scottish_child_payment_spending", + "name": "dwp.benefit_cap.capped_households_1100_01_to_1200", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 471000000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_20b43b0f8f61e448f28895cf" + "resolved_value": 380.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_6f836a33391f4352151bd27f" } ] }, - "ons.savings_interest_income": { + "dwp.benefit_cap.capped_households_1200_01_to_1300": { "status": "active", "candidates": [ { - "name": "ons.savings_interest_income", + "name": "dwp.benefit_cap.capped_households_1200_01_to_1300", "status": "active", - "matched_fact_count_overall": 8, - "matched_fact_count_at_or_before_period": 8, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 95503000000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_8de1806d1330bcb80a1f4988" + "resolved_value": 239.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_ad08714cf39be9ccf0450cf2" } ] }, - "ons.public_sector_employment": { + "dwp.benefit_cap.capped_households_1300_01_and_above": { "status": "active", "candidates": [ { - "name": "ons.public_sector_employment", + "name": "dwp.benefit_cap.capped_households_1300_01_and_above", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 6146000.0, - "resolved_fact_period": "2024-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_ff79b4e2301f564ec4203235" + "resolved_value": 627.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_a3fee6cdec1b46a15a3b1434" } ] }, - "ons.land.land_value": { + "hmrc.cgt.taxpayers_by_age_band": { "status": "active", "candidates": [ { - "name": "ons.land.land_value", + "name": "hmrc.cgt.taxpayers_by_age_band.age_0_to_15", + "status": "signed_excluded", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "signed_row": { + "dimension": "age_band", + "value": "age_0_to_15" + }, + "signed_rationale": "HMRC Table 6's 15-and-below row (1,000 taxpayers, GBP 54m of gains, GBP 9m of tax in 2024-25) has no support: the CGT incidence clone and the size-band donors place gains on the oldest adult of a household, so the frame carries no gainer under 16 and the row would always measure zero. Signed out of the age-band fan-out; the eight adult bands stay bound." + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_16_to_24", "status": "active", - "matched_fact_count_overall": 30, - "matched_fact_count_at_or_before_period": 30, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_8c3d294de4cbdbe292815164" + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_25_to_34", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 27000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_cc8ef619f52f7f44a885ce52" + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_35_to_44", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 65000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_8554e7f842699a5f49816a0d" + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_45_to_54", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 98000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_794376b60fba0684412fdff8" + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_55_to_64", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 144000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_0d6b6c36290ab598f74f6669" + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_65_to_74", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 125000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_a725972fe4ee87a3bddee1cf" + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_75_to_84", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 68000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_1e4899d950c2b2be8ae21459" + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_85_plus", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 7117771000000.0, + "resolved_value": 19000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_4daf8d1b8830f72bba924d56" + "resolved_fact_key": "ledger_aggregate_fact_v2_7c419e2a82d25fae0127fd1d" } ] }, - "ons.land.household_land_value": { + "hmrc.cgt.gains_by_age_band": { "status": "active", "candidates": [ { - "name": "ons.land.household_land_value", + "name": "hmrc.cgt.gains_by_age_band.age_0_to_15", + "status": "signed_excluded", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "signed_row": { + "dimension": "age_band", + "value": "age_0_to_15" + }, + "signed_rationale": "HMRC Table 6's 15-and-below row (1,000 taxpayers, GBP 54m of gains, GBP 9m of tax in 2024-25) has no support: the CGT incidence clone and the size-band donors place gains on the oldest adult of a household, so the frame carries no gainer under 16 and the row would always measure zero. Signed out of the age-band fan-out; the eight adult bands stay bound." + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_16_to_24", "status": "active", - "matched_fact_count_overall": 30, - "matched_fact_count_at_or_before_period": 30, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4559831000000.0, + "resolved_value": 319000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_0e5f9867ab377dffd8a8941f" - } - ] - }, - "ons.land.corporate_land_value": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_af584dedce4184d834502e56" + }, { - "name": "ons.land.corporate_land_value", + "name": "hmrc.cgt.gains_by_age_band.age_25_to_34", "status": "active", - "matched_fact_count_overall": 30, - "matched_fact_count_at_or_before_period": 30, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 2103053000000.0, + "resolved_value": 2499000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ab561a17be0af52de30cca88" - } - ] - }, - "slc.repayments.devolved_total": { - "status": "no_fact_at_or_before_period", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_40c8b42d3904c8eb44297559" + }, { - "name": "slc.repayments.devolved_total", - "status": "no_fact_at_or_before_period", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "error": "ledger_reference_compile_status_no_fact_at_or_before_period" - } - ] - }, - "slc.repayments.england_total_higher_education": { - "status": "active", - "candidates": [ + "name": "hmrc.cgt.gains_by_age_band.age_35_to_44", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 11775000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_375b4cb880dcb4caacc5f003" + }, { - "name": "slc.repayments.england_total_higher_education", + "name": "hmrc.cgt.gains_by_age_band.age_45_to_54", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 5018231834.949999, + "resolved_value": 28422000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_b947d1f3c3659d252194c102" - } - ] - }, - "slc.repayments.england_plan_1": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_567f8babf11f6356f72398de" + }, { - "name": "slc.repayments.england_plan_1", + "name": "hmrc.cgt.gains_by_age_band.age_55_to_64", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1852699178.55, + "resolved_value": 38118000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_1d9680e6eaf243227fed5ef2" - } - ] - }, - "slc.repayments.england_plan_2": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_38da5aa08efc20c32951a860" + }, { - "name": "slc.repayments.england_plan_2", + "name": "hmrc.cgt.gains_by_age_band.age_65_to_74", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 2778253361.64, + "resolved_value": 24260000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_882329821c90dc683aa778d8" - } - ] - }, - "slc.repayments.england_postgraduate": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_69e2dec98e4cdbe34c3a0572" + }, { - "name": "slc.repayments.england_postgraduate", + "name": "hmrc.cgt.gains_by_age_band.age_75_to_84", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 346409713.95000005, + "resolved_value": 11736000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ac1b07c69f1e1baa2a0fb787" - } - ] - }, - "slc.repayments.england_plan_5": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_9d0fb4e1a0c63f6d06b73e61" + }, { - "name": "slc.repayments.england_plan_5", + "name": "hmrc.cgt.gains_by_age_band.age_85_plus", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 40869580.81, + "resolved_value": 2076000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_496af6b8fe31c71c43f1d292" + "resolved_fact_key": "ledger_aggregate_fact_v2_ca2b09a93c8a40ea4766b341" } ] }, - "slc.borrowers.plan_2_above_threshold": { + "hmrc.cgt.tax_by_age_band": { "status": "active", "candidates": [ { - "name": "slc.borrowers.plan_2_above_threshold", + "name": "hmrc.cgt.tax_by_age_band.age_0_to_15", + "status": "signed_excluded", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "signed_row": { + "dimension": "age_band", + "value": "age_0_to_15" + }, + "signed_rationale": "HMRC Table 6's 15-and-below row (1,000 taxpayers, GBP 54m of gains, GBP 9m of tax in 2024-25) has no support: the CGT incidence clone and the size-band donors place gains on the oldest adult of a household, so the frame carries no gainer under 16 and the row would always measure zero. Signed out of the age-band fan-out; the eight adult bands stay bound." + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_16_to_24", "status": "active", - "matched_fact_count_overall": 6, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4460000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_02288c19caeae900fdaf1e0d" - } - ] - }, - "slc.borrowers.plan_2_liable": { - "status": "active", - "candidates": [ + "resolved_value": 59000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_5e45e49cdf5771a4f3dbc0c6" + }, { - "name": "slc.borrowers.plan_2_liable", + "name": "hmrc.cgt.tax_by_age_band.age_25_to_34", "status": "active", - "matched_fact_count_overall": 6, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 9710000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_37387933e73bcc8c1e04cf78" - } - ] - }, - "slc.borrowers.plan_5_above_threshold": { - "status": "active", - "candidates": [ + "resolved_value": 456000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_4f0a20f8646020c518ec1a6c" + }, { - "name": "slc.borrowers.plan_5_above_threshold", + "name": "hmrc.cgt.tax_by_age_band.age_35_to_44", "status": "active", - "matched_fact_count_overall": 6, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 35000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_dd16b085f81ef7708a00511e" - } - ] - }, - "slc.borrowers.plan_5_liable": { - "status": "active", - "candidates": [ + "resolved_value": 2246000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_041101c10e8ee3a674596ab2" + }, { - "name": "slc.borrowers.plan_5_liable", + "name": "hmrc.cgt.tax_by_age_band.age_45_to_54", "status": "active", - "matched_fact_count_overall": 6, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 230000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_73ff136d820950ea404ddb6b" - } - ] - }, - "slc.support.maintenance_loan_recipients": { - "status": "active", - "candidates": [ + "resolved_value": 5522000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_c678a6f27d3dc149131419ee" + }, { - "name": "slc.support.maintenance_loan_recipients", + "name": "hmrc.cgt.tax_by_age_band.age_55_to_64", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1159761.0, + "resolved_value": 7152000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_f03bd7a10d0eee9917a3a199" - } - ] - }, - "slc.support.maintenance_loan_spend": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_76990ed6855fce16817d5289" + }, { - "name": "slc.support.maintenance_loan_spend", + "name": "hmrc.cgt.tax_by_age_band.age_65_to_74", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 8591659718.080004, + "resolved_value": 4409000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_2900e25d7ee90f79fb3b87b9" - } - ] - }, - "slc.support.parents_learning_allowance_recipients": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_3d4b0b5873bbe5bce9c14381" + }, { - "name": "slc.support.parents_learning_allowance_recipients", + "name": "hmrc.cgt.tax_by_age_band.age_75_to_84", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 99645.0, + "resolved_value": 2260000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d5df1c69846ab2fd3d0e50e1" - } - ] - }, - "slc.support.parents_learning_allowance_spend": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_9c1150dfbd7f4f3b6235050b" + }, { - "name": "slc.support.parents_learning_allowance_spend", + "name": "hmrc.cgt.tax_by_age_band.age_85_plus", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 181421659.32, + "resolved_value": 390000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_72028ce00b9569deec79d6e6" + "resolved_fact_key": "ledger_aggregate_fact_v2_e60df0c2438533341e2f4b08" } ] }, - "slc.support.adult_dependants_grant_recipients": { + "hmrc.cgt.taxpayers_by_region": { "status": "active", "candidates": [ { - "name": "slc.support.adult_dependants_grant_recipients", + "name": "hmrc.cgt.taxpayers_by_region@E12000001", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000001", + "resolved_period": 2025, + "resolved_value": 11321.91780821918, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_06f4adc777a4a3036026872f" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000002", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000002", + "resolved_period": 2025, + "resolved_value": 41513.69863013699, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_9c0d0cc201d3d0f86df9f485" + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000003", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000003", "resolved_period": 2025, - "resolved_value": 18611.0, + "resolved_value": 32078.767123287675, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_adc83b5d137ecb48fed77064" - } - ] - }, - "slc.support.adult_dependants_grant_spend": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_abfee7a635221f3a6573857f" + }, { - "name": "slc.support.adult_dependants_grant_spend", + "name": "hmrc.cgt.taxpayers_by_region@E12000004", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 55364916.81, + "resolved_value": 31135.273972602743, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_5d42660596c9088248e41e90" - } - ] - }, - "dwp.uc.households": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_d8b059af35df8fc34df0ebfa" + }, { - "name": "dwp.uc.households", + "name": "hmrc.cgt.taxpayers_by_region@E12000005", "status": "active", - "matched_fact_count_overall": 120, - "matched_fact_count_at_or_before_period": 120, - "matched_fact_count_in_source_window": 120, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 6197311.0, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_71c060f3f2a732e2f836a5d8" - } - ] - }, - "hmrc.tfc.government_top_up": { - "status": "active", - "candidates": [ + "resolved_value": 33022.260273972606, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d003284169d6847765c66221" + }, { - "name": "hmrc.tfc.government_top_up", + "name": "hmrc.cgt.taxpayers_by_region@E12000006", "status": "active", - "matched_fact_count_overall": 9, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 599800000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_988715985f9e98bbb332e83d" - } - ] - }, - "hmrc.tfc.children_with_used_accounts": { - "status": "active", - "candidates": [ + "resolved_value": 58496.57534246576, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_a48acd5e86822a82360de3c3" + }, { - "name": "hmrc.tfc.children_with_used_accounts", + "name": "hmrc.cgt.taxpayers_by_region@E12000007", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 1151515.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_7aa1c663447037b35ea1c999" - } - ] - }, - "dfe.funded_childcare.working_parent_children_2_to_4": { - "status": "active", - "candidates": [ + "resolved_value": 106614.72602739726, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_7bde136c5103f6b31dc478ef" + }, { - "name": "dfe.funded_childcare.working_parent_children_2_to_4", + "name": "hmrc.cgt.taxpayers_by_region@E12000008", "status": "active", - "matched_fact_count_overall": 11, - "matched_fact_count_at_or_before_period": 9, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 621482.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_a57a0c03ac43b62dde04fabd" - } - ] - }, - "dfe.funded_childcare.early_learning_2_year_olds": { - "status": "active", - "candidates": [ + "resolved_value": 114162.67123287672, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_228fb212eb226981e6213fb1" + }, { - "name": "dfe.funded_childcare.early_learning_2_year_olds", + "name": "hmrc.cgt.taxpayers_by_region@E12000009", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 11, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 95031.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_a2b30af28303935159ba0edc" - } - ] - }, - "dfe.funded_childcare.universal_only_children": { - "status": "active", - "candidates": [ + "resolved_value": 60383.56164383562, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_af8dd206a47ffbc3651ece3b" + }, { - "name": "dfe.funded_childcare.universal_only_children", + "name": "hmrc.cgt.taxpayers_by_region@W92000004", "status": "active", - "matched_fact_count_overall": 770, - "matched_fact_count_at_or_before_period": 686, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "country", + "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 396965.0, - "resolved_fact_period": "2025-01", - "resolved_fact_key": "ledger_aggregate_fact_v2_471573def13ebdc67ff1f40a" - } - ] - }, - "dft.bus_fare_receipts.england": { - "status": "active", - "candidates": [ + "resolved_value": 16982.87671232877, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_c3fb868cb38397d0420cd136" + }, { - "name": "dft.bus_fare_receipts.england", + "name": "hmrc.cgt.taxpayers_by_region@S92000003", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "country", + "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 3612036036.2194014, + "resolved_value": 34909.24657534247, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_2ece7c3d283b6de43b30389f", - "uprating": { - "index": "dft.local_bus_fares_index", - "factor": "1.05695792880259", - "value_before_uprating": "3417388656.43538" - } - } - ] - }, - "dft.bus_net_support.england": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_e3b5a134b920d7bcf071dc5c" + }, { - "name": "dft.bus_net_support.england", + "name": "hmrc.cgt.taxpayers_by_region@N92000002", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "country", + "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 3024904320.8399997, + "resolved_value": 9434.931506849316, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_a12dfcdc0662c8a5e48bf003" + "resolved_fact_key": "ledger_aggregate_fact_v2_2779d0ba66235d3ec59280b8" } ] }, - "dft.bus_fare_receipts.london": { + "hmrc.cgt.gains_by_region": { "status": "active", "candidates": [ { - "name": "dft.bus_fare_receipts.london", + "name": "hmrc.cgt.gains_by_region@E12000001", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000001", "resolved_period": 2025, - "resolved_value": 1347434943.01459, + "resolved_value": 1497797150.3974364, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_33611c64d2048fe660501802", - "uprating": { - "index": "dft.local_bus_fares_index", - "factor": "1", - "value_before_uprating": "1347434943.01459" - } - } - ] - }, - "dft.bus_net_support.london": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_c56796163e95a924ef066aeb" + }, { - "name": "dft.bus_net_support.london", + "name": "hmrc.cgt.gains_by_region@E12000002", "status": "active", - "matched_fact_count_overall": 3, - "matched_fact_count_at_or_before_period": 3, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000002", "resolved_period": 2025, - "resolved_value": 1130214000.0, + "resolved_value": 8790074083.38308, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d8e40cee2fc723b719ff4680" - } - ] - }, - "dft.bus_fare_receipts.england_outside_london": { - "status": "signed_excluded", - "candidates": [ - { - "name": "dft.bus_fare_receipts.england_outside_london", - "status": "signed_excluded", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "signed_rationale": "England outside London is England minus London: the England row and the London row (pinned at region E12000007) are both bound, so this publisher partition member is derived rather than pinned; Chronicle stamps it at statistical_scope and test_uk_bus_targets asserts the partition reconciles to England within GBP 1,000." - } - ] - }, - "dft.bus_net_support.england_outside_london": { - "status": "signed_excluded", - "candidates": [ - { - "name": "dft.bus_net_support.england_outside_london", - "status": "signed_excluded", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "signed_rationale": "England outside London is England minus London: the England row and the London row (pinned at region E12000007) are both bound, so this publisher partition member is derived rather than pinned; Chronicle stamps it at statistical_scope and test_uk_bus_targets asserts the partition reconciles to England within GBP 1,000." - } - ] - }, - "dft.bus_fare_receipts.uk": { - "status": "signed_excluded", - "candidates": [ - { - "name": "dft.bus_fare_receipts.uk", - "status": "signed_excluded", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "signed_rationale": "BUS05i publishes no UK total and Microcosm declares no method to construct one." - } - ] - }, - "dft.bus_net_support.uk": { - "status": "signed_excluded", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_07d5a851c664d71dad2233c6" + }, { - "name": "dft.bus_net_support.uk", - "status": "signed_excluded", - "matched_fact_count_overall": 0, - "matched_fact_count_at_or_before_period": 0, - "signed_rationale": "BUS05i publishes no UK total and no England-to-UK uplift is declared. Net support binds instead as four country legs whose scopes differ: DfT BUS05bi net support (England, operators' view), Scottish Transport Statistics all government support (Scotland), StatsWales revenue outturn gross expenditure on concessionary fares and support to operators through local authorities only (Wales: no operator-side series and no Welsh Government grants outside the outturn), and the NITHC accounts' Public Service Obligation plus concessionary compensation as one bus-plus-rail cell excluding GBP 53.2m of other revenue funding (Northern Ireland). The legs are bound on their own terms; they are not a UK total under another name." - } - ] - }, - "obr.fuel_duties_cars": { - "status": "active", - "candidates": [ + "name": "hmrc.cgt.gains_by_region@E12000003", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000003", + "resolved_period": 2025, + "resolved_value": 6970985861.949795, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_6b4137649b34773c10d9731d" + }, { - "name": "obr.fuel_duties_cars", + "name": "hmrc.cgt.gains_by_region@E12000004", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000004", "resolved_period": 2025, - "resolved_value": 14400000000.0, + "resolved_value": 6299365751.358824, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_de6554fe8ab7b481035a432a" - } - ] - }, - "orr.rail_government_support": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_61b52be8ce7d4fc692817ba9" + }, { - "name": "orr.rail_government_support", + "name": "hmrc.cgt.gains_by_region@E12000005", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000005", "resolved_period": 2025, - "resolved_value": 21621100549.34064, + "resolved_value": 5890960774.765152, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_b16b9b3f2329455f907f9ccc" - } - ] - }, - "ons.household_energy_expenditure": { - "status": "signed_excluded", - "candidates": [ - { - "name": "ons.household_energy_expenditure", - "status": "signed_excluded", - "matched_fact_count_overall": 6, - "matched_fact_count_at_or_before_period": 6, - "signed_rationale": "ONS Consumer Trends COICOP 04.5 (electricity, gas and other fuels) carries liquid and solid fuels the frame does not model; chronicle #271 (chronicle#270) published the 04.5.1 electricity and 04.5.2 gas sub-classes, which ons.household_electricity_expenditure and ons.household_gas_expenditure bind per fuel on the frame's own columns. The total row is retained in the contract for registry parity and signed out here (microcosm#890 F1)." - } - ] - }, - "ons.household_electricity_expenditure": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_34a10615174b9297afe221b7" + }, { - "name": "ons.household_electricity_expenditure", + "name": "hmrc.cgt.gains_by_region@E12000006", "status": "active", - "matched_fact_count_overall": 6, - "matched_fact_count_at_or_before_period": 6, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000006", "resolved_period": 2025, - "resolved_value": 26522000000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_69cd660b943ae8f21761f76a" - } - ] - }, - "ons.household_gas_expenditure": { - "status": "active", - "candidates": [ + "resolved_value": 11545870966.728456, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f15225d0bcd17c6de4da7274" + }, { - "name": "ons.household_gas_expenditure", + "name": "hmrc.cgt.gains_by_region@E12000007", "status": "active", - "matched_fact_count_overall": 6, - "matched_fact_count_at_or_before_period": 6, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000007", "resolved_period": 2025, - "resolved_value": 15339000000.0, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_b56be49c552300f6c02fc559" - } - ] - }, - "scotgov.bus.passenger_revenue": { - "status": "active", - "candidates": [ + "resolved_value": 32519714615.602127, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_1c9e621227b5e9e0de086a29" + }, { - "name": "scotgov.bus.passenger_revenue", + "name": "hmrc.cgt.gains_by_region@E12000008", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000008", "resolved_period": 2025, - "resolved_value": 391000000.0, + "resolved_value": 25606804690.69088, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_c4269bb83534f1e46f5801c1" - } - ] - }, - "scotgov.bus.government_support": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_e292074b43a3aaf4dbd7700e" + }, { - "name": "scotgov.bus.government_support", + "name": "hmrc.cgt.gains_by_region@E12000009", "status": "active", - "matched_fact_count_overall": 2, - "matched_fact_count_at_or_before_period": 2, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "region", + "geography_id": "E12000009", "resolved_period": 2025, - "resolved_value": 499000000.0, + "resolved_value": 10341263627.509504, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_ceb60fd41d0f5587be94c234" - } - ] - }, - "welshgov.bus.public_support": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_c7cfe6f18b190daed3153cfc" + }, { - "name": "welshgov.bus.public_support", + "name": "hmrc.cgt.gains_by_region@W92000004", "status": "active", - "matched_fact_count_overall": 6, - "matched_fact_count_at_or_before_period": 6, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "country", + "geography_id": "W92000004", "resolved_period": 2025, - "resolved_value": 131489970.0, + "resolved_value": 2358632410.6946497, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_a10fcfec7cb458fa0c8c7f10" - } - ] - }, - "dfi_ni.bus.passenger_receipts": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_6cf6ec1d6cf7a4545c25ccb3" + }, { - "name": "dfi_ni.bus.passenger_receipts", + "name": "hmrc.cgt.gains_by_region@S92000003", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "country", + "geography_id": "S92000003", "resolved_period": 2025, - "resolved_value": 150082817.48999995, + "resolved_value": 5680201325.83493, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_96f72989614e0c5faaeeabbb" - } - ] - }, - "nithc.public_transport_support": { - "status": "active", - "candidates": [ + "resolved_fact_key": "ledger_aggregate_fact_v2_4af3f233994240b66f222933" + }, { - "name": "nithc.public_transport_support", + "name": "hmrc.cgt.gains_by_region@N92000002", "status": "active", - "matched_fact_count_overall": 4, - "matched_fact_count_at_or_before_period": 4, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "geography_level": "country", + "geography_id": "N92000002", "resolved_period": 2025, - "resolved_value": 111700000.0, + "resolved_value": 1757265449.747086, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_be8eb7011b6f65fa65d52fcb" + "resolved_fact_key": "ledger_aggregate_fact_v2_8b23977ac0a2db5257dc6bfe" } ] }, - "dwp.uc.households_lcwra_element": { + "hmrc.cgt.taxpayers_by_gain_band": { "status": "active", "candidates": [ { - "name": "dwp.uc.households_lcwra_element", + "name": "hmrc/cgt_taxpayers_band_0", + "status": "signed_excluded", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "signed_row": { + "dimension": "cgt_gain_band", + "value": "gain_0_to_2999" + }, + "signed_rationale": "HMRC Table 2.1a's 0-2,999 row (3,000 taxpayers with a liability on gains at or below the 2024-25 annual exempt amount of GBP 3,000, from attributed gains and prior-year adjustments) lies below the AEA gate the taxpayer proxy measures, so the model cannot place anyone in it. Signed out; the twelve bands from 3,000 stay bound." + }, + { + "name": "hmrc/cgt_taxpayers_band_1000000", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 2272425.1666666665, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_f59149c4c514e1acffb728a8" - } - ] - }, - "dwp.uc.households_carer_element": { - "status": "active", - "candidates": [ + "resolved_value": 9000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_6a760ffb56140426b69a5269" + }, { - "name": "dwp.uc.households_carer_element", + "name": "hmrc/cgt_taxpayers_band_100000", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1078514.5, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_d56ddfa58d7ebb3ff0178b0a" - } - ] - }, - "dwp.uc.households_housing_element": { - "status": "active", - "candidates": [ + "resolved_value": 61000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_9abad7ce7e36bcbf61e93db0" + }, { - "name": "dwp.uc.households_housing_element", + "name": "hmrc/cgt_taxpayers_band_10000", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4037650.3333333335, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_04b7ec6d195e6682f0421672" - } - ] - }, - "dwp.uc.households_housing_element_social_rented": { - "status": "active", - "candidates": [ + "resolved_value": 26000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_2393740ba1c11b1a31e54e75" + }, { - "name": "dwp.uc.households_housing_element_social_rented", + "name": "hmrc/cgt_taxpayers_band_12300", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 2354587.5833333335, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_109598f6aaa42fe1387d30d1" - } - ] - }, - "dwp.uc.households_housing_element_private_rented": { - "status": "active", - "candidates": [ + "resolved_value": 97000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_c5a351873a7b2c4cc4150711" + }, { - "name": "dwp.uc.households_housing_element_private_rented", + "name": "hmrc/cgt_taxpayers_band_2000000", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1570545.4166666667, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_7a31b88dfcd4b3d0c758a1c3" - } - ] - }, - "dwp.uc.households_childcare_element": { - "status": "active", - "candidates": [ + "resolved_value": 5000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_7a32f131c687a8bed9ec747a" + }, { - "name": "dwp.uc.households_childcare_element", + "name": "hmrc/cgt_taxpayers_band_250000", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 178666.66666666666, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_0c1aa0cc56d86c50d6b2560a" - } - ] - }, - "dwp.uc.households_with_deduction": { - "status": "active", - "candidates": [ + "resolved_value": 25000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_9df6b0435f02114bbff8b83e" + }, + { + "name": "hmrc/cgt_taxpayers_band_25000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 98000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_dbb814e164ce932da9f110e3" + }, { - "name": "dwp.uc.households_with_deduction", + "name": "hmrc/cgt_taxpayers_band_3000", "status": "active", - "matched_fact_count_overall": 10, - "matched_fact_count_at_or_before_period": 10, - "matched_fact_count_in_source_window": 10, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3130000.0, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_f7bfdb41a462c417535602d2" - } - ] - }, - "obr.universal_credit": { - "status": "active", - "candidates": [ + "resolved_value": 73000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_445cdec889b5a04a38bfc529" + }, { - "name": "obr.universal_credit", + "name": "hmrc/cgt_taxpayers_band_5000000", "status": "active", - "matched_fact_count_overall": 14, - "matched_fact_count_at_or_before_period": 4, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 79286349139.54411, - "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_e680fe36115d1372d12072e1" - } - ] - }, - "dwp.hb.households": { - "status": "active", - "candidates": [ + "resolved_value": 3000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_185d64390d180e168f174c93" + }, { - "name": "dwp.hb.households", + "name": "hmrc/cgt_taxpayers_band_500000", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1685702.9166666667, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_f2ecf4d38ef4dfc796336538" - } - ] - }, - "dwp.hb.households_social_rented": { - "status": "active", - "candidates": [ + "resolved_value": 16000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ff1311e347cb11ab13a55da8" + }, { - "name": "dwp.hb.households_social_rented", + "name": "hmrc/cgt_taxpayers_band_50000", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1381089.75, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_40b45c74a40b8d085a8c28e2" - } - ] - }, - "dwp.hb.households_private_rented": { - "status": "active", - "candidates": [ + "resolved_value": 78000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_16303d73f7eadbadac68edc5" + }, { - "name": "dwp.hb.households_private_rented", + "name": "hmrc/cgt_taxpayers_band_6000", "status": "active", - "matched_fact_count_overall": 12, - "matched_fact_count_at_or_before_period": 12, - "matched_fact_count_in_source_window": 12, + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 304422.6666666667, - "resolved_fact_period": "2025-12", - "resolved_fact_key": "ledger_aggregate_fact_v2_02281858b7b0d71477e429f3" + "resolved_value": 57000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_2f1e03f344a1e1de11bf0fe3" } ] }, - "dwp.benefit_cap.capped_households_up_to_100": { + "hmrc.cgt.gains_by_gain_band": { "status": "active", "candidates": [ { - "name": "dwp.benefit_cap.capped_households_up_to_100", + "name": "hmrc/capital_gains_band_0", + "status": "signed_excluded", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "signed_row": { + "dimension": "cgt_gain_band", + "value": "gain_0_to_2999" + }, + "signed_rationale": "HMRC Table 2.1a's 0-2,999 row (3,000 taxpayers with a liability on gains at or below the 2024-25 annual exempt amount of GBP 3,000, from attributed gains and prior-year adjustments) lies below the AEA gate the taxpayer proxy measures, so the model cannot place anyone in it. Signed out; the twelve bands from 3,000 stay bound." + }, + { + "name": "hmrc/capital_gains_band_1000000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 38402.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_220b82ab05bec494e6dc9fe9" - } - ] - }, - "dwp.benefit_cap.capped_households_100_01_to_200": { - "status": "active", - "candidates": [ + "resolved_value": 12806000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d4ad617897f228660a6a6be3" + }, { - "name": "dwp.benefit_cap.capped_households_100_01_to_200", + "name": "hmrc/capital_gains_band_100000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 24274.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_4a9e2cc181aee62e1eccd188" - } - ] - }, - "dwp.benefit_cap.capped_households_200_01_to_300": { - "status": "active", - "candidates": [ + "resolved_value": 9487000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ed181e27011def0336c6cd99" + }, { - "name": "dwp.benefit_cap.capped_households_200_01_to_300", + "name": "hmrc/capital_gains_band_10000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 16240.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_5ae8289242eabcffab23f32f" - } - ] - }, - "dwp.benefit_cap.capped_households_300_01_to_400": { - "status": "active", - "candidates": [ + "resolved_value": 289000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_0ce43b4d53bb602f1b9fb49a" + }, { - "name": "dwp.benefit_cap.capped_households_300_01_to_400", + "name": "hmrc/capital_gains_band_12300", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 10562.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_a503d4e938aaf386720b96c4" - } - ] - }, - "dwp.benefit_cap.capped_households_400_01_to_500": { - "status": "active", - "candidates": [ + "resolved_value": 1747000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_52d8b43cd07113d29860cd06" + }, { - "name": "dwp.benefit_cap.capped_households_400_01_to_500", + "name": "hmrc/capital_gains_band_2000000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 7813.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_df764409769b2078c69ff113" - } - ] - }, - "dwp.benefit_cap.capped_households_500_01_to_600": { - "status": "active", - "candidates": [ + "resolved_value": 16477000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_36a58e75b04a937aa837b211" + }, { - "name": "dwp.benefit_cap.capped_households_500_01_to_600", + "name": "hmrc/capital_gains_band_250000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 4431.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_3d0e936b240ba62209777ee3" - } - ] - }, - "dwp.benefit_cap.capped_households_600_01_to_700": { - "status": "active", - "candidates": [ + "resolved_value": 8820000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_e79c0dd87ea41c5469aa88af" + }, { - "name": "dwp.benefit_cap.capped_households_600_01_to_700", + "name": "hmrc/capital_gains_band_25000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 3116.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_1d68398dd88958a8700dcfac" - } - ] - }, - "dwp.benefit_cap.capped_households_700_01_to_800": { - "status": "active", - "candidates": [ + "resolved_value": 3516000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_12a05bb18f0245343b24c882" + }, { - "name": "dwp.benefit_cap.capped_households_700_01_to_800", + "name": "hmrc/capital_gains_band_3000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1902.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_999288b0fa67d7f657810a11" - } - ] - }, - "dwp.benefit_cap.capped_households_800_01_to_900": { - "status": "active", - "candidates": [ + "resolved_value": 311000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_68d13fca859e018be0915149" + }, { - "name": "dwp.benefit_cap.capped_households_800_01_to_900", + "name": "hmrc/capital_gains_band_5000000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 1328.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_b7a2d0cec131abfd0cb81ba0" - } - ] - }, - "dwp.benefit_cap.capped_households_900_01_to_1000": { - "status": "active", - "candidates": [ + "resolved_value": 48474000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_e86658beb663c322dfe3f311" + }, { - "name": "dwp.benefit_cap.capped_households_900_01_to_1000", + "name": "hmrc/capital_gains_band_500000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 824.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_80c8fa82f3e07357e677ae93" - } - ] - }, - "dwp.benefit_cap.capped_households_1000_01_to_1100": { - "status": "active", - "candidates": [ + "resolved_value": 11372000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_bcee60127caf8ba271530f73" + }, { - "name": "dwp.benefit_cap.capped_households_1000_01_to_1100", + "name": "hmrc/capital_gains_band_50000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 497.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_cf55cee33404d2283800b2b5" - } - ] - }, - "dwp.benefit_cap.capped_households_1100_01_to_1200": { - "status": "active", - "candidates": [ + "resolved_value": 5510000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_6854e6a3ad1abc041042f35d" + }, { - "name": "dwp.benefit_cap.capped_households_1100_01_to_1200", + "name": "hmrc/capital_gains_band_6000", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 380.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_6f836a33391f4352151bd27f" + "resolved_value": 448000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f808792afed121cadff6f396" } ] }, - "dwp.benefit_cap.capped_households_1200_01_to_1300": { + "hmrc.cgt.residential_property_taxpayers": { "status": "active", "candidates": [ { - "name": "dwp.benefit_cap.capped_households_1200_01_to_1300", + "name": "hmrc.cgt.residential_property_taxpayers.ty2024", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 239.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_ad08714cf39be9ccf0450cf2" + "resolved_value": 202630.0578034682, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_a26f1261bd153727b83045de" } ] }, - "dwp.benefit_cap.capped_households_1300_01_and_above": { + "hmrc.cgt.residential_property_gains": { "status": "active", "candidates": [ { - "name": "dwp.benefit_cap.capped_households_1300_01_and_above", + "name": "hmrc.cgt.residential_property_gains.ty2024", "status": "active", "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 627.0, - "resolved_fact_period": "2025-11", - "resolved_fact_key": "ledger_aggregate_fact_v2_a3fee6cdec1b46a15a3b1434" + "resolved_value": 12242481474.688189, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_1f8003c937764e4184da3f24" } ] } @@ -13122,6 +14512,12 @@ "active_reference_count": 100, "signed_rationale": "MHCLG council taxbase (England), Welsh Government CT1 (Wales) and Scottish Government CTAXBASE (Scotland) council-tax stock bands are declared as explicit target rows per band plus total (England and Scotland A-H, Wales A-I). The Welsh and Scottish rows resolve with their country-level geography and band pin; the English rows fan out over the nine English regions of the region tier (microcosm#905), each cell composed as the linear combination of the billing-authority facts the crosswalk places in that region (microcosm#929)." }, + { + "family": "hmrc_cgt", + "status": "active_with_row_level_signed_exclusions", + "active_reference_count": 74, + "signed_rationale": "The FY2024-25 individual CGT observations fan out three ways (microcosm#725, #467): Table 6 age bands as dimension rows (the 0-15 band and the all-ages total are signed out row by row), Table 5 country/region cells over the twelve-area region tier restated on the individuals basis by the Table 1 share through the scaled_by_ratio operation, and Table 2.1a size-of-gain bands under the incumbent banded names (the 0-2,999 band below the 2024 annual exempt amount is signed out). Chronicle's Table 2.1a package emits taxpayers and gains only, although the published sheet also carries an amounts-of-tax column, so liability binds nationally and by age band; a liability-by-size-of-gain family becomes possible once Chronicle emits that column." + }, { "family": "ons_population", "status": "active_region_tier_fanout", @@ -13141,6 +14537,41 @@ "target_id": "ons.population.scotland_households_3plus_children", "status": "signed_excluded", "signed_rationale": "Signed out pending a Scotland household-composition fact: the current selector reaches person-level ONS mid-year population age rows, not households with three or more children. microcosm#736 tracks the missing declaration." + }, + { + "family": "hmrc_cgt", + "target_id": "hmrc.cgt.gains_by_age_band", + "row": "hmrc.cgt.gains_by_age_band.age_0_to_15", + "status": "signed_excluded", + "signed_rationale": "HMRC Table 6's 15-and-below row (1,000 taxpayers, GBP 54m of gains, GBP 9m of tax in 2024-25) has no support: the CGT incidence clone and the size-band donors place gains on the oldest adult of a household, so the frame carries no gainer under 16 and the row would always measure zero. Signed out of the age-band fan-out; the eight adult bands stay bound." + }, + { + "family": "hmrc_cgt", + "target_id": "hmrc.cgt.gains_by_gain_band", + "row": "hmrc/capital_gains_band_0", + "status": "signed_excluded", + "signed_rationale": "HMRC Table 2.1a's 0-2,999 row (3,000 taxpayers with a liability on gains at or below the 2024-25 annual exempt amount of GBP 3,000, from attributed gains and prior-year adjustments) lies below the AEA gate the taxpayer proxy measures, so the model cannot place anyone in it. Signed out; the twelve bands from 3,000 stay bound." + }, + { + "family": "hmrc_cgt", + "target_id": "hmrc.cgt.tax_by_age_band", + "row": "hmrc.cgt.tax_by_age_band.age_0_to_15", + "status": "signed_excluded", + "signed_rationale": "HMRC Table 6's 15-and-below row (1,000 taxpayers, GBP 54m of gains, GBP 9m of tax in 2024-25) has no support: the CGT incidence clone and the size-band donors place gains on the oldest adult of a household, so the frame carries no gainer under 16 and the row would always measure zero. Signed out of the age-band fan-out; the eight adult bands stay bound." + }, + { + "family": "hmrc_cgt", + "target_id": "hmrc.cgt.taxpayers_by_age_band", + "row": "hmrc.cgt.taxpayers_by_age_band.age_0_to_15", + "status": "signed_excluded", + "signed_rationale": "HMRC Table 6's 15-and-below row (1,000 taxpayers, GBP 54m of gains, GBP 9m of tax in 2024-25) has no support: the CGT incidence clone and the size-band donors place gains on the oldest adult of a household, so the frame carries no gainer under 16 and the row would always measure zero. Signed out of the age-band fan-out; the eight adult bands stay bound." + }, + { + "family": "hmrc_cgt", + "target_id": "hmrc.cgt.taxpayers_by_gain_band", + "row": "hmrc/cgt_taxpayers_band_0", + "status": "signed_excluded", + "signed_rationale": "HMRC Table 2.1a's 0-2,999 row (3,000 taxpayers with a liability on gains at or below the 2024-25 annual exempt amount of GBP 3,000, from attributed gains and prior-year adjustments) lies below the AEA gate the taxpayer proxy measures, so the model cannot place anyone in it. Signed out; the twelve bands from 3,000 stay bound." } ], "multi_fact_rationales": [] diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_reference_signed_exclusions.json b/packages/microcosm-build/src/microcosm/build/uk/target_reference_signed_exclusions.json index 67089510ce..ed54ac6803 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_reference_signed_exclusions.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_reference_signed_exclusions.json @@ -64,6 +64,71 @@ "tracking": "microcosm#890", "approved_by": "juaristi22", "approved_on": "2026-09-16" + }, + { + "target_id": "hmrc.cgt.taxpayers_by_age_band", + "reason_id": "no_under_16_gainers_on_frame", + "rationale": "HMRC Table 6's 15-and-below row (1,000 taxpayers, GBP 54m of gains, GBP 9m of tax in 2024-25) has no support: the CGT incidence clone and the size-band donors place gains on the oldest adult of a household, so the frame carries no gainer under 16 and the row would always measure zero. Signed out of the age-band fan-out; the eight adult bands stay bound.", + "tracking": "microcosm#725", + "approved_by": "juaristi22", + "approved_on": "2026-09-16", + "adjudication": "https://github.com/PolicyEngine/microcosm/pull/939#issuecomment-5728012221", + "row": { + "dimension": "age_band", + "value": "age_0_to_15" + } + }, + { + "target_id": "hmrc.cgt.gains_by_age_band", + "reason_id": "no_under_16_gainers_on_frame", + "rationale": "HMRC Table 6's 15-and-below row (1,000 taxpayers, GBP 54m of gains, GBP 9m of tax in 2024-25) has no support: the CGT incidence clone and the size-band donors place gains on the oldest adult of a household, so the frame carries no gainer under 16 and the row would always measure zero. Signed out of the age-band fan-out; the eight adult bands stay bound.", + "tracking": "microcosm#725", + "approved_by": "juaristi22", + "approved_on": "2026-09-16", + "adjudication": "https://github.com/PolicyEngine/microcosm/pull/939#issuecomment-5728012221", + "row": { + "dimension": "age_band", + "value": "age_0_to_15" + } + }, + { + "target_id": "hmrc.cgt.tax_by_age_band", + "reason_id": "no_under_16_gainers_on_frame", + "rationale": "HMRC Table 6's 15-and-below row (1,000 taxpayers, GBP 54m of gains, GBP 9m of tax in 2024-25) has no support: the CGT incidence clone and the size-band donors place gains on the oldest adult of a household, so the frame carries no gainer under 16 and the row would always measure zero. Signed out of the age-band fan-out; the eight adult bands stay bound.", + "tracking": "microcosm#725", + "approved_by": "juaristi22", + "approved_on": "2026-09-16", + "adjudication": "https://github.com/PolicyEngine/microcosm/pull/939#issuecomment-5728012221", + "row": { + "dimension": "age_band", + "value": "age_0_to_15" + } + }, + { + "target_id": "hmrc.cgt.taxpayers_by_gain_band", + "reason_id": "below_annual_exempt_amount_2024", + "rationale": "HMRC Table 2.1a's 0-2,999 row (3,000 taxpayers with a liability on gains at or below the 2024-25 annual exempt amount of GBP 3,000, from attributed gains and prior-year adjustments) lies below the AEA gate the taxpayer proxy measures, so the model cannot place anyone in it. Signed out; the twelve bands from 3,000 stay bound.", + "tracking": "microcosm#467", + "approved_by": "juaristi22", + "approved_on": "2026-09-16", + "adjudication": "https://github.com/PolicyEngine/microcosm/pull/939#issuecomment-5728012221", + "row": { + "dimension": "cgt_gain_band", + "value": "gain_0_to_2999" + } + }, + { + "target_id": "hmrc.cgt.gains_by_gain_band", + "reason_id": "below_annual_exempt_amount_2024", + "rationale": "HMRC Table 2.1a's 0-2,999 row (3,000 taxpayers with a liability on gains at or below the 2024-25 annual exempt amount of GBP 3,000, from attributed gains and prior-year adjustments) lies below the AEA gate the taxpayer proxy measures, so the model cannot place anyone in it. Signed out; the twelve bands from 3,000 stay bound.", + "tracking": "microcosm#467", + "approved_by": "juaristi22", + "approved_on": "2026-09-16", + "adjudication": "https://github.com/PolicyEngine/microcosm/pull/939#issuecomment-5728012221", + "row": { + "dimension": "cgt_gain_band", + "value": "gain_0_to_2999" + } } ] } 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 cd1e48295d..acdf3ed3b6 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_references.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_references.json @@ -272,8 +272,17 @@ "dwp.uc.two_child_limit.households_affected": "dwp.universal_credit_two_child_limit", "dwp.uc.two_child_limit.households_claimant_pip": "dwp.universal_credit_two_child_limit", "dwp.uc.two_child_limit.households_disabled_child_element": "dwp.universal_credit_two_child_limit", + "hmrc.cgt.gains_by_age_band": "hmrc.capital_gains_tax", + "hmrc.cgt.gains_by_gain_band": "hmrc.capital_gains_tax", + "hmrc.cgt.gains_by_region": "hmrc.capital_gains_tax", "hmrc.cgt.gains_total": "hmrc.capital_gains_tax", "hmrc.cgt.liability_total": "hmrc.capital_gains_tax", + "hmrc.cgt.residential_property_gains": "hmrc.capital_gains_tax", + "hmrc.cgt.residential_property_taxpayers": "hmrc.capital_gains_tax", + "hmrc.cgt.tax_by_age_band": "hmrc.capital_gains_tax", + "hmrc.cgt.taxpayers_by_age_band": "hmrc.capital_gains_tax", + "hmrc.cgt.taxpayers_by_gain_band": "hmrc.capital_gains_tax", + "hmrc.cgt.taxpayers_by_region": "hmrc.capital_gains_tax", "hmrc.cgt.taxpayers_total": "hmrc.capital_gains_tax", "hmrc.salary_sacrifice.it_relief_additional_rate": "hmrc.salary_sacrifice_income_tax_relief", "hmrc.salary_sacrifice.it_relief_basic_rate": "hmrc.salary_sacrifice_income_tax_relief", @@ -506,8 +515,17 @@ "dwp.uc.two_child_limit.households_affected": "Households affected", "dwp.uc.two_child_limit.households_claimant_pip": "Households claimant Personal Independence Payment", "dwp.uc.two_child_limit.households_disabled_child_element": "Households disabled child element", + "hmrc.cgt.gains_by_age_band": "Capital Gains Tax gains by age band", + "hmrc.cgt.gains_by_gain_band": "Capital Gains Tax gains by size of gain", + "hmrc.cgt.gains_by_region": "Capital Gains Tax gains by region", "hmrc.cgt.gains_total": "Capital Gains Tax gains", "hmrc.cgt.liability_total": "Capital Gains Tax liability", + "hmrc.cgt.residential_property_gains": "Capital Gains Tax residential property gains", + "hmrc.cgt.residential_property_taxpayers": "Capital Gains Tax residential property taxpayers", + "hmrc.cgt.tax_by_age_band": "Capital Gains Tax liability by age band", + "hmrc.cgt.taxpayers_by_age_band": "Capital Gains Tax taxpayers by age band", + "hmrc.cgt.taxpayers_by_gain_band": "Capital Gains Tax taxpayers by size of gain", + "hmrc.cgt.taxpayers_by_region": "Capital Gains Tax taxpayers by region", "hmrc.cgt.taxpayers_total": "Capital Gains Tax taxpayers", "hmrc.salary_sacrifice.it_relief_additional_rate": "It relief additional rate", "hmrc.salary_sacrifice.it_relief_basic_rate": "It relief basic rate", @@ -682,7 +700,8 @@ "count_x_mean", "linear_combination", "monthly_window_average", - "monthly_window_sum_average" + "monthly_window_sum_average", + "scaled_by_ratio" ], "target_references": [ { @@ -24112,6 +24131,2852 @@ }, "uprating_from_period": "2025-11", "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_16_to_24", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_16_to_24" + } + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_age_band.age_16_to_24", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_25_to_34", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_25_to_34" + } + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_age_band.age_25_to_34", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_35_to_44", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_35_to_44" + } + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_age_band.age_35_to_44", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_45_to_54", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_45_to_54" + } + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_age_band.age_45_to_54", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_55_to_64", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_55_to_64" + } + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_age_band.age_55_to_64", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_65_to_74", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_65_to_74" + } + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_age_band.age_65_to_74", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_75_to_84", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_75_to_84" + } + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_age_band.age_75_to_84", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_age_band.age_85_plus", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_85_plus" + } + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_age_band.age_85_plus", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_16_to_24", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_16_to_24" + } + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_age_band.age_16_to_24", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_25_to_34", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_25_to_34" + } + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_age_band.age_25_to_34", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_35_to_44", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_35_to_44" + } + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_age_band.age_35_to_44", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_45_to_54", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_45_to_54" + } + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_age_band.age_45_to_54", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_55_to_64", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_55_to_64" + } + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_age_band.age_55_to_64", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_65_to_74", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_65_to_74" + } + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_age_band.age_65_to_74", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_75_to_84", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_75_to_84" + } + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_age_band.age_75_to_84", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_age_band.age_85_plus", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_85_plus" + } + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_age_band.age_85_plus", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_16_to_24", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_tax_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_16_to_24" + } + }, + "entity": "person", + "measure": "hmrc.cgt.tax_by_age_band.age_16_to_24", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.tax_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_liability_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_25_to_34", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_tax_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_25_to_34" + } + }, + "entity": "person", + "measure": "hmrc.cgt.tax_by_age_band.age_25_to_34", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.tax_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_liability_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_35_to_44", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_tax_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_35_to_44" + } + }, + "entity": "person", + "measure": "hmrc.cgt.tax_by_age_band.age_35_to_44", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.tax_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_liability_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_45_to_54", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_tax_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_45_to_54" + } + }, + "entity": "person", + "measure": "hmrc.cgt.tax_by_age_band.age_45_to_54", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.tax_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_liability_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_55_to_64", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_tax_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_55_to_64" + } + }, + "entity": "person", + "measure": "hmrc.cgt.tax_by_age_band.age_55_to_64", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.tax_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_liability_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_65_to_74", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_tax_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_65_to_74" + } + }, + "entity": "person", + "measure": "hmrc.cgt.tax_by_age_band.age_65_to_74", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.tax_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_liability_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_75_to_84", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_tax_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_75_to_84" + } + }, + "entity": "person", + "measure": "hmrc.cgt.tax_by_age_band.age_75_to_84", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.tax_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_liability_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.tax_by_age_band.age_85_plus", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_tax_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "age_band": "age_85_plus" + } + }, + "entity": "person", + "measure": "hmrc.cgt.tax_by_age_band.age_85_plus", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.tax_by_age_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_liability_by_age_band", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000001", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000001" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@E12000001", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000001", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"NORTH_EAST\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000002", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000002" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@E12000002", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000002", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"NORTH_WEST\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000003", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000003" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@E12000003", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000003", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"YORKSHIRE\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000004", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000004" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@E12000004", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000004", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"EAST_MIDLANDS\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000005", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000005" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@E12000005", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000005", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"WEST_MIDLANDS\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000006", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000006" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@E12000006", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000006", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"EAST_OF_ENGLAND\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000007", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000007" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@E12000007", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000007", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"LONDON\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000008", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000008" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@E12000008", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000008", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"SOUTH_EAST\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@E12000009", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000009" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@E12000009", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000009", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"SOUTH_WEST\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@W92000004", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "W92000004" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@W92000004", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "country", + "geography_id": "W92000004", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"WALES\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@S92000003", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "S92000003" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@S92000003", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "country", + "geography_id": "S92000003", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"SCOTLAND\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_by_region@N92000002", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "N92000002" + }, + "entity": "person", + "measure": "hmrc.cgt.taxpayers_by_region@N92000002", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "country", + "geography_id": "N92000002", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"NORTHERN_IRELAND\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000001", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000001" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@E12000001", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000001", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"NORTH_EAST\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000002", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000002" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@E12000002", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000002", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"NORTH_WEST\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000003", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000003" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@E12000003", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000003", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"YORKSHIRE\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000004", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000004" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@E12000004", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000004", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"EAST_MIDLANDS\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000005", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000005" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@E12000005", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000005", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"WEST_MIDLANDS\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000006", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000006" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@E12000006", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000006", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"EAST_OF_ENGLAND\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000007", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000007" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@E12000007", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000007", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"LONDON\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000008", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000008" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@E12000008", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000008", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"SOUTH_EAST\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@E12000009", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "region", + "geography_id": "E12000009" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@E12000009", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "region", + "geography_id": "E12000009", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"SOUTH_WEST\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@W92000004", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "W92000004" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@W92000004", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "country", + "geography_id": "W92000004", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"WALES\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@S92000003", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "S92000003" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@S92000003", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "country", + "geography_id": "S92000003", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"SCOTLAND\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_by_region@N92000002", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "N92000002" + }, + "entity": "person", + "measure": "hmrc.cgt.gains_by_region@N92000002", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_region", + "measure_kind": "prepared_column", + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation", + "geography_level": "country", + "geography_id": "N92000002", + "geography_predicate": "{\"entity\":\"household\",\"map_to\":\"person\",\"operator\":\"==\",\"reduce\":\"any\",\"value\":\"NORTHERN_IRELAND\",\"variable\":\"region\"}", + "cross_grain_grain": "region" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_1000000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_1000000_to_1999999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_1000000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_100000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_100000_to_249999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_100000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_10000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_10000_to_12299" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_10000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_12300", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_12300_to_24999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_12300", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_2000000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_2000000_to_4999999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_2000000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_250000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_250000_to_499999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_250000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_25000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_25000_to_49999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_25000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_3000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_3000_to_5999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_3000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_5000000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_5000000_plus" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_5000000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_500000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_500000_to_999999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_500000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_50000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_50000_to_99999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_50000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/cgt_taxpayers_band_6000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_6000_to_9999" + } + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers_band_6000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_1000000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_1000000_to_1999999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_1000000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_100000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_100000_to_249999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_100000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_10000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_10000_to_12299" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_10000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_12300", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_12300_to_24999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_12300", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_2000000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_2000000_to_4999999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_2000000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_250000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_250000_to_499999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_250000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_25000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_25000_to_49999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_25000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_3000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_3000_to_5999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_3000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_5000000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_5000000_plus" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_5000000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_500000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_500000_to_999999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_500000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_50000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_50000_to_99999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_50000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/capital_gains_band_6000", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "cgt_gain_band": "gain_6000_to_9999" + } + }, + "entity": "person", + "measure": "hmrc/capital_gains_band_6000", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_by_gain_band", + "measure_kind": "prepared_column", + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.residential_property_taxpayers.ty2024", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_concept": "hmrc.cgt_residential_property_taxpayers", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "entity_name": "tax_unit", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a26f1261bd153727b83045de", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "channel": "total" + } + }, + "entity": "person", + "measure": "hmrc.cgt.residential_property_taxpayers.ty2024", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.residential_property_taxpayers", + "measure_kind": "prepared_column", + "observation_basis": "uk_residents_reporting_residential_property_disposals_disposal_year_2024_all_channels_scaled_to_individuals_by_table8b_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_residential_property_taxpayers", + "groupby_dimension": "taxpayer_type", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:7ea881ca1e22de079bf8d892" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_residential_property_taxpayers", + "groupby_dimension": "taxpayer_type", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:7a9a96e371320c0f4e21261f" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.residential_property_gains.ty2024", + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_concept": "hmrc.cgt_residential_property_gains", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "entity_name": "tax_unit", + "aggregate_fact_key": "ledger.aggregate_fact.v2:1f8003c937764e4184da3f24", + "period_type": "tax_year", + "period_value": 2024, + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "channel": "total" + } + }, + "entity": "person", + "measure": "hmrc.cgt.residential_property_gains.ty2024", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.residential_property_gains", + "measure_kind": "prepared_column", + "observation_basis": "uk_residents_reporting_residential_property_disposals_disposal_year_2024_all_channels_scaled_to_individuals_by_table8b_share", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_residential_property_gains", + "groupby_dimension": "taxpayer_type", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a0b79c3ba46671e0dfd8f878" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_residential_property_gains", + "groupby_dimension": "taxpayer_type", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:0be097fa0d180fb2c5c66661" + } + ], + "uprating_from_period": "2024", + "uprating_to_period": 2025 } ] } diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_data_target_parity.json b/packages/microcosm-build/src/microcosm/build/uk/uk_data_target_parity.json index f6c6d565fc..cb4efa40e4 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_data_target_parity.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_data_target_parity.json @@ -880,7 +880,7 @@ "covers": [ "policyengine_uk_data.targets.sources.hmrc_cgt" ], - "evidence": "uk-data targets/sources/hmrc_cgt.py:195; Microcosm hmrc_cgt_size_bands.json and uk_population_targets.json CGT rows.", + "evidence": "uk-data targets/sources/hmrc_cgt.py:195; Microcosm hmrc_cgt_conditioning_facts.json (vendored HMRC Table 2.1a 2024-25 rows read by the donor stage and the amounts redraw) and uk_population_targets.json CGT rows.", "status": "ported_national" }, { diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_local_target_census.json b/packages/microcosm-build/src/microcosm/build/uk/uk_local_target_census.json index e2725cd911..46d467232c 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_local_target_census.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_local_target_census.json @@ -565,11 +565,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "Unbanded area statistics in the pinned Ledger fact feed supply the local HMRC count targets directly and the amount targets via the signed count_x_mean construction. The feed publishes SPI target count/mean measures for 650/650 constituencies except self_employment_income_mean at E14001416 (so that one amount row is signed deferred), and for 359/361 crosswalk local authorities; E06000027 has only median SPI measures and E06000053 has no SPI local-authority target-measure rows. This remains a different surface from the 208 banded Total Income facts held fenced by the national adjudication.", @@ -588,11 +588,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries the PCON24 constituency population age specs for all 650 constituencies across the ONS, NRS, and NISRA publisher legs. Mid-year estimates cover the total usual-resident population \u2014 see the population_universe_private_households adjudication.", @@ -611,11 +611,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries local-authority population age specs for all 361 crosswalk local authorities. Covers the total usual-resident population \u2014 see the population_universe_private_households adjudication.", @@ -635,11 +635,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries the compiled household cells.", @@ -659,11 +659,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries the compiled household cells; the source specification defines HouseholdCount as occupied households.", @@ -683,11 +683,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries the compiled household cells.", @@ -707,11 +707,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries DWP Stat-Xplore UC household facts for 632/650 constituencies and 350/361 local authorities, plus the four constituency child-bucket specs. DWP UC official statistics in this feed cover Great Britain; the 18 Northern Ireland constituencies and 11 Northern Ireland local authorities are signed deferred. DWP counts UC claim households \u2014 see the uc_unit_vs_household_grain adjudication.", @@ -730,11 +730,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "Model-based estimates built from the Family Resources Survey \u2014 see the frs_model_based_target_circularity adjudication. The BHC and AHC measures are independently modelled and not directly comparable \u2014 see the ons_bhc_ahc_noncomparable adjudication. MSOA-to-local-authority aggregation is signed deferred for this run; England and Wales only.", @@ -756,11 +756,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries tenure specs for all 361 crosswalk local authorities across ONS Census 2021, NRS Census 2022, and NISRA Census 2021 publisher legs. Private-rent and social-rent tenure rows are additive over publisher-native subclasses and compile through the signed sum operation.", @@ -779,11 +779,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "PIPR publishes average rent price levels, not additive rent totals; a bound cell composes the level into a total (see the signed rationale). Of the 361 local-authority cells, 314 bind for the 2025 compile and 47 remain signed deferred: four English cells have no matching LA id, 32 Scottish cells are represented only at BRMA grain without a signed translation, and 11 Northern Ireland cells are absent.", @@ -804,11 +804,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned feed record-set specs uk.local_geography.council_tax.england_ctb.line_07_chargeable_dwellings_adjusted_for_disabled_relief.v1, line_11_second_homes.v1 and line_15_empty_dwellings.v1 supply the 296 English billing authorities by band A-, A-H at the October 2025 count. Each cell binds line 7 minus line 11 minus line 15 (band A adds line 7's A- column): the dwellings charged as someone's sole or main residence, the universe a household frame carries. Bands A-G bind 294 authorities after E06000053 and E09000001 are support-floor excluded; the 296-cell band H family stays signed deferred on spine support (microcosm#762 A14). Barnsley and Sheffield bind through the crosswalk's declared aliases of their April 2025 codes. The family is scoped to the 296 English authorities: Wales and Scotland bind their own returns below and Northern Ireland levies domestic rates.", @@ -827,11 +827,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned feed record-set specs uk.local_geography.council_tax.wales_ct1.a1_all_chargeable_dwellings.v1, h7_total_chargeable_empty_properties.v1 and h8_total_chargeable_second_homes.v1 supply the 22 Welsh authorities by band A-I per financial year. Each cell binds a1 minus h7 minus h8 on the 2025-26 row (the taxbase set for that year, counted on the 31 October 2024 list, one count-year behind England and Scotland by ruling of 2026-09-15); all 198 cells bind, band I included.", @@ -850,11 +850,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 275698, - "facts_sha256": "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412", + "fact_row_count": 276205, + "facts_sha256": "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3", - "source_commit": "ec200856c4e40e0d3fe97c4e17049cb48de02b85", + "manifest_sha256": "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d", + "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned feed record-set spec uk.local_geography.council_tax_stock.scotland_ctaxbase_chargeable_dwellings.by_council_area.v1 supplies the 32 councils by band A-H, the concept the scotgov.council_tax_stock country rows already bind; 255 cells bind and Shetland band H is signed deferred (no band-H clone at K=15). Chargeable dwellings run about 1 % above the household frame nationally, the residual the universe fence records.", 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 d600b73c22..20d8c61ad3 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 @@ -9,7 +9,8 @@ "calendar_year_average", "monthly_window_average", "monthly_window_sum_average", - "linear_combination" + "linear_combination", + "scaled_by_ratio" ], "resolution_defaults": { "base_period_policy": "latest_not_after_build_base_period", @@ -21,8 +22,8 @@ "pinned_ref": "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3", "pinned_version": "1.56.16", "registry_rows": 652, - "mapped_rows": 609, - "excluded_rows": 43, + "mapped_rows": 627, + "excluded_rows": 25, "mapped": { "dwp/benefit_capped_households": "dwp.benefit_cap.capped_households", "dwp/esa_claimants": "dwp.esa_claimants", @@ -32,7 +33,6 @@ "dwp/pip_dl_enhanced_claimants": "dwp.pip.daily_living_enhanced_claimants", "dwp/pip_dl_standard_claimants": "dwp.pip.daily_living_standard_claimants", "dwp/scotland_uc_households_child_under_1": "dwp.uc.scotland_households_child_under_1", - "dwp/uc/households": "dwp.uc.households", "dwp/uc/claimants_couple_no_children": "dwp.uc.households_couple_no_children", "dwp/uc/claimants_couple_with_children": "dwp.uc.households_couple_with_children", "dwp/uc/claimants_single_no_children": "dwp.uc.households_single_no_children", @@ -42,6 +42,7 @@ "dwp/uc/claimants_with_3_children": "dwp.uc.households_children_3", "dwp/uc/claimants_with_4_children": "dwp.uc.households_children_4", "dwp/uc/claimants_with_5+_children": "dwp.uc.households_children_5_or_more", + "dwp/uc/households": "dwp.uc.households", "dwp/uc/two_child_limit/3_children_households": "dwp.uc.two_child_limit.households_3_children", "dwp/uc/two_child_limit/3_children_households_total_children": "dwp.uc.two_child_limit.children_in_3_children_households", "dwp/uc/two_child_limit/4_children_households": "dwp.uc.two_child_limit.households_4_children", @@ -161,8 +162,26 @@ "dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600": "dwp.uc.payment_distribution_single", "dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800": "dwp.uc.payment_distribution_single", "dwp/uc_payment_dist/SINGLE_annual_payment_nan_to_nan": "dwp.uc.payment_distribution_single", + "hmrc/capital_gains_band_100000": "hmrc.cgt.gains_by_gain_band", + "hmrc/capital_gains_band_1000000": "hmrc.cgt.gains_by_gain_band", + "hmrc/capital_gains_band_12300": "hmrc.cgt.gains_by_gain_band", + "hmrc/capital_gains_band_2000000": "hmrc.cgt.gains_by_gain_band", + "hmrc/capital_gains_band_25000": "hmrc.cgt.gains_by_gain_band", + "hmrc/capital_gains_band_250000": "hmrc.cgt.gains_by_gain_band", + "hmrc/capital_gains_band_50000": "hmrc.cgt.gains_by_gain_band", + "hmrc/capital_gains_band_500000": "hmrc.cgt.gains_by_gain_band", + "hmrc/capital_gains_band_5000000": "hmrc.cgt.gains_by_gain_band", "hmrc/capital_gains_total": "hmrc.cgt.gains_total", "hmrc/cgt_taxpayers": "hmrc.cgt.taxpayers_total", + "hmrc/cgt_taxpayers_band_100000": "hmrc.cgt.taxpayers_by_gain_band", + "hmrc/cgt_taxpayers_band_1000000": "hmrc.cgt.taxpayers_by_gain_band", + "hmrc/cgt_taxpayers_band_12300": "hmrc.cgt.taxpayers_by_gain_band", + "hmrc/cgt_taxpayers_band_2000000": "hmrc.cgt.taxpayers_by_gain_band", + "hmrc/cgt_taxpayers_band_25000": "hmrc.cgt.taxpayers_by_gain_band", + "hmrc/cgt_taxpayers_band_250000": "hmrc.cgt.taxpayers_by_gain_band", + "hmrc/cgt_taxpayers_band_50000": "hmrc.cgt.taxpayers_by_gain_band", + "hmrc/cgt_taxpayers_band_500000": "hmrc.cgt.taxpayers_by_gain_band", + "hmrc/cgt_taxpayers_band_5000000": "hmrc.cgt.taxpayers_by_gain_band", "hmrc/dividend_income_count_income_band_100_000_to_150_000": "hmrc.spi.dividend_income.count_by_total_income_band", "hmrc/dividend_income_count_income_band_12_570_to_15_000": "hmrc.spi.dividend_income.count_by_total_income_band", "hmrc/dividend_income_count_income_band_150_000_to_200_000": "hmrc.spi.dividend_income.count_by_total_income_band", @@ -636,24 +655,6 @@ }, "excluded": { "dwp/benefit_cap_total_reduction": "The GBP 320.9m total reduction is uk-data's computed annualization of a monthly figure - excluded per the facts-only ADR (chronicle#139).", - "hmrc/capital_gains_band_100000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/capital_gains_band_1000000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/capital_gains_band_12300": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/capital_gains_band_2000000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/capital_gains_band_25000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/capital_gains_band_250000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/capital_gains_band_50000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/capital_gains_band_500000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/capital_gains_band_5000000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/cgt_taxpayers_band_100000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/cgt_taxpayers_band_1000000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/cgt_taxpayers_band_12300": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/cgt_taxpayers_band_2000000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/cgt_taxpayers_band_25000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/cgt_taxpayers_band_250000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/cgt_taxpayers_band_50000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/cgt_taxpayers_band_500000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", - "hmrc/cgt_taxpayers_band_5000000": "Banded CGT rows read uk-data's storage/capital_gains_size_distribution_hmrc.csv, which was never packaged (no publisher table pinned). Candidate follow-up alongside microcosm#467.", "hmrc/salary_sacrifice_contributions": "SPP Review 2025 base value (GBP 24bn); the pinned asset 404s with no Wayback snapshot - blocked until a source surfaces (checklist row).", "housing/rent_private": "Computed rate x count products (PIPR mean rent / EHS mean weekly cost x unpinned tenure counts). The base facts are ported (chronicle#159); the product stays a populace-side declaration per the facts-only ADR.", "housing/rent_social": "Computed rate x count products (PIPR mean rent / EHS mean weekly cost x unpinned tenure counts). The base facts are ported (chronicle#159); the product stays a populace-side declaration per the facts-only ADR.", @@ -734,7 +735,14 @@ "dwp.benefit_cap.capped_households_1000_01_to_1100": "#882 benefit-cap amount band from DWP Table 4; the incumbent registry binds only the capped-household total.", "dwp.benefit_cap.capped_households_1100_01_to_1200": "#882 benefit-cap amount band from DWP Table 4; the incumbent registry binds only the capped-household total.", "dwp.benefit_cap.capped_households_1200_01_to_1300": "#882 benefit-cap amount band from DWP Table 4; the incumbent registry binds only the capped-household total.", - "dwp.benefit_cap.capped_households_1300_01_and_above": "#882 benefit-cap amount band from DWP Table 4; the incumbent registry binds only the capped-household total." + "dwp.benefit_cap.capped_households_1300_01_and_above": "#882 benefit-cap amount band from DWP Table 4; the incumbent registry binds only the capped-household total.", + "hmrc.cgt.taxpayers_by_age_band": "New declaration backed by the HMRC CGT Table 6 2024-25 age-band facts in Chronicle (cgt_age_2026); the incumbent registry has no age-band CGT metric (microcosm#725).", + "hmrc.cgt.gains_by_age_band": "New declaration backed by the HMRC CGT Table 6 2024-25 age-band facts in Chronicle (cgt_age_2026); the incumbent registry has no age-band CGT metric (microcosm#725).", + "hmrc.cgt.tax_by_age_band": "New declaration backed by the HMRC CGT Table 6 2024-25 age-band facts in Chronicle (cgt_age_2026); the incumbent registry has no age-band CGT metric (microcosm#725).", + "hmrc.cgt.taxpayers_by_region": "New declaration backed by the HMRC CGT Table 5 2024-25 country/region facts in Chronicle (cgt_country_region_2026), scaled to the individuals basis by the Table 1 share; the incumbent registry has no regional CGT metric (microcosm#725).", + "hmrc.cgt.gains_by_region": "New declaration backed by the HMRC CGT Table 5 2024-25 country/region facts in Chronicle (cgt_country_region_2026), scaled to the individuals basis by the Table 1 share; the incumbent registry has no regional CGT metric (microcosm#725).", + "hmrc.cgt.residential_property_taxpayers": "New declaration backed by the HMRC CGT Table 8a 2024-25 residential property facts in Chronicle (cgt_residential_property_2026), scaled to the individuals basis by the Table 8b share; the incumbent registry has no residential-property CGT metric (microcosm#725).", + "hmrc.cgt.residential_property_gains": "New declaration backed by the HMRC CGT Table 8a 2024-25 residential property facts in Chronicle (cgt_residential_property_2026), scaled to the individuals basis by the Table 8b share; the incumbent registry has no residential-property CGT metric (microcosm#725)." }, "suppressed_ancestors": { "hmrc/salary_sacrifice_it_relief_basic_rate": { @@ -764,7 +772,8 @@ "salary_sacrifice_obr_near_equivalents": "The contract separately maps OBR near-equivalents obr/salary_sacrifice_employee_ni_relief and obr/salary_sacrifice_employer_ni_relief onto hmrc.salary_sacrifice.nics_relief_employee and hmrc.salary_sacrifice.nics_relief_employer.", "two_child_limit_year_surface": "Chronicle's 15 dwp/uc/two_child_limit/* facts are the April-2025 publication (period month 2025-04) and are the only TCL facts; there are no 2026 Ledger facts. At 12a1e028, the incumbent pins the same published numbers at {2026}, so at calibration year 2025 Ledger activates all 15 TCL targets while the incumbent drops them from the 652-row union to the 637-row effective surface; the 2026 effective surface remains 652. The same 12a1e028 refresh adds the new incumbent dwp/uc/households row. Fixture B treats the 15 TCL rows as enumerated ledger-side additions.", "geography_level_order_canonicalization": "The 9 voa.council_tax_stock.* rows use country, region order to match the rest of the contract; consumers use membership only.", - "ons_terminal_sex_band_split": "María ruling 2026-08-21: split the incumbent terminal sex bands into uniform five-year 85_89 bands plus 90_plus tails. The incumbent six-year 85_90 terminal rows leave ages 91+ unconstrained; Microcosm keeps the uniform five-year bands and constrains the tail. The 85_89-vs-85_90 value gap is the single-age-90 share and is a signed semantic difference." + "ons_terminal_sex_band_split": "María ruling 2026-08-21: split the incumbent terminal sex bands into uniform five-year 85_89 bands plus 90_plus tails. The incumbent six-year 85_90 terminal rows leave ages 91+ unconstrained; Microcosm keeps the uniform five-year bands and constrains the tail. The 85_89-vs-85_90 value gap is the single-age-90 share and is a signed semantic difference.", + "cgt_band_promotion": "The 18 banded CGT registry names (hmrc/cgt_taxpayers_band_ and hmrc/capital_gains_band_, nine bands from 12,300) move from excluded to mapped: Chronicle now carries HMRC Table 2.1a for 2024-25 (cgt_size_of_gain_2026), so the incumbent's unpackaged uk-data CSV is superseded by published individual rows bound at identity; the 3,000 and 6,000 bands the incumbent never carried are authored under the same naming form and the 0-2,999 band below the 2024 AEA is signed out (microcosm#467, #725). Chronicle's Table 2.1a package emits taxpayers and gains only, although the published sheet carries an amounts-of-tax column, so no liability-by-band target exists yet; it becomes possible once Chronicle emits that column." }, "scope_target_ids": [ "obr.income_tax", @@ -1013,7 +1022,16 @@ "dwp.benefit_cap.capped_households_1000_01_to_1100", "dwp.benefit_cap.capped_households_1100_01_to_1200", "dwp.benefit_cap.capped_households_1200_01_to_1300", - "dwp.benefit_cap.capped_households_1300_01_and_above" + "dwp.benefit_cap.capped_households_1300_01_and_above", + "hmrc.cgt.taxpayers_by_age_band", + "hmrc.cgt.gains_by_age_band", + "hmrc.cgt.tax_by_age_band", + "hmrc.cgt.taxpayers_by_region", + "hmrc.cgt.gains_by_region", + "hmrc.cgt.taxpayers_by_gain_band", + "hmrc.cgt.gains_by_gain_band", + "hmrc.cgt.residential_property_taxpayers", + "hmrc.cgt.residential_property_gains" ] }, "profile_parity": { @@ -16835,6 +16853,599 @@ "category_id": "dwp.benefit_cap", "label": "Capped households, £1,300.01 and above a month" }, + { + "target_id": "hmrc.cgt.taxpayers_by_age_band", + "family": "hmrc_cgt", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.person.count", + "groupby_dimension": "hmrc.cgt_age_band", + "filters": [ + { + "concept": "uk.income.capital_gains.amount", + "operator": ">", + "value": "gov.hmrc.cgt.annual_exempt_amount" + } + ], + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band" + }, + "bindings": { + "policyengine": { + "metric_name": "hmrc/cgt_taxpayers_by_age_band", + "kind": "parameter_gated_threshold", + "gate_parameter": "gov.hmrc.cgt.annual_exempt_amount", + "gated_variable": "cgt_2024_gains", + "gate_comparison": ">", + "from_entity": "person", + "map_to": "household", + "measurement_period": 2024, + "require_matching_fact_period": true, + "value_variable": "person_count", + "groupby_variable": "age", + "notes": "HMRC Table 6 2024-25, individuals with a CGT liability by age at the end of the tax year. The AEA gate is the national taxpayer proxy on the engine-year net gains; each row's age band is the half-open [lower, next lower) slice read from the compiled sibling edges, which equals the published inclusive integer bands. The 0-15 row is signed out (1k people, GBP 54m; the frame carries no under-16 gainers) and the all-ages row duplicates the national target (microcosm#725)." + }, + "axiom": { + "metric_name": "hmrc/cgt_taxpayers_by_age_band", + "status": "pending", + "value_rule": "uk.person.count" + } + }, + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024 + }, + "category_id": "hmrc.capital_gains_tax", + "label": "Capital Gains Tax taxpayers by age band" + }, + { + "target_id": "hmrc.cgt.gains_by_age_band", + "family": "hmrc_cgt", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.income.capital_gains.amount", + "groupby_dimension": "hmrc.cgt_age_band", + "filters": [ + { + "concept": "uk.income.capital_gains.amount", + "operator": ">", + "value": "gov.hmrc.cgt.annual_exempt_amount" + } + ], + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band" + }, + "bindings": { + "policyengine": { + "metric_name": "hmrc/capital_gains_by_age_band", + "kind": "parameter_gated_threshold", + "gate_parameter": "gov.hmrc.cgt.annual_exempt_amount", + "gated_variable": "cgt_2024_gains", + "gate_comparison": ">", + "from_entity": "person", + "map_to": "household", + "measurement_period": 2024, + "require_matching_fact_period": true, + "value_variable": "cgt_2024_gains", + "groupby_variable": "age", + "notes": "HMRC Table 6 2024-25, individuals with a CGT liability by age at the end of the tax year. The AEA gate is the national taxpayer proxy on the engine-year net gains; each row's age band is the half-open [lower, next lower) slice read from the compiled sibling edges, which equals the published inclusive integer bands. The 0-15 row is signed out (1k people, GBP 54m; the frame carries no under-16 gainers) and the all-ages row duplicates the national target (microcosm#725)." + }, + "axiom": { + "metric_name": "hmrc/capital_gains_by_age_band", + "status": "pending", + "value_rule": "uk.income.capital_gains.amount" + } + }, + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024 + }, + "category_id": "hmrc.capital_gains_tax", + "label": "Capital Gains Tax gains by age band" + }, + { + "target_id": "hmrc.cgt.tax_by_age_band", + "family": "hmrc_cgt", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.tax.capital_gains_tax.amount", + "groupby_dimension": "hmrc.cgt_age_band", + "filters": [ + { + "concept": "uk.income.capital_gains.amount", + "operator": ">", + "value": "gov.hmrc.cgt.annual_exempt_amount" + } + ], + "observation_basis": "individuals_observed_disposal_year_2024_liability_by_age_band" + }, + "bindings": { + "policyengine": { + "metric_name": "hmrc/cgt_liability_by_age_band", + "kind": "parameter_gated_threshold", + "gate_parameter": "gov.hmrc.cgt.annual_exempt_amount", + "gated_variable": "cgt_2024_gains", + "gate_comparison": ">", + "from_entity": "person", + "map_to": "household", + "measurement_period": 2024, + "require_matching_fact_period": true, + "value_variable": "cgt_2024_tax", + "groupby_variable": "age", + "notes": "HMRC Table 6 2024-25, individuals with a CGT liability by age at the end of the tax year. The AEA gate is the national taxpayer proxy on the engine-year net gains; each row's age band is the half-open [lower, next lower) slice read from the compiled sibling edges, which equals the published inclusive integer bands. The 0-15 row is signed out (1k people, GBP 54m; the frame carries no under-16 gainers) and the all-ages row duplicates the national target (microcosm#725). Liability rows measure the same cgt_2024_tax engine array as the national liability target." + }, + "axiom": { + "metric_name": "hmrc/cgt_liability_by_age_band", + "status": "pending", + "value_rule": "uk.tax.capital_gains_tax.amount" + } + }, + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 6: individual taxpayers, gains and liabilities by age", + "source_concept": "hmrc.cgt_tax_individuals", + "groupby_dimension": "age_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024 + }, + "category_id": "hmrc.capital_gains_tax", + "label": "Capital Gains Tax liability by age band" + }, + { + "target_id": "hmrc.cgt.taxpayers_by_region", + "family": "hmrc_cgt", + "geography_levels": [ + "country", + "region" + ], + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:31d709fc393c2bf4d04efca5" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:ec8cf88ffb8304ce72228e8b" + } + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.person.count", + "filters": [ + { + "concept": "uk.income.capital_gains.amount", + "operator": ">", + "value": "gov.hmrc.cgt.annual_exempt_amount" + } + ], + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share" + }, + "bindings": { + "policyengine": { + "metric_name": "hmrc/cgt_taxpayers_by_region", + "kind": "parameter_gated_threshold", + "gate_parameter": "gov.hmrc.cgt.annual_exempt_amount", + "gated_variable": "cgt_2024_gains", + "gate_comparison": ">", + "from_entity": "person", + "map_to": "household", + "measurement_period": 2024, + "require_matching_fact_period": true, + "value_variable": "person_count", + "notes": "HMRC Table 5 2024-25 publishes taxpayers, gains and tax by country and region for all taxpayers including trusts (584k UK) while the national targets are individuals (Table 1, 551k). Each tier cell is the published area value multiplied by the Table 1 individuals/total share for the same measure and year, on the declared assumption that trusts are distributed across areas in proportion to all taxpayers; the base, numerator, denominator, ratio and member fact keys are recorded on every compiled spec. One reference per region-tier area (microcosm#905), scoped by the stamped household-region predicate; the AEA gate is the national taxpayer proxy (microcosm#725). One national share is applied to every area: Table 5 does not publish the individuals/trusts split by area, so where trusts are over-represented (the areas with the largest estates) the individuals count and gains are overstated by the gap between the area's trust share and the national one, and understated elsewhere; the error is not quantifiable from the publication and is a ruling (the comment linked from the signed-exclusion register records it)." + }, + "axiom": { + "metric_name": "hmrc/cgt_taxpayers_by_region", + "status": "pending", + "value_rule": "uk.person.count" + } + }, + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024 + }, + "category_id": "hmrc.capital_gains_tax", + "label": "Capital Gains Tax taxpayers by region" + }, + { + "target_id": "hmrc.cgt.gains_by_region", + "family": "hmrc_cgt", + "geography_levels": [ + "country", + "region" + ], + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:12060d20a417d85d67cf24e8" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "hmrc.cgt_table1_line", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a9969c2a306f713f6bb203fc" + } + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.income.capital_gains.amount", + "filters": [ + { + "concept": "uk.income.capital_gains.amount", + "operator": ">", + "value": "gov.hmrc.cgt.annual_exempt_amount" + } + ], + "observation_basis": "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share" + }, + "bindings": { + "policyengine": { + "metric_name": "hmrc/capital_gains_by_region", + "kind": "parameter_gated_threshold", + "gate_parameter": "gov.hmrc.cgt.annual_exempt_amount", + "gated_variable": "cgt_2024_gains", + "gate_comparison": ">", + "from_entity": "person", + "map_to": "household", + "measurement_period": 2024, + "require_matching_fact_period": true, + "value_variable": "cgt_2024_gains", + "notes": "HMRC Table 5 2024-25 publishes taxpayers, gains and tax by country and region for all taxpayers including trusts (584k UK) while the national targets are individuals (Table 1, 551k). Each tier cell is the published area value multiplied by the Table 1 individuals/total share for the same measure and year, on the declared assumption that trusts are distributed across areas in proportion to all taxpayers; the base, numerator, denominator, ratio and member fact keys are recorded on every compiled spec. One reference per region-tier area (microcosm#905), scoped by the stamped household-region predicate; the AEA gate is the national taxpayer proxy (microcosm#725). One national share is applied to every area: Table 5 does not publish the individuals/trusts split by area, so where trusts are over-represented (the areas with the largest estates) the individuals count and gains are overstated by the gap between the area's trust share and the national one, and understated elsewhere; the error is not quantifiable from the publication and is a ruling (the comment linked from the signed-exclusion register records it)." + }, + "axiom": { + "metric_name": "hmrc/capital_gains_by_region", + "status": "pending", + "value_rule": "uk.income.capital_gains.amount" + } + }, + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "groupby_dimension": "geography", + "entity_name": "tax_unit", + "period_type": "tax_year", + "period_value": 2024 + }, + "category_id": "hmrc.capital_gains_tax", + "label": "Capital Gains Tax gains by region" + }, + { + "target_id": "hmrc.cgt.taxpayers_by_gain_band", + "family": "hmrc_cgt", + "geography_levels": [ + "country" + ], + "fanout_row_naming": "metric_name_band_lower", + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.person.count", + "groupby_dimension": "hmrc.cgt_gain_band", + "filters": [ + { + "concept": "uk.income.capital_gains.amount", + "operator": ">", + "value": "gov.hmrc.cgt.annual_exempt_amount" + } + ], + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain" + }, + "bindings": { + "policyengine": { + "metric_name": "hmrc/cgt_taxpayers_band", + "kind": "parameter_gated_threshold", + "gate_parameter": "gov.hmrc.cgt.annual_exempt_amount", + "gated_variable": "cgt_2024_gains", + "gate_comparison": ">", + "from_entity": "person", + "map_to": "household", + "measurement_period": 2024, + "require_matching_fact_period": true, + "value_variable": "person_count", + "groupby_variable": "cgt_2024_gains", + "band_filter_dimension": "cgt_gain", + "notes": "HMRC Table 2.1a 2024-25, individuals with a CGT liability by size of gain. Rows are the published half-open bands [lower, next lower) on the same engine-year net gains the national target measures; the AEA gate is retained so band membership and taxpayer status share one array. The 0-2,999 band lies below the 2024 annual exempt amount and is signed out. Row names reuse the incumbent hmrc/capital_gains_band_ and hmrc/cgt_taxpayers_band_ registry names; the 3,000 and 6,000 bands the incumbent never carried take the same form. Counts publish to the nearest thousand, so the 3k/5k/9k rows carry rounding half-widths of about 17/10/6 percent (microcosm#467, #725)." + }, + "axiom": { + "metric_name": "hmrc/cgt_taxpayers_band", + "status": "pending", + "value_rule": "uk.person.count" + } + }, + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_taxpayers_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024 + }, + "category_id": "hmrc.capital_gains_tax", + "label": "Capital Gains Tax taxpayers by size of gain" + }, + { + "target_id": "hmrc.cgt.gains_by_gain_band", + "family": "hmrc_cgt", + "geography_levels": [ + "country" + ], + "fanout_row_naming": "metric_name_band_lower", + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.income.capital_gains.amount", + "groupby_dimension": "hmrc.cgt_gain_band", + "filters": [ + { + "concept": "uk.income.capital_gains.amount", + "operator": ">", + "value": "gov.hmrc.cgt.annual_exempt_amount" + } + ], + "observation_basis": "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain" + }, + "bindings": { + "policyengine": { + "metric_name": "hmrc/capital_gains_band", + "kind": "parameter_gated_threshold", + "gate_parameter": "gov.hmrc.cgt.annual_exempt_amount", + "gated_variable": "cgt_2024_gains", + "gate_comparison": ">", + "from_entity": "person", + "map_to": "household", + "measurement_period": 2024, + "require_matching_fact_period": true, + "value_variable": "cgt_2024_gains", + "groupby_variable": "cgt_2024_gains", + "band_filter_dimension": "cgt_gain", + "notes": "HMRC Table 2.1a 2024-25, individuals with a CGT liability by size of gain. Rows are the published half-open bands [lower, next lower) on the same engine-year net gains the national target measures; the AEA gate is retained so band membership and taxpayer status share one array. The 0-2,999 band lies below the 2024 annual exempt amount and is signed out. Row names reuse the incumbent hmrc/capital_gains_band_ and hmrc/cgt_taxpayers_band_ registry names; the 3,000 and 6,000 bands the incumbent never carried take the same form. Counts publish to the nearest thousand, so the 3k/5k/9k rows carry rounding half-widths of about 17/10/6 percent (microcosm#467, #725)." + }, + "axiom": { + "metric_name": "hmrc/capital_gains_band", + "status": "pending", + "value_rule": "uk.income.capital_gains.amount" + } + }, + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 2: estimated number of taxpayers, amounts of gains and tax liabilities by size of gain", + "source_concept": "hmrc.cgt_gains_individuals", + "groupby_dimension": "cgt_gain_band", + "entity_name": "person", + "period_type": "tax_year", + "period_value": 2024 + }, + "category_id": "hmrc.capital_gains_tax", + "label": "Capital Gains Tax gains by size of gain" + }, + { + "target_id": "hmrc.cgt.residential_property_taxpayers", + "family": "hmrc_cgt", + "geography_levels": [ + "country" + ], + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_residential_property_taxpayers", + "groupby_dimension": "taxpayer_type", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:7ea881ca1e22de079bf8d892" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_residential_property_taxpayers", + "groupby_dimension": "taxpayer_type", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:7a9a96e371320c0f4e21261f" + } + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.person.count", + "filters": [ + { + "concept": "uk.income.capital_gains.amount", + "operator": ">", + "value": "gov.hmrc.cgt.annual_exempt_amount" + }, + { + "concept": "uk.income.capital_gains.asset_type", + "operator": "==", + "value": "residential_land_buildings" + } + ], + "observation_basis": "uk_residents_reporting_residential_property_disposals_disposal_year_2024_all_channels_scaled_to_individuals_by_table8b_share" + }, + "bindings": { + "policyengine": { + "metric_name": "hmrc/cgt_residential_property_taxpayers", + "kind": "parameter_gated_threshold", + "gate_parameter": "gov.hmrc.cgt.annual_exempt_amount", + "gated_variable": "cgt_2024_gains", + "gate_comparison": ">", + "from_entity": "person", + "map_to": "household", + "measurement_period": 2024, + "require_matching_fact_period": true, + "value_variable": "person_count", + "filters": [ + { + "variable": "capital_gains_asset_type", + "equals": "residential_land_buildings" + } + ], + "notes": "HMRC Table 8a 2024-25 counts UK residents reporting residential property disposals across the CGT on UK Property service and Self Assessment (all taxpayer types) while the national CGT targets are individuals (Table 1). The cell is the published all-channel total multiplied by the Table 8b 2024-25 individuals/all share for the same measure on the UK Property service, on the declared assumption that trusts hold the same share of the Self Assessment component; the base, numerator, denominator, ratio and member fact keys are recorded on every compiled spec. The binding counts liable gainers the hmrc_cgt_asset_type_spine stage flagged residential (capital_gains_asset_type == residential_land_buildings), the same population the stage solved to these two totals, and attributes a flagged person's whole net gain to residential property (microcosm#725)." + }, + "axiom": { + "metric_name": "hmrc/cgt_residential_property_taxpayers", + "status": "pending", + "value_rule": "uk.person.count" + } + }, + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_concept": "hmrc.cgt_residential_property_taxpayers", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "entity_name": "tax_unit", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a26f1261bd153727b83045de", + "period_type": "tax_year", + "period_value": 2024 + }, + "category_id": "hmrc.capital_gains_tax", + "label": "Capital Gains Tax residential property taxpayers" + }, + { + "target_id": "hmrc.cgt.residential_property_gains", + "family": "hmrc_cgt", + "geography_levels": [ + "country" + ], + "value_operation": "scaled_by_ratio", + "value_operands": [ + { + "role": "base" + }, + { + "role": "numerator", + "source_concept": "hmrc.cgt_residential_property_gains", + "groupby_dimension": "taxpayer_type", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:a0b79c3ba46671e0dfd8f878" + }, + { + "role": "denominator", + "source_concept": "hmrc.cgt_residential_property_gains", + "groupby_dimension": "taxpayer_type", + "entity_name": "tax_unit", + "geography_level": "country", + "geography_id": "K02000001", + "aggregate_fact_key": "ledger.aggregate_fact.v2:0be097fa0d180fb2c5c66661" + } + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.income.capital_gains.amount", + "filters": [ + { + "concept": "uk.income.capital_gains.amount", + "operator": ">", + "value": "gov.hmrc.cgt.annual_exempt_amount" + }, + { + "concept": "uk.income.capital_gains.asset_type", + "operator": "==", + "value": "residential_land_buildings" + } + ], + "observation_basis": "uk_residents_reporting_residential_property_disposals_disposal_year_2024_all_channels_scaled_to_individuals_by_table8b_share" + }, + "bindings": { + "policyengine": { + "metric_name": "hmrc/cgt_residential_property_gains", + "kind": "parameter_gated_threshold", + "gate_parameter": "gov.hmrc.cgt.annual_exempt_amount", + "gated_variable": "cgt_2024_gains", + "gate_comparison": ">", + "from_entity": "person", + "map_to": "household", + "measurement_period": 2024, + "require_matching_fact_period": true, + "value_variable": "cgt_2024_gains", + "filters": [ + { + "variable": "capital_gains_asset_type", + "equals": "residential_land_buildings" + } + ], + "notes": "HMRC Table 8a 2024-25 counts UK residents reporting residential property disposals across the CGT on UK Property service and Self Assessment (all taxpayer types) while the national CGT targets are individuals (Table 1). The cell is the published all-channel total multiplied by the Table 8b 2024-25 individuals/all share for the same measure on the UK Property service, on the declared assumption that trusts hold the same share of the Self Assessment component; the base, numerator, denominator, ratio and member fact keys are recorded on every compiled spec. The binding counts liable gainers the hmrc_cgt_asset_type_spine stage flagged residential (capital_gains_asset_type == residential_land_buildings), the same population the stage solved to these two totals, and attributes a flagged person's whole net gain to residential property (microcosm#725)." + }, + "axiom": { + "metric_name": "hmrc/cgt_residential_property_gains", + "status": "pending", + "value_rule": "uk.income.capital_gains.amount" + } + }, + "ledger_selector": { + "source_name": "hmrc", + "source_table": "Capital Gains Tax statistics Table 8: residential property disposals", + "source_concept": "hmrc.cgt_residential_property_gains", + "groupby_dimension": "hmrc.cgt_residential_property_year", + "entity_name": "tax_unit", + "aggregate_fact_key": "ledger.aggregate_fact.v2:1f8003c937764e4184da3f24", + "period_type": "tax_year", + "period_value": 2024 + }, + "category_id": "hmrc.capital_gains_tax", + "label": "Capital Gains Tax residential property gains" + }, { "target_id": "hmrc.self_employment_income.amount", "family": "hmrc", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py index d8717766ca..15f56992ea 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py @@ -1435,6 +1435,9 @@ def _ledger_compile_parity_required_artifacts( # #791 household_composition stage-health check. "max_grid_reciprocity_mismatches", "require_partition_closure", + # #725 cgt_asset_type_summary stage-health check. + "maximum_gains_sigma", + "maximum_solve_relative_error", "support_bounds_resource", "minimum_band_rows", # #890 energy_rake check: NEED shape at the DESNZ level at 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 9ace8b7e8b..123013c875 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 @@ -122,6 +122,7 @@ class UKCalibrationRunResult: "uk_stage_cgt_incidence_clone_mass", "uk_stage_cgt_band_donors_support", "uk_stage_hmrc_cgt_gains_spine_summary", + "uk_stage_hmrc_cgt_asset_type_spine_summary", "uk_stage_salary_sacrifice_realization", "uk_stage_student_loans_realization", "uk_stage_age_tail_targets", @@ -129,6 +130,10 @@ class UKCalibrationRunResult: # Weight-independent like the BRMA enum below, and its column exists from # frs_relationships onward (#791). "uk_ons_household_type_enum_domain", + # Weight-independent; the column exists only from hmrc_cgt_asset_type_spine + # onward, so it is checked at the transferred boundary, and its domain is + # declared by the stage module (microcosm#725). + "uk_capital_gains_asset_type_enum_domain", # Weight-independent, and its column exists from frs_brma onward, so the # spine checks it at the assembled boundary instead of the release end. "uk_brma_enum_domain", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_asset_type.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_asset_type.py new file mode 100644 index 0000000000..7dbe4c62b2 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_asset_type.py @@ -0,0 +1,1008 @@ +"""Assign a main asset type and a residential-property flag to CGT taxpayers. + +The amounts redraw (``cgt_imputation``) places net gains on persons; nothing +says what was sold. Two HMRC surfaces do, and both are vendored verbatim +from the pinned Chronicle feed into ``hmrc_cgt_asset_type_facts.json``: + +- **Table 8 (administrative, 2024-25).** Table 8a counts UK-resident + taxpayers reporting residential property disposals, with their gains and + tax, across the CGT on UK Property service and Self Assessment; Table 8b + splits the service channel by taxpayer type (individuals, trusts). The + national CGT targets are individuals only, so the Table 8a totals are + restated on the individuals basis by the Table 8b individuals/all share + for the same measure — the same declared assumption the Table 5 region + targets make — and those two numbers are what the residential flag is + solved to and what the residential targets bind (microcosm#725). +- **Table 7 (sample-based, 2023-24).** Disposals, proceeds and gains by asset + type. It counts disposals rather than taxpayers, is a year older, and + includes trusts and non-UK assets, so it is fenced from calibration; it + seeds the composition of the non-residential remainder and the stage + reports achieved against it as a diagnostic only. + +Two declared mechanisms, in order: + +1. **Residential flag.** Among liable gainers (net gains above the annual + exempt amount, the national taxpayer proxy) the probability of holding + a residential disposal is logistic in centred log gains, ``p = 1 / (1 + + exp(-(a + b (log g - c))))`` with ``c`` the weighted mean log gain of the + liable population. ``(a, b)`` are solved by nested bisection so the + household-weighted expected count and gains of flagged persons equal the + individuals-basis Table 8a totals: residential gainers are many and + small relative to the whole (a fifth of the gains on a third of the + taxpayers), which the negative slope carries. Flags are then realised by + a weighted systematic walk in ascending gain order with one seeded + offset: the walk flags a person whenever the expected weight owed so far + reaches that person's weight, so the flagged weight tracks the expected + weight within one person's weight everywhere along the gains axis, and + both the realised count and the realised gains sit close to their + expectations on frames whose liable rows are few and heavy. The + Bernoulli sigma of each is reported as the envelope a gate can bound + with. A flagged person's whole net + gain is attributed to residential property (``capital_gains_residential_property``); + a taxpayer with both residential and other disposals is not split. +2. **Main asset type.** Every liable gainer not flagged residential draws + one of five Table 7 types from a size-tilted categorical: the type + weight times a log-normal kernel in log gains centred on the type's + Table 7 mean gain per disposal (listed shares near £5,500, unlisted + shares near £115,000) with one declared log-scale width. The five type + weights are fitted by multiplicative updates until the household-weighted + gains shares by type reproduce Table 7's non-residential gains shares; + one seeded uniform per person realises the draw. The composition by + gain band is reported for the evidence note; nothing is fitted to it. + +Non-gainers carry ``none``; positive gains at or below the annual exempt +amount carry ``sub_aea`` (Table 8 describes taxpayers with a liability and +the sub-AEA remainder is never a taxpayer). Household weights pass through +untouched and the stage appends a mass-conservation receipt the terminal +family gate requires. +""" + +from __future__ import annotations + +import hashlib +from collections.abc import Mapping +from dataclasses import dataclass, field +from importlib.resources import files +from typing import Any + +import numpy as np +import pandas as pd + +from microcosm.build.source_manifest import SourceStageSpec +from microcosm.build.uk_runtime.cgt_imputation import ( + UKCGTPolicyParameters, + uk_cgt_policy_parameters, +) +from microcosm.build.uk_runtime.hmrc_capital_gains import ( + HMRC_CGT_GAIN_BAND_LOWER_BOUNDS, +) +from microcosm.build.uk_runtime.ledger_fact_vendoring import ( + load_vendored_resource, + verify_vendored_resource_feed_identity, +) +from microcosm.build.uk_runtime.national_frame import ( + uk_household_weight_kind, + uk_national_frame, + uk_time_period, + validate_uk_national_frame, +) +from microcosm.frame import Frame, MassChangeRecord + +__all__ = [ + "CGT_ASSET_TYPE_COLUMN", + "CGT_ASSET_TYPE_DOMAIN", + "CGT_ASSET_TYPE_LOG_SIGMA", + "CGT_ASSET_TYPE_NONE", + "CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES", + "CGT_ASSET_TYPE_RESIDENTIAL", + "CGT_ASSET_TYPE_SEED", + "CGT_ASSET_TYPE_SUB_AEA", + "CGT_RESIDENTIAL_FLAG_SEED", + "CGT_RESIDENTIAL_GAINS_COLUMN", + "HMRC_CGT_ASSET_TYPE_RECORD_SETS", + "HMRC_CGT_ASSET_TYPE_RESOURCE", + "HMRC_CGT_TABLE7_SOURCE_SHA256", + "HMRC_CGT_TABLE8_SOURCE_SHA256", + "HMRCCGTAssetTypeFacts", + "UKCGTAssetTypeStageTransform", + "UKCGTAssetTypeSummary", + "UK_CGT_ASSET_TYPE_MASS_CONSERVATION_REASON", + "UK_CGT_ASSET_TYPE_STAGE_NAME", + "assign_uk_cgt_asset_types", + "load_hmrc_cgt_asset_type_facts", + "uk_cgt_asset_type_stage_transform", +] + +UK_CGT_ASSET_TYPE_STAGE_NAME = "hmrc_cgt_asset_type_spine" +UK_CGT_ASSET_TYPE_MASS_CONSERVATION_REASON = ( + "CGT asset-type assignment on the source spine: household weights pass " + "through unchanged and total household mass is conserved." +) + +#: The per-concern vendored resource (Tables 7, 8a and 8b). Regenerated +#: from the pinned Chronicle feed by ``tools/vendor_uk_ledger_facts.py``. +HMRC_CGT_ASSET_TYPE_RESOURCE = "hmrc_cgt_asset_type_facts.json" + +#: Chronicle record sets the stage reads, as the manifest declares them. +_TABLE8A_RECORD_SET_ID = "hmrc.cgt_table8_2026.table8a.ty2024" +_TABLE8B_RECORD_SET_ID = "hmrc.cgt_table8_2026.table8b.ty2024" +_TABLE7_CATEGORY_RECORD_SET_ID = "hmrc.cgt_table7_2026.asset_category.ty2023" +_TABLE7_TOTAL_RECORD_SET_ID = "hmrc.cgt_table7_2026.asset_category_total.ty2023" +_TABLE7_FINANCIAL_RECORD_SET_ID = "hmrc.cgt_table7_2026.financial_asset_type.ty2023" +_TABLE7_NON_FINANCIAL_RECORD_SET_ID = ( + "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023" +) +HMRC_CGT_ASSET_TYPE_RECORD_SETS: tuple[str, ...] = ( + _TABLE8A_RECORD_SET_ID, + _TABLE8B_RECORD_SET_ID, + _TABLE7_CATEGORY_RECORD_SET_ID, + _TABLE7_TOTAL_RECORD_SET_ID, + _TABLE7_FINANCIAL_RECORD_SET_ID, + _TABLE7_NON_FINANCIAL_RECORD_SET_ID, +) + +#: The publisher workbooks every vendored row must trace back to. +HMRC_CGT_TABLE8_SOURCE_SHA256 = ( + "fefe621cab478ca14b06aaeabe0ac2db95a4912b1b40ac029fbbd5ea3fa34952" +) +HMRC_CGT_TABLE7_SOURCE_SHA256 = ( + "a27ad79c3c67178e8b808c0561201dd6585b472d7919c0043fdc44142460b2bd" +) + +CGT_ASSET_TYPE_COLUMN = "capital_gains_asset_type" +CGT_RESIDENTIAL_GAINS_COLUMN = "capital_gains_residential_property" + +#: Value ids shared with Chronicle's Table 7 ``cgt_asset_type`` dimension, +#: plus the two states Table 7 does not describe. +CGT_ASSET_TYPE_NONE = "none" +CGT_ASSET_TYPE_SUB_AEA = "sub_aea" +CGT_ASSET_TYPE_RESIDENTIAL = "residential_land_buildings" +CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES: tuple[str, ...] = ( + "listed_shares", + "unlisted_shares", + "other_financial_assets", + "agricultural_commercial_industrial_land_buildings", + "other_non_financial_assets", +) +CGT_ASSET_TYPE_DOMAIN: tuple[str, ...] = ( + CGT_ASSET_TYPE_NONE, + CGT_ASSET_TYPE_SUB_AEA, + CGT_ASSET_TYPE_RESIDENTIAL, + *CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES, +) + +#: Log-scale width of the size kernel around each type's mean gain per +#: disposal. Wide enough that every type reaches every band; the fitted +#: type weights, not the width, carry the composition. +CGT_ASSET_TYPE_LOG_SIGMA = 1.5 + +#: Seeds are combined with the build period, as the amounts stage does; +#: distinct from the amounts stage's 552 so the two stages never share a +#: stream. +CGT_RESIDENTIAL_FLAG_SEED = 553 +CGT_ASSET_TYPE_SEED = 554 + +_BISECTION_ITERATIONS = 200 +_SHARE_FIT_ITERATIONS = 200 +_SHARE_FIT_TOLERANCE = 1e-6 +_SOLVE_TOLERANCE = 1e-9 + + +# --------------------------------------------------------------------------- +# Vendored facts +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class HMRCCGTTable7Type: + """One Table 7 asset-type row: disposals, proceeds and gains (2023-24).""" + + asset_type: str + category: str + disposals: float + proceeds: float + gains: float + + @property + def mean_gain_per_disposal(self) -> float: + return self.gains / self.disposals + + +@dataclass(frozen=True) +class HMRCCGTAssetTypeFacts: + """The vendored Table 7, 8a and 8b rows, typed.""" + + table8a_taxpayers_total: float + table8a_gains_total: float + table8a_disposals_total: float + table8a_tax_total: float + table8b_individuals_taxpayers: float + table8b_individuals_gains: float + table8b_all_taxpayers: float + table8b_all_gains: float + table7_types: tuple[HMRCCGTTable7Type, ...] + table7_total_gains: float + table7_total_disposals: float + resource: str + resource_sha256: str + source_commit: str + + def individuals_share(self, measure: str) -> float: + """Table 8b individuals ÷ all for ``taxpayers`` or ``gains``.""" + + numerator = getattr(self, f"table8b_individuals_{measure}") + denominator = getattr(self, f"table8b_all_{measure}") + if denominator <= 0: + raise ValueError(f"Table 8b all-taxpayer {measure} must be positive.") + return numerator / denominator + + @property + def residential_taxpayers_individuals_basis(self) -> float: + return self.table8a_taxpayers_total * self.individuals_share("taxpayers") + + @property + def residential_gains_individuals_basis(self) -> float: + return self.table8a_gains_total * self.individuals_share("gains") + + def table7_type(self, asset_type: str) -> HMRCCGTTable7Type: + for row in self.table7_types: + if row.asset_type == asset_type: + return row + raise KeyError(f"No Table 7 row for asset type {asset_type!r}.") + + def non_residential_gains_shares(self) -> dict[str, float]: + """Table 7 gains shares over the five non-residential types.""" + + gains = { + asset_type: self.table7_type(asset_type).gains + for asset_type in CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES + } + total = sum(gains.values()) + return {asset_type: value / total for asset_type, value in gains.items()} + + +def _record_set_id(row: Mapping[str, Any]) -> str: + return str((row.get("layout") or {}).get("record_set_id") or "") + + +def _value(row: Mapping[str, Any]) -> float: + value = row.get("value") + if isinstance(value, bool) or not isinstance(value, int | float): + raise ValueError( + f"Vendored CGT asset-type row {row.get('aggregate_fact_key')!r} has no " + "numeric value." + ) + return float(value) + + +def _source_sha256(row: Mapping[str, Any]) -> str: + return str((row.get("source") or {}).get("source_sha256") or "") + + +def load_hmrc_cgt_asset_type_facts( + resource: str = HMRC_CGT_ASSET_TYPE_RESOURCE, + *, + verify_feed_identity: bool = True, +) -> HMRCCGTAssetTypeFacts: + """Type the vendored rows; refuse a stale feed, source or roster.""" + + payload = load_vendored_resource(resource) + if verify_feed_identity: + verify_vendored_resource_feed_identity(payload) + digest = hashlib.sha256( + files("microcosm.build.uk").joinpath(resource).read_bytes() + ).hexdigest() + rows = list(payload["rows"]) + + table8a: dict[str, float] = {} + table8b: dict[tuple[str, str], float] = {} + table7: dict[tuple[str, str], dict[str, float]] = {} + table7_total: dict[str, float] = {} + for row in rows: + record_set = _record_set_id(row) + measure = str(row.get("measure_id") or "") + dimensions = row.get("dimensions") or {} + if record_set == _TABLE8A_RECORD_SET_ID: + if _source_sha256(row) != HMRC_CGT_TABLE8_SOURCE_SHA256: + raise ValueError( + "Table 8a rows trace to a workbook other than the pinned one." + ) + table8a[measure] = _value(row) + elif record_set == _TABLE8B_RECORD_SET_ID: + if _source_sha256(row) != HMRC_CGT_TABLE8_SOURCE_SHA256: + raise ValueError( + "Table 8b rows trace to a workbook other than the pinned one." + ) + if dimensions.get("channel") != "uk_property_service": + raise ValueError("Table 8b rows must describe the UK Property service.") + taxpayer_type = str(dimensions.get("taxpayer_type") or "all") + table8b[(taxpayer_type, measure)] = _value(row) + elif record_set in ( + _TABLE7_FINANCIAL_RECORD_SET_ID, + _TABLE7_NON_FINANCIAL_RECORD_SET_ID, + ): + if _source_sha256(row) != HMRC_CGT_TABLE7_SOURCE_SHA256: + raise ValueError( + "Table 7 rows trace to a workbook other than the pinned one." + ) + asset_type = dimensions.get("cgt_asset_type") + if asset_type is None: + continue # the category subtotal restates the Table 7_1 rows + category = str(dimensions.get("cgt_asset_category") or "") + table7.setdefault((str(asset_type), category), {})[measure] = _value(row) + elif record_set == _TABLE7_TOTAL_RECORD_SET_ID: + if _source_sha256(row) != HMRC_CGT_TABLE7_SOURCE_SHA256: + raise ValueError( + "Table 7 rows trace to a workbook other than the pinned one." + ) + table7_total[measure] = _value(row) + elif record_set == _TABLE7_CATEGORY_RECORD_SET_ID: + continue + else: + raise ValueError( + f"Vendored CGT asset-type resource carries an undeclared record set " + f"{record_set!r}." + ) + + try: + facts = HMRCCGTAssetTypeFacts( + table8a_taxpayers_total=table8a["taxpayers_total"], + table8a_gains_total=table8a["gains_total"], + table8a_disposals_total=table8a["disposals_total"], + table8a_tax_total=table8a["tax_total"], + table8b_individuals_taxpayers=table8b[("individuals", "taxpayers")], + table8b_individuals_gains=table8b[("individuals", "gains")], + table8b_all_taxpayers=table8b[("all", "taxpayers")], + table8b_all_gains=table8b[("all", "gains")], + table7_types=tuple( + HMRCCGTTable7Type( + asset_type=asset_type, + category=category, + disposals=cells["disposals"], + proceeds=cells["disposal_proceeds"], + gains=cells["gains"], + ) + for (asset_type, category), cells in sorted(table7.items()) + ), + table7_total_gains=table7_total["gains"], + table7_total_disposals=table7_total["disposals"], + resource=resource, + resource_sha256=digest, + source_commit=str(payload["source_fact_feed"]["source_commit"]), + ) + except KeyError as missing: + raise ValueError(f"Vendored CGT asset-type resource lacks {missing}.") from None + expected_types = {CGT_ASSET_TYPE_RESIDENTIAL, *CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES} + actual_types = {row.asset_type for row in facts.table7_types} + if actual_types != expected_types: + raise ValueError( + "Table 7 asset-type roster drifted: expected " + f"{sorted(expected_types)}, got {sorted(actual_types)}." + ) + for row in facts.table7_types: + if row.disposals <= 0 or row.gains <= 0: + raise ValueError(f"Table 7 {row.asset_type} must have positive rows.") + if facts.table8b_individuals_taxpayers > facts.table8b_all_taxpayers: + raise ValueError("Table 8b individuals cannot exceed all taxpayers.") + if facts.table8b_individuals_gains > facts.table8b_all_gains: + raise ValueError("Table 8b individual gains cannot exceed all gains.") + return facts + + +# --------------------------------------------------------------------------- +# Residential flag +# --------------------------------------------------------------------------- + + +def _logistic(log_gains: np.ndarray, a: float, b: float) -> np.ndarray: + return 1.0 / (1.0 + np.exp(-(a + b * log_gains))) + + +def _centred_log_gains( + gains: np.ndarray, weights: np.ndarray +) -> tuple[np.ndarray, float]: + """Log gains less their weighted mean, so the intercept stays O(1).""" + + log_gains = np.log(gains) + centre = float((weights * log_gains).sum() / weights.sum()) + return log_gains - centre, centre + + +def _solve_a( + log_gains: np.ndarray, weights: np.ndarray, *, b: float, count_target: float +) -> float: + """The intercept that puts the expected weighted count on target at slope b.""" + + low, high = -400.0, 400.0 + for _ in range(_BISECTION_ITERATIONS): + mid = 0.5 * (low + high) + expected = float((weights * _logistic(log_gains, mid, b)).sum()) + if expected < count_target: + low = mid + else: + high = mid + return 0.5 * (low + high) + + +def solve_residential_logistic( + gains: np.ndarray, + weights: np.ndarray, + *, + count_target: float, + gains_target: float, +) -> tuple[float, float, float]: + """Solve (a, b, c) so expected weighted count and gains hit both targets. + + ``c`` is the weighted mean log gain the logistic is centred on. For each + trial slope the intercept is bisected onto the count; the slope is then + bisected onto the gains, which rise monotonically in the slope at a + fixed count. Refuses targets the frame cannot reach: more taxpayers or + gains than the liable population holds, or a mean gain outside what a + logistic tilt of these persons can produce. + """ + + if gains.size == 0: + raise ValueError("No liable gainers to flag for residential property.") + total_weight = float(weights.sum()) + total_gains = float((weights * gains).sum()) + if count_target >= total_weight: + raise ValueError( + f"Residential count target {count_target} is not below the liable " + f"taxpayer mass {total_weight}." + ) + if gains_target >= total_gains: + raise ValueError( + f"Residential gains target {gains_target} is not below the liable " + f"gains mass {total_gains}." + ) + log_gains, centre = _centred_log_gains(gains, weights) + low, high = -12.0, 12.0 + + def expected_gains(b: float) -> float: + a = _solve_a(log_gains, weights, b=b, count_target=count_target) + return float((weights * gains * _logistic(log_gains, a, b)).sum()) + + if not expected_gains(low) <= gains_target <= expected_gains(high): + raise ValueError( + "Residential gains target lies outside the range a logistic tilt of " + f"the liable gainers can reach at count {count_target}: " + f"[{expected_gains(low)}, {expected_gains(high)}] versus {gains_target}." + ) + for _ in range(_BISECTION_ITERATIONS): + mid = 0.5 * (low + high) + if expected_gains(mid) < gains_target: + low = mid + else: + high = mid + if high - low < _SOLVE_TOLERANCE: + break + b = 0.5 * (low + high) + a = _solve_a(log_gains, weights, b=b, count_target=count_target) + return a, b, centre + + +def _weighted_systematic_flags( + probabilities: np.ndarray, + weights: np.ndarray, + order: np.ndarray, + offset: float, +) -> np.ndarray: + """Weighted systematic sampling along ``order``. + + Walking the persons in order, the expected weight ``w * p`` accrues to a + running balance; a person is flagged when the balance reaches + ``(1 - offset)`` of their own weight, and their whole weight is then + drawn down. The balance therefore stays within one person's weight of + zero at every step, so the flagged weight tracks the expected weight + along the ordering rather than only in total. + """ + + flags = np.zeros(probabilities.shape, dtype=bool) + owed = 0.0 + for index in order: + weight = float(weights[index]) + owed += weight * float(probabilities[index]) + if owed >= (1.0 - offset) * weight: + flags[index] = True + owed -= weight + return flags + + +# --------------------------------------------------------------------------- +# Main asset type +# --------------------------------------------------------------------------- + + +def _type_kernels(gains: np.ndarray, medians: Mapping[str, float]) -> np.ndarray: + """Log-normal size kernels, one column per non-residential type.""" + + log_gains = np.log(gains)[:, None] + centres = np.log( + np.asarray( + [medians[asset_type] for asset_type in CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES] + ) + )[None, :] + return np.exp(-0.5 * ((log_gains - centres) / CGT_ASSET_TYPE_LOG_SIGMA) ** 2) + + +def fit_type_weights( + gains: np.ndarray, + weights: np.ndarray, + *, + medians: Mapping[str, float], + share_targets: Mapping[str, float], +) -> tuple[np.ndarray, np.ndarray, int]: + """Fit the type weights so expected gains shares match the targets. + + Returns the type weights, the per-person type probabilities and the + number of iterations used. Multiplicative updates on the weights are a + one-dimensional rake per type; with a wide kernel every type reaches + every person, so the fixed point exists and the loop converges quickly. + """ + + kernels = _type_kernels(gains, medians) + targets = np.asarray( + [ + share_targets[asset_type] + for asset_type in CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES + ] + ) + type_weights = np.ones(len(CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES)) + mass = weights * gains + iterations = 0 + probabilities = kernels + for step in range(1, _SHARE_FIT_ITERATIONS + 1): + iterations = step + scaled = kernels * type_weights[None, :] + probabilities = scaled / scaled.sum(axis=1, keepdims=True) + achieved = (mass[:, None] * probabilities).sum(axis=0) / mass.sum() + if np.max(np.abs(achieved - targets)) < _SHARE_FIT_TOLERANCE: + break + type_weights = type_weights * (targets / np.maximum(achieved, 1e-300)) + type_weights = type_weights / type_weights.sum() + return type_weights, probabilities, iterations + + +# --------------------------------------------------------------------------- +# Stage +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class UKCGTAssetTypeSummary: + """What the stage was asked for and what it realised.""" + + residential: Mapping[str, object] + asset_type: Mapping[str, object] + composition_by_band: tuple[dict[str, object], ...] + value_counts: Mapping[str, int] + facts: Mapping[str, object] + seeds: Mapping[str, int] + + def evidence(self) -> dict[str, object]: + return { + "stage": UK_CGT_ASSET_TYPE_STAGE_NAME, + "residential": dict(self.residential), + "asset_type": dict(self.asset_type), + "composition_by_band": [dict(row) for row in self.composition_by_band], + "value_counts": dict(self.value_counts), + "facts": dict(self.facts), + "seeds": dict(self.seeds), + } + + +def assign_uk_cgt_asset_types( + frame: Frame, + facts: HMRCCGTAssetTypeFacts, + parameters: UKCGTPolicyParameters, + *, + residential_seed: int = CGT_RESIDENTIAL_FLAG_SEED, + asset_type_seed: int = CGT_ASSET_TYPE_SEED, + mass_change_reason: str = UK_CGT_ASSET_TYPE_MASS_CONSERVATION_REASON, +) -> tuple[Frame, UKCGTAssetTypeSummary]: + """Write the asset-type column and the residential gains column.""" + + validate_uk_national_frame(frame) + time_period = uk_time_period(frame) + person = frame.table("person").reset_index(drop=True) + if "capital_gains" not in person.columns: + raise ValueError("Person table has no capital_gains column to classify.") + for column in (CGT_ASSET_TYPE_COLUMN, CGT_RESIDENTIAL_GAINS_COLUMN): + if column in person.columns: + raise ValueError(f"Person table already carries {column}.") + household = frame.table("household") + weights_by_household = pd.Series( + frame.weights_for("household").values, index=household["household_id"] + ) + person_weight = ( + person["person_household_id"].map(weights_by_household).to_numpy(dtype=float) + ) + if not np.isfinite(person_weight).all(): + raise ValueError("Every person must map to a weighted household.") + gains = pd.to_numeric(person["capital_gains"], errors="raise").to_numpy(dtype=float) + person_id = person["person_id"].to_numpy() + + liable = gains > parameters.annual_exempt_amount + positive = gains > 0 + asset_type = np.full(len(person), CGT_ASSET_TYPE_NONE, dtype=object) + asset_type[positive & ~liable] = CGT_ASSET_TYPE_SUB_AEA + + # 1. Residential flag on the liable population. + liable_index = np.flatnonzero(liable) + liable_gains = gains[liable_index] + liable_weights = person_weight[liable_index] + count_target = facts.residential_taxpayers_individuals_basis + gains_target = facts.residential_gains_individuals_basis + a, b, centre = solve_residential_logistic( + liable_gains, + liable_weights, + count_target=count_target, + gains_target=gains_target, + ) + probabilities = _logistic(np.log(liable_gains) - centre, a, b) + rng_flag = np.random.default_rng((residential_seed, int(time_period))) + order = np.lexsort((person_id[liable_index], liable_gains)) + flags = _weighted_systematic_flags( + probabilities, liable_weights, order, float(rng_flag.random()) + ) + residential_rows = liable_index[flags] + asset_type[residential_rows] = CGT_ASSET_TYPE_RESIDENTIAL + residential_gains = np.zeros(len(person)) + residential_gains[residential_rows] = gains[residential_rows] + + # 2. Main asset type for the non-residential liable remainder. + remainder_index = liable_index[~flags] + medians = { + asset_type_name: facts.table7_type(asset_type_name).mean_gain_per_disposal + for asset_type_name in CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES + } + share_targets = facts.non_residential_gains_shares() + type_weights = np.full(len(CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES), np.nan) + fit_iterations = 0 + if remainder_index.size: + type_weights, type_probabilities, fit_iterations = fit_type_weights( + gains[remainder_index], + person_weight[remainder_index], + medians=medians, + share_targets=share_targets, + ) + rng_type = np.random.default_rng((asset_type_seed, int(time_period))) + # Draws are consumed in person order so the stream is reproducible. + remainder_order = np.argsort(person_id[remainder_index], kind="stable") + uniforms = np.empty(remainder_index.size) + uniforms[remainder_order] = rng_type.random(remainder_index.size) + cumulative = np.cumsum(type_probabilities, axis=1) + choice = (uniforms[:, None] > cumulative).sum(axis=1) + choice = np.minimum(choice, len(CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES) - 1) + asset_type[remainder_index] = np.asarray( + CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES, dtype=object + )[choice] + + if (asset_type[liable] == CGT_ASSET_TYPE_NONE).any() or ( + asset_type[liable] == CGT_ASSET_TYPE_SUB_AEA + ).any(): + raise ValueError("Every liable gainer must carry an asset type.") + if set(asset_type) - set(CGT_ASSET_TYPE_DOMAIN): + raise ValueError("Asset-type draw produced a value outside the domain.") + + # Reporting. + expected_count = float((liable_weights * probabilities).sum()) + expected_gains = float((liable_weights * liable_gains * probabilities).sum()) + bernoulli = probabilities * (1.0 - probabilities) + count_sigma = float(np.sqrt((liable_weights**2 * bernoulli).sum())) + gains_sigma = float( + np.sqrt(((liable_weights * liable_gains) ** 2 * bernoulli).sum()) + ) + achieved_count = float(person_weight[residential_rows].sum()) + achieved_gains = float( + residential_gains[residential_rows].dot(person_weight[residential_rows]) + ) + residential = { + "count_target_individuals_basis": count_target, + "gains_target_individuals_basis": gains_target, + "expected_count": expected_count, + "expected_gains": expected_gains, + "achieved_count": achieved_count, + "achieved_gains": achieved_gains, + "achieved_rows": int(residential_rows.size), + "max_liable_weight": float(liable_weights.max()), + "count_bernoulli_sigma": count_sigma, + "gains_bernoulli_sigma": gains_sigma, + "logistic_intercept": float(a), + "logistic_slope": float(b), + "log_gain_centre": float(centre), + "liable_taxpayer_mass": float(liable_weights.sum()), + "liable_gains_mass": float((liable_weights * liable_gains).sum()), + "table8a_taxpayers_total": facts.table8a_taxpayers_total, + "table8a_gains_total": facts.table8a_gains_total, + "table8b_individuals_taxpayer_share": facts.individuals_share("taxpayers"), + "table8b_individuals_gains_share": facts.individuals_share("gains"), + } + remainder_mass = float( + (person_weight[remainder_index] * gains[remainder_index]).sum() + ) + achieved_type_gains = { + asset_type_name: float( + (person_weight * gains)[asset_type == asset_type_name].sum() + ) + for asset_type_name in CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES + } + asset_type_report = { + "log_sigma": CGT_ASSET_TYPE_LOG_SIGMA, + "median_anchor_gbp": medians, + "type_weights": { + asset_type_name: float(type_weights[index]) + for index, asset_type_name in enumerate( + CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES + ) + }, + "share_fit_iterations": int(fit_iterations), + "target_gains_share": dict(share_targets), + "achieved_gains_share": { + asset_type_name: (value / remainder_mass if remainder_mass > 0 else 0.0) + for asset_type_name, value in achieved_type_gains.items() + }, + "achieved_people": { + asset_type_name: float(person_weight[asset_type == asset_type_name].sum()) + for asset_type_name in CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES + }, + "achieved_gains": achieved_type_gains, + "non_residential_gains_mass": remainder_mass, + } + bounds = HMRC_CGT_GAIN_BAND_LOWER_BOUNDS + uppers = (*bounds[1:], np.inf) + composition = [] + for lower, upper in zip(bounds, uppers, strict=True): + in_band = liable & (gains >= lower) & (gains < upper) + row: dict[str, object] = {"gain_lower_bound": lower} + for asset_type_name in ( + CGT_ASSET_TYPE_RESIDENTIAL, + *CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES, + ): + mask = in_band & (asset_type == asset_type_name) + row[f"{asset_type_name}_people"] = float(person_weight[mask].sum()) + row[f"{asset_type_name}_gains"] = float( + (person_weight[mask] * gains[mask]).sum() + ) + composition.append(row) + value_counts = { + value: int((asset_type == value).sum()) for value in CGT_ASSET_TYPE_DOMAIN + } + summary = UKCGTAssetTypeSummary( + residential=residential, + asset_type=asset_type_report, + composition_by_band=tuple(composition), + value_counts=value_counts, + facts={ + "resource": facts.resource, + "resource_sha256": facts.resource_sha256, + "source_commit": facts.source_commit, + "annual_exempt_amount": parameters.annual_exempt_amount, + }, + seeds={"residential_flag": residential_seed, "asset_type": asset_type_seed}, + ) + + new_person = person.copy() + new_person[CGT_ASSET_TYPE_COLUMN] = asset_type + new_person[CGT_RESIDENTIAL_GAINS_COLUMN] = residential_gains + weights = frame.weights_for("household") + household_mass = float(weights.total) + receipt = MassChangeRecord( + entity="household", + old_total=household_mass, + new_total=household_mass, + declared_factor=1.0, + reason=mass_change_reason, + ) + result = uk_national_frame( + person=new_person, + benunit=frame.table("benunit"), + household=household, + time_period=time_period, + weight_kind=uk_household_weight_kind(frame), + household_weights=weights.values, + mass_log=(*frame.mass_log, receipt), + ) + validate_uk_national_frame(result) + return result, summary + + +def uk_cgt_asset_type_stage_transform( + stage: SourceStageSpec, + *, + facts: HMRCCGTAssetTypeFacts | None = None, + parameters: UKCGTPolicyParameters | None = None, +): + """Bind the spine manifest, then run the reviewed assignment.""" + + _assert_cgt_asset_type_stage_parameters(stage) + return UKCGTAssetTypeStageTransform(stage=stage, facts=facts, parameters=parameters) + + +@dataclass(frozen=True) +class UKCGTAssetTypeStageTransform: + """Source-plan asset-type assignment with a stage-time summary receipt.""" + + stage: SourceStageSpec + facts: HMRCCGTAssetTypeFacts | None = None + parameters: UKCGTPolicyParameters | None = None + last_result: UKCGTAssetTypeSummary | None = field(default=None, init=False) + + def __call__(self, frame: Frame) -> Frame: + _assert_cgt_asset_type_stage_parameters(self.stage) + facts = self.facts + if facts is None: + facts = load_hmrc_cgt_asset_type_facts() + parameters = self.parameters + if parameters is None: + parameters = uk_cgt_policy_parameters(uk_time_period(frame)) + result, summary = assign_uk_cgt_asset_types(frame, facts, parameters) + object.__setattr__(self, "last_result", summary) + return result + + @staticmethod + def output_columns() -> tuple[str, ...]: + return (CGT_ASSET_TYPE_COLUMN, CGT_RESIDENTIAL_GAINS_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()} + + +def cgt_asset_type_operation_parameters() -> dict[str, dict[str, Any]]: + """The reviewed operation payloads the manifests must carry verbatim.""" + + return { + "verify_vendored_fact_resource": { + "artifact_role": "cgt_asset_type_facts", + "resource": HMRC_CGT_ASSET_TYPE_RESOURCE, + "feed_pin": "chronicle_feed.json", + "record_sets": list(HMRC_CGT_ASSET_TYPE_RECORD_SETS), + "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, + }, + "assign_residential_property_flag": { + "population": ( + "persons with net capital gains above the annual exempt amount " + "(the national taxpayer proxy)" + ), + "model": ( + "logistic probability in centred log gains, p = 1 / (1 + exp(-(a + " + "b (log g - c)))) with c the weighted mean log gain of the " + "population" + ), + "parameter_solver": ( + "nested bisection; the intercept matches the expected weighted " + "count at each trial slope, the slope matches the expected weighted " + "gains" + ), + "count_target": ( + "Table 8a 2024-25 total taxpayers reporting residential property " + "disposals times the Table 8b 2024-25 individuals/all taxpayer share " + "on the UK Property service" + ), + "gains_target": ( + "Table 8a 2024-25 total residential property gains times the Table " + "8b 2024-25 individuals/all gains share on the UK Property service" + ), + "basis_assumption": ( + "trusts hold the same share of the Self Assessment component as of " + "the UK Property service, and a flagged person's whole net gain is " + "attributed to residential property" + ), + "realization": ( + "weighted systematic sampling in ascending gain order with one " + "seeded offset: a person is flagged when the expected weight owed " + "so far reaches their own weight, so the flagged weight tracks the " + "expected weight within one person's weight along the gains axis " + "and the realised count and gains sit close to their expectations; " + "the Bernoulli sigma of each is reported as the envelope" + ), + "seed": CGT_RESIDENTIAL_FLAG_SEED, + "seed_mixing": "seed combined with the build period", + "output_column": CGT_RESIDENTIAL_GAINS_COLUMN, + "output_semantics": ( + "the person's capital_gains where flagged residential, 0 otherwise" + ), + }, + "assign_main_asset_type": { + "population": "liable gainers not flagged residential", + "categories": list(CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES), + "kernel": ( + "log-normal density in log gains centred on each type's Table 7 " + "2023-24 mean gain per disposal, one common log-scale width" + ), + "log_sigma": CGT_ASSET_TYPE_LOG_SIGMA, + "share_targets": ( + "Table 7 2023-24 gains by asset type excluding residential land " + "and buildings, as shares" + ), + "weight_fitting": ( + "multiplicative updates of the type weights until the " + "household-weighted expected gains shares by type match the share " + "targets" + ), + "weight_fitting_iterations": _SHARE_FIT_ITERATIONS, + "weight_fitting_tolerance": _SHARE_FIT_TOLERANCE, + "realization": ( + "one seeded uniform per person against the cumulative type " + "probabilities, consumed in person_id order" + ), + "seed": CGT_ASSET_TYPE_SEED, + "seed_mixing": "seed combined with the build period", + "output_column": CGT_ASSET_TYPE_COLUMN, + "value_domain": list(CGT_ASSET_TYPE_DOMAIN), + "none_semantics": "no positive net gains", + "sub_aea_semantics": ( + "positive net gains at or below the annual exempt amount; never a " + "taxpayer, so never classified" + ), + "diagnostic_only": True, + }, + "record_mass_conservation_receipt": { + "entity": "household", + "reason": UK_CGT_ASSET_TYPE_MASS_CONSERVATION_REASON, + "declared_factor": 1.0, + "gate_coupling": ( + "The terminal family gate requires a valid mass-conserving " + "MassChangeRecord carrying exactly this stage-specific reason." + ), + }, + "classify_cgt_asset_type_facts_with_reviewed_fence": { + "calibration_permitted": False, + "fact_fence_id": "cgt_asset_type_facts_sample_based_prior_vintage", + "fenced_fact_count": 33, + "fenced_fact_composition": ( + "Table 7 2023-24 rows: 6 asset-category rows, 3 category totals, " + "12 financial asset-type rows, 12 non-financial asset-type rows" + ), + "classification_rationale": ( + "Table 7 is sample-based, published for 2023-24 only, counts " + "disposals rather than taxpayers and includes trusts and non-UK " + "assets; it seeds the asset-type draw and is reported against, " + "never fitted." + ), + "calibrated_facts": ( + "The Table 8a 2024-25 total residential property taxpayers and " + "gains restated on the individuals basis " + "(hmrc.cgt.residential_property_taxpayers, " + "hmrc.cgt.residential_property_gains in uk_population_targets.json)." + ), + "adjudication": "https://github.com/PolicyEngine/microcosm/issues/725", + }, + } + + +def _assert_cgt_asset_type_stage_parameters(stage: SourceStageSpec) -> None: + """Arm 1 of the #730/#684 two-arm rule: the manifest restates the code.""" + + expected = cgt_asset_type_operation_parameters() + kinds = tuple(operation.kind for operation in stage.operations) + if kinds != tuple(expected): + raise ValueError( + "CGT asset-type stage operation order drifted: expected " + f"{tuple(expected)}, got {kinds}." + ) + for operation in stage.operations: + actual = dict(operation.parameters) + declared = expected[operation.kind] + if actual != declared: + drifted = sorted( + key + for key in {*actual, *declared} + if actual.get(key) != declared.get(key) + ) + raise ValueError( + f"CGT asset-type stage {operation.kind} declaration drifted from " + f"the reviewed mapping on parameter(s) {drifted}." + ) + if tuple(stage.outputs) != UKCGTAssetTypeStageTransform.output_columns(): + raise ValueError( + "CGT asset-type stage outputs drifted: expected " + f"{UKCGTAssetTypeStageTransform.output_columns()}, got {stage.outputs}." + ) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_imputation.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_imputation.py index 9c30ef3402..bab9d8692c 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_imputation.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_imputation.py @@ -27,14 +27,17 @@ other taxable benefits are not persisted; reliefs such as pension contributions and Gift Aid are not deducted. Both push the proxy up or down at the margins, which can move a person one income band. -2. **Allocation is rank-preserving within income band.** Within each income - band, gainers are ranked by their existing gains and the top of the - ranking absorbs the published taxpayer mass, highest gain band first. A - person is not split across bands, so band mass is matched to the - granularity of one household weight. +2. **Allocation is rank-preserving within a conditioning cell.** Within + each income band x age group x region group cell, gainers are ranked by + their existing gains and the top of the ranking absorbs the cell's raked + taxpayer mass, highest gain band first. A person is not split across + bands, so band mass is matched to the granularity of one household + weight. A cell short of support scales its targets down and releases the + (gain band, income band) shortfall to the income band's pooled walk over + its still-unassigned gainers (microcosm#725). 3. **Rounded published values are repaired, not trusted raw.** Counts round - to the nearest thousand and amounts to the nearest million, and four - cells of the 2023-24 table imply a mean outside their own band. Implied + to the nearest thousand and amounts to the nearest million, and two + cells of the 2024-25 table imply a mean below their own band. Implied means are clamped just inside the violated boundary, keeping the signal that the cell's mass sits near that edge; suppressed-count cells are allocated the count their own published gains imply at the band mean, @@ -47,6 +50,26 @@ with a CGT liability, so the candidate's remaining gainers are treated as sub-AEA gainers rather than being invented into the liability distribution or deleted. +5. **The joint is the published 2024-25 surface, not an aged one.** The + 2026 release publishes Table 3 for 2024-25, the tax year of the Table 1 + observations the calibration fits, and its rows are vendored verbatim + from the pinned Chronicle feed. Table 2.1a's thirteen size bands folded + onto Table 3's ten must agree with the joint's row totals within + publication rounding; the summary reports the difference band by band + and nothing is rescaled. +6. **Age and region margins are raked, not observed jointly.** No table + publishes gains by age or region crossed with income, so the allocation + targets are raked from the joint, the Table 6 age counts, the Table 5 + region counts on the individuals basis and the Table 6 gains by age, + seeded by the frame's own weighted (age, region | income band) shares + among gainers. The count margins are met by proportional scaling; the + gains margin is one linear constraint per age group (raked people times + Table 3 cell means) met by an exponential tilt of the group's cells that + holds its count, so an age group carries its published gains as well as + its taxpayers instead of inheriting the frame's band mix. The rake works + at a coarser grain than the publications (seven age groups, four region + groups); the summary reports achieved against published at the full + Table 6 and Table 5 grain. Only persons with positive existing gains are gainers. The certified candidate also carries net losses (negative amounts) and zeros; both pass @@ -56,19 +79,26 @@ from __future__ import annotations +from collections.abc import Mapping, Sequence from dataclasses import dataclass, field from pathlib import Path +from types import MappingProxyType import numpy as np import pandas as pd from microcosm.build.source_manifest import SourceStageSpec from microcosm.build.uk_runtime.hmrc_capital_gains import ( + HMRC_CGT_BUILD_PERIOD, + HMRC_CGT_CONDITIONING_RECORD_SETS, + HMRC_CGT_CONDITIONING_RESOURCE, HMRC_CGT_GAIN_BAND_LOWER_BOUNDS, HMRC_CGT_INCOME_BAND_LOWER_BOUNDS, HMRC_CGT_SOURCE_VINTAGE, HMRCCapitalGainsJointDistribution, - materialize_hmrc_capital_gains_joint_distribution, + HMRCCGTConditioningFacts, + load_hmrc_cgt_conditioning_facts, + load_hmrc_cgt_joint_distribution, ) from microcosm.build.uk_runtime.national_frame import ( UKNationalStage, @@ -77,6 +107,7 @@ uk_time_period, validate_uk_national_frame, ) +from microcosm.calibrate.geography_constants import UK_REGION_TIER_ENUM from microcosm.frame import Frame, MassChangeRecord __all__ = [ @@ -87,7 +118,16 @@ "UK_CGT_TAXABLE_INCOME_PROXY_COMPONENTS", "UKCGTImputationSummary", "UKCGTPolicyParameters", + "UK_CGT_AGE_GROUP_LOWER_BOUNDS", + "UK_CGT_CONDITIONING_DIMENSIONS", + "UK_CGT_FALLBACK_POLICY", + "UK_CGT_RAKE_ROUNDS", + "UK_CGT_RAKE_TOLERANCE", + "UK_CGT_REGION_GROUP_LABELS", + "UK_CGT_REGION_GROUPS", + "UKCGTAllocationReport", "impute_uk_capital_gains", + "impute_uk_capital_gains_with_report", "summarize_uk_cgt_imputation", "uk_capital_gains_imputation_stage", "uk_cgt_spine_stage_transform", @@ -138,7 +178,7 @@ #: A cell mean must sit strictly inside its band for a within-band #: distribution to match it. Published values round to the nearest thousand #: people and million pounds, and a rounded count of 1 against a rounded -#: amount can imply a mean outside the band — four cells of the 2023-24 +#: amount can imply a mean outside the band — two cells of the 2024-25 #: table do exactly that — so implied means are repaired into the band by #: this margin (a fraction of band width) rather than trusted raw. _MEAN_MARGIN = 0.02 @@ -152,6 +192,71 @@ #: caller passing an unrepaired mean, not published data. _MEAN_POSITION_TOLERANCE = 1e-9 +#: Age groups the allocation conditions on (lower bounds, ascending). Every +#: gainer below the second bound falls in the first group; carriers are +#: adults, so the group is 16-24 in practice. Table 6's 16-24 and 25-34 +#: bands are separate groups because pooled they left the 16-24 rows at +#: the bottom of every cell walk (two liable rows against 4,000 published +#: taxpayers); the bands from 35 pair up because a few hundred effective +#: carriers cannot populate 9 x 12 x 6 cells. The summary still reports at +#: the published grain. +UK_CGT_AGE_GROUP_LOWER_BOUNDS: tuple[int, ...] = (16, 25, 35, 45, 55, 65, 75) + +#: Region groups the allocation conditions on: spine ``region`` enum name +#: -> group label. London and the South East plus East of England hold +#: over half of published gains; the remaining English regions and the +#: three devolved nations are pooled. +UK_CGT_REGION_GROUPS: Mapping[str, str] = MappingProxyType( + { + "LONDON": "london", + "SOUTH_EAST": "south_east_and_east_of_england", + "EAST_OF_ENGLAND": "south_east_and_east_of_england", + "NORTH_EAST": "rest_of_england", + "NORTH_WEST": "rest_of_england", + "YORKSHIRE": "rest_of_england", + "EAST_MIDLANDS": "rest_of_england", + "WEST_MIDLANDS": "rest_of_england", + "SOUTH_WEST": "rest_of_england", + "WALES": "wales_scotland_northern_ireland", + "SCOTLAND": "wales_scotland_northern_ireland", + "NORTHERN_IRELAND": "wales_scotland_northern_ireland", + } +) +if set(UK_CGT_REGION_GROUPS) != set(UK_REGION_TIER_ENUM.values()): + raise RuntimeError("UK_CGT_REGION_GROUPS must cover exactly the region tier.") + +#: Group labels in a fixed order, the index the allocation uses. +UK_CGT_REGION_GROUP_LABELS: tuple[str, ...] = tuple( + dict.fromkeys(UK_CGT_REGION_GROUPS.values()) +) + +#: Rounds of the generalised rake (the three count margins by proportional +#: scaling, then the gains tilt per age group) and the relative tolerance +#: every attainable margin must meet for it to stop early; feasible margins +#: converge geometrically. +UK_CGT_RAKE_ROUNDS = 500 +UK_CGT_RAKE_TOLERANCE = 1e-9 + +#: The tilt exponent is bounded (cell means are scaled onto [0, 1] by the +#: largest cell mean); a group whose target mean gain lies outside its +#: seeded cells' means saturates at the bound and is reported unattainable. +_TILT_LAMBDA_BOUND = 700.0 +_TILT_BISECTION_ITERATIONS = 80 + +#: How a (gain band, income band) shortfall left by the conditioned cells is +#: met: the income band's still-unassigned gainers are pooled across age and +#: region groups and walked by rank, so the joint is met wherever the band +#: has pooled support instead of being split into allotments below one +#: carrier's weight. +UK_CGT_FALLBACK_POLICY = "pooled_income_band_rank_walk" + +#: The dimensions the allocation conditions on, in nesting order. +UK_CGT_CONDITIONING_DIMENSIONS: tuple[str, ...] = ( + "income band", + "age group", + "region group", +) + @dataclass(frozen=True) class UKCGTPolicyParameters: @@ -285,6 +390,36 @@ def _pareto_quantile(quantiles: np.ndarray, lower: float, mean: float) -> np.nda return lower * np.power(1.0 - quantiles, -1.0 / alpha) +def _pareto_stratum_means( + lower_quantiles: np.ndarray, upper_quantiles: np.ndarray, lower: float, mean: float +) -> np.ndarray: + """Conditional mean of the open-band Pareto on each quantile stratum. + + ``E[X | U in [a, b)]`` for ``X = lower (1 - U)^(-1/alpha)`` integrates in + closed form; the strata partition (0, 1), so the stratum means average + back to the published mean exactly. A band that reaches only a few + dozen carriers therefore carries its published mean instead of the + typical iid draw, which for a Pareto with infinite variance sits well + below it (most of the mean lives in the top two percent of the + distribution). + """ + if mean <= lower: + raise ValueError( + f"Open-band mean {mean} must exceed the band lower bound {lower}." + ) + alpha = mean / (mean - lower) + power = 1.0 - 1.0 / alpha + width = upper_quantiles - lower_quantiles + return ( + lower + * ( + np.power(1.0 - lower_quantiles, power) + - np.power(1.0 - upper_quantiles, power) + ) + / (power * width) + ) + + @dataclass(frozen=True) class _CellPlan: """Allocation and draw parameters for one gain band within an income band.""" @@ -423,43 +558,670 @@ def band_mean(gain_lower_bound: int) -> float: return tuple(plans) -def _draw_amounts(plan: _CellPlan, quantiles: np.ndarray) -> np.ndarray: - lower = plan.effective_lower_bound - if np.isinf(plan.gain_upper_bound): - return _pareto_quantile(quantiles, lower, plan.mean) - return _truncated_exponential_quantile( - quantiles, lower, float(plan.gain_upper_bound), plan.mean - ) +@dataclass(frozen=True) +class UKCGTAllocationReport: + """What the rake asked for and what the walk delivered, cell by cell.""" + + band_rows: tuple[dict[str, object], ...] + joint_rows: tuple[dict[str, object], ...] + rake: Mapping[str, object] + fallback_released_mass: float + fallback_share_by_band: Mapping[int, float] + conditioning: Mapping[str, object] + rounding_carry_out: Mapping[str, Mapping[str, float]] = field(default_factory=dict) + + def evidence(self) -> dict[str, object]: + return { + "band_rows": [dict(row) for row in self.band_rows], + "joint_rows": [dict(row) for row in self.joint_rows], + "rake": dict(self.rake), + "fallback_released_mass": self.fallback_released_mass, + "fallback_share_by_band": { + str(key): value for key, value in self.fallback_share_by_band.items() + }, + "conditioning": dict(self.conditioning), + "rounding_carry_out": { + key: dict(value) for key, value in self.rounding_carry_out.items() + }, + } @dataclass(frozen=True) class UKCGTImputationSummary: - """Achieved allocation against the published surface, for reporting.""" + """Achieved allocation against the published surface, for reporting. + + ``rows`` compares the Table 3 gain bands with the 2024-25 Table 2.1a + levels folded onto them; ``age_rows`` and ``region_rows`` compare the + published Table 6 and Table 5 grain (the region rows scaled to the + individuals basis); ``age_by_band_rows`` is the joint the #725 finding + was measured on. + """ rows: pd.DataFrame taxpayer_mass: float published_taxpayer_mass: float remainder_mass: float + age_rows: pd.DataFrame = field(default_factory=pd.DataFrame) + region_rows: pd.DataFrame = field(default_factory=pd.DataFrame) + age_by_band_rows: pd.DataFrame = field(default_factory=pd.DataFrame) + allocation: UKCGTAllocationReport | None = None def evidence(self) -> dict[str, object]: - return { + evidence: dict[str, object] = { "stage": UK_CGT_IMPUTATION_STAGE_NAME, "rows": self.rows.to_dict(orient="records"), "taxpayer_mass": self.taxpayer_mass, "published_taxpayer_mass": self.published_taxpayer_mass, "remainder_mass": self.remainder_mass, + "age_rows": self.age_rows.to_dict(orient="records"), + "region_rows": self.region_rows.to_dict(orient="records"), + "age_by_band_rows": self.age_by_band_rows.to_dict(orient="records"), } + if self.allocation is not None: + evidence["allocation"] = self.allocation.evidence() + return evidence -def impute_uk_capital_gains( +def _person_conditioning_cells( + person: pd.DataFrame, household: pd.DataFrame +) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: + """Age, age group, region and region group for every person row. + + Region is a household column; it reaches persons through the household + id, and a person without a region or with an unknown region name + refuses the stage rather than falling into a silent group. + """ + + if "age" not in person.columns: + raise ValueError("Person table has no age column to condition on.") + if "region" not in household.columns: + raise ValueError("Household table has no region column to condition on.") + age = pd.to_numeric(person["age"], errors="raise").to_numpy(dtype=float) + if not np.isfinite(age).all(): + raise ValueError("Person ages must be finite to condition the redraw.") + region_by_household = pd.Series( + household["region"].astype(str).to_numpy(), index=household["household_id"] + ) + mapped = person["person_household_id"].map(region_by_household) + if mapped.isna().any(): + raise ValueError( + "CGT conditioning cannot map every person to a household region." + ) + region = mapped.astype(str).to_numpy() + unknown = sorted(set(region) - set(UK_CGT_REGION_GROUPS)) + if unknown: + raise ValueError(f"Unknown region name(s) for CGT conditioning: {unknown}.") + age_group = np.digitize(age, UK_CGT_AGE_GROUP_LOWER_BOUNDS[1:]) + label_index = { + label: index for index, label in enumerate(UK_CGT_REGION_GROUP_LABELS) + } + region_group = np.asarray( + [label_index[UK_CGT_REGION_GROUPS[name]] for name in region], dtype=int + ) + return age, age_group, region, region_group + + +def _joint_plans( + distribution: HMRCCapitalGainsJointDistribution, + conditioning: HMRCCGTConditioningFacts, + *, + annual_exempt_amount: float, +) -> tuple[dict[tuple[int, int], _CellPlan], tuple[dict[str, object], ...]]: + """Table 3's 2024-25 joint, reconciled column by column, with a receipt. + + Suppression, rounding repair, the liability floor and the column + reconciliation onto the published All-row totals come from + :func:`_band_plans` unchanged. The receipt compares each gain band's + published row total with the Table 2.1a 2024-25 rows folded onto it; + the two tables describe one universe at one vintage, and the vendored + resource's loader refuses a pair that disagrees beyond publication + rounding, so the difference here is a report, not a gate. + """ + + aggregated = conditioning.size_bands_aggregated(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS) + incomes = HMRC_CGT_INCOME_BAND_LOWER_BOUNDS + joint: dict[tuple[int, int], _CellPlan] = {} + for income_lower in incomes: + for plan in _band_plans( + distribution, income_lower, annual_exempt_amount=annual_exempt_amount + ): + joint[(plan.gain_lower_bound, income_lower)] = plan + band_rows: list[dict[str, object]] = [] + for gain_lower in HMRC_CGT_GAIN_BAND_LOWER_BOUNDS: + total = distribution.band_total(gain_lower) + folded_people, folded_gains = aggregated[gain_lower] + people_difference = ( + None if total.individuals is None else total.individuals - folded_people + ) + gains_difference = total.gains - folded_gains + plans = [joint[(gain_lower, income_lower)] for income_lower in incomes] + band_rows.append( + { + "gain_lower_bound": gain_lower, + "published_people": total.individuals, + "published_gains": total.gains, + "table2_1a_people": folded_people, + "table2_1a_gains": folded_gains, + "people_difference": people_difference, + "gains_difference": gains_difference, + "target_people": sum(plan.allocation_people for plan in plans), + "target_gains_at_cell_means": sum( + plan.allocation_people * plan.mean for plan in plans + ), + "means_repaired": sum(int(plan.mean_repaired) for plan in plans), + } + ) + return joint, tuple(band_rows) + + +def _fold_age(conditioning: HMRCCGTConditioningFacts, measure: str) -> np.ndarray: + """Fold one Table 6 measure onto the age groups. + + Bands below the first group bound (the 0-15 band) are left out: carriers + are adults, so the frame cannot hold them, and the normalisation onto + the joint's total spreads their mass across the groups instead of + folding a thousand children into the 16-24 group. + """ + + margin = np.zeros(len(UK_CGT_AGE_GROUP_LOWER_BOUNDS)) + for band in conditioning.age_bands: + if band.lower_bound < UK_CGT_AGE_GROUP_LOWER_BOUNDS[0]: + continue + group = int(np.digitize(band.lower_bound, UK_CGT_AGE_GROUP_LOWER_BOUNDS[1:])) + margin[group] += float(getattr(band, measure)) + return margin + + +def _fold_age_margin(conditioning: HMRCCGTConditioningFacts) -> np.ndarray: + return _fold_age(conditioning, "taxpayers") + + +def _fold_age_gains_margin(conditioning: HMRCCGTConditioningFacts) -> np.ndarray: + return _fold_age(conditioning, "gains") + + +def _fold_region_margin(conditioning: HMRCCGTConditioningFacts) -> np.ndarray: + share = conditioning.table1.individuals_share("taxpayers") + margin = np.zeros(len(UK_CGT_REGION_GROUP_LABELS)) + for row in conditioning.regions: + group = UK_CGT_REGION_GROUP_LABELS.index(UK_CGT_REGION_GROUPS[row.region]) + margin[group] += row.taxpayers * share + return margin + + +def _tilt_group( + group: np.ndarray, scaled_means: np.ndarray, target_mean: float +) -> tuple[np.ndarray, float, bool]: + """Tilt one age group's cells onto a target mean gain, holding its count. + + ``group`` is the group's mass over (gain band, income band, region + group) and ``scaled_means`` the Table 3 cell means over (gain band, + income band) scaled onto [0, 1]; ``target_mean`` is on the same scale. + Each cell is multiplied by ``exp(lambda * scaled mean)`` with ``lambda`` + solved by bisection, the exponential-family step of generalised raking: + the group's people-weighted mean gain is increasing in ``lambda`` and + runs from the smallest to the largest seeded cell mean, so a target + inside that range has exactly one solution, and one outside it takes + the bound and is reported unattainable. + """ + + count = float(group.sum()) + means = np.broadcast_to(scaled_means[:, :, None], group.shape) + positive = group > 0.0 + low = float(means[positive].min()) + high = float(means[positive].max()) + + def tilted(lam: float) -> np.ndarray: + # Anchor the exponent at the extreme the tilt favours so it never + # exceeds zero: no overflow at the bound in either direction. + anchor = high if lam >= 0.0 else low + return group * np.exp(lam * (means - anchor)) + + def tilted_mean(lam: float) -> float: + weights = tilted(lam) + return float((weights * means).sum() / weights.sum()) + + if not low < target_mean < high: + lam = -_TILT_LAMBDA_BOUND if target_mean <= low else _TILT_LAMBDA_BOUND + attainable = False + else: + lower_bound, upper_bound = -_TILT_LAMBDA_BOUND, _TILT_LAMBDA_BOUND + for _ in range(_TILT_BISECTION_ITERATIONS): + mid = 0.5 * (lower_bound + upper_bound) + if tilted_mean(mid) < target_mean: + lower_bound = mid + else: + upper_bound = mid + lam = 0.5 * (lower_bound + upper_bound) + attainable = True + weights = tilted(lam) + return weights * (count / float(weights.sum())), lam, attainable + + +def _scaling_factor(current: np.ndarray, target: np.ndarray) -> np.ndarray: + """Proportional-fit factor: target over current where the current is + positive, one where nothing can be scaled (a zero-seed category).""" + + factor = np.ones_like(current, dtype=float) + mask = current > 0.0 + factor[mask] = target[mask] / current[mask] + return factor + + +def _rake_error( + targets: np.ndarray, + *, + seed: np.ndarray, + joint_mass: np.ndarray, + age_margin: np.ndarray, + region_margin: np.ndarray, + gains_margin: np.ndarray, + cell_means: np.ndarray, + attainable: np.ndarray, +) -> float: + """Largest relative error over the seeded, attainable margin categories.""" + + errors: list[float] = [] + + def add(achieved: np.ndarray, wanted: np.ndarray, seeded: np.ndarray) -> None: + for have, want, ok in zip( + achieved.ravel(), wanted.ravel(), seeded.ravel(), strict=True + ): + if want > 0.0 and ok: + errors.append(abs(float(have) - float(want)) / float(want)) + + seeded_age = seed.sum(axis=(0, 1, 3)) > 0.0 + add(targets.sum(axis=(2, 3)), joint_mass, seed.sum(axis=(2, 3)) > 0.0) + add(targets.sum(axis=(0, 1, 3)), age_margin, seeded_age) + add(targets.sum(axis=(0, 1, 2)), region_margin, seed.sum(axis=(0, 1, 2)) > 0.0) + add( + (targets * cell_means[:, :, None, None]).sum(axis=(0, 1, 3)), + gains_margin, + seeded_age & attainable, + ) + return max(errors) if errors else 0.0 + + +def _rake_with_gains_tilt( + seed: np.ndarray, + *, + joint_mass: np.ndarray, + age_margin: np.ndarray, + region_margin: np.ndarray, + gains_margin: np.ndarray, + cell_means: np.ndarray, + rounds: int, + tolerance: float, +) -> tuple[np.ndarray, dict[str, object]]: + """Rake the four-way seed to three count margins and one gains margin. + + Each round scales the age groups and the region groups onto their + counts, tilts every age group onto its gains (:func:`_tilt_group`), and + scales the (gain band, income band) joint last. The generic mean-raking helper + scales columns independently and cannot hold a people-weighted gains + constraint, which is why the fit lives here. Rounds stop early once + every seeded, attainable margin holds to ``tolerance``. + """ + + targets = np.asarray(seed, dtype=float).copy() + n_age = targets.shape[2] + scale = float(cell_means.max()) if float(cell_means.max()) > 0.0 else 1.0 + scaled_means = cell_means / scale + target_means = np.zeros(n_age) + for a in range(n_age): + if age_margin[a] > 0.0: + target_means[a] = gains_margin[a] / age_margin[a] / scale + # The tilt is applied incrementally to the current targets, so each + # round's lambda shrinks toward zero as the fit converges; the reported + # lambda is the cumulative exponent the group ended up with. + lambdas = np.zeros(n_age) + attainable = np.ones(n_age, dtype=bool) + seeded_group = seed.sum(axis=(0, 1, 3)) > 0.0 + rounds_used = 0 + error = float("inf") + for round_index in range(1, rounds + 1): + rounds_used = round_index + targets *= _scaling_factor(targets.sum(axis=(0, 1, 3)), age_margin)[ + None, None, :, None + ] + targets *= _scaling_factor(targets.sum(axis=(0, 1, 2)), region_margin)[ + None, None, None, : + ] + for a in range(n_age): + if not seeded_group[a] or age_margin[a] <= 0.0 or gains_margin[a] <= 0.0: + continue + targets[:, :, a, :], lam, attainable[a] = _tilt_group( + targets[:, :, a, :], scaled_means, float(target_means[a]) + ) + lambdas[a] += lam + # The joint goes last: on a feasible system the order is immaterial + # at convergence, and on a frame that cannot support every age or + # region group (so the margins conflict) the Table 3 joint, which the + # cell walks and the pooled fallback are built on, is the one that + # holds exactly. + targets *= _scaling_factor(targets.sum(axis=(2, 3)), joint_mass)[ + :, :, None, None + ] + error = _rake_error( + targets, + seed=seed, + joint_mass=joint_mass, + age_margin=age_margin, + region_margin=region_margin, + gains_margin=gains_margin, + cell_means=cell_means, + attainable=attainable, + ) + if error < tolerance: + break + return targets, { + "rounds_used": rounds_used, + "max_error": error, + "lambdas": lambdas, + "attainable": attainable, + } + + +def _rake_allocation_targets( + joint: Mapping[tuple[int, int], _CellPlan], + conditioning: HMRCCGTConditioningFacts, + *, + is_gainer: np.ndarray, + person_weight: np.ndarray, + income_band: np.ndarray, + age_group: np.ndarray, + region_group: np.ndarray, +) -> tuple[np.ndarray, dict[str, object]]: + """Rake taxpayer targets over gain band x income band x age x region. + + The seed is the joint cell mass spread by the frame's own weighted (age + group, region group | income band) shares among gainers, so the frame's + incidence structure is the prior; the margins are the joint itself, the + Table 6 age counts and the Table 5 region counts on the individuals + basis, every margin first normalised onto the joint's total so rounding + cannot make them mutually infeasible. Cells the frame cannot support + keep a zero seed and are reported, never invented. + """ + + gains = HMRC_CGT_GAIN_BAND_LOWER_BOUNDS + incomes = HMRC_CGT_INCOME_BAND_LOWER_BOUNDS + n_gain, n_income = len(gains), len(incomes) + n_age, n_region = ( + len(UK_CGT_AGE_GROUP_LOWER_BOUNDS), + len(UK_CGT_REGION_GROUP_LABELS), + ) + joint_mass = np.zeros((n_gain, n_income)) + for gi, gain_lower in enumerate(gains): + for ii, income_lower in enumerate(incomes): + joint_mass[gi, ii] = joint[(gain_lower, income_lower)].allocation_people + total = float(joint_mass.sum()) + + shares = np.zeros((n_income, n_age, n_region)) + for ii, income_lower in enumerate(incomes): + in_band = is_gainer & (income_band == income_lower) + if not in_band.any(): + continue + np.add.at( + shares[ii], + (age_group[in_band], region_group[in_band]), + person_weight[in_band], + ) + band_mass = shares[ii].sum() + if band_mass > 0: + shares[ii] /= band_mass + seed = joint_mass[:, :, None, None] * shares[None, :, :, :] + + age_margin_raw = _fold_age_margin(conditioning) + region_margin_raw = _fold_region_margin(conditioning) + age_margin = ( + age_margin_raw * (total / age_margin_raw.sum()) + if age_margin_raw.sum() > 0 + else age_margin_raw + ) + region_margin = ( + region_margin_raw * (total / region_margin_raw.sum()) + if region_margin_raw.sum() > 0 + else region_margin_raw + ) + + cell_means = np.zeros((n_gain, n_income)) + for gi, gain_lower in enumerate(gains): + for ii, income_lower in enumerate(incomes): + cell_means[gi, ii] = joint[(gain_lower, income_lower)].mean + gains_margin_raw = _fold_age_gains_margin(conditioning) + joint_gains = float((joint_mass * cell_means).sum()) + gains_margin = ( + gains_margin_raw * (joint_gains / gains_margin_raw.sum()) + if gains_margin_raw.sum() > 0 + else gains_margin_raw + ) + + targets, fit = _rake_with_gains_tilt( + seed, + joint_mass=joint_mass, + age_margin=age_margin, + region_margin=region_margin, + gains_margin=gains_margin, + cell_means=cell_means, + rounds=UK_CGT_RAKE_ROUNDS, + tolerance=UK_CGT_RAKE_TOLERANCE, + ) + lambdas = np.asarray(fit["lambdas"], dtype=float) + attainable = np.asarray(fit["attainable"], dtype=bool) + + # A margin category the frame cannot support at all (no gainer in any + # of its cells) is unattainable however the fit iterates; its mass is + # reported apart from the fit error over the categories that have seed. + # A gains margin whose target mean lies outside its seeded cells' means + # is reported the same way. + def margin_errors( + achieved: np.ndarray, target: np.ndarray, seeded: np.ndarray + ) -> tuple[list[float], float]: + errors: list[float] = [] + unattainable = 0.0 + for have, want, has_seed in zip( + achieved.ravel(), target.ravel(), seeded.ravel(), strict=True + ): + if want <= 0: + continue + if not has_seed: + unattainable += float(want) + continue + errors.append(abs(float(have) - float(want)) / float(want)) + return errors, unattainable + + seeded_joint = seed.sum(axis=(2, 3)) > 0 + seeded_age = seed.sum(axis=(0, 1, 3)) > 0 + seeded_region = seed.sum(axis=(0, 1, 2)) > 0 + joint_errors, joint_unattainable = margin_errors( + targets.sum(axis=(2, 3)), joint_mass, seeded_joint + ) + age_errors, age_unattainable = margin_errors( + targets.sum(axis=(0, 1, 3)), age_margin, seeded_age + ) + region_errors, region_unattainable = margin_errors( + targets.sum(axis=(0, 1, 2)), region_margin, seeded_region + ) + raked_people = targets.sum(axis=(0, 1, 3)) + raked_gains = (targets * cell_means[:, :, None, None]).sum(axis=(0, 1, 3)) + gains_errors, gains_unattainable = margin_errors( + raked_gains, gains_margin, seeded_age & attainable + ) + errors = [*joint_errors, *age_errors, *region_errors] + zero_seed_cells = int( + (~seeded_joint & (joint_mass > 0)).sum() + + (~seeded_age & (age_margin > 0)).sum() + + (~seeded_region & (region_margin > 0)).sum() + ) + report: dict[str, object] = { + "rake_rounds": UK_CGT_RAKE_ROUNDS, + "rake_rounds_used": int(fit["rounds_used"]), + "rake_tolerance": UK_CGT_RAKE_TOLERANCE, + "ipf_max_abs_margin_error": max(errors) if errors else 0.0, + "gains_margin_max_abs_error": max(gains_errors) if gains_errors else 0.0, + "ipf_unattainable_margin_mass": { + "joint": joint_unattainable, + "age": age_unattainable, + "region": region_unattainable, + "gains": gains_unattainable, + }, + "ipf_zero_seed_cells": zero_seed_cells, + "joint_total_people": total, + "joint_total_gains_at_cell_means": joint_gains, + "age_margin": { + str(UK_CGT_AGE_GROUP_LOWER_BOUNDS[a]): { + "published": float(age_margin_raw[a]), + "normalised": float(age_margin[a]), + "raked": float(raked_people[a]), + } + for a in range(n_age) + }, + "gains_margin": { + str(UK_CGT_AGE_GROUP_LOWER_BOUNDS[a]): { + "published": float(gains_margin_raw[a]), + "normalised": float(gains_margin[a]), + "raked": float(raked_gains[a]), + "target_mean": ( + float(gains_margin[a] / age_margin[a]) if age_margin[a] > 0 else 0.0 + ), + "raked_mean": ( + float(raked_gains[a] / raked_people[a]) + if raked_people[a] > 0 + else 0.0 + ), + "tilt_lambda": float(lambdas[a]), + "attainable": bool(attainable[a]), + } + for a in range(n_age) + }, + "region_margin": { + UK_CGT_REGION_GROUP_LABELS[r]: { + "published_individuals_basis": float(region_margin_raw[r]), + "normalised": float(region_margin[r]), + "raked": float(targets.sum(axis=(0, 1, 2))[r]), + } + for r in range(n_region) + }, + "income_bands_without_gainers": [ + int(income_lower) + for ii, income_lower in enumerate(incomes) + if shares[ii].sum() <= 0 + ], + } + return targets, report + + +def _walk_bands( + *, + ranked: np.ndarray, + weights: np.ndarray, + boundaries: Sequence[tuple[int, float]], + rng: np.random.Generator, + members: dict[int, list[np.ndarray]], +) -> tuple[np.ndarray, dict[int, float]]: + """Assign ranked gainers to bands, highest first, and draw their amounts. + + ``boundaries`` lists ``(gain band lower bound, people mass)`` from the + top band down; a person joins the band whose cumulative boundary first + covers ``(1 - offset)`` of their weight, with one seeded offset per walk, + so no person splits across bands and the rounding is systematic: a + band whose boundary is smaller than a person's weight still receives + that person on the share of walks its boundary implies, rather than + never (the midpoint rule's bias, which emptied the top bands inside + the conditioning cells). The persons each band receives are appended to + ``members`` (keyed by band lower bound); the amounts are drawn once every + walk is done, so the quantiles can be stratified across a plan. Returns + the mask of assigned positions in ``ranked`` and the mass each band + received. + """ + + cumulative = np.cumsum(weights) + offset = float(rng.random()) + boundary = 0.0 + assigned = np.zeros(len(ranked), dtype=bool) + achieved: dict[int, float] = {} + for gain_lower, mass in boundaries: + boundary += mass + in_cell = ~assigned & (cumulative - (1.0 - offset) * weights <= boundary) + count = int(in_cell.sum()) + if count == 0: + continue + assigned |= in_cell + members.setdefault(gain_lower, []).append(ranked[in_cell]) + achieved[gain_lower] = float(weights[in_cell].sum()) + return assigned, achieved + + +def _draw_plan_amounts( + plan: _CellPlan, + members: np.ndarray, + *, + person_id: np.ndarray, + existing: np.ndarray, + weights: np.ndarray, + rng: np.random.Generator, + new_gains: np.ndarray, +) -> None: + """Draw one plan's amounts on weight-proportional quantile strata. + + The persons a (gain band, income band) plan received across every cell + take, in ascending prior-gain order, the quantile strata that partition + (0, 1) in proportion to their household weights, with one seeded jitter + per plan inside the stratum. The published mean is a people-weighted + mean, so the strata must be too: equal strata on unequal weights put the + tail's mass on whichever rows happen to be light and the plan's weighted + mean drifts (the GBP 5m+ band realised GBP 41bn of GBP 48bn on rows a + third of whose weight sat in the bottom strata). The open band takes each + stratum's conditional mean, so its weighted mean is the published mean + exactly; a bounded band takes the quantile inside each stratum, which + reproduces the mean to the width of the widest stratum. + """ + + if members.size == 0: + return + ordered = _ranked(members, person_id=person_id, existing=existing)[::-1] + cumulative = np.cumsum(weights[ordered]) + total = float(cumulative[-1]) + if not total > 0.0: + raise ValueError("A CGT plan received members with no positive weight.") + upper_quantiles = cumulative / total + lower_quantiles = np.concatenate(([0.0], upper_quantiles[:-1])) + jitter = float(rng.random()) + lower = plan.effective_lower_bound + if np.isinf(plan.gain_upper_bound): + amounts = _pareto_stratum_means( + lower_quantiles, upper_quantiles, lower, plan.mean + ) + else: + amounts = _truncated_exponential_quantile( + lower_quantiles + jitter * (upper_quantiles - lower_quantiles), + lower, + float(plan.gain_upper_bound), + plan.mean, + ) + new_gains[ordered] = amounts + + +def _ranked( + indices: np.ndarray, *, person_id: np.ndarray, existing: np.ndarray +) -> np.ndarray: + # Rank by existing gains, largest first; person_id breaks ties so the + # ordering, and with it every draw, is deterministic. + order = np.lexsort((person_id[indices], -existing[indices])) + return indices[order] + + +def impute_uk_capital_gains_with_report( frame: Frame, distribution: HMRCCapitalGainsJointDistribution, parameters: UKCGTPolicyParameters, *, + conditioning: HMRCCGTConditioningFacts, seed: int = UK_CGT_IMPUTATION_SEED, mass_change_reason: str = UK_CGT_MASS_CONSERVATION_REASON, -) -> Frame: - """Redraw gainers' amounts from the published joint distribution.""" +) -> tuple[Frame, UKCGTAllocationReport]: + """Redraw gainers' amounts, conditioned on income, age and region.""" + validate_uk_national_frame(frame) time_period = uk_time_period(frame) person = frame.table("person").reset_index(drop=True) @@ -482,6 +1244,7 @@ def impute_uk_capital_gains( person_weight = ( person["person_household_id"].map(weights_by_household).to_numpy(dtype=float) ) + person_id = person["person_id"].to_numpy() existing = pd.to_numeric(person["capital_gains"], errors="raise").to_numpy( dtype=float @@ -490,62 +1253,168 @@ def impute_uk_capital_gains( income_band = np.asarray(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS)[ np.digitize(taxable_income, HMRC_CGT_INCOME_BAND_LOWER_BOUNDS[1:]) ] + _, age_group, _, region_group = _person_conditioning_cells(person, household) rng = np.random.default_rng((seed, int(time_period))) new_gains = existing.copy() is_gainer = existing > 0 + assigned = np.zeros(len(person), dtype=bool) - for income_lower_bound in HMRC_CGT_INCOME_BAND_LOWER_BOUNDS: - in_band = is_gainer & (income_band == income_lower_bound) - if not in_band.any(): - continue - indices = np.flatnonzero(in_band) - # Rank by existing gains, largest first; person_id breaks ties so - # the ordering, and with it every draw, is deterministic. - order = np.lexsort( - (person["person_id"].to_numpy()[indices], -existing[indices]) - ) - ranked = indices[order] - band_weights = person_weight[ranked] - cumulative = np.cumsum(band_weights) + joint, band_rows = _joint_plans( + distribution, conditioning, annual_exempt_amount=parameters.annual_exempt_amount + ) + targets, rake_report = _rake_allocation_targets( + joint, + conditioning, + is_gainer=is_gainer, + person_weight=person_weight, + income_band=income_band, + age_group=age_group, + region_group=region_group, + ) - plans = _band_plans( - distribution, - income_lower_bound, - annual_exempt_amount=parameters.annual_exempt_amount, - ) - published_mass = sum(plan.allocation_people for plan in plans) - available_mass = float(cumulative[-1]) - if published_mass <= 0.0: - # No published taxpayer mass in this income band: every gainer - # here is a sub-AEA remainder. - new_gains[ranked] = np.minimum( - existing[ranked], parameters.annual_exempt_amount - ) + gains = HMRC_CGT_GAIN_BAND_LOWER_BOUNDS + incomes = HMRC_CGT_INCOME_BAND_LOWER_BOUNDS + achieved_pass1 = np.zeros(targets.shape) + achieved_fallback = np.zeros((len(gains), len(incomes))) + members: dict[tuple[int, int], list[np.ndarray]] = {} + + # Pass 1: every (income, age, region) cell walks its raked targets. + # Each walk rounds to whole persons, so a cell's bands land up to one + # person's weight off their allotments. The signed rounding error is + # carried into the next cell's boundaries for the same gain band (error + # diffusion), so each gain band's walked total within the income band + # tracks its raked total within one weight instead of accumulating the + # truncation of dozens of cell walks, which only ever compounds upward + # once the pooled walk below fills shortfalls and cannot unassign an + # overshoot. Only rounding + # is carried: a cell short of support scales its boundaries down and + # that structural shortfall goes to the pooled walk as before. + rounding_carry_out = np.zeros((len(gains), len(incomes))) + for ii, income_lower in enumerate(incomes): + carry = np.zeros(len(gains)) + for a in range(len(UK_CGT_AGE_GROUP_LOWER_BOUNDS)): + for r in range(len(UK_CGT_REGION_GROUP_LABELS)): + in_cell = ( + is_gainer + & (income_band == income_lower) + & (age_group == a) + & (region_group == r) + ) + cell_targets = targets[:, ii, a, r] + if not in_cell.any() or float(cell_targets.sum()) <= 0.0: + continue + adjusted = cell_targets - carry + walk_mass = np.maximum(adjusted, 0.0) + # An overshoot larger than this cell's allotment for a band + # walks nothing here and is deferred to the next cell. + deferred = np.minimum(adjusted, 0.0) + total_target = float(walk_mass.sum()) + if total_target <= 0.0: + carry = -deferred + continue + ranked = _ranked( + np.flatnonzero(in_cell), person_id=person_id, existing=existing + ) + weights = person_weight[ranked] + # When the cell holds less gainer mass than its target, + # allocate what exists in the raked proportions; the + # shortfall goes to the income band's pooled walk. + scale = min(1.0, float(weights.sum()) / total_target) + boundary_mass = walk_mass * scale + boundaries = [ + (gain_lower, float(boundary_mass[gi])) + for gi, gain_lower in reversed(list(enumerate(gains))) + ] + cell_members: dict[int, list[np.ndarray]] = {} + cell_assigned, achieved = _walk_bands( + ranked=ranked, + weights=weights, + boundaries=boundaries, + rng=rng, + members=cell_members, + ) + for gain_lower, chunks in cell_members.items(): + members.setdefault((gain_lower, income_lower), []).extend(chunks) + assigned[ranked[cell_assigned]] = True + achieved_cell = np.asarray( + [achieved.get(gain_lower, 0.0) for gain_lower in gains] + ) + achieved_pass1[:, ii, a, r] = achieved_cell + carry = (achieved_cell - boundary_mass) - deferred + rounding_carry_out[:, ii] = carry + + # Pass 2: the joint's shortfall is walked over each income band's + # pooled unassigned gainers, largest first. Every cell walk rounds to + # whole persons, so some (band, cell) allotments overshoot by up to half + # a weight while others fall short; the pooled walk fills only the + # income band's net shortfall, apportioned to bands in proportion to + # their positive shortfalls, so the rounding of a hundred cell walks is + # not compounded into extra taxpayers. + for ii, income_lower in enumerate(incomes): + signed_shortfall = { + gain_lower: joint[(gain_lower, income_lower)].allocation_people + - float(achieved_pass1[gi, ii].sum()) + for gi, gain_lower in enumerate(gains) + } + net_shortfall = sum(signed_shortfall.values()) + positive = { + gain_lower: max(0.0, value) + for gain_lower, value in signed_shortfall.items() + } + positive_total = sum(positive.values()) + pool = is_gainer & (income_band == income_lower) & ~assigned + if net_shortfall <= 0.0 or positive_total <= 0.0 or not pool.any(): continue - # When the population holds less gainer mass than HMRC's taxpayers, - # allocate what exists in the published proportions rather than - # exhausting the top bands and emptying the bottom ones. - scale = min(1.0, available_mass / published_mass) - - boundary = 0.0 - assigned = np.zeros(len(ranked), dtype=bool) - for plan in plans: - boundary += plan.allocation_people * scale - in_cell = ~assigned & (cumulative - band_weights / 2.0 <= boundary) - count = int(in_cell.sum()) - if count == 0: - continue - assigned |= in_cell - quantiles = rng.random(count) - new_gains[ranked[in_cell]] = _draw_amounts(plan, quantiles) - - # Below the published taxpayer mass: sub-AEA gainers keep their - # existing amounts, capped at the annual exempt amount. - remainder = ranked[~assigned] - new_gains[remainder] = np.minimum( - existing[remainder], parameters.annual_exempt_amount + shortfall = { + gain_lower: value * net_shortfall / positive_total + for gain_lower, value in positive.items() + } + ranked = _ranked(np.flatnonzero(pool), person_id=person_id, existing=existing) + weights = person_weight[ranked] + scale = min(1.0, float(weights.sum()) / net_shortfall) + boundaries = [ + (gain_lower, shortfall[gain_lower] * scale) + for gain_lower in reversed(gains) + ] + pool_members: dict[int, list[np.ndarray]] = {} + pool_assigned, achieved = _walk_bands( + ranked=ranked, + weights=weights, + boundaries=boundaries, + rng=rng, + members=pool_members, ) + for gain_lower, chunks in pool_members.items(): + members.setdefault((gain_lower, income_lower), []).extend(chunks) + assigned[ranked[pool_assigned]] = True + for gi, gain_lower in enumerate(gains): + achieved_fallback[gi, ii] = achieved.get(gain_lower, 0.0) + + # Amounts: one stratified draw per (gain band, income band) plan over + # every person it received in either pass, income bands ascending and + # gain bands highest first. + for income_lower in incomes: + for gain_lower in reversed(gains): + chunks = members.get((gain_lower, income_lower), []) + if not chunks: + continue + _draw_plan_amounts( + joint[(gain_lower, income_lower)], + np.concatenate(chunks), + person_id=person_id, + existing=existing, + weights=person_weight, + rng=rng, + new_gains=new_gains, + ) + + # Below the published taxpayer mass: sub-AEA gainers keep their + # existing amounts, capped at the annual exempt amount. + remainder = is_gainer & ~assigned + new_gains[remainder] = np.minimum( + existing[remainder], parameters.annual_exempt_amount + ) if not np.isfinite(new_gains).all(): raise ValueError("Imputed capital gains contain non-finite values.") @@ -558,6 +1427,64 @@ def impute_uk_capital_gains( if (new_gains[~is_gainer] != existing[~is_gainer]).any(): raise ValueError("Non-gainer capital gains were modified by the redraw.") + joint_rows = [] + pass1_by_band = achieved_pass1.sum(axis=(2, 3)) + for gi, gain_lower in enumerate(gains): + for ii, income_lower in enumerate(incomes): + plan = joint[(gain_lower, income_lower)] + joint_rows.append( + { + "gain_lower_bound": gain_lower, + "income_lower_bound": income_lower, + "target_people": plan.allocation_people, + "achieved_pass1": float(pass1_by_band[gi, ii]), + "achieved_fallback": float(achieved_fallback[gi, ii]), + "residual": plan.allocation_people + - float(pass1_by_band[gi, ii]) + - float(achieved_fallback[gi, ii]), + "mean": plan.mean, + "mean_repaired": plan.mean_repaired, + } + ) + band_mass = pass1_by_band.sum(axis=1) + achieved_fallback.sum(axis=1) + fallback_share = { + gain_lower: ( + float(achieved_fallback[gi].sum() / band_mass[gi]) + if band_mass[gi] > 0 + else 0.0 + ) + for gi, gain_lower in enumerate(gains) + } + report = UKCGTAllocationReport( + band_rows=band_rows, + joint_rows=tuple(joint_rows), + rake=rake_report, + fallback_released_mass=float(achieved_fallback.sum()), + fallback_share_by_band=fallback_share, + rounding_carry_out={ + str(income_lower): { + str(gain_lower): float(rounding_carry_out[gi, ii]) + for gi, gain_lower in enumerate(gains) + } + for ii, income_lower in enumerate(incomes) + }, + conditioning={ + "resource": conditioning.resource, + "resource_sha256": conditioning.resource_sha256, + "source_commit": conditioning.source_commit, + "vintage_tax_year": conditioning.tax_year, + "joint_resource": distribution.source.resource, + "joint_resource_sha256": distribution.source.resource_sha256, + "joint_record_set_prefix": distribution.source.record_set_prefix, + "joint_source_file": distribution.source.source_file, + "joint_source_sha256": distribution.source.source_sha256, + "joint_vintage": distribution.source.source_vintage, + "age_group_lower_bounds": list(UK_CGT_AGE_GROUP_LOWER_BOUNDS), + "region_groups": dict(UK_CGT_REGION_GROUPS), + "fallback_policy": UK_CGT_FALLBACK_POLICY, + }, + ) + new_person = person.copy() new_person["capital_gains"] = new_gains # Person-only replacement: mass is untouched and the kind carries @@ -583,7 +1510,32 @@ def impute_uk_capital_gains( mass_log=(*frame.mass_log, receipt), ) validate_uk_national_frame(result_frame) - return result_frame + return result_frame, report + + +def impute_uk_capital_gains( + frame: Frame, + distribution: HMRCCapitalGainsJointDistribution, + parameters: UKCGTPolicyParameters, + *, + conditioning: HMRCCGTConditioningFacts | None = None, + seed: int = UK_CGT_IMPUTATION_SEED, + mass_change_reason: str = UK_CGT_MASS_CONSERVATION_REASON, +) -> Frame: + """Redraw gainers' amounts from the published joint distribution. + + ``conditioning`` defaults to the committed vendored 2024-25 resource. + """ + + result, _ = impute_uk_capital_gains_with_report( + frame, + distribution, + parameters, + conditioning=conditioning or load_hmrc_cgt_conditioning_facts(), + seed=seed, + mass_change_reason=mass_change_reason, + ) + return result def summarize_uk_cgt_imputation( @@ -591,14 +1543,22 @@ def summarize_uk_cgt_imputation( after: Frame, distribution: HMRCCapitalGainsJointDistribution, parameters: UKCGTPolicyParameters, + *, + conditioning: HMRCCGTConditioningFacts | None = None, + report: UKCGTAllocationReport | None = None, ) -> UKCGTImputationSummary: - """Compare achieved band totals with the published surface. + """Compare achieved totals with the published 2024-25 surface. Reporting, not a gate: where the population holds less gainer mass than HMRC's taxpayers the achieved totals sit below the published ones by construction, and holding levels to the published surface is the - calibration adjudication's question. + calibration adjudication's question. Bands compare with Table 2.1a + folded onto Table 3's bands, ages with Table 6, regions with Table 5 on + the individuals basis. """ + + del distribution # the 2024-25 levels come from the conditioning facts + conditioning = conditioning or load_hmrc_cgt_conditioning_facts() person = after.table("person").reset_index(drop=True) household = after.table("household") weights_by_household = pd.Series( @@ -610,55 +1570,101 @@ def summarize_uk_cgt_imputation( ) gains = pd.to_numeric(person["capital_gains"], errors="raise").to_numpy(dtype=float) liable = gains > parameters.annual_exempt_amount + age, _, region, _ = _person_conditioning_cells(person, household) bounds = HMRC_CGT_GAIN_BAND_LOWER_BOUNDS uppers = (*bounds[1:], np.inf) + published = conditioning.size_bands_aggregated(bounds) rows = [] for lower, upper in zip(bounds, uppers, strict=True): in_band = liable & (gains >= lower) & (gains < upper) - band_total = distribution.band_total(lower) rows.append( { "gain_lower_bound": lower, "achieved_people": float(weight[in_band].sum()), - "published_people": band_total.individuals, + "published_people": published[lower][0], "achieved_gains": float((gains[in_band] * weight[in_band]).sum()), - "published_gains": band_total.gains, + "published_gains": published[lower][1], + } + ) + + age_rows = [] + age_by_band_rows = [] + for band in conditioning.age_bands: + upper = np.inf if band.upper_bound is None else band.upper_bound + in_age = liable & (age >= band.lower_bound) & (age < upper) + age_rows.append( + { + "age_lower_bound": band.lower_bound, + "achieved_people": float(weight[in_age].sum()), + "published_people": band.taxpayers, + "achieved_gains": float((gains[in_age] * weight[in_age]).sum()), + "published_gains": band.gains, } ) + for lower, gain_upper in zip(bounds, uppers, strict=True): + in_cell = in_age & (gains >= lower) & (gains < gain_upper) + age_by_band_rows.append( + { + "age_lower_bound": band.lower_bound, + "gain_lower_bound": lower, + "achieved_people": float(weight[in_cell].sum()), + "achieved_gains": float((gains[in_cell] * weight[in_cell]).sum()), + } + ) + + taxpayer_share = conditioning.table1.individuals_share("taxpayers") + gains_share = conditioning.table1.individuals_share("gains") + region_rows = [] + for row in conditioning.regions: + in_region = liable & (region == row.region) + region_rows.append( + { + "region": row.region, + "geography_id": row.geography_id, + "achieved_people": float(weight[in_region].sum()), + "published_people_individuals_basis": row.taxpayers * taxpayer_share, + "achieved_gains": float((gains[in_region] * weight[in_region]).sum()), + "published_gains_individuals_basis": row.gains * gains_share, + } + ) + return UKCGTImputationSummary( rows=pd.DataFrame(rows), taxpayer_mass=float(weight[liable].sum()), - published_taxpayer_mass=float(distribution.total_individuals), + published_taxpayer_mass=float(conditioning.table1.individuals_taxpayers), remainder_mass=float(weight[(gains > 0) & ~liable].sum()), + age_rows=pd.DataFrame(age_rows), + region_rows=pd.DataFrame(region_rows), + age_by_band_rows=pd.DataFrame(age_by_band_rows), + allocation=report, ) def uk_capital_gains_imputation_stage( - ods_path: str | Path, *, - tax_year: str = HMRC_CGT_SOURCE_VINTAGE, parameters: UKCGTPolicyParameters | None = None, + distribution: HMRCCapitalGainsJointDistribution | None = None, + conditioning: HMRCCGTConditioningFacts | None = None, seed: int = UK_CGT_IMPUTATION_SEED, mass_change_reason: str = UK_CGT_MASS_CONSERVATION_REASON, ) -> UKNationalStage: """Build the national stage that redraws capital gains amounts. - The published artifact is verified against its pinned fingerprint before - it is read. Parameters default to the policyengine-uk tree at the - dataset's build period, resolved when the stage runs. + The joint and the conditioning facts default to the committed vendored + 2024-25 resource, which is checked against the pinned Chronicle feed + before a row is read. Parameters default to the policyengine-uk tree at + the dataset's build period, resolved when the stage runs. """ - artifact_path = Path(ods_path) def transform(frame: Frame) -> Frame: - distribution = materialize_hmrc_capital_gains_joint_distribution( - artifact_path, tax_year=tax_year - ) + joint = distribution or load_hmrc_cgt_joint_distribution() resolved = parameters or uk_cgt_policy_parameters(uk_time_period(frame)) return impute_uk_capital_gains( frame, - distribution, + joint, resolved, + conditioning=conditioning or load_hmrc_cgt_conditioning_facts(), seed=seed, mass_change_reason=mass_change_reason, ) @@ -668,10 +1674,10 @@ def transform(frame: Frame) -> Frame: def uk_cgt_spine_stage_transform( stage: SourceStageSpec, - ods_path: str | Path, *, distribution: HMRCCapitalGainsJointDistribution | None = None, parameters: UKCGTPolicyParameters | None = None, + conditioning: HMRCCGTConditioningFacts | None = None, ): """Bind the spine manifest, then reuse the reviewed merged CGT runtime. @@ -682,9 +1688,9 @@ def uk_cgt_spine_stage_transform( _assert_cgt_spine_stage_parameters(stage) return UKCGTSpineStageTransform( stage=stage, - ods_path=Path(ods_path), distribution=distribution, parameters=parameters, + conditioning=conditioning, ) @@ -693,30 +1699,38 @@ class UKCGTSpineStageTransform: """Source-plan CGT amounts redraw with a stage-time summary receipt.""" stage: SourceStageSpec - ods_path: Path distribution: HMRCCapitalGainsJointDistribution | None = None parameters: UKCGTPolicyParameters | None = None + conditioning: HMRCCGTConditioningFacts | None = None last_result: UKCGTImputationSummary | None = field(default=None, init=False) def __call__(self, frame: Frame) -> Frame: _assert_cgt_spine_stage_parameters(self.stage) distribution = self.distribution if distribution is None: - distribution = materialize_hmrc_capital_gains_joint_distribution( - self.ods_path, - tax_year=HMRC_CGT_SOURCE_VINTAGE, - ) + distribution = load_hmrc_cgt_joint_distribution() parameters = self.parameters if parameters is None: parameters = uk_cgt_policy_parameters(uk_time_period(frame)) - result = impute_uk_capital_gains( + conditioning = self.conditioning + if conditioning is None: + conditioning = load_hmrc_cgt_conditioning_facts() + result, report = impute_uk_capital_gains_with_report( frame, distribution, parameters, + conditioning=conditioning, seed=UK_CGT_IMPUTATION_SEED, mass_change_reason=UK_CGT_SPINE_MASS_CONSERVATION_REASON, ) - summary = summarize_uk_cgt_imputation(frame, result, distribution, parameters) + summary = summarize_uk_cgt_imputation( + frame, + result, + distribution, + parameters, + conditioning=conditioning, + report=report, + ) object.__setattr__(self, "last_result", summary) return result @@ -736,8 +1750,9 @@ def _assert_cgt_spine_stage_parameters(stage: SourceStageSpec) -> None: """Arm 1 of the #730/#684 two-arm rule for the spine projection.""" expected_kinds = ( - "verify_pinned_cgt_ods", + "verify_vendored_fact_resource", "taxable_income_proxy", + "rake_allocation_targets", "rank_preserving_allocation", "within_band_draws", "sub_aea_remainder", @@ -758,8 +1773,14 @@ def _assert_cgt_spine_stage_parameters(stage: SourceStageSpec) -> None: # behavioral declarations without a matching reviewed code change; whole- # mapping equality also rejects extra keys). expected_operations = { - "verify_pinned_cgt_ods": { - "artifact_role": "cgt_published_fact_surface", + "verify_vendored_fact_resource": { + "artifact_role": "cgt_conditioning_facts", + "resource": HMRC_CGT_CONDITIONING_RESOURCE, + "feed_pin": "chronicle_feed.json", + "record_sets": list(HMRC_CGT_CONDITIONING_RECORD_SETS), + "source_vintage": HMRC_CGT_SOURCE_VINTAGE, + "mapped_build_period": int(HMRC_CGT_BUILD_PERIOD), + "period_mapping": "published_tax_year_equals_build_period", "require_before_source_read": True, "runtime_sha256_required": True, "fail_on_mismatch": True, @@ -778,8 +1799,86 @@ def _assert_cgt_spine_stage_parameters(stage: SourceStageSpec) -> None: ), "fail_on_missing_component": True, }, + "rake_allocation_targets": { + "resource": "hmrc_cgt_conditioning_facts.json", + "joint_margin": ( + "Table 3 2024-25 reconciled cells (2026 release; individuals with " + "a liability by size of gain and taxable income), every income " + "column rescaled onto its published All-row taxpayer total; the " + "same tax year as the Table 1 observations the calibration fits, " + "so no vintage move is applied" + ), + "band_aggregation": ( + "Table 2.1a bands 0, 3,000 and 6,000 fold into Table 3 band 0; " + "10,000 and 12,300 fold into 10,000; the remaining bands map one " + "to one; the folded rows must agree with Table 3's row totals " + "within publication rounding and the difference is reported per " + "band" + ), + "age_margin": ( + "Table 6 2024-25 individual taxpayers by age band, folded to the " + "age groups; the 0-15 band, which adult carriers cannot hold, is " + "spread across the groups by the normalisation rather than folded " + "into the youngest group" + ), + "gains_margin": ( + "Table 6 2024-25 individual gains by age band, folded to the age " + "groups the same way, as one linear constraint per group, the " + "raked people in the group's cells times their Table 3 cell means " + "summing to the group's gains, so each age group carries its " + "published gains as well as its count instead of the frame's band " + "mix (the amounts-consistent tilt; microcosm#725)" + ), + "region_margin": ( + "Table 5 2024-25 taxpayers by country and region (all taxpayers) " + "times the Table 1 2024-25 individuals/total taxpayer share, " + "folded to the region groups" + ), + "margin_normalization": ( + "every count margin is rescaled onto the joint's total taxpayer " + "mass and the gains margin onto the joint's gains at cell means " + "before raking, so rounding cannot make the margins mutually " + "infeasible" + ), + "seed_joint": ( + "joint cell mass times the frame's household-weighted (age " + "group, region group | income band) shares among gainers" + ), + "age_group_lower_bounds": list(UK_CGT_AGE_GROUP_LOWER_BOUNDS), + "region_groups": dict(UK_CGT_REGION_GROUPS), + "gains_tilt": ( + "exponential tilt per age group; the group's cells are multiplied " + "by exp(lambda x cell mean / largest cell mean) with lambda solved " + "by bisection so the group's people-weighted mean gain meets its " + "target while the group's count is held, alternated with the " + "three count margins until every margin holds to the tolerance" + ), + "solver": ( + "microcosm.build.uk_runtime.cgt_imputation._rake_with_gains_tilt " + "(proportional scaling of the count margins and the gains tilt on " + "the four-way array; the generic mean-raking helper scales columns " + "independently and cannot hold a people-weighted gains constraint)" + ), + "rake_rounds": UK_CGT_RAKE_ROUNDS, + "rake_tolerance": UK_CGT_RAKE_TOLERANCE, + "unattainable_policy": ( + "a group whose target mean gain lies outside the means of its " + "seeded cells takes the nearest attainable tilt and is reported" + ), + "zero_seed_policy": ( + "a cell with no frame support keeps a zero target and is " + "reported; its joint mass is met from the income band's pooled " + "fallback where support exists" + ), + "fallback_policy": UK_CGT_FALLBACK_POLICY, + "conditioning_dimensions": list(UK_CGT_CONDITIONING_DIMENSIONS), + "reporting_grain": "Table 6 age bands and the twelve region-tier areas", + }, "rank_preserving_allocation": { - "within": "income band", + "within": ( + "income band x age group x region group cell, then the income " + "band's pooled unassigned gainers" + ), "ordering": "existing gains descending, person_id ascending on ties", "band_order": "highest gain band first", "suppressed_cell_allocation": ( @@ -789,32 +1888,82 @@ def _assert_cgt_spine_stage_parameters(stage: SourceStageSpec) -> None: "every income column rescales onto its published All-row taxpayer total" ), "shortfall_policy": ( - "proportional scale-down when the population holds less " - "gainer mass than published taxpayers" + "proportional scale-down inside a cell that holds less gainer " + "mass than its raked target; the income band's net shortfall " + "after every cell walk, apportioned to gain bands in proportion " + "to their positive shortfalls, is walked over the income band's " + "pooled unassigned gainers, scaled down proportionally when the " + "pool is short, so cell-walk rounding overshoot is netted rather " + "than compounded" ), "minimum_allocation_people": int(_MINIMUM_ALLOCATION_PEOPLE), "weights": ( "household_weight mapped to persons; no person splits across bands" ), + "rounding": ( + "systematic with one seeded offset per walk: a person joins the " + "band whose cumulative boundary first covers (1 - offset) of " + "their weight, so a band boundary smaller than a person's weight " + "still receives that person on the share of walks it implies " + "and the rounding is unbiased across the conditioning cells; " + "each cell walk's signed rounding error is carried into the next " + "cell's boundaries for the same gain band (error diffusion), so " + "each gain band's walked total within an income band stays " + "within one person's weight of its raked total instead of " + "accumulating the overshoot of many cell walks" + ), + "cell_order": ( + "income band ascending, age group ascending, region group " + "ascending, gain bands highest first inside a cell; then the " + "pooled walk per income band" + ), }, "within_band_draws": { "bounded_band_family": ( "truncated exponential matched to the cell's published mean" ), "open_band_family": "Pareto with alpha = mean / (mean - lower bound)", + "quantile_scheme": ( + "stratified by weight: the persons a (gain band, income band) " + "plan receives across every cell and the pooled walk take the " + "quantile strata that partition (0, 1) in proportion to their " + "household weights, in ascending prior-gain order with one " + "seeded jitter per plan, so the plan's weighted realised mean " + "sits on its published mean rather than carrying n independent " + "draws or the weight-rank mix of equal strata" + ), + "open_band_realization": ( + "each open-band person takes the conditional mean of their " + "weight-proportional quantile stratum, which averages back to " + "the published mean exactly under the household weights; an iid " + "draw from a Pareto with infinite variance sits well below it on " + "a few dozen carriers, and equal strata on unequal weights put " + "the tail's mass on whichever rows happen to be light" + ), "mean_repair_margin": _MEAN_MARGIN, "mean_repair_reason": ( "Published counts round to the nearest thousand and amounts " - "to the nearest million; four cells of the 2023-24 table " - "imply a mean outside their own band, and repaired means " - "clamp just inside the violated boundary." + "to the nearest million; two cells of the 2024-25 table (gains " + "of GBP 1m to 2m at taxable incomes of GBP 37,700 to 49,999 and " + "GBP 100,000 to 125,139) imply a mean below their own band, and " + "repaired means clamp just inside the violated boundary." ), "bottom_band_floor": "annual exempt amount plus one pound", "seed_base": UK_CGT_IMPUTATION_SEED, "seed_mixing": ( - "seed combined with the build period; draws ordered by allocation rank" + "seed combined with the build period; each walk draws its " + "rounding offset in cell order then pooled-fallback order, then " + "each plan draws its quantile jitter, income bands ascending and " + "gain bands highest first" ), "deterministic": True, + "cell_means": ( + "ratios of the published Table 3 2024-25 cell gains to cell " + "taxpayers, both rounded by the publisher (counts to the nearest " + "thousand, amounts to the nearest million), so derived rather " + "than published numbers; suppressed-count cells take the " + "band-total mean; every mean is repaired into its band" + ), }, "sub_aea_remainder": { "policy": ( @@ -841,7 +1990,8 @@ def _assert_cgt_spine_stage_parameters(stage: SourceStageSpec) -> None: "fact_fence_id": "cgt_band_facts_policy_endogenous_proxy_conditioned", "fenced_fact_count": 76, "fenced_fact_composition": ( - "60 joint cells, 10 gain-band row totals, 6 income-column totals" + "60 joint cells, 10 gain-band row totals, 6 income-column totals " + "(Table 3 2024-25, 2026 release)" ), "classification_rationale": ( "The taxpayer count is endogenous to policy, the income " @@ -850,13 +2000,24 @@ def _assert_cgt_spine_stage_parameters(stage: SourceStageSpec) -> None: "before any per-band fact is exact." ), "calibrated_facts_unchanged": ( - "The two aggregate facts in UK_CGT_TARGET_SPECS remain the " - "only calibrated CGT facts." + "The calibrated CGT facts are the FY2024-25 individual Table 1 " + "references (hmrc.cgt.taxpayers_total, hmrc.cgt.gains_total, " + "hmrc.cgt.liability_total; UK_CGT_TARGET_COVERAGE_REQUIREMENTS) " + "and the Table 2.1a size-of-gain, Table 6 age-band and Table 5 " + "region rows declared in uk_population_targets.json " + "(microcosm#467, #725); the 76 Table 3 2024-25 joint and " + "marginal cells stay fenced and condition the imputation only, " + "and Table 3's all-gains, all-incomes pair restates the Table 1 " + "individual observations already bound." ), "promotion_path": ( - "A separately reviewed target profile may lift specific " - "band facts after the reconciliation and proxy adequacy " - "are adjudicated." + "A separately reviewed target profile may lift specific band " + "facts after the reconciliation and proxy adequacy are " + "adjudicated; the Table 2.1a, 6 and 5 rows were promoted under " + "microcosm#467 and #725 on the FY2024-25 individual " + "observations, while the Table 3 joint cells remain fenced " + "because the taxable-income proxy is still an arithmetic " + "approximation." ), "adjudication": "https://github.com/PolicyEngine/microcosm/issues/552", }, diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_structure.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_structure.py index 4da6df3b0b..be574dca66 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_structure.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_structure.py @@ -17,6 +17,10 @@ from microcosm.build.uk_runtime.cgt_imputation import ( UK_CGT_TAXABLE_INCOME_PROXY_COMPONENTS, ) +from microcosm.build.uk_runtime.hmrc_capital_gains import ( + HMRC_CGT_CONDITIONING_RESOURCE, + load_hmrc_cgt_conditioning_facts, +) from microcosm.build.uk_runtime.national_frame import ( uk_national_frame, uk_time_period, @@ -43,6 +47,12 @@ MIN_DONOR_BAND_LOWER = 12_300 DONOR_SEED = 1 DONOR_NEVER_ZERO_WEIGHT = True +#: Reviewed pins of the retained donor bands on the 2024-25 vintage +#: (HMRC Table 2.1a, individuals, bands from GBP 12,300): a re-vendored +#: resource that moves them fails the donor assert until reviewed here. +DONOR_SIZE_BAND_VINTAGE = "2024-25" +DONOR_RETAINED_TAXPAYERS = 392_000.0 +DONOR_RETAINED_GAINS_GBP = 118_209_000_000.0 HOUSEHOLD_IS_CGT_CLONE = "household_is_capital_gains_clone" HOUSEHOLD_IS_CGT_BAND_DONOR = "household_is_cgt_band_donor" CGT_CLONE_MASS_CHANGE_REASON = ( @@ -66,13 +76,36 @@ def load_advani_summers_distribution() -> Mapping[str, Any]: def load_hmrc_cgt_size_bands() -> Mapping[str, Any]: - """Load the committed HMRC Table 2.1a size-band surface.""" + """HMRC Table 2.1a individuals by size of gain, as the donor stage reads it. - return json.loads( - files("microcosm.build.uk") - .joinpath("hmrc_cgt_size_bands.json") - .read_text(encoding="utf-8") - ) + Built from the vendored 2024-25 conditioning facts + (``hmrc_cgt_conditioning_facts.json``); the hand-extracted 2023-24 copy + is retired (microcosm#725) so the donor weights sit on the same vintage + as the size-of-gain calibration targets. The rows keep people and + pounds, one row per published band. + """ + + facts = load_hmrc_cgt_conditioning_facts() + return { + "version": 2, + "country": "uk", + "source": { + "resource": facts.resource, + "resource_sha256": facts.resource_sha256, + "source_commit": facts.source_commit, + "table": "2.1a", + "tax_year": facts.tax_year, + }, + "rows": [ + { + "lower_limit": band.lower_bound, + "upper_limit": band.upper_bound, + "taxpayers": band.taxpayers, + "gains_gbp": band.gains, + } + for band in facts.size_bands + ], + } @dataclass(frozen=True) @@ -528,8 +561,8 @@ def _retained_size_bands(resource: Mapping[str, Any]) -> list[dict[str, float]]: lower = float(row["lower_limit"]) if lower < MIN_DONOR_BAND_LOWER: continue - taxpayers = float(row["taxpayers_thousands"]) * 1_000.0 - gains = float(row["gains_gbp_millions"]) * 1_000_000.0 + taxpayers = float(row["taxpayers"]) + gains = float(row["gains_gbp"]) if taxpayers <= 0.0: raise ValueError( "Retained CGT size bands may not produce a zero initial weight." @@ -664,7 +697,10 @@ def _assert_cgt_donor_stage_parameters( ( "stack_band_donor_households", { - "size_band_resource": "hmrc_cgt_size_bands.json", + "size_band_resource": HMRC_CGT_CONDITIONING_RESOURCE, + "size_band_vintage": DONOR_SIZE_BAND_VINTAGE, + "retained_taxpayers": DONOR_RETAINED_TAXPAYERS, + "retained_gains_gbp": DONOR_RETAINED_GAINS_GBP, "incidence_resource": ( "advani_summers_capital_gains_distribution.json" ), @@ -700,3 +736,14 @@ def _assert_cgt_donor_stage_parameters( weights = np.asarray([band["taxpayers"] / DONORS_PER_BAND for band in bands]) if DONOR_NEVER_ZERO_WEIGHT and not (weights > 0.0).all(): raise ValueError("HMRC retained donor bands imply a zero initial weight.") + retained_taxpayers = float(sum(band["taxpayers"] for band in bands)) + retained_gains = float(sum(band["gains"] for band in bands)) + if abs(retained_taxpayers - DONOR_RETAINED_TAXPAYERS) > 0.5 or ( + abs(retained_gains - DONOR_RETAINED_GAINS_GBP) > 0.5 + ): + raise ValueError( + "HMRC retained donor-band mass drifted from the reviewed " + f"{DONOR_SIZE_BAND_VINTAGE} pins: taxpayers {retained_taxpayers} vs " + f"{DONOR_RETAINED_TAXPAYERS}, gains {retained_gains} vs " + f"{DONOR_RETAINED_GAINS_GBP}." + ) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/data_target_parity.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/data_target_parity.py index e6a3f9723b..5544008876 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/data_target_parity.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/data_target_parity.py @@ -226,7 +226,7 @@ def _fence(origin: str, purpose: str, verdict_basis: str) -> dict[str, str]: "concern_id": "national_hmrc_cgt_size_bands", "status": "ported_national", "classification": "national_registry_family", - "evidence": "uk-data targets/sources/hmrc_cgt.py:195; Microcosm hmrc_cgt_size_bands.json and uk_population_targets.json CGT rows.", + "evidence": "uk-data targets/sources/hmrc_cgt.py:195; Microcosm hmrc_cgt_conditioning_facts.json (vendored HMRC Table 2.1a 2024-25 rows read by the donor stage and the amounts redraw) and uk_population_targets.json CGT rows.", }, { "concern_id": "national_hmrc_salary_sacrifice", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/fiscal_targets.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/fiscal_targets.py index 609e22df60..bb3d906239 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/fiscal_targets.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/fiscal_targets.py @@ -60,6 +60,11 @@ ) # Values are Ledger-owned and compile from UK target references. +#: The three national facts are joined by the banded families declared in +#: ``uk/uk_population_targets.json`` (Table 2.1a size of gain, Table 6 age, +#: Table 5 region on the individuals basis; microcosm#467, #725). They +#: compile from the same Ledger feed and need no coverage entry here: the +#: fan-out authoring refuses a missing roster cell at generation time. UK_CGT_TARGET_SPECS: tuple = () UK_CGT_TARGET_COVERAGE_REQUIREMENTS: tuple[TargetCoverageRequirement, ...] = ( 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 e1492609d6..1cfdde6e1c 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph.py @@ -112,7 +112,6 @@ "etb_services": ("etb",), "frs_hmrc_spine_leaves": ("frs",), "hmrc_spi_income_spine": ("spi", "hmrc_income"), - "hmrc_cgt_gains_spine": ("hmrc_cgt",), } _SPLIT_SOURCE_DESCRIPTIONS = { @@ -123,7 +122,6 @@ "etb": "Pinned local ETB household donor table.", "spi": "Pinned local SPI donor table.", "hmrc_income": "Pinned local HMRC income facts workbook.", - "hmrc_cgt": "Pinned local HMRC capital-gains facts workbook.", } # ``None`` means the implementation genuinely has an open formula/model @@ -217,21 +215,33 @@ "uc_deduction_attributes": frozenset({("household", "region")}), "cgt_incidence_clone": None, "cgt_band_donors": None, + # The amounts redraw conditions on age and household region as well as + # the income proxy (microcosm#725); both are context carriers, declared + # here so the ownership record names them. "hmrc_cgt_gains_spine": frozenset( - ("person", column) - for column in ( - "capital_gains", - "employment_income", - "self_employment_income", - "savings_interest_income", - "dividend_income", - "miscellaneous_income", - "private_pension_income", - "property_income", - "state_pension_reported", - "tax_free_savings_income", - ) + { + *( + ("person", column) + for column in ( + "capital_gains", + "employment_income", + "self_employment_income", + "savings_interest_income", + "dividend_income", + "miscellaneous_income", + "private_pension_income", + "property_income", + "state_pension_reported", + "tax_free_savings_income", + "age", + ) + ), + ("household", "region"), + } ), + # The asset-type stage classifies the redrawn net gains; the AEA it + # gates on is a policy parameter, not a frame column (microcosm#725). + "hmrc_cgt_asset_type_spine": frozenset({("person", "capital_gains")}), "salary_sacrifice": None, "student_loans": frozenset( { @@ -585,6 +595,10 @@ def _cells( _Cell("person", "capital_gains", "float64"), ), "hmrc_cgt_gains_spine": (_Cell("person", "capital_gains", "float64"),), + "hmrc_cgt_asset_type_spine": ( + _Cell("person", "capital_gains_asset_type", "string"), + _Cell("person", "capital_gains_residential_property", "float64"), + ), "salary_sacrifice": _cells( "person", ( 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 29ee80dabd..fb45f74ccd 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 @@ -89,6 +89,7 @@ "cgt_incidence_clone": "cgt_structure", "cgt_band_donors": "cgt_structure", "hmrc_cgt_gains_spine": "cgt_imputation", + "hmrc_cgt_asset_type_spine": "cgt_asset_type", "salary_sacrifice": "salary_sacrifice", "student_loans": "student_loans", "age_tail": "age_tail", @@ -267,10 +268,6 @@ def _fixture_cgt_distribution(path: Path): payload = _json_mapping(path, label="CGT distribution") raw_source = dict(_mapping(payload.get("source"), label="CGT source")) - local_path = raw_source.get("local_path") - if not isinstance(local_path, str): - raise ValueError("UK parity fixture CGT source.local_path must be a string.") - raw_source["local_path"] = Path(local_path) def records(name: str) -> list[Mapping[str, object]]: raw = payload.get(name) @@ -293,6 +290,24 @@ def records(name: str) -> list[Mapping[str, object]]: ) +def _fixture_asset_type_facts(path: Path): + from .cgt_asset_type import HMRCCGTAssetTypeFacts, HMRCCGTTable7Type + + payload = dict(_json_mapping(path, label="CGT asset-type facts")) + raw_rows = payload.pop("table7_types") + if not isinstance(raw_rows, list): + raise ValueError( + "UK parity fixture CGT asset-type table7_types must be a list." + ) + return HMRCCGTAssetTypeFacts( + **payload, + table7_types=tuple( + HMRCCGTTable7Type(**dict(_mapping(row, label="Table 7 row"))) + for row in raw_rows + ), + ) + + def _fixture_descriptor( source: Path, ) -> tuple[Mapping[str, object], dict[str, SourceStageSpec]]: @@ -320,7 +335,7 @@ def _fixture_descriptor( missing = sorted(set(_STAGE_MODULES) - set(stages)) extra = sorted(set(stages) - set(_STAGE_MODULES)) raise ValueError( - "UK parity fixture must describe the current 29-stage spine " + "UK parity fixture must describe the current 30-stage spine " f"(missing={missing}, extra={extra})." ) return descriptor, stages @@ -332,6 +347,7 @@ def _fixture_implementations(source: Path) -> Mapping[str, object]: from microcosm.frame.adapters.policyengine_uk import PolicyEngineUKEngine from .age_tail import UKAgeTailStageTransform + from .cgt_asset_type import UKCGTAssetTypeStageTransform from .cgt_imputation import UKCGTPolicyParameters, uk_cgt_spine_stage_transform from .cgt_structure import ( UKCGTBandDonorStageTransform, @@ -391,6 +407,9 @@ def _fixture_implementations(source: Path) -> Mapping[str, object]: cgt_distribution = _fixture_cgt_distribution( _fixture_input(source, inputs, "cgt_distribution") ) + cgt_asset_type_facts = _fixture_asset_type_facts( + _fixture_input(source, inputs, "cgt_asset_type_facts") + ) cgt_parameters = UKCGTPolicyParameters( **dict(_mapping(descriptor.get("cgt_parameters"), label="CGT parameters")) ) @@ -490,10 +509,14 @@ def _fixture_implementations(source: Path) -> Mapping[str, object]: ), "hmrc_cgt_gains_spine": uk_cgt_spine_stage_transform( stages["hmrc_cgt_gains_spine"], - cgt_distribution.source.local_path, distribution=cgt_distribution, parameters=cgt_parameters, ), + "hmrc_cgt_asset_type_spine": UKCGTAssetTypeStageTransform( + stage=stages["hmrc_cgt_asset_type_spine"], + facts=cgt_asset_type_facts, + parameters=cgt_parameters, + ), "salary_sacrifice": UKSalarySacrificeStageTransform( stage=stages["salary_sacrifice"] ), diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_capital_gains.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_capital_gains.py index 93785b56c1..7deb7b54f2 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_capital_gains.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/hmrc_capital_gains.py @@ -1,49 +1,79 @@ -"""HMRC's published joint distribution of capital gains by taxable income. +"""HMRC's published capital gains surfaces, typed from the pinned Chronicle feed. The FRS does not ask about capital gains, so a UK build has to impute them. What it imputes against decides whether the result can answer a capital gains -question at all: the tax is held by very few people, with roughly 2,000 -taxpayers above £5m of gains holding £22.7bn of them, so a source that cannot -reach those bands produces a population whose total is right and whose shape -is wrong. +question at all: the tax is held by very few people, with roughly 3,000 +taxpayers above £5m of gains holding £48.5bn of them in 2024-25, so a source +that cannot reach those bands produces a population whose total is right and +whose shape is wrong. -HMRC table 3.1 publishes the joint distribution directly — individuals and +HMRC Table 3 publishes the joint distribution directly — individuals and gains by size of gain crossed with taxable income — which is the surface an -imputation conditioned on income needs, and it carries the top bands. +imputation conditioned on income needs, and it carries the top bands. The +2026 release publishes it for 2024-25, the same tax year as the Table 1 +observations the calibration fits, so the joint is read at that vintage and +no year is aged forward. + +Every row here is copied verbatim from the pinned Chronicle consumer feed +into one vendored resource (``hmrc_cgt_conditioning_facts.json``, +regenerated by ``tools/vendor_uk_ledger_facts.py``): Table 3 (the joint), +Table 2.1a (size of gain), Table 6 (age), Table 5 (country and region) and +Table 1 (individuals, trusts and their total). The loaders type those rows, +refuse a resource that was not vendored from the committed feed pin, and +refuse a roster that has drifted from the module constants, so a re-vendored +resource whose publisher shape moved fails here rather than allocating to +the wrong cells. Read the published basis before using these facts. Gains are after losses and attributed gains but **before** the annual exempt amount. Taxable income is -after reliefs and the personal allowance. Trusts are excluded, and only -individuals with a CGT liability appear at all, which is why the table shows -almost nobody below £10,000 of gains rather than the many people whose gains -fall under the exempt amount. - -Counts publish in thousands and amounts in £ millions; both convert here, so -callers see people and pounds. Cells too small to publish carry a suppression -marker instead of a count, and those come back as ``None`` rather than zero — -counts publish in thousands, so a suppressed count means "fewer than 1,000 -people", not "nobody". +after reliefs and the personal allowance. Trusts are excluded from Tables 2.1a, +3 and 6, and only individuals with a CGT liability appear at all, which is why +the joint shows relatively few people below £10,000 of gains rather than the +many people whose gains fall under the exempt amount. Table 5 covers all +taxpayers including trusts; Table 1 carries the individuals/total shares that +restate it on the individuals basis. + +Counts publish in thousands and amounts in £ millions; the feed carries both +in people and pounds. Cells too small to publish are absent from the feed +and come back as ``None`` rather than zero — counts publish in thousands, so +a suppressed count means "fewer than 1,000 people", not "nobody". """ from __future__ import annotations import hashlib +import re +from collections.abc import Mapping from dataclasses import dataclass -from pathlib import Path +from importlib.resources import files +from typing import Any -from microcosm.build.uk_runtime.ods_tables import ODSTable, read_ods_tables +from microcosm.build.uk_runtime.ledger_fact_vendoring import ( + load_vendored_resource, + verify_vendored_resource_feed_identity, +) +from microcosm.calibrate.geography_constants import UK_REGION_TIER, UK_REGION_TIER_ENUM __all__ = [ + "HMRC_CGT_AGE_BAND_LOWER_BOUNDS", + "HMRC_CGT_CONDITIONING_RECORD_SETS", + "HMRC_CGT_CONDITIONING_RESOURCE", + "HMRC_CGT_CONDITIONING_TAX_YEAR", + "HMRC_CGT_SIZE_BAND_LOWER_BOUNDS", + "HMRCCGTAgeBand", + "HMRCCGTConditioningFacts", + "HMRCCGTRegionRow", + "HMRCCGTSizeBand", + "HMRCCGTTable1Totals", + "load_hmrc_cgt_conditioning_facts", "HMRCCapitalGainsBandTotal", "HMRCCapitalGainsIncomeTotal", "HMRC_CGT_BUILD_PERIOD", "HMRC_CGT_GAIN_BAND_LOWER_BOUNDS", "HMRC_CGT_INCOME_BAND_LOWER_BOUNDS", - "HMRC_CGT_JOINT_ODS_FILENAME", - "HMRC_CGT_JOINT_ODS_SHA256", - "HMRC_CGT_JOINT_ODS_SIZE_BYTES", - "HMRC_CGT_JOINT_ODS_URL", - "HMRC_CGT_JOINT_SHEET_NAMES", + "HMRC_CGT_JOINT_RECORD_SET_PREFIX", + "HMRC_CGT_JOINT_SOURCE_FILE", + "HMRC_CGT_JOINT_SOURCE_SHA256", "HMRC_CGT_PUBLICATION_URL", "HMRC_CGT_SOURCE_LABEL", "HMRC_CGT_SOURCE_VINTAGE", @@ -52,33 +82,30 @@ "HMRCCapitalGainsCell", "HMRCCapitalGainsJointDistribution", "HMRCCapitalGainsSourceProvenance", - "materialize_hmrc_capital_gains_joint_distribution", + "load_hmrc_cgt_joint_distribution", ] HMRC_CGT_PUBLICATION_URL = ( "https://www.gov.uk/government/statistics/capital-gains-tax-statistics" ) -HMRC_CGT_JOINT_ODS_URL = ( - "https://assets.publishing.service.gov.uk/media/" - "6878ac62760bf6cedaf5bd93/Table_3_2025_Size_of_gain_by_income.ods" -) -HMRC_CGT_JOINT_ODS_FILENAME = "Table_3_2025_Size_of_gain_by_income.ods" -HMRC_CGT_JOINT_ODS_SHA256 = ( - "8e75c00bab949348a7238fea6d995f626c85e5d02813b46606dd7fea85e9d0c3" -) -HMRC_CGT_JOINT_ODS_SIZE_BYTES = 11_996 HMRC_CGT_SOURCE_LABEL = "HMRC capital gains table 3" -HMRC_CGT_SOURCE_VINTAGE = "2023-24" + +#: Tax year of the joint and of every conditioning row: the 2026 release's +#: 2024-25 statistics, the year the calibration's Table 1 observations fit. +HMRC_CGT_SOURCE_VINTAGE = "2024-25" HMRC_CGT_BUILD_PERIOD = "2024" -#: Worksheet per tax year, newest first. The publication carries four years, -#: so a stage can fit each year rather than aging one forward. -HMRC_CGT_JOINT_SHEET_NAMES: dict[str, str] = { - "2023-24": "3_1_2023-24", - "2022-23": "3_2_2022-23", - "2021-22": "3_3_2021-22", - "2020-21": "3_4_2020-21", -} +#: Chronicle record sets carrying the 2024-25 Table 3 joint: one per gain +#: band plus ``all_gains`` for the income-column totals. +HMRC_CGT_JOINT_RECORD_SET_PREFIX = "hmrc.cgt_table3_2026.ty2024." + +#: The publisher workbook every vendored Table 3 row must trace back to. A +#: re-vendored resource built from a later release fails on this pin, so a +#: revised joint is a reviewed change. +HMRC_CGT_JOINT_SOURCE_FILE = "Table_3_2026_Size_of_gain_by_income.ods" +HMRC_CGT_JOINT_SOURCE_SHA256 = ( + "0e70feda364e2674b9f97a25f6f632dde9e3fa4f77ca2947402532d399929d14" +) #: Lower bound of each published band of gains, in pounds. HMRC_CGT_GAIN_BAND_LOWER_BOUNDS: tuple[int, ...] = ( @@ -94,26 +121,26 @@ 5_000_000, ) -#: Lower bound of each published band of taxable income, in pounds. +#: Lower bound of each published band of taxable income, in pounds. The 2026 +#: release bands 2024-25 on the Personal Allowance taper edge (£125,140) +#: where the 2025 release used £150,000. HMRC_CGT_INCOME_BAND_LOWER_BOUNDS: tuple[int, ...] = ( 0, 37_700, 50_000, 100_000, - 150_000, + 125_140, 200_000, ) -#: Published 2023-24 totals, for reconciling a parse against the publication. -HMRC_CGT_TOTAL_INDIVIDUALS = 359_000.0 -HMRC_CGT_TOTAL_GAINS_GBP = 62_921_000_000.0 - -_COUNT_UNIT = 1_000.0 -_AMOUNT_UNIT = 1_000_000.0 +#: Published 2024-25 all-gains, all-incomes pair, for reconciling the vendored +#: joint against the publication. These are the Table 1 individual +#: observations the calibration fits (microcosm#889). +HMRC_CGT_TOTAL_INDIVIDUALS = 551_000.0 +HMRC_CGT_TOTAL_GAINS_GBP = 119_258_000_000.0 -_BAND_COLUMN = 0 -_BAND_COLUMN_HEADING = "Range of gain" -_ALL_ROW_LABEL = "All" +_ALL_INCOMES_COLUMN = "all_incomes" +_JOINT_MEASURES = {"taxpayers": "individuals", "gains": "gains"} #: Counts publish to the nearest thousand and amounts to the nearest million, #: so marginals need not sum exactly to the published totals. HMRC says as @@ -182,19 +209,27 @@ class HMRCCapitalGainsIncomeTotal: @dataclass(frozen=True) class HMRCCapitalGainsSourceProvenance: - """What was read, and what it hashed to when read.""" + """Where the joint's rows came from: the vendored resource and its feed. + + ``source_file`` and ``source_sha256`` name the publisher workbook the + Chronicle rows were extracted from; ``resource_sha256`` is the digest of + the vendored resource as read; ``source_commit`` is the Chronicle commit + the resource was vendored from. + """ - local_path: Path - sha256: str - size_bytes: int - sheet_name: str + resource: str + resource_sha256: str + source_commit: str + record_set_prefix: str + source_file: str + source_sha256: str source_vintage: str build_period: str @dataclass(frozen=True) class HMRCCapitalGainsJointDistribution: - """The joint distribution, with the provenance of the file behind it.""" + """The joint distribution, with the provenance of the rows behind it.""" cells: tuple[HMRCCapitalGainsCell, ...] band_totals: tuple[HMRCCapitalGainsBandTotal, ...] @@ -250,240 +285,679 @@ def income_total(self, income_lower_bound: int) -> HMRCCapitalGainsIncomeTotal: ) -def _fingerprint(path: Path) -> tuple[str, int]: - digest = hashlib.sha256() - size = 0 - with path.open("rb") as handle: - while chunk := handle.read(1 << 20): - digest.update(chunk) - size += len(chunk) - return digest.hexdigest(), size - - -def _numeric(value: object, *, label: str) -> float | None: - """Return a published number, or None where the cell is suppressed.""" - if isinstance(value, float): - return value - if isinstance(value, str): - stripped = value.strip() - if stripped.startswith("[") and stripped.endswith("]"): - return None - raise ValueError(f"{label} holds unexpected text {value!r}.") - if value is None: - raise ValueError(f"{label} is empty.") - raise ValueError(f"{label} holds an unexpected value {value!r}.") - - -def _locate_header_row(table: ODSTable) -> int: - """Find the header by its band column heading rather than by position. - - The number of notes above the header varies by year — 2020-21 carries one - fewer than 2023-24 — so a fixed row index reads notes as data on some - sheets and refuses others. +def _load_resource( + resource: str, *, verify_feed_identity: bool = True +) -> tuple[dict[str, Any], str]: + """Load a vendored resource, check it against the feed pin, digest it. + + The identity check is the runtime arm of the manifests' + ``verify_vendored_fact_resource`` operation: a resource whose recorded + feed differs from the committed pin refuses before any row is read. """ - matches = [ - index - for index, row in enumerate(table.rows) - if row - and isinstance(row[_BAND_COLUMN], str) - and row[_BAND_COLUMN].startswith(_BAND_COLUMN_HEADING) - ] - if not matches: + + payload = load_vendored_resource(resource) + if verify_feed_identity: + verify_vendored_resource_feed_identity(payload) + digest = hashlib.sha256( + files("microcosm.build.uk").joinpath(resource).read_bytes() + ).hexdigest() + return payload, digest + + +# --------------------------------------------------------------------------- +# Vendored 2024-25 conditioning facts (Tables 2.1a, 6, 5 and 1) +# --------------------------------------------------------------------------- + +#: The per-concern vendored resource carrying the 2024-25 CGT rows: the +#: Table 3 joint the amounts imputation draws from, the margins it rakes to +#: and the size bands the donor stage weights by. Regenerated from the +#: pinned Chronicle feed by ``tools/vendor_uk_ledger_facts.py``; never +#: edited by hand. +HMRC_CGT_CONDITIONING_RESOURCE = "hmrc_cgt_conditioning_facts.json" + +#: Tax year (start year) of every conditioning row: the FY2024-25 +#: individual observations the calibration targets fit (microcosm#889). +HMRC_CGT_CONDITIONING_TAX_YEAR = 2024 + +#: Lower bound of each published Table 2.1a size-of-gain band, in pounds. +#: The bands below £12,300 exist because the annual exempt amount moved +#: (£12,300 → £6,000 → £3,000); Table 3's ten bands start at 0 and 10,000. +HMRC_CGT_SIZE_BAND_LOWER_BOUNDS: tuple[int, ...] = ( + 0, + 3_000, + 6_000, + 10_000, + 12_300, + 25_000, + 50_000, + 100_000, + 250_000, + 500_000, + 1_000_000, + 2_000_000, + 5_000_000, +) + +#: Lower bound of each published Table 6 age band (age at the end of the +#: tax year). The top band is open. +HMRC_CGT_AGE_BAND_LOWER_BOUNDS: tuple[int, ...] = (0, 16, 25, 35, 45, 55, 65, 75, 85) + +_SIZE_BAND_RECORD_SET_PREFIX = "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024." +_AGE_BAND_RECORD_SET_ID = "hmrc.cgt_table6_2026.age.ty2024" +_REGION_RECORD_SET_ID = "hmrc.cgt_table5_2026.country_region.ty2024" +_TABLE1_RECORD_SET_ID = "hmrc.cgt_statistics_2026.table1.ty2024" + +#: Every Chronicle record set the amounts stage reads from the vendored +#: resource, as the manifests' ``verify_vendored_fact_resource`` operation +#: declares them (prefixes end in a dot; whole record sets do not). +HMRC_CGT_CONDITIONING_RECORD_SETS: tuple[str, ...] = ( + HMRC_CGT_JOINT_RECORD_SET_PREFIX, + _SIZE_BAND_RECORD_SET_PREFIX, + _AGE_BAND_RECORD_SET_ID, + _REGION_RECORD_SET_ID, + _TABLE1_RECORD_SET_ID, +) +_UK_GEOGRAPHY_ID = "K02000001" + + +@dataclass(frozen=True) +class HMRCCGTSizeBand: + """One Table 2.1a row: individuals with a liability by size of gain.""" + + lower_bound: int + upper_bound: int | None + taxpayers: float + gains: float + + +@dataclass(frozen=True) +class HMRCCGTAgeBand: + """One Table 6 row: individuals with a liability by age band.""" + + lower_bound: int + upper_bound: int | None + taxpayers: float + gains: float + tax: float + + +@dataclass(frozen=True) +class HMRCCGTRegionRow: + """One Table 5 region-tier row: all taxpayers (including trusts).""" + + geography_id: str + region: str + taxpayers: float + gains: float + tax: float + + +@dataclass(frozen=True) +class HMRCCGTTable1Totals: + """Table 1 lines for the year: individuals, trusts and their total.""" + + individuals_taxpayers: float + individuals_gains: float + individuals_tax: float + trusts_taxpayers: float + trusts_gains: float + trusts_tax: float + total_taxpayers: float + total_gains: float + total_tax: float + + def individuals_share(self, measure: str) -> float: + """Individuals ÷ total for ``taxpayers``, ``gains`` or ``tax``. + + The share that restates a Table 5 all-taxpayer cell on the + individuals basis of the national targets, on the declared + assumption that trusts are spread across areas like all taxpayers. + """ + + numerator = getattr(self, f"individuals_{measure}") + denominator = getattr(self, f"total_{measure}") + if denominator <= 0: + raise ValueError(f"Table 1 total {measure} must be positive.") + return numerator / denominator + + +@dataclass(frozen=True) +class HMRCCGTConditioningFacts: + """The vendored 2024-25 rows, typed, with the resource digest they came from.""" + + tax_year: int + size_bands: tuple[HMRCCGTSizeBand, ...] + age_bands: tuple[HMRCCGTAgeBand, ...] + regions: tuple[HMRCCGTRegionRow, ...] + table1: HMRCCGTTable1Totals + resource: str + resource_sha256: str + source_commit: str + + def size_band(self, lower_bound: int) -> HMRCCGTSizeBand: + for band in self.size_bands: + if band.lower_bound == lower_bound: + return band + raise KeyError(f"No Table 2.1a band with lower bound {lower_bound}.") + + def region(self, name: str) -> HMRCCGTRegionRow: + for row in self.regions: + if row.region == name: + return row + raise KeyError(f"No Table 5 row for region {name!r}.") + + def size_bands_aggregated( + self, bounds: tuple[int, ...] + ) -> dict[int, tuple[float, float]]: + """Table 2.1a taxpayers and gains re-binned onto coarser lower bounds. + + Each published band folds into the coarser band whose lower bound + is the largest not above its own, so Table 3's ten bands (0 and + 10,000 absorb 3,000/6,000 and 12,300) receive the 2024-25 levels. + """ + + return _fold_size_bands(self.size_bands, bounds) + + +def _fold_size_bands( + size_bands: tuple[HMRCCGTSizeBand, ...], bounds: tuple[int, ...] +) -> dict[int, tuple[float, float]]: + if tuple(sorted(bounds)) != tuple(bounds) or bounds[0] != 0: + raise ValueError("Aggregation bounds must be ascending and start at 0.") + folded = {bound: [0.0, 0.0] for bound in bounds} + for band in size_bands: + target = max(bound for bound in bounds if bound <= band.lower_bound) + folded[target][0] += band.taxpayers + folded[target][1] += band.gains + return {bound: (people, gains) for bound, (people, gains) in folded.items()} + + +_BAND_VALUE_ID = re.compile( + r"^(?P[a-z_]+?)_(?P\d+)_(?:to_(?P\d+)|(?Pplus))$" +) + + +def _band_bounds_from_value_id(value_id: str, *, prefix: str) -> tuple[int, int | None]: + """The inclusive lower and exclusive upper edge a band value id states. + + The vendored projection carries the publisher's band as its dimension + value id (``gain_3000_to_5999``, ``age_85_plus``): the inclusive + integer upper limit becomes the exclusive edge one past it, and a + ``_plus`` band is open. + """ + + match = _BAND_VALUE_ID.match(value_id) + if match is None or match.group("prefix") != prefix: raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} sheet {table.sheet_name} has no column " - f"headed {_BAND_COLUMN_HEADING!r}; the published layout has moved." + f"Vendored CGT band value id {value_id!r} is not of the form " + f"{prefix}__to_ or {prefix}__plus." ) - if len(matches) > 1: + lower = int(match.group("lower")) + if match.group("open"): + return lower, None + return lower, int(match.group("upper")) + 1 + + +def _band_value_id(row: Mapping[str, Any], dimension: str) -> str: + value = (row.get("dimensions") or {}).get(dimension) + if not isinstance(value, str) or not value: raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} sheet {table.sheet_name} has " - f"{len(matches)} columns headed {_BAND_COLUMN_HEADING!r}." + f"Vendored CGT row {row.get('aggregate_fact_key')!r} carries no " + f"{dimension!r} dimension." ) - return matches[0] + return value -def _validate_headers(table: ODSTable, *, header_row: int) -> None: - header = table.rows[header_row] - label = table.sheet_name - expected_columns = 1 + 2 * (len(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS) + 1) - if len(header) < expected_columns: +def _value(row: Mapping[str, Any]) -> float: + value = row.get("value") + if isinstance(value, bool) or not isinstance(value, int | float): raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} sheet {label} has {len(header)} header " - f"columns, fewer than the {expected_columns} the published " - "income bands require." + f"Vendored CGT row {row.get('aggregate_fact_key')!r} has no numeric value." ) + return float(value) -def materialize_hmrc_capital_gains_joint_distribution( - path: Path, - *, - tax_year: str = HMRC_CGT_SOURCE_VINTAGE, - build_period: str = HMRC_CGT_BUILD_PERIOD, - verify_fingerprint: bool = True, -) -> HMRCCapitalGainsJointDistribution: - """Read the joint distribution of gains by taxable income. +def _measure_id(row: Mapping[str, Any]) -> str: + return str( + row.get("measure_id") or (row.get("layout") or {}).get("measure_id") or "" + ) - Args: - path: Local copy of the published ODS. - tax_year: Which published year to read, as ``"2023-24"``. - build_period: The build period these facts are declared against. The - latest published tax year 2023-24 is replayed against build period - 2024 (signed, microcosm#723). - verify_fingerprint: Whether to require the pinned hash and size. Only - a caller reading a different vintage should turn this off, and it - then owns checking what it read. - Raises: - ValueError: If the artifact or the published layout does not match - what this module was written against. +def _record_set_id(row: Mapping[str, Any]) -> str: + return str((row.get("layout") or {}).get("record_set_id") or "") + + +def load_hmrc_cgt_conditioning_facts( + resource: str = HMRC_CGT_CONDITIONING_RESOURCE, +) -> HMRCCGTConditioningFacts: + """Type the vendored 2024-25 rows and refuse a roster that has drifted. + + Every band roster, the region set and the Table 1 lines are checked + against the module constants and the region tier, so a re-vendored + resource whose publisher shape moved fails here rather than raking to + the wrong cells. """ - if tax_year not in HMRC_CGT_JOINT_SHEET_NAMES: + + payload, digest = _load_resource(resource) + rows = list(payload["rows"]) + + size_cells: dict[object, dict[str, float]] = {} + for row in rows: + if not _record_set_id(row).startswith(_SIZE_BAND_RECORD_SET_PREFIX): + continue + lower, upper = _band_bounds_from_value_id( + _band_value_id(row, "cgt_gain_band"), prefix="gain" + ) + measure = {"taxpayers_individuals": "taxpayers", "gains_individuals": "gains"}[ + _measure_id(row) + ] + cell = size_cells.setdefault((lower, upper), {}) + if measure in cell: + raise ValueError(f"Table 2.1a: duplicate {measure!r} row for {lower}.") + cell[measure] = _value(row) + size_bands = tuple( + HMRCCGTSizeBand( + lower_bound=lower, + upper_bound=upper, + taxpayers=cell["taxpayers"], + gains=cell["gains"], + ) + for (lower, upper), cell in sorted( + size_cells.items(), key=lambda item: item[0][0] + ) + ) + if ( + tuple(band.lower_bound for band in size_bands) + != HMRC_CGT_SIZE_BAND_LOWER_BOUNDS + ): raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} publishes {sorted(HMRC_CGT_JOINT_SHEET_NAMES)}, " - f"not {tax_year!r}." + "Table 2.1a band roster drifted: expected lower bounds " + f"{HMRC_CGT_SIZE_BAND_LOWER_BOUNDS}, got " + f"{tuple(band.lower_bound for band in size_bands)}." ) - - # Check the artifact before opening it, so a wrong file fails on its - # identity rather than somewhere inside a parse. - sha256, size_bytes = _fingerprint(path) - if verify_fingerprint: - if size_bytes != HMRC_CGT_JOINT_ODS_SIZE_BYTES: + for earlier, later in zip(size_bands, size_bands[1:], strict=False): + if earlier.upper_bound != later.lower_bound: + raise ValueError("Table 2.1a bands are not contiguous.") + if size_bands[-1].upper_bound is not None: + raise ValueError("Table 2.1a top band must be open.") + + age_cells: dict[object, dict[str, float]] = {} + age_totals: dict[str, float] = {} + for row in rows: + if _record_set_id(row) != _AGE_BAND_RECORD_SET_ID: + continue + measure = { + "taxpayers_individuals": "taxpayers", + "gains_individuals": "gains", + "tax_individuals": "tax", + }[_measure_id(row)] + if (row.get("layout") or {}).get("table_record_kind") == "total": + if measure in age_totals: + raise ValueError(f"Table 6: duplicate all-ages {measure!r} row.") + age_totals[measure] = _value(row) + continue + lower, upper = _band_bounds_from_value_id( + _band_value_id(row, "age_band"), prefix="age" + ) + cell = age_cells.setdefault((lower, upper), {}) + if measure in cell: + raise ValueError(f"Table 6: duplicate {measure!r} row for age {lower}.") + cell[measure] = _value(row) + age_bands = tuple( + HMRCCGTAgeBand( + lower_bound=lower, + upper_bound=upper, + taxpayers=cell["taxpayers"], + gains=cell["gains"], + tax=cell["tax"], + ) + for (lower, upper), cell in sorted( + age_cells.items(), key=lambda item: item[0][0] + ) + ) + if tuple(band.lower_bound for band in age_bands) != HMRC_CGT_AGE_BAND_LOWER_BOUNDS: + raise ValueError( + "Table 6 age-band roster drifted: expected lower bounds " + f"{HMRC_CGT_AGE_BAND_LOWER_BOUNDS}, got " + f"{tuple(band.lower_bound for band in age_bands)}." + ) + if age_bands[-1].upper_bound is not None: + raise ValueError("Table 6 top age band must be open.") + + region_cells: dict[str, dict[str, float]] = {} + for row in rows: + if _record_set_id(row) != _REGION_RECORD_SET_ID: + continue + geography = row.get("geography") or {} + geography_id = str(geography.get("id") or "") + if geography_id not in UK_REGION_TIER_ENUM: + continue + measure = { + "taxpayers_total": "taxpayers", + "gains_total": "gains", + "tax_total": "tax", + }[_measure_id(row)] + cell = region_cells.setdefault(geography_id, {}) + if measure in cell: + raise ValueError(f"Table 5: duplicate {measure!r} row for {geography_id}.") + cell[measure] = _value(row) + regions = tuple( + HMRCCGTRegionRow( + geography_id=geography_id, + region=UK_REGION_TIER_ENUM[geography_id], + taxpayers=region_cells[geography_id]["taxpayers"], + gains=region_cells[geography_id]["gains"], + tax=region_cells[geography_id]["tax"], + ) + for _, geography_id in UK_REGION_TIER + if geography_id in region_cells + ) + if len(regions) != len(UK_REGION_TIER): + missing = sorted( + geography_id + for _, geography_id in UK_REGION_TIER + if geography_id not in region_cells + ) + raise ValueError(f"Table 5 lacks region-tier area(s) {missing}.") + + table1_values: dict[str, float] = {} + for row in rows: + if _record_set_id(row) != _TABLE1_RECORD_SET_ID: + continue + measure = _measure_id(row) + if measure in table1_values: + raise ValueError(f"Table 1: duplicate {measure!r} row.") + table1_values[measure] = _value(row) + try: + table1 = HMRCCGTTable1Totals( + individuals_taxpayers=table1_values["individuals_count"], + individuals_gains=table1_values["individuals_gains"], + individuals_tax=table1_values["individuals_tax"], + trusts_taxpayers=table1_values["trusts_count"], + trusts_gains=table1_values["trusts_gains"], + trusts_tax=table1_values["trusts_tax"], + total_taxpayers=table1_values["total_taxpayers"], + total_gains=table1_values["total_gains"], + total_tax=table1_values["total_tax"], + ) + except KeyError as missing: + raise ValueError(f"Table 1 lacks the {missing} line.") from None + + # The four individual surfaces describe one universe; a vendored + # resource whose bands no longer sum to the Table 1 individuals line + # would rake to inconsistent margins, and a Table 3 row that disagrees + # with the Table 2.1a bands folded onto it would draw from a joint the + # size-band targets contradict. + _, joint_band_totals, _, joint_individuals, _, _ = _parse_joint(rows) + folded = _fold_size_bands(size_bands, HMRC_CGT_GAIN_BAND_LOWER_BOUNDS) + for total in joint_band_totals: + people, gains = folded[total.gain_lower_bound] + people_difference = ( + 0.0 if total.individuals is None else total.individuals - people + ) + if ( + abs(people_difference) > _COUNT_RECONCILIATION_TOLERANCE + or abs(total.gains - gains) > _AMOUNT_RECONCILIATION_TOLERANCE + ): raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} at {path} is {size_bytes} bytes, " - f"not the pinned {HMRC_CGT_JOINT_ODS_SIZE_BYTES}." + "Table 3 and Table 2.1a disagree on the band from " + f"{total.gain_lower_bound}: Table 3 {total.individuals} people " + f"and {total.gains} of gains, Table 2.1a folded {people} and " + f"{gains}." ) - if sha256 != HMRC_CGT_JOINT_ODS_SHA256: + for label, total in ( + ("Table 2.1a", sum(band.taxpayers for band in size_bands)), + ("Table 3", joint_individuals), + ("Table 6", sum(band.taxpayers for band in age_bands)), + ("Table 6 all-ages", age_totals.get("taxpayers", float("nan"))), + ): + if abs(total - table1.individuals_taxpayers) > _COUNT_RECONCILIATION_TOLERANCE: raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} at {path} hashes to {sha256}, " - f"not the pinned {HMRC_CGT_JOINT_ODS_SHA256}." + f"{label} taxpayers {total} do not reconcile with Table 1 " + f"individuals {table1.individuals_taxpayers}." ) - sheet_name = HMRC_CGT_JOINT_SHEET_NAMES[tax_year] - tables = read_ods_tables(path, label=HMRC_CGT_SOURCE_LABEL) - if sheet_name not in tables: + return HMRCCGTConditioningFacts( + tax_year=HMRC_CGT_CONDITIONING_TAX_YEAR, + size_bands=size_bands, + age_bands=age_bands, + regions=regions, + table1=table1, + resource=resource, + resource_sha256=digest, + source_commit=str(payload["source_fact_feed"]["source_commit"]), + ) + + +# --------------------------------------------------------------------------- +# Vendored 2024-25 joint distribution (Table 3) +# --------------------------------------------------------------------------- + + +def _joint_rows(rows: list[Mapping[str, Any]]) -> list[Mapping[str, Any]]: + return [ + row + for row in rows + if _record_set_id(row).startswith(HMRC_CGT_JOINT_RECORD_SET_PREFIX) + ] + + +def _parse_joint( + rows: list[Mapping[str, Any]], +) -> tuple[ + tuple[HMRCCapitalGainsCell, ...], + tuple[HMRCCapitalGainsBandTotal, ...], + tuple[HMRCCapitalGainsIncomeTotal, ...], + float, + float, + tuple[str, str], +]: + """Type the Table 3 rows and refuse a roster or source that has drifted.""" + + joint_rows = _joint_rows(rows) + if not joint_rows: raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} has no sheet {sheet_name!r}; it carries " - f"{sorted(tables)}." + f"{HMRC_CGT_SOURCE_LABEL}: no vendored rows under record set prefix " + f"{HMRC_CGT_JOINT_RECORD_SET_PREFIX!r}." ) - table = tables[sheet_name] - header_row = _locate_header_row(table) - _validate_headers(table, header_row=header_row) - first_band_row = header_row + 1 - - cells: list[HMRCCapitalGainsCell] = [] - band_totals: list[HMRCCapitalGainsBandTotal] = [] - total_individuals: float | None = None - total_gains: float | None = None - - for offset, gain_lower_bound in enumerate(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS): - row = first_band_row + offset - published_bound = table.cell(row, _BAND_COLUMN) - if not isinstance(published_bound, float) or int(published_bound) != ( - gain_lower_bound - ): + sources = { + ( + str((row.get("source") or {}).get("source_file") or ""), + str((row.get("source") or {}).get("source_sha256") or ""), + ) + for row in joint_rows + } + if sources != {(HMRC_CGT_JOINT_SOURCE_FILE, HMRC_CGT_JOINT_SOURCE_SHA256)}: + raise ValueError( + f"{HMRC_CGT_SOURCE_LABEL}: vendored rows trace to {sorted(sources)}, " + f"not the pinned {HMRC_CGT_JOINT_SOURCE_FILE} " + f"({HMRC_CGT_JOINT_SOURCE_SHA256})." + ) + + cells: dict[tuple[int, int], dict[str, float]] = {} + gain_bounds: dict[int, int | None] = {} + income_bounds: dict[int, int | None] = {} + band_totals: dict[int, dict[str, float]] = {} + income_totals: dict[int, dict[str, float]] = {} + grand: dict[str, float] = {} + for row in joint_rows: + measure_id = _measure_id(row) + kind, _, column = measure_id.partition("_") + if kind not in _JOINT_MEASURES or not column: raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} sheet {sheet_name} row {row} opens " - f"band {published_bound!r}, not the expected {gain_lower_bound}." + f"{HMRC_CGT_SOURCE_LABEL}: unexpected measure {measure_id!r}." ) - for index, income_lower_bound in enumerate(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS): - count_column = 1 + 2 * index - where = ( - f"{HMRC_CGT_SOURCE_LABEL} sheet {sheet_name} " - f"row {row} column {count_column}" + measure = _JOINT_MEASURES[kind] + dimensions = row.get("dimensions") or {} + gain_value = dimensions.get("cgt_gain_band") + income_value = dimensions.get("cgt_taxable_income_band") + gain_lower: int | None = None + income_lower: int | None = None + if gain_value is not None: + gain_lower, gain_upper = _band_bounds_from_value_id( + str(gain_value), prefix="gain" ) - individuals = _numeric(table.cell(row, count_column), label=where) - gains = _numeric(table.cell(row, count_column + 1), label=f"{where} amount") - cells.append( - HMRCCapitalGainsCell( - gain_lower_bound=gain_lower_bound, - income_lower_bound=income_lower_bound, - individuals=( - None if individuals is None else individuals * _COUNT_UNIT - ), - gains=None if gains is None else gains * _AMOUNT_UNIT, - ) + gain_bounds.setdefault(gain_lower, gain_upper) + if income_value is not None: + income_lower, income_upper = _band_bounds_from_value_id( + str(income_value), prefix="income" ) - all_incomes_column = 1 + 2 * len(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS) - where = ( - f"{HMRC_CGT_SOURCE_LABEL} sheet {sheet_name} row {row} " - f"column {all_incomes_column}" - ) - row_individuals = _numeric(table.cell(row, all_incomes_column), label=where) - row_gains = _numeric( - table.cell(row, all_incomes_column + 1), label=f"{where} amount" - ) - if row_gains is None: + income_bounds.setdefault(income_lower, income_upper) + if column != str(income_value): + raise ValueError( + f"{HMRC_CGT_SOURCE_LABEL}: measure {measure_id!r} disagrees " + f"with its income band {income_value!r}." + ) + elif column != _ALL_INCOMES_COLUMN: raise ValueError( - f"{where} suppresses the all-incomes amount, which is unexpected." + f"{HMRC_CGT_SOURCE_LABEL}: measure {measure_id!r} carries no " + "income band." ) - band_totals.append( - HMRCCapitalGainsBandTotal( - gain_lower_bound=gain_lower_bound, - individuals=( - None if row_individuals is None else row_individuals * _COUNT_UNIT - ), - gains=row_gains * _AMOUNT_UNIT, + value = _value(row) + if gain_lower is not None and income_lower is not None: + target = cells.setdefault((gain_lower, income_lower), {}) + elif gain_lower is not None: + target = band_totals.setdefault(gain_lower, {}) + elif income_lower is not None: + target = income_totals.setdefault(income_lower, {}) + else: + target = grand + if measure in target: + raise ValueError( + f"{HMRC_CGT_SOURCE_LABEL}: duplicate {measure!r} row for gains " + f"from {gain_lower} and income from {income_lower}." ) - ) + target[measure] = value - all_row = first_band_row + len(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS) - if str(table.cell(all_row, _BAND_COLUMN)).strip() != _ALL_ROW_LABEL: + gains = tuple(sorted(gain_bounds)) + if gains != HMRC_CGT_GAIN_BAND_LOWER_BOUNDS: raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} sheet {sheet_name} does not close with " - f"an {_ALL_ROW_LABEL!r} row at row {all_row}." + f"{HMRC_CGT_SOURCE_LABEL}: gain-band roster drifted: expected " + f"{HMRC_CGT_GAIN_BAND_LOWER_BOUNDS}, got {gains}." ) - income_totals = [] - for index, income_lower_bound in enumerate(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS): - count_column = 1 + 2 * index - where = ( - f"{HMRC_CGT_SOURCE_LABEL} sheet {sheet_name} All row column {count_column}" + incomes = tuple(sorted(income_bounds)) + if incomes != HMRC_CGT_INCOME_BAND_LOWER_BOUNDS: + raise ValueError( + f"{HMRC_CGT_SOURCE_LABEL}: income-band roster drifted: expected " + f"{HMRC_CGT_INCOME_BAND_LOWER_BOUNDS}, got {incomes}." ) - column_individuals = _numeric(table.cell(all_row, count_column), label=where) - column_gains = _numeric( - table.cell(all_row, count_column + 1), label=f"{where} amount" + for bounds, label in ((gain_bounds, "gain"), (income_bounds, "income")): + ordered = sorted(bounds) + for earlier, later in zip(ordered, ordered[1:], strict=False): + if bounds[earlier] != later: + raise ValueError( + f"{HMRC_CGT_SOURCE_LABEL}: {label} bands are not contiguous " + f"at {earlier}." + ) + if bounds[ordered[-1]] is not None: + raise ValueError(f"{HMRC_CGT_SOURCE_LABEL}: top {label} band must be open.") + + typed_cells = tuple( + HMRCCapitalGainsCell( + gain_lower_bound=gain_lower, + income_lower_bound=income_lower, + individuals=cells.get((gain_lower, income_lower), {}).get("individuals"), + gains=cells.get((gain_lower, income_lower), {}).get("gains"), ) - income_totals.append( - HMRCCapitalGainsIncomeTotal( - income_lower_bound=income_lower_bound, - individuals=( - None - if column_individuals is None - else column_individuals * _COUNT_UNIT - ), - gains=None if column_gains is None else column_gains * _AMOUNT_UNIT, + for gain_lower in gains + for income_lower in incomes + ) + typed_band_totals = [] + for gain_lower in gains: + total = band_totals.get(gain_lower, {}) + if "gains" not in total: + raise ValueError( + f"{HMRC_CGT_SOURCE_LABEL}: the all-incomes amount for gains from " + f"{gain_lower} is missing, which is unexpected." + ) + typed_band_totals.append( + HMRCCapitalGainsBandTotal( + gain_lower_bound=gain_lower, + individuals=total.get("individuals"), + gains=total["gains"], ) ) - total_column = 1 + 2 * len(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS) - total_individuals = _numeric( - table.cell(all_row, total_column), label=f"{sheet_name} total individuals" - ) - total_gains = _numeric( - table.cell(all_row, total_column + 1), label=f"{sheet_name} total gains" + typed_income_totals = tuple( + HMRCCapitalGainsIncomeTotal( + income_lower_bound=income_lower, + individuals=income_totals.get(income_lower, {}).get("individuals"), + gains=income_totals.get(income_lower, {}).get("gains"), + ) + for income_lower in incomes ) - if total_individuals is None or total_gains is None: - raise ValueError(f"{HMRC_CGT_SOURCE_LABEL} suppresses a published total.") - total_individuals *= _COUNT_UNIT - total_gains *= _AMOUNT_UNIT - + if "individuals" not in grand or "gains" not in grand: + raise ValueError( + f"{HMRC_CGT_SOURCE_LABEL}: the all-gains, all-incomes pair is missing." + ) + total_individuals = grand["individuals"] + total_gains = grand["gains"] + if ( + total_individuals != HMRC_CGT_TOTAL_INDIVIDUALS + or total_gains != HMRC_CGT_TOTAL_GAINS_GBP + ): + raise ValueError( + f"{HMRC_CGT_SOURCE_LABEL}: published totals drifted: " + f"{total_individuals} individuals and {total_gains} of gains, not " + f"the pinned {HMRC_CGT_TOTAL_INDIVIDUALS} and {HMRC_CGT_TOTAL_GAINS_GBP}." + ) # Cells can only sum to less than the published total, by whatever sits - # inside suppressed cells. Summing to more means the parse has gone wrong. - summed_gains = sum(cell.gains for cell in cells if cell.gains is not None) + # inside suppressed cells. Summing to more means the rows are wrong. + summed_gains = sum(cell.gains for cell in typed_cells if cell.gains is not None) if summed_gains > total_gains + _AMOUNT_RECONCILIATION_TOLERANCE: raise ValueError( - f"{HMRC_CGT_SOURCE_LABEL} sheet {sheet_name} cells sum to " - f"{summed_gains} of gains, above a published total of {total_gains}." + f"{HMRC_CGT_SOURCE_LABEL}: cells sum to {summed_gains} of gains, " + f"above the published total of {total_gains}." ) + return ( + typed_cells, + tuple(typed_band_totals), + typed_income_totals, + total_individuals, + total_gains, + (HMRC_CGT_JOINT_SOURCE_FILE, HMRC_CGT_JOINT_SOURCE_SHA256), + ) + +def load_hmrc_cgt_joint_distribution( + resource: str = HMRC_CGT_CONDITIONING_RESOURCE, + *, + verify_feed_identity: bool = True, +) -> HMRCCapitalGainsJointDistribution: + """Read the 2024-25 joint distribution of gains by taxable income. + + Args: + resource: The vendored resource carrying the Table 3 rows. + verify_feed_identity: Whether to require the resource to record the + committed Chronicle feed pin. Only a diagnostic caller reading a + resource vendored from another feed turns this off, and it then + owns what it read. + + Raises: + ValueError: If the resource was not vendored from the pinned feed, + its rows do not trace to the pinned publisher workbook, or the + band roster and published totals differ from what this module + was written against. + """ + + payload, digest = _load_resource( + resource, verify_feed_identity=verify_feed_identity + ) + cells, band_totals, income_totals, total_individuals, total_gains, source = ( + _parse_joint(list(payload["rows"])) + ) return HMRCCapitalGainsJointDistribution( - cells=tuple(cells), - band_totals=tuple(band_totals), - income_totals=tuple(income_totals), + cells=cells, + band_totals=band_totals, + income_totals=income_totals, source=HMRCCapitalGainsSourceProvenance( - local_path=path.resolve(), - sha256=sha256, - size_bytes=size_bytes, - sheet_name=sheet_name, - source_vintage=tax_year, - build_period=build_period, + resource=resource, + resource_sha256=digest, + source_commit=str(payload["source_fact_feed"]["source_commit"]), + record_set_prefix=HMRC_CGT_JOINT_RECORD_SET_PREFIX, + source_file=source[0], + source_sha256=source[1], + source_vintage=HMRC_CGT_SOURCE_VINTAGE, + build_period=HMRC_CGT_BUILD_PERIOD, ), total_individuals=total_individuals, total_gains=total_gains, diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_fact_vendoring.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_fact_vendoring.py index 16b87561ac..b4399b93c6 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_fact_vendoring.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_fact_vendoring.py @@ -30,6 +30,7 @@ from microcosm.build.target_reference_authoring import _json_safe_ledger_id from microcosm.build.uk_runtime.chronicle_feed import ( UKChronicleFeed, + load_uk_chronicle_feed, ) VENDOR_SELECTIONS_RESOURCE = "ledger_fact_vendor_selections.json" @@ -376,6 +377,46 @@ def vendored_rows( ] +_FEED_IDENTITY_KEYS = ( + "source_commit", + "facts_sha256", + "manifest_sha256", + "fact_row_count", +) + + +def verify_vendored_resource_feed_identity( + payload: Mapping[str, Any], *, pin: UKChronicleFeed | None = None +) -> None: + """Refuse a vendored resource that was not taken from the committed pin. + + Every vendored resource records the feed it was copied from; a stage + reading one at build time checks that record against the packaged + ``chronicle_feed.json`` before it reads a row, so a resource left behind + by an earlier pin (or vendored with ``--allow-unpinned-feed``) fails by + name rather than conditioning a build on stale facts. + """ + + pin = pin or load_uk_chronicle_feed() + recorded = payload.get("source_fact_feed") + if not isinstance(recorded, Mapping): + raise ValueError( + f"Vendored resource {payload.get('resource')!r} records no source_fact_feed." + ) + drifted = { + key: (recorded.get(key), getattr(pin, key)) + for key in _FEED_IDENTITY_KEYS + if recorded.get(key) != getattr(pin, key) + } + if drifted: + raise ValueError( + f"Vendored resource {payload.get('resource')!r} was taken from a " + "Chronicle feed that differs from the committed UK pin on " + f"{sorted(drifted)}: {drifted}. Re-vendor it with " + f"{VENDOR_TOOL} against the pinned artifact." + ) + + def rows_matching( payload: Mapping[str, Any], **criteria: object ) -> list[dict[str, Any]]: 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 03da923765..090bd6a90e 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 @@ -25,6 +25,7 @@ LedgerTargetReference, _fact_matches_selector, compile_ledger_target_references, + reference_fact_selectors, ) from microcosm.build.target_materialization import ( TargetMaterializationResult, @@ -1141,12 +1142,13 @@ def _candidate_facts_for_reference( facts: tuple[Mapping[str, Any], ...], reference: LedgerTargetReference, ) -> tuple[Mapping[str, Any], ...]: - if not reference.ledger_selector: + selectors = reference_fact_selectors(reference) + if not selectors: return facts return tuple( fact for fact in facts - if _fact_matches_selector(fact, reference.ledger_selector) + if any(_fact_matches_selector(fact, selector) for selector in selectors) ) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/source_runtime.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/source_runtime.py index 8e98ea9b39..8ace9e9713 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/source_runtime.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/source_runtime.py @@ -75,6 +75,7 @@ def uk_stage_implementations( cgt_incidence_clone_transform: Callable[[Frame], Frame] | None = None, cgt_band_donors_transform: Callable[[Frame], Frame] | None = None, hmrc_cgt_gains_spine_transform: Callable[[Frame], Frame] | None = None, + hmrc_cgt_asset_type_spine_transform: Callable[[Frame], Frame] | None = None, salary_sacrifice_transform: Callable[[Frame], Frame] | None = None, student_loans_transform: Callable[[Frame], Frame] | None = None, ) -> dict[str, Callable[[Frame], Frame]]: @@ -109,6 +110,7 @@ def uk_stage_implementations( "cgt_incidence_clone": cgt_incidence_clone_transform, "cgt_band_donors": cgt_band_donors_transform, "hmrc_cgt_gains_spine": hmrc_cgt_gains_spine_transform, + "hmrc_cgt_asset_type_spine": hmrc_cgt_asset_type_spine_transform, "salary_sacrifice": salary_sacrifice_transform, "student_loans": student_loans_transform, } diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py index a97f23ad99..169a6c8ff4 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/stage_health.py @@ -53,6 +53,8 @@ def uk_stage_health_gate( return _cgt_band_donor_support_gate(stage, evidence, parameters) if check == "cgt_imputation_summary": return _cgt_imputation_summary_gate(stage, evidence, parameters) + if check == "cgt_asset_type_summary": + return _cgt_asset_type_summary_gate(stage, evidence, parameters) if check == "latent_attribute_realization": return _latent_attribute_realization_gate(stage, evidence) if check == "household_composition": @@ -786,6 +788,129 @@ def _cgt_imputation_summary_gate( if value < 0.0: failures.append(f"{stage}: {key} is negative.") details = {"band_rows": len(rows), "taxpayer_mass": evidence.get("taxpayer_mass")} + # The conditioned redraw (microcosm#725) reports its rake and fallback; + # a receipt that carries them must carry them finite and non-negative. + # No threshold is held yet: the first measured builds set it. + allocation = evidence.get("allocation") + if allocation is not None: + if not isinstance(allocation, Mapping): + raise ValueError(f"{stage}.allocation must be a mapping.") + rake = allocation.get("rake") + if not isinstance(rake, Mapping): + raise ValueError(f"{stage}.allocation.rake must be a mapping.") + for key in ( + "ipf_max_abs_margin_error", + "gains_margin_max_abs_error", + "ipf_zero_seed_cells", + ): + value = _finite_number( + rake.get(key), label=f"{stage}.allocation.rake.{key}" + ) + if value < 0.0: + failures.append(f"{stage}: allocation.rake.{key} is negative.") + released = _finite_number( + allocation.get("fallback_released_mass"), + label=f"{stage}.allocation.fallback_released_mass", + ) + if released < 0.0: + failures.append(f"{stage}: allocation.fallback_released_mass is negative.") + details["ipf_max_abs_margin_error"] = rake.get("ipf_max_abs_margin_error") + details["gains_margin_max_abs_error"] = rake.get("gains_margin_max_abs_error") + details["fallback_released_mass"] = released + return ( + _fail(stage, check, failures, details) + if failures + else _pass(stage, check, details) + ) + + +def _cgt_asset_type_summary_gate( + stage: str, + evidence: Mapping[str, object], + parameters: Mapping[str, object], +) -> GateResult: + """The residential flag realised the Table 8a totals it was solved to. + + The stage solves the logistic exactly in expectation and realises it by + systematic sampling. This gate holds the solve to its targets, the + realised weighted count to within one carrier row's weight of the + expectation (``max_liable_weight``, the weighted systematic walk's + deterministic bound; about 3,300 people at full scale), and the realised + gains to the wider of the reviewed relative band and a multiple of the + Bernoulli sigma the stage reports, which overstates a systematic draw's + noise and so is a conservative envelope, so a tiny frame is judged by its + noise floor and a production frame by the band. Every liable gainer must + carry an asset type and the composition receipt must be finite + (microcosm#725). + """ + + check = "cgt_asset_type_summary" + failures: list[str] = [] + residential = _mapping(evidence.get("residential"), label=f"{stage}.residential") + max_relative = _finite_number( + parameters["maximum_relative_deviation"], + label=f"{stage}.maximum_relative_deviation", + ) + max_sigma = _finite_number( + parameters["maximum_gains_sigma"], label=f"{stage}.maximum_gains_sigma" + ) + max_solve_error = _finite_number( + parameters["maximum_solve_relative_error"], + label=f"{stage}.maximum_solve_relative_error", + ) + details: dict[str, object] = {} + + def number(key: str) -> float: + return _finite_number(residential.get(key), label=f"{stage}.residential.{key}") + + for measure in ("count", "gains"): + target = number(f"{measure}_target_individuals_basis") + expected = number(f"expected_{measure}") + if target <= 0.0: + failures.append(f"{stage}: residential {measure} target is not positive.") + continue + solve_error = abs(expected - target) / target + details[f"residential_{measure}_solve_relative_error"] = solve_error + if solve_error > max_solve_error: + failures.append( + f"{stage}: residential {measure} solve error {solve_error} " + f"exceeds {max_solve_error}." + ) + count_gap = abs(number("achieved_count") - number("expected_count")) + count_bound = number("max_liable_weight") * (1.0 + 1e-9) + details["residential_count_gap"] = count_gap + if count_gap > count_bound: + failures.append( + f"{stage}: residential count gap {count_gap} exceeds one person " + f"({count_bound})." + ) + gains_target = number("gains_target_individuals_basis") + gains_gap = abs(number("achieved_gains") - number("expected_gains")) + gains_bound = max( + max_relative * gains_target, max_sigma * number("gains_bernoulli_sigma") + ) + details["residential_gains_gap"] = gains_gap + details["residential_gains_bound"] = gains_bound + if gains_target > 0.0 and gains_gap > gains_bound: + failures.append( + f"{stage}: residential gains gap {gains_gap} exceeds {gains_bound} " + f"(the wider of {max_relative} relative and {max_sigma} sigma)." + ) + counts = _mapping(evidence.get("value_counts"), label=f"{stage}.value_counts") + for value, rows in counts.items(): + if not isinstance(rows, int) or isinstance(rows, bool) or rows < 0: + failures.append(f"{stage}: value_counts[{value!r}] is not a row count.") + asset_type = _mapping(evidence.get("asset_type"), label=f"{stage}.asset_type") + shares = _mapping( + asset_type.get("achieved_gains_share"), + label=f"{stage}.asset_type.achieved_gains_share", + ) + for name, share in shares.items(): + value = _finite_number(share, label=f"{stage}.asset_type.{name}") + if value < 0.0 or value > 1.0: + failures.append(f"{stage}: {name} gains share {value} is not a share.") + details["residential_rows"] = residential.get("achieved_rows") + details["classified_values"] = sorted(counts) return ( _fail(stage, check, failures, details) if failures 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 edca46004f..ad80791e20 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 @@ -201,6 +201,8 @@ def __post_init__(self) -> None: "person.admitted_patient_visits", "person.age_started_or_accepted_current_education_or_training", "person.attends_private_school_random_draw", + "person.capital_gains_asset_type", + "person.capital_gains_residential_property", "person.care_hours", "person.charitable_investment_gifts", "person.dla_m_category", diff --git a/packages/microcosm-build/tests/test_country_spec.py b/packages/microcosm-build/tests/test_country_spec.py index 3db6a4a94e..bc80943116 100644 --- a/packages/microcosm-build/tests/test_country_spec.py +++ b/packages/microcosm-build/tests/test_country_spec.py @@ -926,7 +926,8 @@ def test_spi_spine_adds_no_country_package_resources(self) -> None: "gates.json", "brma_rent_counts.json", "calibration_measure_exclusions.json", - "hmrc_cgt_size_bands.json", + "hmrc_cgt_conditioning_facts.json", + "hmrc_cgt_asset_type_facts.json", "advani_summers_capital_gains_distribution.json", "salary_sacrifice_anchor.json", "slc_liable_stocks.json", @@ -992,10 +993,11 @@ def test_uk_source_manifest_loads_thirty_stages(self) -> None: spec = load_country_spec("uk") assert spec.sources is not None - # 29 spine stages (uc_reporter_redraw #832, uc_deduction_attributes - # #685, then frs_relationships #791 as the newest) plus the + # 30 spine stages (uc_reporter_redraw #832, uc_deduction_attributes + # #685, frs_relationships #791, then hmrc_cgt_asset_type_spine #725 as + # the newest) plus the # two certified-pair stages the June path still uses. - assert len(spec.sources.stages) == 31 + assert len(spec.sources.stages) == 32 class TestExistingPackagesGeneralize: @@ -1031,7 +1033,8 @@ def test_uk_package_loads(self) -> None: "gates.json", "brma_rent_counts.json", "calibration_measure_exclusions.json", - "hmrc_cgt_size_bands.json", + "hmrc_cgt_conditioning_facts.json", + "hmrc_cgt_asset_type_facts.json", "advani_summers_capital_gains_distribution.json", "salary_sacrifice_anchor.json", "slc_liable_stocks.json", @@ -1098,10 +1101,12 @@ def test_uk_target_references_accept_regenerated_contract_fields(self) -> None: references = {reference.name: reference for reference in spec.target_references} assert ( - len(references) == 631 + len(references) == 705 ) # microcosm#905: 424 - 18 country rows + 189 region-tier cells; # microcosm#929: the 81 VOA region cells become 81 composed MHCLG - # cells and Wales gains ten country rows (bands A-I + total) + # cells and Wales gains ten country rows (bands A-I + total); + # microcosm#725/#467: 24 CGT age-band rows, 24 region-tier cells and + # 24 size-of-gain rows assert references["obr.esa"].value_operation == "sum" assert references["dwp.uc.households"].value_operation == ( "monthly_window_sum_average" @@ -1346,6 +1351,7 @@ def test_declares_the_full_june_battery(self, manifest) -> None: "uk_stage_cgt_incidence_clone_mass", "uk_stage_cgt_band_donors_support", "uk_stage_hmrc_cgt_gains_spine_summary", + "uk_stage_hmrc_cgt_asset_type_spine_summary", "uk_stage_salary_sacrifice_realization", "uk_stage_student_loans_realization", "uk_stage_age_tail_targets", @@ -1364,6 +1370,7 @@ def test_declares_the_full_june_battery(self, manifest) -> None: "uk_take_up_signal", "uk_brma_enum_domain", "uk_ons_household_type_enum_domain", + "uk_capital_gains_asset_type_enum_domain", "uk_uc_deduction_combination_enum_domain", "uk_student_loan_plan_enum_domain", "uk_calibration_reference_coverage", @@ -1438,6 +1445,7 @@ def test_strict_absent_evidence_entries_are_declared(self, manifest) -> None: "uk_stage_cgt_incidence_clone_mass", "uk_stage_cgt_band_donors_support", "uk_stage_hmrc_cgt_gains_spine_summary", + "uk_stage_hmrc_cgt_asset_type_spine_summary", "uk_stage_salary_sacrifice_realization", "uk_stage_student_loans_realization", "uk_stage_age_tail_targets", diff --git a/packages/microcosm-build/tests/test_ledger_targets.py b/packages/microcosm-build/tests/test_ledger_targets.py index 118194ebbf..cf2df190bc 100644 --- a/packages/microcosm-build/tests/test_ledger_targets.py +++ b/packages/microcosm-build/tests/test_ledger_targets.py @@ -15,6 +15,7 @@ hierarchy_seed_from_catalog, ledger_target_registry_parity_report, period_values_semantically_equal, + reference_fact_selectors, select_ledger_targets, select_ledger_targets_from_jsonl, target_spec_from_ledger_reference, @@ -4394,3 +4395,295 @@ def test__given_an_aliased_row__then_hierarchy_keeps_the_roster_code_and_the_nam assert spec.hierarchy.geography.id == "E08000016" assert spec.hierarchy.geography.label == "Barnsley" assert spec.metadata["ledger_geography_id"] == "E08000038" + + +def test__given_numeric_universe_constraints__then_band_edges_are_stamped_as_filters() -> ( + None +): + # HMRC's CGT size-of-gain and age tables publish a band as a categorical + # dimension plus explicit numeric constraints; the edges must reach the + # ``ledger_filter_*_lower_bound`` vocabulary the band materialization reads. + fact = _consumer_fact_row_for_period(2024, value=73_000) + fact["dimensions"] = {"cgt_gain_band": "gain_3000_to_5999"} + fact["universe_constraints"] = { + "domain": "capital_gains_tax", + "constraints": [ + {"operator": "<", "role": "filter", "value": 6000, "variable": "cgt_gain"}, + { + "operator": "==", + "role": "filter", + "value": "gain_3000_to_5999", + "variable": "cgt_gain_band", + }, + {"operator": ">=", "role": "filter", "value": 3000, "variable": "cgt_gain"}, + ], + } + reference = LedgerTargetReference( + name="cgt gains band 3000", + ledger_selector={"source_name": "irs_soi"}, + entity="person", + measure="person_count", + period=2024, + ) + + registry = compile_ledger_target_references([fact], [reference], country="uk") + + metadata = registry.specs[0].metadata + assert metadata["ledger_filter_cgt_gain_band"] == "gain_3000_to_5999" + assert metadata["ledger_filter_cgt_gain_lower_bound"] == "3000" + assert metadata["ledger_filter_cgt_gain_upper_bound"] == "6000" + assert "ledger_filter_cgt_gain_band_lower_bound" not in metadata + + +def test__given_bound_already_a_dimension__then_constraint_does_not_restamp_it() -> ( + None +): + fact = _consumer_fact_row_for_period(2024, value=10.0) + fact["dimensions"] = {"total_income_lower_bound": 12570} + fact["universe_constraints"] = { + "domain": "personal_incomes", + "constraints": [ + { + "operator": "==", + "role": "filter", + "value": 12570, + "variable": "total_income_lower_bound", + }, + { + "operator": ">=", + "role": "filter", + "value": 12570, + "variable": "total_income", + }, + {"operator": ">", "role": "filter", "value": "n/a", "variable": "ignored"}, + ], + } + reference = LedgerTargetReference( + name="spi band", + ledger_selector={"source_name": "irs_soi"}, + entity="person", + measure="person_count", + period=2024, + ) + + registry = compile_ledger_target_references([fact], [reference], country="uk") + + metadata = registry.specs[0].metadata + assert metadata["ledger_filter_total_income_lower_bound"] == "12570" + # A constraint on a different variable adds its own edge; a non-numeric + # constraint adds nothing. + assert metadata["ledger_filter_total_income_lower_bound"] == "12570" + assert "ledger_filter_ignored_lower_bound_exclusive" not in metadata + + +def _ratio_fact( + *, + key: str, + measure_id: str, + value: float, + level: str, + geography_id: str, + period: int = 2024, +) -> dict: + fact = _consumer_fact_row_for_period(period, value=value) + fact["aggregate_fact_key"] = f"ledger.aggregate_fact.v2:{key}" + fact["semantic_fact_key"] = f"ledger.semantic_fact.v2:{key}" + fact["layout"]["measure_id"] = measure_id + fact["geography"] = { + "level": level, + "id": geography_id, + "name": geography_id, + "vintage": "current", + } + return fact + + +def _ratio_facts( + *, base: float = 113_000, numerator: float = 551_000, denominator: float = 584_000 +) -> list[dict]: + return [ + _ratio_fact( + key="london-total", + measure_id="taxpayers_total", + value=base, + level="region", + geography_id="E12000007", + ), + _ratio_fact( + key="uk-individuals", + measure_id="individuals_count", + value=numerator, + level="country", + geography_id="K02000001", + ), + _ratio_fact( + key="uk-total", + measure_id="total_taxpayers", + value=denominator, + level="country", + geography_id="K02000001", + ), + ] + + +def _ratio_reference(**overrides) -> LedgerTargetReference: + values = { + "name": "cgt taxpayers by region, London", + "ledger_selector": { + "source_name": "irs_soi", + "source_measure_id": "taxpayers_total", + "geography_level": "region", + "geography_id": "E12000007", + "period_type": "tax_year", + "period_value": 2024, + }, + "value_operation": "scaled_by_ratio", + "value_operands": ( + {"role": "base"}, + { + "role": "numerator", + "source_measure_id": "individuals_count", + "geography_level": "country", + "geography_id": "K02000001", + }, + { + "role": "denominator", + "source_measure_id": "total_taxpayers", + "geography_level": "country", + "geography_id": "K02000001", + }, + ), + "entity": "person", + "measure": "hmrc/cgt_taxpayers_by_region@E12000007", + "period": 2025, + } + values.update(overrides) + return LedgerTargetReference(**values) + + +def test__given_scaled_by_ratio_reference__then_cell_is_translated_by_the_quotient() -> ( + None +): + # HMRC Table 5 publishes CGT taxpayers by region including trusts while + # the national target is individuals; the cell is restated on the + # individuals basis by the Table 1 individuals/total share, and every + # input is recorded rather than folded into a hand-typed factor. + facts = _ratio_facts() + reference = _ratio_reference() + + registry = compile_ledger_target_references(facts, [reference], country="uk") + + spec = registry.specs[0] + assert spec.value == pytest.approx(113_000 * 551_000 / 584_000) + metadata = spec.metadata + assert metadata["ledger_value_formula"] == "base * numerator / denominator" + assert metadata["ledger_value_base"] == "113000.0" + assert metadata["ledger_value_numerator"] == "551000.0" + assert metadata["ledger_value_denominator"] == "584000.0" + assert metadata["ledger_value_ratio"] == repr(551_000 / 584_000) + # The cell keeps its own identity: the national operands translate it, + # they do not relocate it. + assert metadata["ledger_geography_level"] == "region" + assert metadata["ledger_geography_id"] == "E12000007" + assert metadata["ledger_aggregate_fact_key"] == ( + "ledger.aggregate_fact.v2:london-total" + ) + assert json.loads(metadata["ledger_member_fact_keys"]) == [ + "ledger.aggregate_fact.v2:london-total", + "ledger.aggregate_fact.v2:uk-individuals", + "ledger.aggregate_fact.v2:uk-total", + ] + + +def test__given_scaled_by_ratio_reference__then_operand_selectors_inherit_pins() -> ( + None +): + selectors = reference_fact_selectors(_ratio_reference()) + + assert len(selectors) == 3 + assert selectors[0] == _ratio_reference().ledger_selector + assert selectors[1] == { + "source_name": "irs_soi", + "period_type": "tax_year", + "period_value": 2024, + "source_measure_id": "individuals_count", + "geography_level": "country", + "geography_id": "K02000001", + } + assert selectors[2]["source_measure_id"] == "total_taxpayers" + # A plain reference exposes only its own selector. + assert len(reference_fact_selectors(_exact_agi_reference())) == 1 + + +@pytest.mark.parametrize( + ("numerator", "denominator", "message"), + [ + (584_000, 551_000, r"must lie in \(0, 1\]"), + (0, 584_000, r"must lie in \(0, 1\]"), + (551_000, 0, "finite positive"), + ], +) +def test__given_ratio_outside_a_subset_share__then_scaled_by_ratio_refuses( + numerator: float, denominator: float, message: str +) -> None: + facts = _ratio_facts(numerator=numerator, denominator=denominator) + with pytest.raises(ValueError, match=message): + compile_ledger_target_references(facts, [_ratio_reference()], country="uk") + + +def test__given_operand_without_a_fact__then_scaled_by_ratio_refuses() -> None: + facts = _ratio_facts()[:2] + with pytest.raises(ValueError, match="'denominator' did not resolve exactly once"): + compile_ledger_target_references(facts, [_ratio_reference()], country="uk") + + +def test__given_operands_at_another_period__then_scaled_by_ratio_refuses() -> None: + facts = _ratio_facts() + facts[2] = _ratio_fact( + key="uk-total-2023", + measure_id="total_taxpayers", + value=560_000, + level="country", + geography_id="K02000001", + period=2023, + ) + selector = { + key: value + for key, value in _ratio_reference().ledger_selector.items() + if key not in {"period_type", "period_value"} + } + reference = _ratio_reference(ledger_selector=selector) + with pytest.raises(ValueError, match="same period as the base cell"): + compile_ledger_target_references(facts, [reference], country="uk") + + +@pytest.mark.parametrize( + ("operands", "message"), + [ + ( + ({"role": "numerator"}, {"role": "denominator"}), + "exactly ordered base/numerator/denominator", + ), + ( + ( + {"role": "base", "geography_id": "E12000001"}, + {"role": "numerator", "source_measure_id": "a"}, + {"role": "denominator", "source_measure_id": "b"}, + ), + "takes no overrides", + ), + ( + ( + {"role": "base"}, + {"role": "numerator"}, + {"role": "denominator", "source_measure_id": "b"}, + ), + "needs at least one selector field", + ), + ], +) +def test__given_malformed_scaled_by_ratio_operands__then_reference_refuses( + operands: tuple, message: str +) -> None: + with pytest.raises(ValueError, match=message): + _ratio_reference(value_operands=operands) diff --git a/packages/microcosm-build/tests/test_spec_only_country_packages.py b/packages/microcosm-build/tests/test_spec_only_country_packages.py index 307db3274d..ffe0545cad 100644 --- a/packages/microcosm-build/tests/test_spec_only_country_packages.py +++ b/packages/microcosm-build/tests/test_spec_only_country_packages.py @@ -213,6 +213,8 @@ def _collect_executable_content( and not compiler_identity_field ): offenders.append(child_location) + if compiler_identity_field: + continue _collect_executable_content(child, child_location, offenders) elif isinstance(value, list): for index, child in enumerate(value): @@ -308,4 +310,12 @@ def _is_compiler_identity_field(*, key: str, value: object, location: str) -> bo "engine_abi.lock.json.remaining_stage_input_manifest.receipt" ) ) - return virtual_resource_label or generated_lock_count + # A Ledger fact identity (``ledger.aggregate_fact.v2:``) is content + # addressing data, never an entrypoint; the colon separates the key kind + # from its digest and the digest can happen to start with a letter. + ledger_fact_identity = ( + key == "aggregate_fact_key" + and isinstance(value, str) + and re.fullmatch(r"ledger\.[a-z_]+\.v\d+:[0-9a-f]{24}", value) is not None + ) + return virtual_resource_label or generated_lock_count or ledger_fact_identity diff --git a/packages/microcosm-build/tests/test_target_materialization.py b/packages/microcosm-build/tests/test_target_materialization.py index f730d2d101..6aa8dbe160 100644 --- a/packages/microcosm-build/tests/test_target_materialization.py +++ b/packages/microcosm-build/tests/test_target_materialization.py @@ -1200,3 +1200,122 @@ def test_geography_predicate_must_project_to_the_reference_entity(): materialize_target_bindings( adapter, registry, _ADULT_INCOME_CONTRACT, period=2025 ) + + +def _gated_band_registry(*, predicate: str | None) -> TargetRegistry: + """Two size-band rows of one gated contract target, optionally area-scoped.""" + + specs = [] + for lower in (6_000, 15_000): + metadata = { + "contract_target_id": "cgt_gains_band", + "ledger_filter_capital_gains_lower_bound": str(lower), + } + if predicate is not None: + metadata["geography_predicate"] = predicate + specs.append( + TargetSpec( + name=f"cgt_gains_band_{lower}", + entity="person", + measure=f"cgt_gains_band_{lower}", + value=1.0, + source="test", + metadata=metadata, + ) + ) + return TargetRegistry(specs, country="uk") + + +_GATED_BAND_CONTRACT = { + "cgt_gains_band": { + "bindings": { + "policyengine": { + "kind": "parameter_gated_threshold", + "gate_parameter": "cgt.aea", + "gate_comparison": ">", + "gated_variable": "capital_gains", + "value_variable": "capital_gains", + "groupby_variable": "capital_gains", + "filters": [{"variable": "age", "operator": ">=", "value": 18}], + } + } + } +} + + +def test_filter_aware_provider_applies_filters_band_and_geography_predicate(): + # A gated provider used to publish its whole gated population no matter + # what the binding's filters said; a size-band or region row bound to it + # would then carry the national value. The mask now composes: gate, then + # filters, then band, then the fan-out predicate. + adapter = StubAdapter() + adapter.tables["person"]["capital_gains"] = np.array([0.0, 8_000.0, 20_000.0]) + adapter.tables["person"]["region"] = np.array(["LONDON", "LONDON", "WALES"]) + + unscoped = materialize_target_bindings( + adapter, _gated_band_registry(predicate=None), _GATED_BAND_CONTRACT, period=2025 + ) + assert unscoped.skipped == () + # Person 1 is below the gate (0 < 6,000) and under 18; person 2 sits in + # [6,000, 15,000); person 3 in [15,000, inf). + np.testing.assert_array_equal( + adapter.tables["person"]["cgt_gains_band_6000"], [0.0, 8_000.0, 0.0] + ) + np.testing.assert_array_equal( + adapter.tables["person"]["cgt_gains_band_15000"], [0.0, 0.0, 20_000.0] + ) + + scoped = materialize_target_bindings( + adapter, + _gated_band_registry( + predicate=json.dumps( + {"variable": "region", "operator": "==", "value": "LONDON"} + ) + ), + _GATED_BAND_CONTRACT, + period=2025, + ) + assert scoped.skipped == () + np.testing.assert_array_equal( + adapter.tables["person"]["cgt_gains_band_6000"], [0.0, 8_000.0, 0.0] + ) + # The only person in the top band lives in Wales, so London's row is empty + # rather than the national value. + np.testing.assert_array_equal( + adapter.tables["person"]["cgt_gains_band_15000"], [0.0, 0.0, 0.0] + ) + + +def test_filter_aware_provider_without_filters_is_unchanged(): + adapter = StubAdapter() + registry = TargetRegistry( + [ + TargetSpec( + name="cgt_taxpayers", + entity="person", + measure="cgt_taxpayer_measure", + value=1.0, + source="test", + metadata={"contract_target_id": "cgt_taxpayers"}, + ) + ], + country="uk", + ) + contract = { + "cgt_taxpayers": { + "bindings": { + "policyengine": { + "kind": "parameter_gated_threshold", + "gate_parameter": "cgt.aea", + "gate_comparison": ">", + "gated_variable": "capital_gains", + "value_variable": "person_count", + } + } + } + } + result = materialize_target_bindings(adapter, registry, contract, period=2025) + assert result.skipped == () + np.testing.assert_array_equal( + adapter.tables["person"]["cgt_taxpayer_measure"], [0.0, 0.0, 1.0] + ) diff --git a/packages/microcosm-build/tests/test_target_reference_authoring.py b/packages/microcosm-build/tests/test_target_reference_authoring.py index b747b6c642..fa83342a32 100644 --- a/packages/microcosm-build/tests/test_target_reference_authoring.py +++ b/packages/microcosm-build/tests/test_target_reference_authoring.py @@ -909,3 +909,176 @@ def test_geography_composition_refuses_a_non_aggregating_operation() -> None: [_tier_fact("local_authority", "L1", 4.0, "l1")], config, ) + + +def _ratio_tier_contract() -> dict: + contract = _two_level_contract() + target = contract["targets"][0] + target["value_operation"] = "scaled_by_ratio" + target["value_operands"] = [ + {"role": "base"}, + { + "role": "numerator", + "source_measure_id": "population_individuals", + "geography_level": "country", + "geography_id": "K02000001", + }, + { + "role": "denominator", + "source_measure_id": "population_total", + "geography_level": "country", + "geography_id": "K02000001", + }, + ] + return contract + + +def _national_fact(measure_id: str, value: float, fact_key: str) -> dict: + fact = _tier_fact("country", "K02000001", value, fact_key) + fact["observed_measure"]["source_measure_id"] = measure_id + fact["layout"]["measure_id"] = measure_id + return fact + + +def test_geography_fanout_cells_scale_by_a_national_ratio() -> None: + # The quotient's facts sit outside every cell's own selector (national + # rows for region cells); authoring must hand them to the compile or no + # cell can resolve. + config = TargetReferenceAuthoringConfig( + target_period=2025, + geography_fanout_by_target_id={"ons.age.0_10_by_region": _REGION_TIER_CELLS}, + geography_fanout_metadata=_tier_metadata, + value_operation_by_target_id={"ons.age.0_10_by_region": "scaled_by_ratio"}, + source_fact_feed="synthetic", + ) + facts = [ + *_tier_facts(), + _national_fact("population_individuals", 55.0, "uk-individuals"), + _national_fact("population_total", 110.0, "uk-total"), + ] + authored = author_target_references(_ratio_tier_contract(), facts, config) + + london = authored.references[0] + assert london["value_operation"] == "scaled_by_ratio" + assert [operand["role"] for operand in london["value_operands"]] == [ + "base", + "numerator", + "denominator", + ] + report = authored.membership_report + assert report["status_counts"] == {"active": 3} + candidates = report["targets"]["ons.age.0_10_by_region"]["candidates"] + assert [ + (entry["geography_id"], entry["status"], entry["resolved_value"]) + for entry in candidates + ] == [ + ("E12000007", "active", 5.0), + ("E12000001", "active", 10.0), + ("W92000004", "active", 15.0), + ] + + +def test_geography_fanout_ratio_without_the_national_facts_refuses() -> None: + # A cell whose quotient cannot resolve is a hole in the declared + # partition, refused like any other non-compiling roster cell. + config = TargetReferenceAuthoringConfig( + target_period=2025, + geography_fanout_by_target_id={"ons.age.0_10_by_region": _REGION_TIER_CELLS}, + geography_fanout_metadata=_tier_metadata, + value_operation_by_target_id={"ons.age.0_10_by_region": "scaled_by_ratio"}, + source_fact_feed="synthetic", + ) + with pytest.raises(ValueError, match="Unsigned geography fan-out absence"): + author_target_references(_ratio_tier_contract(), _tier_facts(), config) + + +def _banded_contract() -> dict: + contract = _single_age_contract() + target = contract["targets"][0] + target["target_id"] = "ons.age.by_band" + target["geography_levels"] = ["country"] + target["ledger_selector"] = { + "source_name": "ons", + "source_measure_id": "population", + "groupby_dimension": "synthetic_band", + } + return contract + + +def _banded_facts() -> list[dict]: + return [ + _tier_fact("country", "K02000001", 10.0, "band_a"), + _tier_fact("country", "K02000001", 20.0, "band_b"), + ] + + +def _banded_config(**overrides) -> TargetReferenceAuthoringConfig: + values = { + "target_period": 2025, + "geography_pins": { + "ons.age.by_band": { + "geography_level": "country", + "geography_id": "K02000001", + } + }, + "source_fact_feed": "synthetic", + } + values.update(overrides) + return TargetReferenceAuthoringConfig(**values) + + +def test_row_level_signed_exclusion_skips_one_fanout_row_and_keeps_the_target_active() -> ( + None +): + # HMRC's CGT age table has a 0-15 band the frame cannot carry; signing + # out that one row must not turn the whole target partial or hide it. + config = _banded_config( + signed_row_exclusions_by_target_id={ + "ons.age.by_band": {("synthetic_band", '"band_b"'): "no under-16 carriers"} + } + ) + authored = author_target_references(_banded_contract(), _banded_facts(), config) + + assert [row["name"] for row in authored.references] == ["ons.age.by_band.band_a"] + target = authored.membership_report["targets"]["ons.age.by_band"] + assert target["status"] == "active" + assert [(entry["name"], entry["status"]) for entry in target["candidates"]] == [ + ("ons.age.by_band.band_a", "active"), + ("ons.age.by_band.band_b", "signed_excluded"), + ] + signed = target["candidates"][1] + assert signed["signed_row"] == {"dimension": "synthetic_band", "value": "band_b"} + assert signed["signed_rationale"] == "no under-16 carriers" + assert signed["matched_fact_count_overall"] == 1 + assert authored.membership_report["status_counts"] == { + "active": 1, + "signed_excluded": 1, + } + + +def test_row_level_signed_exclusion_that_matches_no_row_is_stale() -> None: + config = _banded_config( + signed_row_exclusions_by_target_id={ + "ons.age.by_band": {("synthetic_band", '"band_c"'): "gone"} + } + ) + with pytest.raises(ValueError, match="Stale row-level signed exclusion"): + author_target_references(_banded_contract(), _banded_facts(), config) + + +def test_row_level_signed_exclusion_over_every_row_marks_the_target_signed_excluded() -> ( + None +): + config = _banded_config( + signed_row_exclusions_by_target_id={ + "ons.age.by_band": { + ("synthetic_band", '"band_a"'): "a", + ("synthetic_band", '"band_b"'): "b", + } + } + ) + authored = author_target_references(_banded_contract(), _banded_facts(), config) + assert authored.references == () + assert authored.membership_report["targets"]["ons.age.by_band"]["status"] == ( + "signed_excluded" + ) diff --git a/packages/microcosm-build/tests/test_uk_cgt_asset_type.py b/packages/microcosm-build/tests/test_uk_cgt_asset_type.py new file mode 100644 index 0000000000..ab80ce51b1 --- /dev/null +++ b/packages/microcosm-build/tests/test_uk_cgt_asset_type.py @@ -0,0 +1,426 @@ +"""The CGT asset-type stage: residential flag, main asset type, receipts.""" + +from __future__ import annotations + +import copy + +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 cgt_asset_type +from microcosm.build.uk_runtime.cgt_asset_type import ( + CGT_ASSET_TYPE_COLUMN, + CGT_ASSET_TYPE_DOMAIN, + CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES, + CGT_ASSET_TYPE_NONE, + CGT_ASSET_TYPE_RESIDENTIAL, + CGT_ASSET_TYPE_SUB_AEA, + CGT_RESIDENTIAL_GAINS_COLUMN, + HMRC_CGT_ASSET_TYPE_RECORD_SETS, + HMRC_CGT_ASSET_TYPE_RESOURCE, + UK_CGT_ASSET_TYPE_MASS_CONSERVATION_REASON, + UK_CGT_ASSET_TYPE_STAGE_NAME, + HMRCCGTAssetTypeFacts, + assign_uk_cgt_asset_types, + cgt_asset_type_operation_parameters, + fit_type_weights, + load_hmrc_cgt_asset_type_facts, + solve_residential_logistic, + uk_cgt_asset_type_stage_transform, +) +from microcosm.build.uk_runtime.cgt_imputation import ( + UK_CGT_TAXABLE_INCOME_PROXY_COMPONENTS, + UKCGTPolicyParameters, +) +from microcosm.build.uk_runtime.content_identity import uk_frame_content_identity +from microcosm.build.uk_runtime.ledger_fact_vendoring import load_vendored_resource +from microcosm.build.uk_runtime.national_frame import uk_national_frame +from microcosm.frame import Frame + +PARAMETERS = UKCGTPolicyParameters( + personal_allowance=12_570.0, + personal_allowance_taper_threshold=100_000.0, + personal_allowance_taper_rate=0.5, + annual_exempt_amount=3_000.0, + instant="2024-06-01", + source="test", +) + + +def _frame(gains, *, weights=None, time_period: str = "2024") -> Frame: + rows = len(gains) + person = pd.DataFrame( + { + "person_id": np.arange(rows, dtype="int64"), + "person_household_id": np.arange(rows, dtype="int64"), + "person_benunit_id": np.arange(rows, dtype="int64"), + "capital_gains": np.asarray(gains, dtype=float), + "age": np.full(rows, 45, dtype="int64"), + } + ) + for column in UK_CGT_TAXABLE_INCOME_PROXY_COMPONENTS: + person[column] = 0.0 + household = pd.DataFrame( + { + "household_id": np.arange(rows, dtype="int64"), + "household_weight": ( + np.full(rows, 60.0) + if weights is None + else np.asarray(weights, dtype=float) + ), + "region": np.full(rows, "LONDON", dtype=object), + } + ) + benunit = pd.DataFrame({"benunit_id": np.arange(rows, dtype="int64")}) + return uk_national_frame( + person=person, benunit=benunit, household=household, time_period=time_period + ) + + +def _synthetic_gains(rows: int = 20_000, seed: int = 1) -> np.ndarray: + rng = np.random.default_rng(seed) + gains = np.where(rng.random(rows) < 0.8, np.exp(rng.normal(10.5, 1.8, rows)), 0.0) + gains[:50] = -1_000.0 + return gains + + +class TestVendoredFacts: + def test_committed_resource_types_and_restates_table_8a(self) -> None: + facts = load_hmrc_cgt_asset_type_facts() + + assert facts.table8a_taxpayers_total == 205_000.0 + assert facts.table8a_gains_total == 12_914_000_000.0 + assert facts.table8b_individuals_taxpayers == 171_000.0 + assert facts.table8b_all_taxpayers == 173_000.0 + assert facts.residential_taxpayers_individuals_basis == pytest.approx( + 205_000.0 * 171_000.0 / 173_000.0 + ) + assert facts.residential_gains_individuals_basis == pytest.approx( + 12_914_000_000.0 * 10_337_000_000.0 / 10_904_000_000.0 + ) + assert {row.asset_type for row in facts.table7_types} == { + CGT_ASSET_TYPE_RESIDENTIAL, + *CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES, + } + shares = facts.non_residential_gains_shares() + assert sum(shares.values()) == pytest.approx(1.0) + assert shares["unlisted_shares"] > 0.5 + assert facts.table7_type("listed_shares").mean_gain_per_disposal < 10_000.0 + assert facts.table7_type("unlisted_shares").mean_gain_per_disposal > 100_000.0 + + def test_every_declared_record_set_is_present(self) -> None: + payload = load_vendored_resource(HMRC_CGT_ASSET_TYPE_RESOURCE) + record_sets = {row["layout"]["record_set_id"] for row in payload["rows"]} + + assert record_sets == set(HMRC_CGT_ASSET_TYPE_RECORD_SETS) + assert payload["consumers"] == ["uk_runtime.cgt_asset_type"] + + def test_refuses_a_resource_from_another_feed( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + payload = copy.deepcopy(load_vendored_resource(HMRC_CGT_ASSET_TYPE_RESOURCE)) + payload["source_fact_feed"]["facts_sha256"] = "0" * 64 + monkeypatch.setattr( + cgt_asset_type, "load_vendored_resource", lambda _name: payload + ) + + with pytest.raises(ValueError, match="differs from the committed UK pin"): + load_hmrc_cgt_asset_type_facts() + + def test_refuses_rows_from_another_workbook( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + payload = copy.deepcopy(load_vendored_resource(HMRC_CGT_ASSET_TYPE_RESOURCE)) + for row in payload["rows"]: + if row["layout"]["record_set_id"].endswith("table8a.ty2024"): + row["source"]["source_sha256"] = "f" * 64 + monkeypatch.setattr( + cgt_asset_type, "load_vendored_resource", lambda _name: payload + ) + + with pytest.raises(ValueError, match="other than the pinned"): + load_hmrc_cgt_asset_type_facts() + + def test_refuses_a_drifted_asset_type_roster( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + payload = copy.deepcopy(load_vendored_resource(HMRC_CGT_ASSET_TYPE_RESOURCE)) + for row in payload["rows"]: + if row["dimensions"].get("cgt_asset_type") == "listed_shares": + row["dimensions"]["cgt_asset_type"] = "quoted_shares" + monkeypatch.setattr( + cgt_asset_type, "load_vendored_resource", lambda _name: payload + ) + + with pytest.raises(ValueError, match="asset-type roster drifted"): + load_hmrc_cgt_asset_type_facts() + + +class TestResidentialSolve: + def test_meets_both_targets_in_expectation(self) -> None: + gains = np.exp(np.random.default_rng(3).normal(10.5, 1.8, 5_000)) + weights = np.full(gains.size, 60.0) + count_target = 0.35 * weights.sum() + gains_target = 0.12 * (weights * gains).sum() + + a, b, centre = solve_residential_logistic( + gains, weights, count_target=count_target, gains_target=gains_target + ) + probabilities = 1.0 / (1.0 + np.exp(-(a + b * (np.log(gains) - centre)))) + + assert (weights * probabilities).sum() == pytest.approx(count_target, rel=1e-6) + assert (weights * gains * probabilities).sum() == pytest.approx( + gains_target, rel=1e-6 + ) + # Residential gainers are small relative to the whole: negative slope. + assert b < 0 + + def test_refuses_unattainable_targets(self) -> None: + gains = np.exp(np.random.default_rng(3).normal(10.5, 1.0, 500)) + weights = np.full(gains.size, 10.0) + + with pytest.raises(ValueError, match="not below the liable taxpayer mass"): + solve_residential_logistic( + gains, weights, count_target=weights.sum(), gains_target=1.0 + ) + with pytest.raises(ValueError, match="not below the liable gains mass"): + solve_residential_logistic( + gains, + weights, + count_target=1.0, + gains_target=(weights * gains).sum(), + ) + # A mean far above what the largest gains can carry at this count. + with pytest.raises(ValueError, match="outside the range"): + solve_residential_logistic( + gains, + weights, + count_target=0.5 * weights.sum(), + gains_target=0.999 * (weights * gains).sum(), + ) + + +class TestTypeWeights: + def test_reproduces_the_share_targets(self) -> None: + facts = load_hmrc_cgt_asset_type_facts() + gains = np.exp(np.random.default_rng(5).normal(11.0, 1.5, 4_000)) + weights = np.full(gains.size, 30.0) + medians = { + asset_type: facts.table7_type(asset_type).mean_gain_per_disposal + for asset_type in CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES + } + targets = facts.non_residential_gains_shares() + + type_weights, probabilities, iterations = fit_type_weights( + gains, weights, medians=medians, share_targets=targets + ) + + assert probabilities.shape == (gains.size, 5) + np.testing.assert_allclose(probabilities.sum(axis=1), 1.0) + achieved = ((weights * gains)[:, None] * probabilities).sum(axis=0) / ( + weights * gains + ).sum() + for index, asset_type in enumerate(CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES): + assert achieved[index] == pytest.approx(targets[asset_type], abs=1e-5) + assert type_weights.sum() == pytest.approx(1.0) + assert iterations < 100 + + +class TestAssignment: + def test_flags_and_types_every_liable_gainer_and_nobody_else(self) -> None: + facts = load_hmrc_cgt_asset_type_facts() + gains = _synthetic_gains() + frame = _frame(gains) + + result, summary = assign_uk_cgt_asset_types(frame, facts, PARAMETERS) + + person = result.table("person") + types = person[CGT_ASSET_TYPE_COLUMN].to_numpy() + residential = person[CGT_RESIDENTIAL_GAINS_COLUMN].to_numpy() + liable = gains > PARAMETERS.annual_exempt_amount + assert set(types) <= set(CGT_ASSET_TYPE_DOMAIN) + assert (types[gains <= 0] == CGT_ASSET_TYPE_NONE).all() + assert (types[(gains > 0) & ~liable] == CGT_ASSET_TYPE_SUB_AEA).all() + assert not np.isin( + types[liable], [CGT_ASSET_TYPE_NONE, CGT_ASSET_TYPE_SUB_AEA] + ).any() + flagged = types == CGT_ASSET_TYPE_RESIDENTIAL + assert (residential[flagged] == gains[flagged]).all() + assert (residential[~flagged] == 0.0).all() + # Untouched columns and weights, one conservation receipt. + assert (person["capital_gains"].to_numpy() == gains).all() + assert result.mass_log[-1].reason == UK_CGT_ASSET_TYPE_MASS_CONSERVATION_REASON + assert result.mass_log[-1].old_total == result.mass_log[-1].new_total + + evidence = summary.evidence() + assert evidence["stage"] == UK_CGT_ASSET_TYPE_STAGE_NAME + residential_receipt = evidence["residential"] + assert residential_receipt["expected_count"] == pytest.approx( + facts.residential_taxpayers_individuals_basis, rel=1e-6 + ) + assert residential_receipt["expected_gains"] == pytest.approx( + facts.residential_gains_individuals_basis, rel=1e-6 + ) + # Systematic sampling lands within one person of the expected count. + assert ( + abs( + residential_receipt["achieved_count"] + - residential_receipt["expected_count"] + ) + <= 60.0 + ) + assert residential_receipt["achieved_gains"] == pytest.approx( + residential_receipt["expected_gains"], rel=0.05 + ) + assert residential_receipt["logistic_slope"] < 0 + shares = evidence["asset_type"]["achieved_gains_share"] + assert sum(shares.values()) == pytest.approx(1.0) + assert shares["unlisted_shares"] > 0.4 + assert evidence["value_counts"][CGT_ASSET_TYPE_RESIDENTIAL] == int( + flagged.sum() + ) + assert len(evidence["composition_by_band"]) == 10 + assert evidence["facts"]["resource_sha256"] == facts.resource_sha256 + assert evidence["seeds"] == {"residential_flag": 553, "asset_type": 554} + + def test_is_deterministic_and_seed_sensitive(self) -> None: + facts = load_hmrc_cgt_asset_type_facts() + frame = _frame(_synthetic_gains()) + + first, _ = assign_uk_cgt_asset_types(frame, facts, PARAMETERS) + second, _ = assign_uk_cgt_asset_types(frame, facts, PARAMETERS) + other, _ = assign_uk_cgt_asset_types( + frame, facts, PARAMETERS, asset_type_seed=999 + ) + + assert uk_frame_content_identity(first) == uk_frame_content_identity(second) + assert uk_frame_content_identity(first) != uk_frame_content_identity(other) + + def test_refuses_a_frame_that_cannot_hold_the_targets(self) -> None: + facts = load_hmrc_cgt_asset_type_facts() + frame = _frame([10_000.0, 20_000.0, 50_000.0], weights=[1.0, 1.0, 1.0]) + + with pytest.raises(ValueError, match="not below the liable taxpayer mass"): + assign_uk_cgt_asset_types(frame, facts, PARAMETERS) + + def test_refuses_a_frame_already_classified(self) -> None: + facts = load_hmrc_cgt_asset_type_facts() + frame = _frame(_synthetic_gains()) + classified, _ = assign_uk_cgt_asset_types(frame, facts, PARAMETERS) + + with pytest.raises(ValueError, match="already carries"): + assign_uk_cgt_asset_types(classified, facts, PARAMETERS) + + +class TestStageContract: + def test_manifest_operations_restate_the_reviewed_parameters(self) -> None: + spec = load_country_spec("uk") + assert spec.sources is not None + stage = spec.sources.stage_map()[UK_CGT_ASSET_TYPE_STAGE_NAME] + expected = cgt_asset_type_operation_parameters() + + assert [operation.kind for operation in stage.operations] == list(expected) + for operation in stage.operations: + assert dict(operation.parameters) == expected[operation.kind] + assert tuple(stage.outputs) == ( + CGT_ASSET_TYPE_COLUMN, + CGT_RESIDENTIAL_GAINS_COLUMN, + ) + roles = {artifact["role"]: artifact for artifact in stage.artifacts} + assert roles["cgt_asset_type_facts"]["resource"] == HMRC_CGT_ASSET_TYPE_RESOURCE + assert roles["cgt_asset_type_facts"]["runtime_sha256_required"] is True + + def test_transform_refuses_a_drifted_declaration(self) -> None: + from dataclasses import replace + + spec = load_country_spec("uk") + assert spec.sources is not None + stage = spec.sources.stage_map()[UK_CGT_ASSET_TYPE_STAGE_NAME] + drifted = replace(stage, operations=tuple(reversed(stage.operations))) + + with pytest.raises(ValueError, match="operation order drifted"): + uk_cgt_asset_type_stage_transform(drifted) + + def test_transform_runs_from_the_resource_and_the_seam( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + spec = load_country_spec("uk") + assert spec.sources is not None + stage = spec.sources.stage_map()[UK_CGT_ASSET_TYPE_STAGE_NAME] + facts = load_hmrc_cgt_asset_type_facts() + frame = _frame(_synthetic_gains(6_000)) + resolved: list[str] = [] + + def load_facts(): + resolved.append("facts") + return facts + + def load_parameters(period): + assert period == "2024" + resolved.append("parameters") + return PARAMETERS + + monkeypatch.setattr( + cgt_asset_type, "load_hmrc_cgt_asset_type_facts", load_facts + ) + monkeypatch.setattr(cgt_asset_type, "uk_cgt_policy_parameters", load_parameters) + from_resource = uk_cgt_asset_type_stage_transform(stage) + result_a = from_resource(frame) + assert resolved == ["facts", "parameters"] + + seam = uk_cgt_asset_type_stage_transform( + stage, facts=facts, parameters=PARAMETERS + ) + result_b = seam(frame) + + assert uk_frame_content_identity(result_a) == uk_frame_content_identity( + result_b + ) + assert from_resource.checkpoint_metadata() == seam.checkpoint_metadata() + assert from_resource.checkpoint_metadata()["evidence"]["stage"] == ( + UK_CGT_ASSET_TYPE_STAGE_NAME + ) + + +def test_synthetic_facts_type_check_without_the_feed() -> None: + """A synthetic facts object drives the stage without the vendored rows.""" + from microcosm.build.uk_runtime.cgt_asset_type import HMRCCGTTable7Type + + rows = tuple( + HMRCCGTTable7Type( + asset_type=name, category="financial", disposals=d, proceeds=3 * g, gains=g + ) + for name, d, g in ( + ("listed_shares", 1_000_000.0, 5.0e9), + ("unlisted_shares", 300_000.0, 33.0e9), + ("other_financial_assets", 1_000_000.0, 16.0e9), + ("agricultural_commercial_industrial_land_buildings", 13_000.0, 2.0e9), + (CGT_ASSET_TYPE_RESIDENTIAL, 170_000.0, 10.0e9), + ("other_non_financial_assets", 20_000.0, 3.0e9), + ) + ) + facts = HMRCCGTAssetTypeFacts( + table8a_taxpayers_total=2_000.0, + table8a_gains_total=60_000_000.0, + table8a_disposals_total=2_200.0, + table8a_tax_total=12_000_000.0, + table8b_individuals_taxpayers=95.0, + table8b_individuals_gains=95.0, + table8b_all_taxpayers=100.0, + table8b_all_gains=100.0, + table7_types=rows, + table7_total_gains=sum(row.gains for row in rows), + table7_total_disposals=sum(row.disposals for row in rows), + resource="synthetic.json", + resource_sha256="synthetic", + source_commit="synthetic", + ) + frame = _frame(_synthetic_gains(3_000), weights=np.full(3_000, 5.0)) + + _, summary = assign_uk_cgt_asset_types(frame, facts, PARAMETERS) + + assert summary.evidence()["residential"]["count_target_individuals_basis"] == ( + pytest.approx(1_900.0) + ) diff --git a/packages/microcosm-build/tests/test_uk_cgt_imputation.py b/packages/microcosm-build/tests/test_uk_cgt_imputation.py index 16a4b653cb..326e242d1a 100644 --- a/packages/microcosm-build/tests/test_uk_cgt_imputation.py +++ b/packages/microcosm-build/tests/test_uk_cgt_imputation.py @@ -7,14 +7,24 @@ from microcosm.build.country_spec import load_country_spec from microcosm.build.uk_runtime import cgt_imputation from microcosm.build.uk_runtime.cgt_imputation import ( + UK_CGT_AGE_GROUP_LOWER_BOUNDS, UK_CGT_IMPUTATION_STAGE_NAME, UK_CGT_MASS_CONSERVATION_REASON, + UK_CGT_REGION_GROUP_LABELS, + UK_CGT_REGION_GROUPS, UK_CGT_TAXABLE_INCOME_PROXY_COMPONENTS, UKCGTPolicyParameters, _band_plans, + _CellPlan, + _draw_plan_amounts, + _joint_plans, _pareto_quantile, + _pareto_stratum_means, + _rake_allocation_targets, + _tilt_group, _truncated_exponential_quantile, impute_uk_capital_gains, + impute_uk_capital_gains_with_report, summarize_uk_cgt_imputation, uk_capital_gains_imputation_stage, uk_cgt_spine_stage_transform, @@ -29,6 +39,8 @@ HMRCCapitalGainsIncomeTotal, HMRCCapitalGainsJointDistribution, HMRCCapitalGainsSourceProvenance, + load_hmrc_cgt_conditioning_facts, + load_hmrc_cgt_joint_distribution, ) from microcosm.build.uk_runtime.national_frame import uk_national_frame from microcosm.frame import Frame @@ -102,19 +114,29 @@ def _distribution( band_totals=tuple(band_totals), income_totals=income_totals, source=HMRCCapitalGainsSourceProvenance( - local_path=None, - sha256="synthetic", - size_bytes=0, - sheet_name="synthetic", - source_vintage="2023-24", - build_period="2023", + resource="synthetic.json", + resource_sha256="synthetic", + source_commit="synthetic", + record_set_prefix="synthetic.", + source_file="synthetic.ods", + source_sha256="synthetic", + source_vintage="2024-25", + build_period="2024", ), total_individuals=sum(t.individuals for t in band_totals), total_gains=sum(t.gains for t in band_totals), ) -def _frame(person_rows: int, *, gains, incomes) -> Frame: +def _frame( + person_rows: int, + *, + gains, + incomes, + ages=None, + regions=None, + weights=None, +) -> Frame: person = pd.DataFrame( { "person_id": np.arange(person_rows, dtype="int64"), @@ -122,6 +144,11 @@ def _frame(person_rows: int, *, gains, incomes) -> Frame: "person_benunit_id": np.arange(person_rows, dtype="int64"), "capital_gains": np.asarray(gains, dtype=float), "employment_income": np.asarray(incomes, dtype=float), + "age": ( + np.full(person_rows, 45, dtype="int64") + if ages is None + else np.asarray(ages, dtype="int64") + ), } ) for column in UK_CGT_TAXABLE_INCOME_PROXY_COMPONENTS: @@ -130,7 +157,16 @@ def _frame(person_rows: int, *, gains, incomes) -> Frame: household = pd.DataFrame( { "household_id": np.arange(person_rows, dtype="int64"), - "household_weight": np.full(person_rows, 100.0), + "household_weight": ( + np.full(person_rows, 100.0) + if weights is None + else np.asarray(weights, dtype=float) + ), + "region": ( + np.full(person_rows, "LONDON", dtype=object) + if regions is None + else np.asarray(regions, dtype=object) + ), } ) benunit = pd.DataFrame({"benunit_id": np.arange(person_rows, dtype="int64")}) @@ -207,6 +243,70 @@ def test_pareto_matches_the_published_mean(self) -> None: 5_000_000.0 * 2.0 ** (1.0 / alpha), rel=5e-3 ) + def test_pareto_stratum_means_average_to_the_published_mean(self) -> None: + """A few dozen carriers still carry the open band's mean exactly.""" + for n in (1, 7, 30, 300): + strata = np.arange(n, dtype=float) + means = _pareto_stratum_means( + strata / n, (strata + 1.0) / n, 5_000_000.0, 16_158_000.0 + ) + assert means.mean() == pytest.approx(16_158_000.0, rel=1e-9) + assert (np.diff(means) > 0).all() if n > 1 else True + assert means.min() >= 5_000_000.0 + iid = _pareto_quantile( + np.random.default_rng(3).random(30), 5_000_000.0, 16_158_000.0 + ) + assert iid.mean() < 16_158_000.0 + + def test_plan_amounts_carry_the_published_mean_under_unequal_weights( + self, + ) -> None: + """Strata are proportional to weight, so the weighted mean is the plan's.""" + rng = np.random.default_rng(5) + n = 40 + # Light rows hold the largest priors (the donors) and heavy rows the + # smallest: equal strata would hand the tail to the light rows and + # the weighted mean would fall far short of the published one. + existing = np.linspace(1.0, 2.0, n) + weights = np.where(existing > 1.5, 100.0, 900.0) + person_id = np.arange(n) + for plan, tolerance in ( + ( + _CellPlan( + 5_000_000, np.inf, 5_000_000.0, 3_000.0, 16_158_000.0, False, False + ), + 1e-9, + ), + ( + _CellPlan( + 1_000_000, + 2_000_000.0, + 1_000_000.0, + 9_000.0, + 1_420_000.0, + False, + False, + ), + 0.02, + ), + ): + gains = np.zeros(n) + _draw_plan_amounts( + plan, + person_id, + person_id=person_id, + existing=existing, + weights=weights, + rng=rng, + new_gains=gains, + ) + weighted_mean = float((gains * weights).sum() / weights.sum()) + assert weighted_mean == pytest.approx(plan.mean, rel=tolerance) + # Rank order is preserved: a larger prior never draws less. + order = np.argsort(existing) + assert (np.diff(gains[order]) >= 0).all() + assert gains.min() >= plan.effective_lower_bound + def test_rejects_a_mean_outside_the_band(self) -> None: with pytest.raises(ValueError, match="does not sit inside"): _truncated_exponential_quantile(np.asarray([0.5]), 0.0, 10.0, 20.0) @@ -340,31 +440,36 @@ def test_summary_reports_achieved_against_published(self) -> None: result = impute_uk_capital_gains(frame, distribution, PARAMETERS) summary = summarize_uk_cgt_imputation(frame, result, distribution, PARAMETERS) + conditioning = load_hmrc_cgt_conditioning_facts() assert len(summary.rows) == len(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS) - assert summary.published_taxpayer_mass == distribution.total_individuals + # Levels are the 2024-25 individual observations, not the joint's + # own 2023-24 total. + assert summary.published_taxpayer_mass == ( + conditioning.table1.individuals_taxpayers + ) assert summary.taxpayer_mass > 0 assert (summary.rows["published_gains"] > 0).all() + assert summary.rows["published_people"].sum() == pytest.approx( + conditioning.table1.individuals_taxpayers + ) + assert len(summary.age_rows) == len(conditioning.age_bands) + assert len(summary.region_rows) == len(conditioning.regions) + assert len(summary.age_by_band_rows) == len(conditioning.age_bands) * len( + HMRC_CGT_GAIN_BAND_LOWER_BOUNDS + ) + evidence = summary.evidence() + assert {"rows", "age_rows", "region_rows", "age_by_band_rows"} <= set(evidence) class TestStage: - def test_stage_runs_end_to_end_on_the_pinned_artifact(self) -> None: - """The factory's own transform path, not just its failure branch. + def test_stage_runs_end_to_end_on_the_vendored_surface(self) -> None: + """The factory's own transform path, on the committed resource. Regression test for the transform keeping a retired carrier type in its signature: with postponed annotation evaluation, only running the stage exercises the closure. """ - from pathlib import Path - - from microcosm.build.uk_runtime.hmrc_capital_gains import ( - HMRC_CGT_JOINT_ODS_FILENAME, - ) - - repo_root = Path(__file__).resolve().parents[3] - pinned_ods = repo_root / "inputs" / "hmrc" / HMRC_CGT_JOINT_ODS_FILENAME - if not pinned_ods.is_file(): - pytest.skip("reviewed HMRC capital gains ODS is an optional local input") - stage = uk_capital_gains_imputation_stage(pinned_ods, parameters=PARAMETERS) + stage = uk_capital_gains_imputation_stage(parameters=PARAMETERS) incomes = [20_000.0, 55_000.0, 80_000.0, 120_000.0, 180_000.0, 400_000.0] frame = _frame( 60, @@ -379,30 +484,41 @@ def test_stage_runs_end_to_end_on_the_pinned_artifact(self) -> None: assert drawn.max() > 0 def test_stage_carries_the_reviewed_name(self) -> None: - stage = uk_capital_gains_imputation_stage("unused.ods", parameters=PARAMETERS) + stage = uk_capital_gains_imputation_stage(parameters=PARAMETERS) assert stage.name == UK_CGT_IMPUTATION_STAGE_NAME - def test_stage_verifies_the_artifact_before_reading(self, tmp_path) -> None: - wrong = tmp_path / "wrong.ods" - wrong.write_bytes(b"not the pinned artifact") - stage = uk_capital_gains_imputation_stage(wrong, parameters=PARAMETERS) + def test_stage_checks_the_feed_pin_before_reading( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + import copy + + from microcosm.build.uk_runtime import hmrc_capital_gains + from microcosm.build.uk_runtime.ledger_fact_vendoring import ( + load_vendored_resource, + ) + + stale = copy.deepcopy( + load_vendored_resource("hmrc_cgt_conditioning_facts.json") + ) + stale["source_fact_feed"]["facts_sha256"] = "0" * 64 + monkeypatch.setattr( + hmrc_capital_gains, "load_vendored_resource", lambda _name: stale + ) + stage = uk_capital_gains_imputation_stage(parameters=PARAMETERS) frame = _frame(1, gains=[10_000.0], incomes=[20_000.0]) - with pytest.raises(ValueError, match="bytes, not the pinned"): + with pytest.raises(ValueError, match="differs from the committed UK pin"): stage.run(frame) -def test_cgt_spine_parsed_inputs_match_the_path_resolution( +def test_cgt_spine_parsed_inputs_match_the_resource_resolution( monkeypatch: pytest.MonkeyPatch, - tmp_path, ) -> None: spec = load_country_spec("uk") assert spec.sources is not None stage = spec.sources.stage_map()["hmrc_cgt_gains_spine"] distribution = _distribution(cell_people=10.0) - ods_path = tmp_path / "synthetic-cgt.ods" - ods_path.write_bytes(b"synthetic cgt source") frame = _frame( 6, gains=[5_000.0, 20_000.0, 75_000.0, 300_000.0, 2_500_000.0, 0.0], @@ -410,9 +526,7 @@ def test_cgt_spine_parsed_inputs_match_the_path_resolution( ) resolved: list[str] = [] - def load_distribution(path, *, tax_year): - assert path == ods_path - assert tax_year == "2023-24" + def load_distribution(): resolved.append("distribution") return distribution @@ -422,22 +536,18 @@ def load_parameters(period): return PARAMETERS monkeypatch.setattr( - cgt_imputation, - "materialize_hmrc_capital_gains_joint_distribution", - load_distribution, + cgt_imputation, "load_hmrc_cgt_joint_distribution", load_distribution ) monkeypatch.setattr(cgt_imputation, "uk_cgt_policy_parameters", load_parameters) - path_transform = uk_cgt_spine_stage_transform(stage, ods_path) - from_path = path_transform(frame) + resource_transform = uk_cgt_spine_stage_transform(stage) + from_resource = resource_transform(frame) assert resolved == ["distribution", "parameters"] def unexpected_loader(*_args, **_kwargs): raise AssertionError("parsed inputs must bypass source resolution") monkeypatch.setattr( - cgt_imputation, - "materialize_hmrc_capital_gains_joint_distribution", - unexpected_loader, + cgt_imputation, "load_hmrc_cgt_joint_distribution", unexpected_loader ) monkeypatch.setattr( cgt_imputation, @@ -446,155 +556,34 @@ def unexpected_loader(*_args, **_kwargs): ) seam_transform = uk_cgt_spine_stage_transform( stage, - ods_path, distribution=distribution, parameters=PARAMETERS, ) from_seam = seam_transform(frame) - assert uk_frame_content_identity(from_path) == uk_frame_content_identity(from_seam) - assert path_transform.checkpoint_metadata() == seam_transform.checkpoint_metadata() - - -REAL_2023_24 = { - # (gain band lower, income band lower): (thousands of people, £m of gains), - # None for a suppressed count. HMRC Capital Gains Tax statistics - # (24 July 2025), table 3.1 — public published values, embedded so CI - # exercises the real surface without the artifact. Four cells imply a - # mean outside their band through rounding: (500000, 37700), - # (2000000, 50000), (1000000, 100000), (250000, 150000). - (0, 0): (33, 247), - (0, 37700): (6, 42), - (0, 50000): (11, 79), - (0, 100000): (4, 32), - (0, 150000): (2, 18), - (0, 200000): (6, 44), - (10000, 0): (62, 1027), - (10000, 37700): (8, 136), - (10000, 50000): (15, 244), - (10000, 100000): (5, 85), - (10000, 150000): (3, 47), - (10000, 200000): (8, 131), - (25000, 0): (48, 1706), - (25000, 37700): (6, 199), - (25000, 50000): (10, 349), - (25000, 100000): (3, 126), - (25000, 150000): (2, 63), - (25000, 200000): (6, 202), - (50000, 0): (32, 2246), - (50000, 37700): (4, 288), - (50000, 50000): (8, 556), - (50000, 100000): (3, 208), - (50000, 150000): (2, 110), - (50000, 200000): (5, 323), - (100000, 0): (19, 2837), - (100000, 37700): (3, 463), - (100000, 50000): (6, 961), - (100000, 100000): (3, 407), - (100000, 150000): (1, 227), - (100000, 200000): (5, 755), - (250000, 0): (5, 1867), - (250000, 37700): (1, 394), - (250000, 50000): (3, 907), - (250000, 100000): (1, 423), - (250000, 150000): (1, 237), - (250000, 200000): (3, 938), - (500000, 0): (3, 1829), - (500000, 37700): (1, 463), - (500000, 50000): (2, 1105), - (500000, 100000): (1, 569), - (500000, 150000): (None, 334), - (500000, 200000): (2, 1405), - (1000000, 0): (1, 1494), - (1000000, 37700): (None, 436), - (1000000, 50000): (1, 1340), - (1000000, 100000): (1, 709), - (1000000, 150000): (None, 481), - (1000000, 200000): (1, 1929), - (2000000, 0): (None, 1424), - (2000000, 37700): (None, 471), - (2000000, 50000): (1, 1582), - (2000000, 100000): (None, 1149), - (2000000, 150000): (None, 815), - (2000000, 200000): (1, 3748), - (5000000, 0): (None, 1298), - (5000000, 37700): (None, 420), - (5000000, 50000): (None, 1373), - (5000000, 100000): (None, 1513), - (5000000, 150000): (None, 1480), - (5000000, 200000): (1, 16631), -} -REAL_BAND_TOTALS = { - 0: (63, 462), - 10000: (101, 1669), - 25000: (74, 2645), - 50000: (53, 3731), - 100000: (37, 5649), - 250000: (14, 4766), - 500000: (8, 5705), - 1000000: (5, 6390), - 2000000: (3, 9189), - 5000000: (2, 22714), -} -REAL_INCOME_TOTALS = { - 0: (203, 15975), - 37700: (29, 3311), - 50000: (55, 8496), - 100000: (22, 5221), - 150000: (12, 3812), - 200000: (37, 26106), -} + assert uk_frame_content_identity(from_resource) == uk_frame_content_identity( + from_seam + ) + assert ( + resource_transform.checkpoint_metadata() == seam_transform.checkpoint_metadata() + ) def _real_distribution() -> HMRCCapitalGainsJointDistribution: - cells = tuple( - HMRCCapitalGainsCell( - gain_lower_bound=gain, - income_lower_bound=income, - individuals=None if people is None else people * 1_000.0, - gains=amount * 1_000_000.0, - ) - for (gain, income), (people, amount) in REAL_2023_24.items() - ) - band_totals = tuple( - HMRCCapitalGainsBandTotal( - gain_lower_bound=gain, - individuals=people * 1_000.0, - gains=amount * 1_000_000.0, - ) - for gain, (people, amount) in REAL_BAND_TOTALS.items() - ) - income_totals = tuple( - HMRCCapitalGainsIncomeTotal( - income_lower_bound=income, - individuals=people * 1_000.0, - gains=amount * 1_000_000.0, - ) - for income, (people, amount) in REAL_INCOME_TOTALS.items() - ) - return HMRCCapitalGainsJointDistribution( - cells=cells, - band_totals=band_totals, - income_totals=income_totals, - source=HMRCCapitalGainsSourceProvenance( - local_path=None, - sha256="embedded-2023-24", - size_bytes=0, - sheet_name="3_1_2023-24", - source_vintage="2023-24", - build_period="2023", - ), - total_individuals=359_000.0, - total_gains=62_921_000_000.0, - ) + """The published 2024-25 joint, from the committed vendored rows. + + The rows are copied verbatim from the pinned Chronicle feed, so CI + exercises the real surface without hand-copied values. + """ + return load_hmrc_cgt_joint_distribution() class TestRealPublishedSurface: - """The published 2023-24 values, embedded so CI cannot mask them. + """The published 2024-25 values, vendored so CI cannot mask them. - A synthetic distribution with feasible means hid that four real cells - imply a mean outside their band through rounding, crashing the stage on - any population reaching those income bands. + A synthetic distribution with feasible means hid that real cells imply + a mean outside their band through rounding, crashing the stage on any + population reaching those income bands. """ def test_every_income_band_plans_without_raising(self) -> None: @@ -622,10 +611,21 @@ def test_infeasible_rounded_means_are_repaired_toward_the_boundary(self) -> None ) by_band = {plan.gain_lower_bound: plan for plan in plans} - # Rounded mean £463,000 for the £500k-£1m band clamps just inside. - repaired = by_band[500_000] + # 1,000 people (rounded) holding £980m in the £1m-£2m band imply a + # mean of £980,000, below the band; it clamps just inside. + repaired = by_band[1_000_000] assert repaired.mean_repaired - assert 500_000 < repaired.mean < 520_000 + assert 1_000_000 < repaired.mean <= 1_020_000 + by_band_100k = { + plan.gain_lower_bound: plan + for plan in _band_plans( + distribution, + 100_000, + annual_exempt_amount=PARAMETERS.annual_exempt_amount, + ) + } + assert by_band_100k[1_000_000].mean_repaired + assert not by_band[500_000].mean_repaired def test_imputation_runs_across_every_income_band(self) -> None: distribution = _real_distribution() @@ -675,3 +675,355 @@ def test_reads_the_2023_values_from_the_parameter_tree(self) -> None: assert parameters.personal_allowance_taper_rate == 0.5 assert parameters.annual_exempt_amount == 6_000.0 assert parameters.instant == "2023-06-01" + + +class TestConditionedAllocation: + """Age and region conditioning on the 2024-25 band vintage (microcosm#725).""" + + def test_joint_reconciles_with_the_table_2_1a_bands(self) -> None: + conditioning = load_hmrc_cgt_conditioning_facts() + distribution = _real_distribution() + joint, band_rows = _joint_plans( + distribution, + conditioning, + annual_exempt_amount=3_000.0, + ) + folded = conditioning.size_bands_aggregated(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS) + for row in band_rows: + lower = row["gain_lower_bound"] + assert row["published_people"] == distribution.band_total(lower).individuals + assert row["table2_1a_people"] == folded[lower][0] + assert row["people_difference"] == 0.0 + assert abs(row["gains_difference"]) <= 1_000_000.0 + # Column reconciliation keeps each band near its published row. + assert row["target_people"] == pytest.approx( + row["published_people"], rel=0.15 + ) + for income_lower in HMRC_CGT_INCOME_BAND_LOWER_BOUNDS: + plan = joint[(lower, income_lower)] + assert plan.effective_lower_bound < plan.mean + assert plan.mean < plan.gain_upper_bound + assert sum(row["means_repaired"] for row in band_rows) == 2 + # The joint's mass is the published taxpayer count, column by column. + assert sum(row["target_people"] for row in band_rows) == pytest.approx( + conditioning.table1.individuals_taxpayers, rel=1e-9 + ) + + def test_rake_meets_feasible_margins(self) -> None: + conditioning = load_hmrc_cgt_conditioning_facts() + joint, _ = _joint_plans( + _real_distribution(), conditioning, annual_exempt_amount=3_000.0 + ) + rows = 6 * len(UK_CGT_AGE_GROUP_LOWER_BOUNDS) * len(UK_CGT_REGION_GROUP_LABELS) + rng = np.random.default_rng(7) + # Every (income band, age group, region group) cell has gainers, so + # the seed is strictly positive and every margin is attainable. + income_band = np.repeat( + np.asarray(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS), rows // 6 + ) + age_group = np.tile( + np.repeat( + np.arange(len(UK_CGT_AGE_GROUP_LOWER_BOUNDS)), + len(UK_CGT_REGION_GROUP_LABELS), + ), + 6, + ) + region_group = np.tile( + np.arange(len(UK_CGT_REGION_GROUP_LABELS)), + rows // len(UK_CGT_REGION_GROUP_LABELS), + ) + targets, report = _rake_allocation_targets( + joint, + conditioning, + is_gainer=np.ones(rows, dtype=bool), + person_weight=rng.uniform(50.0, 150.0, rows), + income_band=income_band, + age_group=age_group, + region_group=region_group, + ) + assert report["ipf_max_abs_margin_error"] < 1e-6 + assert report["gains_margin_max_abs_error"] < 1e-6 + assert report["ipf_zero_seed_cells"] == 0 + assert report["rake_rounds_used"] < report["rake_rounds"] + assert targets.sum() == pytest.approx(report["joint_total_people"]) + raked_by_age = targets.sum(axis=(0, 1, 3)) + for index, lower in enumerate(UK_CGT_AGE_GROUP_LOWER_BOUNDS): + assert raked_by_age[index] == pytest.approx( + report["age_margin"][str(lower)]["normalised"], rel=1e-6 + ) + gains = report["gains_margin"][str(lower)] + assert gains["attainable"] is True + assert gains["raked"] == pytest.approx(gains["normalised"], rel=1e-6) + assert gains["raked_mean"] == pytest.approx(gains["target_mean"], rel=1e-6) + # The tilt is what carries the gains margin: 65+ hold 38 % of the + # taxpayers but 32 % of the gains, so the older groups tilt down the + # bands and the 45-64 groups, which hold over half the gains on a + # third of the taxpayers, tilt up. + assert report["gains_margin"]["75"]["tilt_lambda"] < 0.0 + assert report["gains_margin"]["55"]["tilt_lambda"] > 0.0 + # The 16-24 group's published mean (about GBP 80k) sits well below + # the table's, so on a seed that spreads every group over the whole + # band profile it tilts down too. + assert report["gains_margin"]["16"]["tilt_lambda"] < 0.0 + + def test_tilt_group_solves_an_attainable_mean_and_bounds_the_rest(self) -> None: + group = np.full((3, 1, 2), 10.0) + scaled_means = np.asarray([[0.1], [0.5], [1.0]]) + tilted, lam, attainable = _tilt_group(group, scaled_means, 0.8) + assert attainable is True + assert tilted.sum() == pytest.approx(group.sum()) + achieved = float((tilted * scaled_means[:, :, None]).sum() / tilted.sum()) + assert achieved == pytest.approx(0.8, abs=1e-9) + assert lam > 0.0 + # A target outside the seeded cell means saturates at the bound and + # keeps the count; the caller reports it rather than raising. + tilted, lam, attainable = _tilt_group(group, scaled_means, 1.5) + assert attainable is False + assert tilted.sum() == pytest.approx(group.sum()) + assert tilted[2].sum() > 0.99 * tilted.sum() + tilted, lam, attainable = _tilt_group(group, scaled_means, 0.05) + assert attainable is False + assert tilted[0].sum() > 0.99 * tilted.sum() + + def test_rake_reports_an_income_band_without_gainers(self) -> None: + conditioning = load_hmrc_cgt_conditioning_facts() + joint, _ = _joint_plans( + _real_distribution(), conditioning, annual_exempt_amount=3_000.0 + ) + rows = 40 + targets, report = _rake_allocation_targets( + joint, + conditioning, + is_gainer=np.ones(rows, dtype=bool), + person_weight=np.full(rows, 100.0), + income_band=np.full(rows, 0), + age_group=np.arange(rows) % len(UK_CGT_AGE_GROUP_LOWER_BOUNDS), + region_group=np.arange(rows) % len(UK_CGT_REGION_GROUP_LABELS), + ) + assert report["income_bands_without_gainers"] == list( + HMRC_CGT_INCOME_BAND_LOWER_BOUNDS[1:] + ) + assert report["ipf_zero_seed_cells"] > 0 + # Nothing is invented for the empty bands. + assert targets[:, 1:, :, :].sum() == 0.0 + + def test_age_conditioning_moves_taxpayer_mass_toward_table_6(self) -> None: + # Seven ages x twelve regions x six income bands, every combination + # present with the same prior, so the margins are attainable and any + # age shape in the result comes from the rake, not from the priors. + # 24 persons per (age, region, income) combination at weight 500: + # every cell holds more support than its raked target, and one + # person is small next to every age group but 16-24 (4,000). + rows = 7 * 12 * 6 * 24 + rng = np.random.default_rng(11) + gains = rng.lognormal(10, 1, rows) + incomes = np.asarray( + # After the personal allowance these land in the six Table 3 + # taxable-income bands (45,000 would share band 0 with 20,000). + [20_000.0, 55_000.0, 75_000.0, 120_000.0, 180_000.0, 300_000.0] + ) + index = np.arange(rows) + ages = np.asarray([20, 30, 40, 50, 60, 70, 80])[index % 7] + regions = np.asarray(sorted(UK_CGT_REGION_GROUPS))[(index // 7) % 12] + frame = _frame( + rows, + gains=gains, + incomes=incomes[(index // 84) % 6], + ages=ages, + regions=regions, + # Enough support in every cell that no cell scales down and + # the pooled walk is never needed: the achieved shape is the rake's. + weights=np.full(rows, 500.0), + ) + conditioning = load_hmrc_cgt_conditioning_facts() + + result, report = impute_uk_capital_gains_with_report( + frame, _real_distribution(), PARAMETERS, conditioning=conditioning + ) + + assert report.rake["ipf_max_abs_margin_error"] < 1e-3 + assert report.rake["gains_margin_max_abs_error"] < 1e-3 + assert report.rake["ipf_zero_seed_cells"] == 0 + drawn = result.table("person")["capital_gains"].to_numpy() + liable = drawn > PARAMETERS.annual_exempt_amount + weight = 500.0 + share = { + lower: float(liable[ages_group == index].sum() * weight) + for index, lower in enumerate(UK_CGT_AGE_GROUP_LOWER_BOUNDS) + for ages_group in [np.digitize(ages, UK_CGT_AGE_GROUP_LOWER_BOUNDS[1:])] + } + total = sum(share.values()) + published = { + band.lower_bound: band.taxpayers for band in conditioning.age_bands + } + # Uniform support would give each group a seventh; Table 6 gives + # 16-24 under 1 % of taxpayers and 55-64 over a quarter. + assert share[16] / total < 0.03 + assert share[55] / total > 0.20 + older = (share[65] + share[75]) / total + published_older = ( + published[65] + published[75] + published[85] + ) / conditioning.table1.individuals_taxpayers + assert abs(older - published_older) < 0.10 + # The tail follows the same shape: no longer a working-age monopoly + # (the #725 finding was 2 % at 65+ above GBP 2m). Read at GBP 500k + # and above so the check rests on dozens of persons, not a handful. + tail = drawn >= 500_000.0 + assert tail.sum() >= 30 + assert float((tail & (ages >= 65)).sum() / tail.sum()) > 0.2 + # The gains tilt: 65+ hold 32 % of published gains against 38 % of + # taxpayers, and 45-64 hold 56 % of gains on 44 % of taxpayers. The + # realised shares carry systematic-rounding and stratified-draw + # noise, so read them against wide bands around the published ones. + gains_by_age = { + lower: float((drawn * liable)[ages_group == index].sum() * weight) + for index, lower in enumerate(UK_CGT_AGE_GROUP_LOWER_BOUNDS) + for ages_group in [np.digitize(ages, UK_CGT_AGE_GROUP_LOWER_BOUNDS[1:])] + } + gains_total = sum(gains_by_age.values()) + older_gains = (gains_by_age[65] + gains_by_age[75]) / gains_total + assert 0.20 < older_gains < 0.45 + middle_gains = (gains_by_age[45] + gains_by_age[55]) / gains_total + assert 0.40 < middle_gains < 0.70 + + def test_fallback_meets_the_joint_where_a_cell_has_no_support(self) -> None: + rows = 3_000 + rng = np.random.default_rng(13) + gains = rng.lognormal(10, 1, rows) + # Two thousand 45-year-old and a thousand 70-year-old Londoners: five + # age groups and three region groups have no support, so the margins + # conflict and the joint (applied last) splits each band between the + # two supported cells by their age margins, 98,000 against 125,000. + # The 65-74 cell then wants more than its 100,000 of support, scales + # down, and the pooled walk over the unassigned 45-54 rows must carry + # the shortfall. Weights of 100 keep one person smaller than the top + # band's low-income target (a suppressed cell of roughly 130 people). + frame = _frame( + rows, + gains=gains, + incomes=np.full(rows, 20_000.0), + ages=np.where(np.arange(rows) < 2_000, 45, 70), + weights=np.full(rows, 100.0), + ) + + result, report = impute_uk_capital_gains_with_report( + frame, + _real_distribution(), + PARAMETERS, + conditioning=load_hmrc_cgt_conditioning_facts(), + ) + + assert report.rake["ipf_zero_seed_cells"] > 0 + assert report.fallback_released_mass > 0.0 + joint_rows = pd.DataFrame(report.joint_rows) + low_income = joint_rows[joint_rows["income_lower_bound"] == 0] + achieved = low_income["achieved_pass1"] + low_income["achieved_fallback"] + # The band's pooled support (300,000 people) exceeds the low-income + # column's 2024-25 target (292,000), so the joint is met in full + # despite the empty conditioning cells; a person never splits, so + # allow one weight of slack per band. + assert (achieved + 100.0 >= low_income["target_people"]).all() + assert abs(achieved.sum() - low_income["target_people"].sum()) < 100.0 * len( + low_income + ) + drawn = result.table("person")["capital_gains"].to_numpy() + assert drawn.max() >= 5_000_000.0 + + def test_rounding_errors_are_carried_across_cells_not_accumulated(self) -> None: + # Heavy rows spread thinly over many cells: every cell's allotment + # for most bands is below one person's weight, so each walk rounds + # by up to a whole person. Without the carry the overshoots of + # dozens of walks compound (the pooled walk can only add), and the + # income band lands thousands of people over its raked total; with + # it the walked total stays within one weight per band. + rows = 7 * 12 * 6 * 3 + rng = np.random.default_rng(17) + index = np.arange(rows) + ages = np.asarray([20, 30, 40, 50, 60, 70, 80])[index % 7] + regions = np.asarray(sorted(UK_CGT_REGION_GROUPS))[(index // 7) % 12] + incomes = np.asarray( + [20_000.0, 55_000.0, 75_000.0, 120_000.0, 180_000.0, 300_000.0] + )[(index // 84) % 6] + frame = _frame( + rows, + gains=rng.lognormal(10, 1, rows), + incomes=incomes, + ages=ages, + regions=regions, + weights=np.full(rows, 4_000.0), + ) + result, report = impute_uk_capital_gains_with_report( + frame, + _real_distribution(), + PARAMETERS, + conditioning=load_hmrc_cgt_conditioning_facts(), + ) + joint_rows = pd.DataFrame(report.joint_rows) + achieved = joint_rows["achieved_pass1"] + joint_rows["achieved_fallback"] + # Every income band has more support (84 rows x 4,000) than target, + # so each (gain band, income band) walked total must sit within one + # weight of its raked total: the carry bounds the error per band, + # where dozens of independent cell roundings would not. + assert (abs(achieved - joint_rows["target_people"]) <= 4_000.0 + 1e-6).all() + carry = report.rounding_carry_out + assert set(carry) == {str(b) for b in HMRC_CGT_INCOME_BAND_LOWER_BOUNDS} + for income_lower, by_band in carry.items(): + for gain_lower, value in by_band.items(): + assert abs(value) <= 4_000.0 + 1e-6, (income_lower, gain_lower, value) + drawn = result.table("person")["capital_gains"].to_numpy() + assert (drawn > PARAMETERS.annual_exempt_amount).sum() > 0 + + def test_unknown_region_and_missing_age_refuse(self) -> None: + frame = _frame( + 4, + gains=[1_000.0, 2_000.0, 3_000.0, 4_000.0], + incomes=[20_000.0] * 4, + regions=["LONDON", "LONDON", "MARS", "LONDON"], + ) + with pytest.raises(ValueError, match="Unknown region name"): + impute_uk_capital_gains(frame, _distribution(), PARAMETERS) + + person = frame.table("person").drop(columns=["age"]) + stripped = uk_national_frame( + person=person, + benunit=frame.table("benunit"), + household=frame.table("household"), + time_period="2023", + household_weights=frame.weights_for("household").values, + ) + with pytest.raises(ValueError, match="no age column"): + impute_uk_capital_gains(stripped, _distribution(), PARAMETERS) + + def test_region_groups_cover_the_tier_once(self) -> None: + assert set(UK_CGT_REGION_GROUPS.values()) == set(UK_CGT_REGION_GROUP_LABELS) + assert UK_CGT_REGION_GROUPS["LONDON"] == "london" + assert ( + UK_CGT_REGION_GROUPS["SOUTH_EAST"] + == UK_CGT_REGION_GROUPS["EAST_OF_ENGLAND"] + ) + + def test_report_records_the_conditioning_resource(self) -> None: + conditioning = load_hmrc_cgt_conditioning_facts() + frame = _frame( + 12, + gains=[float(10_000 * (i + 1)) for i in range(12)], + incomes=[20_000.0] * 12, + ) + _, report = impute_uk_capital_gains_with_report( + frame, _distribution(), PARAMETERS, conditioning=conditioning + ) + assert report.conditioning["resource_sha256"] == conditioning.resource_sha256 + assert report.conditioning["vintage_tax_year"] == 2024 + assert report.conditioning["joint_resource"] == "synthetic.json" + assert report.conditioning["joint_vintage"] == "2024-25" + assert report.conditioning["fallback_policy"] == "pooled_income_band_rank_walk" + evidence = report.evidence() + assert set(evidence) == { + "band_rows", + "joint_rows", + "rake", + "fallback_released_mass", + "fallback_share_by_band", + "conditioning", + "rounding_carry_out", + } diff --git a/packages/microcosm-build/tests/test_uk_cgt_source_manifest.py b/packages/microcosm-build/tests/test_uk_cgt_source_manifest.py index 2348f23ea5..318f076d04 100644 --- a/packages/microcosm-build/tests/test_uk_cgt_source_manifest.py +++ b/packages/microcosm-build/tests/test_uk_cgt_source_manifest.py @@ -5,6 +5,9 @@ import json from pathlib import Path +from microcosm.build.uk_runtime.cgt_asset_type import ( + UK_CGT_ASSET_TYPE_MASS_CONSERVATION_REASON, +) from microcosm.build.uk_runtime.cgt_imputation import ( UK_CGT_IMPUTATION_SEED, UK_CGT_IMPUTATION_STAGE_NAME, @@ -17,10 +20,10 @@ CGT_DONOR_MASS_CHANGE_REASON, ) from microcosm.build.uk_runtime.hmrc_capital_gains import ( - HMRC_CGT_JOINT_ODS_SHA256, - HMRC_CGT_JOINT_ODS_SIZE_BYTES, - HMRC_CGT_JOINT_ODS_URL, - HMRC_CGT_JOINT_SHEET_NAMES, + HMRC_CGT_BUILD_PERIOD, + HMRC_CGT_CONDITIONING_RECORD_SETS, + HMRC_CGT_CONDITIONING_RESOURCE, + HMRC_CGT_SOURCE_VINTAGE, ) from microcosm.build.uk_runtime.release_input_coverage import ( load_uk_release_input_coverage_manifest, @@ -49,17 +52,23 @@ def _stage() -> dict: return stages[0] -def test_manifest_pins_the_artifact_the_code_pins() -> None: - """One provenance, declared once: the manifest repeats the module's pin.""" - surface = {artifact["role"]: artifact for artifact in _stage()["artifacts"]}[ - "published_fact_surface" +def test_manifest_names_the_resource_the_code_reads() -> None: + """One provenance, declared once: the manifest repeats the module's roster.""" + artifacts = {artifact["role"]: artifact for artifact in _stage()["artifacts"]} + assert "published_fact_surface" not in artifacts + surface = artifacts["cgt_conditioning_facts"] + verify = {operation["kind"]: operation for operation in _stage()["operations"]}[ + "verify_vendored_fact_resource" ] - assert surface["locator"] == HMRC_CGT_JOINT_ODS_URL - assert surface["sha256"] == HMRC_CGT_JOINT_ODS_SHA256 - assert surface["size_bytes"] == HMRC_CGT_JOINT_ODS_SIZE_BYTES - assert surface["sheets"] == list(HMRC_CGT_JOINT_SHEET_NAMES.values()) + assert surface["resource"] == HMRC_CGT_CONDITIONING_RESOURCE assert surface["runtime_sha256_required"] is True + assert verify["artifact_role"] == "cgt_conditioning_facts" + assert verify["resource"] == HMRC_CGT_CONDITIONING_RESOURCE + assert verify["feed_pin"] == "chronicle_feed.json" + assert verify["record_sets"] == list(HMRC_CGT_CONDITIONING_RECORD_SETS) + assert verify["source_vintage"] == HMRC_CGT_SOURCE_VINTAGE + assert verify["mapped_build_period"] == int(HMRC_CGT_BUILD_PERIOD) def test_manifest_operations_match_the_stage_implementation() -> None: @@ -71,8 +80,9 @@ def test_manifest_operations_match_the_stage_implementation() -> None: draws = operations["within_band_draws"] assert draws["seed_base"] == UK_CGT_IMPUTATION_SEED assert draws["deterministic"] is True - verify = operations["verify_pinned_cgt_ods"] + verify = operations["verify_vendored_fact_resource"] assert verify["require_before_source_read"] is True + assert verify["fail_on_mismatch"] is True def test_band_facts_stay_fenced_from_calibration() -> None: @@ -169,6 +179,13 @@ def test_the_shipped_family_contracts_pass_the_terminal_gate_shape() -> None: declared_factor=1.0, reason=UK_CGT_SPINE_MASS_CONSERVATION_REASON, ), + MassChangeRecord( + entity="household", + old_total=100.0, + new_total=100.0, + declared_factor=1.0, + reason=UK_CGT_ASSET_TYPE_MASS_CONSERVATION_REASON, + ), MassChangeRecord( entity="household", old_total=100.0, diff --git a/packages/microcosm-build/tests/test_uk_cgt_structure.py b/packages/microcosm-build/tests/test_uk_cgt_structure.py index b0c9a74227..f2c2f25f64 100644 --- a/packages/microcosm-build/tests/test_uk_cgt_structure.py +++ b/packages/microcosm-build/tests/test_uk_cgt_structure.py @@ -190,8 +190,10 @@ def test_band_donors_are_band_exact_positive_and_permutation_stable() -> None: assert [row["realized_max_gain"] for row in first.band_rows] == [ row["mean_gain"] for row in first.band_rows ] + # HMRC Table 2.1a 2024-25 individuals from GBP 12,300 (the vendored + # conditioning facts), not the retired 2023-24 hand copy. assert [row["weighted_taxpayers"] for row in first.band_rows] == pytest.approx( - [79_000, 74_000, 53_000, 37_000, 14_000, 8_000, 5_000, 3_000, 2_000] + [97_000, 98_000, 78_000, 61_000, 25_000, 16_000, 9_000, 5_000, 3_000] ) second_donors = second.frame.table("household").loc[ lambda table: table[HOUSEHOLD_IS_CGT_BAND_DONOR] @@ -202,7 +204,7 @@ def test_band_donors_are_band_exact_positive_and_permutation_stable() -> None: def test_never_zero_band_weight_assertion_fires() -> None: resource = copy.deepcopy(load_hmrc_cgt_size_bands()) retained = next(row for row in resource["rows"] if row["lower_limit"] == 12_300) - retained["taxpayers_thousands"] = 0 + retained["taxpayers"] = 0 with pytest.raises(ValueError, match="zero initial weight"): _assert_cgt_donor_stage_parameters( diff --git a/packages/microcosm-build/tests/test_uk_cgt_targets.py b/packages/microcosm-build/tests/test_uk_cgt_targets.py index 07984d7a0a..a18b24d3c8 100644 --- a/packages/microcosm-build/tests/test_uk_cgt_targets.py +++ b/packages/microcosm-build/tests/test_uk_cgt_targets.py @@ -116,7 +116,7 @@ def test_compiled_facts_match_hmrc_2024_25_individuals_observations(): def test_individual_scope_is_pinned_to_table1_not_age_marginals(): references = load_country_spec("uk").target_references - cgt = [r for r in references if r.name.startswith("hmrc.cgt.")] + cgt = [r for r in references if r.name in CGT_TARGET_NAMES] assert len(cgt) == 3 expected_keys = { "hmrc.cgt.taxpayers_total": "31d709fc393c2bf4d04efca5", @@ -385,3 +385,263 @@ def test_duplicate_pinned_observation_fails_loudly(name, compile_cgt): compilation = compile_cgt([*facts, deepcopy(original)], target_period=2025) assert name not in {r.name for r in compilation.registry} assert name in {r["name"] for r in compilation.unsupported} + + +# --------------------------------------------------------------------------- +# Banded families (microcosm#725, #467): Table 6 age bands, Table 5 region +# tier, Table 2.1a size of gain. The frozen feed fixture predates these +# rows, so the hermetic checks are structural; the pinned feed, when +# present, proves the values partition the national observations. +# --------------------------------------------------------------------------- + +AGE_BAND_TARGETS = ( + "hmrc.cgt.taxpayers_by_age_band", + "hmrc.cgt.gains_by_age_band", + "hmrc.cgt.tax_by_age_band", +) +REGION_TARGETS = ("hmrc.cgt.taxpayers_by_region", "hmrc.cgt.gains_by_region") +GAIN_BAND_TARGETS = ("hmrc.cgt.taxpayers_by_gain_band", "hmrc.cgt.gains_by_gain_band") +RESIDENTIAL_TARGETS = ( + "hmrc.cgt.residential_property_taxpayers", + "hmrc.cgt.residential_property_gains", +) +GAIN_BAND_METRICS = { + "hmrc.cgt.taxpayers_by_gain_band": "hmrc/cgt_taxpayers_band", + "hmrc.cgt.gains_by_gain_band": "hmrc/capital_gains_band", +} +ADULT_AGE_LOWER_BOUNDS = (16, 25, 35, 45, 55, 65, 75, 85) +BOUND_GAIN_LOWER_BOUNDS = ( + 3_000, + 6_000, + 10_000, + 12_300, + 25_000, + 50_000, + 100_000, + 250_000, + 500_000, + 1_000_000, + 2_000_000, + 5_000_000, +) +REGION_TIER_IDS = ( + "E12000001", + "E12000002", + "E12000003", + "E12000004", + "E12000005", + "E12000006", + "E12000007", + "E12000008", + "E12000009", + "W92000004", + "S92000003", + "N92000002", +) + + +def _references_for(contract_target_id: str): + return [ + reference + for reference in load_country_spec("uk").target_references + if reference.metadata.get("contract_target_id") == contract_target_id + ] + + +def test_age_band_rows_fan_out_over_the_adult_bands_only(): + for target_id in AGE_BAND_TARGETS: + rows = _references_for(target_id) + assert [r.name for r in rows] == [ + f"{target_id}.age_{lower}_to_{upper - 1}" + if upper is not None + else f"{target_id}.age_{lower}_plus" + for lower, upper in zip( + ADULT_AGE_LOWER_BOUNDS, (*ADULT_AGE_LOWER_BOUNDS[1:], None), strict=True + ) + ] + for reference in rows: + assert reference.family == "hmrc_cgt" + assert reference.entity == "person" + assert reference.ledger_selector["period_value"] == 2024 + assert reference.ledger_selector["groupby_dimension"] == "age_band" + assert reference.ledger_selector["source_table"].startswith( + "Capital Gains Tax statistics Table 6" + ) + assert reference.metadata["measurement_period"] == "2024" + + +def test_region_rows_cover_the_tier_and_declare_the_ratio_translation(): + for target_id in REGION_TARGETS: + rows = _references_for(target_id) + assert [r.name for r in rows] == [ + f"{target_id}@{area}" for area in REGION_TIER_IDS + ] + for reference in rows: + assert reference.value_operation == "scaled_by_ratio" + roles = [operand["role"] for operand in reference.value_operands] + assert roles == ["base", "numerator", "denominator"] + assert reference.metadata["cross_grain_grain"] == "region" + predicate = json.loads(reference.metadata["geography_predicate"]) + assert predicate["variable"] == "region" + assert predicate["map_to"] == "person" + assert ( + reference.ledger_selector["geography_id"] + == reference.name.split("@")[1] + ) + + +def test_residential_rows_bind_the_asset_type_flag_and_the_table8b_share(): + """Table 8a totals restated on the individuals basis, over flagged gainers.""" + for target_id in RESIDENTIAL_TARGETS: + rows = _references_for(target_id) + assert [r.name for r in rows] == [f"{target_id}.ty2024"] + reference = rows[0] + assert reference.value_operation == "scaled_by_ratio" + assert [operand["role"] for operand in reference.value_operands] == [ + "base", + "numerator", + "denominator", + ] + assert reference.ledger_selector["dimension_values"] == {"channel": "total"} + assert reference.ledger_selector["source_table"].startswith( + "Capital Gains Tax statistics Table 8" + ) + binding = reference.metadata + assert binding["contract_target_id"] == target_id + assert binding["measurement_period"] == "2024" + contract = json.loads( + ( + Path(__file__).resolve().parents[1] + / "src" + / "microcosm" + / "build" + / "uk" + / "uk_population_targets.json" + ).read_text(encoding="utf-8") + ) + targets = {t["target_id"]: t for t in contract["targets"]} + for target_id in RESIDENTIAL_TARGETS: + binding = targets[target_id]["bindings"]["policyengine"] + assert binding["kind"] == "parameter_gated_threshold" + assert binding["filters"] == [ + { + "variable": "capital_gains_asset_type", + "equals": "residential_land_buildings", + } + ] + assert target_id in contract["registry_parity"]["unmapped_declarations"] + assert target_id in contract["registry_parity"]["scope_target_ids"] + + +def test_gain_band_rows_reuse_incumbent_names_and_skip_the_sub_aea_band(): + for target_id in GAIN_BAND_TARGETS: + rows = _references_for(target_id) + metric = GAIN_BAND_METRICS[target_id] + # Fan-out rows sort by their dimension value id, so compare as sets. + assert {r.name for r in rows} == { + f"{metric}_{lower}" for lower in BOUND_GAIN_LOWER_BOUNDS + } + assert len(rows) == len(BOUND_GAIN_LOWER_BOUNDS) + assert all(r.measure == r.name for r in rows) + assert all( + r.ledger_selector["source_table"].startswith( + "Capital Gains Tax statistics Table 2" + ) + for r in rows + ) + + +def test_signed_out_rows_are_recorded_not_dropped(): + membership = json.loads( + ( + Path(__file__).resolve().parents[1] + / "src/microcosm/build/uk/target_reference_membership.json" + ).read_text() + ) + signed = { + (target_id, entry["signed_row"]["value"]) + for target_id, target in membership["targets"].items() + if target_id.startswith("hmrc.cgt.") + for entry in target["candidates"] + if entry["status"] == "signed_excluded" + } + assert signed == { + *((target_id, "age_0_to_15") for target_id in AGE_BAND_TARGETS), + *((target_id, "gain_0_to_2999") for target_id in GAIN_BAND_TARGETS), + } + assert all( + membership["targets"][target_id]["status"] == "active" + for target_id in (*AGE_BAND_TARGETS, *GAIN_BAND_TARGETS, *REGION_TARGETS) + ) + + +def _pinned_feed_rows(): + feed = Path(__file__).resolve().parents[3] / ".codex-work/consumer_facts_uk.jsonl" + if not feed.exists(): + pytest.skip("pinned UK Chronicle consumer feed is not present") + return [json.loads(line) for line in feed.read_text().splitlines() if line.strip()] + + +def test_banded_rows_partition_the_national_observations_on_the_pinned_feed(): + facts = _pinned_feed_rows() + spec = load_country_spec("uk") + wanted = { + *AGE_BAND_TARGETS, + *REGION_TARGETS, + *GAIN_BAND_TARGETS, + *RESIDENTIAL_TARGETS, + } + references = [ + r + for r in spec.target_references + if r.metadata.get("contract_target_id") in wanted + ] + registry = compile_ledger_target_references(facts, references, country="uk") + by_target: dict[str, list] = {} + for reference, compiled in zip(references, registry.specs, strict=True): + by_target.setdefault(reference.metadata["contract_target_id"], []).append( + compiled + ) + # Published rows round to the nearest thousand people and million + # pounds, so the bound rows sum to the national line less the signed-out + # row within that rounding. + totals = { + "hmrc.cgt.taxpayers_by_age_band": 551_000 - 1_000, + "hmrc.cgt.gains_by_age_band": 119_258e6 - 54e6, + "hmrc.cgt.tax_by_age_band": 22_503e6 - 9e6, + "hmrc.cgt.taxpayers_by_gain_band": 551_000 - 3_000, + "hmrc.cgt.gains_by_gain_band": 119_258e6 - 1e6, + } + for target_id, expected in totals.items(): + assert sum(s.value for s in by_target[target_id]) == pytest.approx( + expected, rel=1e-3 + ) + # Region cells: published all-taxpayer areas sum to the Table 1 total + # within rounding, and the ratio restates them on the individuals basis. + for target_id, national in ( + ("hmrc.cgt.taxpayers_by_region", 551_000), + ("hmrc.cgt.gains_by_region", 119_258e6), + ): + cells = by_target[target_id] + assert len(cells) == 12 + assert sum(s.value for s in cells) == pytest.approx(national, rel=0.01) + for compiled in cells: + assert compiled.metadata["ledger_value_formula"] == ( + "base * numerator / denominator" + ) + assert 0.9 < float(compiled.metadata["ledger_value_ratio"]) < 1.0 + assert ( + compiled.metadata["ledger_geography_id"] == compiled.name.split("@")[1] + ) + # Residential rows: Table 8a all-channel totals times the Table 8b + # individuals/all share for the same measure (microcosm#725). + for target_id, published, share in ( + ("hmrc.cgt.residential_property_taxpayers", 205_000, 171_000 / 173_000), + ("hmrc.cgt.residential_property_gains", 12_914e6, 10_337e6 / 10_904e6), + ): + (compiled,) = by_target[target_id] + assert compiled.value == pytest.approx(published * share, rel=1e-9) + assert float(compiled.metadata["ledger_value_ratio"]) == pytest.approx(share) + assert compiled.metadata["ledger_value_formula"] == ( + "base * numerator / denominator" + ) diff --git a/packages/microcosm-build/tests/test_uk_chronicle_feed.py b/packages/microcosm-build/tests/test_uk_chronicle_feed.py index a4aa270b50..660312f0d1 100644 --- a/packages/microcosm-build/tests/test_uk_chronicle_feed.py +++ b/packages/microcosm-build/tests/test_uk_chronicle_feed.py @@ -15,14 +15,14 @@ def test_national_feed_records_the_complete_merged_source_artifact(): pin = load_uk_chronicle_feed() resource = files("microcosm.build.uk").joinpath("chronicle_feed.json") raw = resource.read_bytes() - assert pin.source_commit == "ec200856c4e40e0d3fe97c4e17049cb48de02b85" + assert pin.source_commit == "c5e5bf8aa84960c1a200ee47303b19c953092d0f" assert pin.source_repo == "PolicyEngine/chronicle" - assert pin.fact_row_count == 275698 + assert pin.fact_row_count == 276205 assert pin.facts_sha256 == ( - "47612c481d9917c5f92ba50389c67e8d6a80b525ba06a8c64cbc0ce83ae81412" + "6d039dd869dc1704b0c98fd1d2db72965b1c38de92c165fe4e12c3f530951e2d" ) assert pin.manifest_sha256 == ( - "c91fa9ff735ea83271e93de7a725fdcdfb65a664c4868412e374a795b8cc65c3" + "20ac5d22e7d8f3cdb83dbd7fd617e37e290f5c4c480097057f959aa14033391d" ) assert pin.artifact_schema_version == "policyengine_ledger.consumer_artifact.v2" assert pin.consumer_fact_schema_versions == ("chronicle.consumer_fact.v3",) diff --git a/packages/microcosm-build/tests/test_uk_frs_spine.py b/packages/microcosm-build/tests/test_uk_frs_spine.py index 2f567c22fe..098ec8225d 100644 --- a/packages/microcosm-build/tests/test_uk_frs_spine.py +++ b/packages/microcosm-build/tests/test_uk_frs_spine.py @@ -2060,7 +2060,6 @@ def test_input_artifact_pins_bind_spi_donor_and_ods() -> None: pins = tool._input_artifact_pins(stages) assert set(pins) == { - "cgt_published_fact_surface", "etb_household_tab", "lcfs_household_tab", "lcfs_person_tab", @@ -2113,6 +2112,10 @@ def test_e8_manifest_seeds_all_reach_the_build_sidecar_harvester() -> None: } assert declared["cgt_band_donors"] == {"stack_band_donor_households": 1} assert declared["hmrc_cgt_gains_spine"] == {"within_band_draws": 552} + assert declared["hmrc_cgt_asset_type_spine"] == { + "assign_residential_property_flag": 553, + "assign_main_asset_type": 554, + } assert declared["salary_sacrifice"] == { "salary_sacrifice": 42, "salary_sacrifice_conversion": 2024, diff --git a/packages/microcosm-build/tests/test_uk_graph.py b/packages/microcosm-build/tests/test_uk_graph.py index de7c02ff24..7ccdf43e9e 100644 --- a/packages/microcosm-build/tests/test_uk_graph.py +++ b/packages/microcosm-build/tests/test_uk_graph.py @@ -163,10 +163,11 @@ def test_uk_spine_graph_contains_manifest_stages_and_named_exclusions() -> None: graph = uk_spine_graph(spec) ids = {node.id for node in graph.nodes} - # 29 with the #832 uc_reporter_redraw, #685 uc_deduction_attributes and - # #791 frs_relationships stages; the two named exclusions are the - # certified-pair alternatives, not steps of this pipeline. - assert len(expected) == 29 + # 30 with the #832 uc_reporter_redraw, #685 uc_deduction_attributes, + # #791 frs_relationships and #725 hmrc_cgt_asset_type_spine stages; the + # two named exclusions are the certified-pair alternatives, not steps of + # this pipeline. + assert len(expected) == 30 assert UK_SPINE_EXCLUSIONS == { "frs_hmrc_retained_leaves", "hmrc_spi_income", @@ -231,7 +232,6 @@ def test_uk_production_graph_binds_split_donor_sources_and_runtime_config() -> N "etb", "spi", "hmrc_income", - "hmrc_cgt", } assert graph.node("lcfs_consumption").sources == ( "lcfs_household", @@ -241,7 +241,7 @@ def test_uk_production_graph_binds_split_donor_sources_and_runtime_config() -> N "spi", "hmrc_income", ) - assert graph.node("hmrc_cgt_gains_spine").sources == ("hmrc_cgt",) + assert graph.node("hmrc_cgt_gains_spine").sources == () create = graph.node("create_uk_frs") assert create.params["sample_fraction"] == 0.1 assert create.params["sample_seed"] == 999 diff --git a/packages/microcosm-build/tests/test_uk_hmrc_capital_gains.py b/packages/microcosm-build/tests/test_uk_hmrc_capital_gains.py index d710c65b91..79d35a5596 100644 --- a/packages/microcosm-build/tests/test_uk_hmrc_capital_gains.py +++ b/packages/microcosm-build/tests/test_uk_hmrc_capital_gains.py @@ -1,259 +1,245 @@ +"""The HMRC Table 3 joint distribution, typed from the vendored feed rows.""" + from __future__ import annotations -from pathlib import Path +import copy import pytest +from microcosm.build.uk_runtime import hmrc_capital_gains from microcosm.build.uk_runtime.hmrc_capital_gains import ( + HMRC_CGT_BUILD_PERIOD, + HMRC_CGT_CONDITIONING_RECORD_SETS, + HMRC_CGT_CONDITIONING_RESOURCE, HMRC_CGT_GAIN_BAND_LOWER_BOUNDS, HMRC_CGT_INCOME_BAND_LOWER_BOUNDS, - HMRC_CGT_JOINT_ODS_FILENAME, - HMRC_CGT_JOINT_ODS_SHA256, - HMRC_CGT_JOINT_ODS_SIZE_BYTES, - HMRC_CGT_JOINT_SHEET_NAMES, + HMRC_CGT_JOINT_RECORD_SET_PREFIX, + HMRC_CGT_JOINT_SOURCE_FILE, + HMRC_CGT_JOINT_SOURCE_SHA256, + HMRC_CGT_SOURCE_VINTAGE, HMRC_CGT_TOTAL_GAINS_GBP, HMRC_CGT_TOTAL_INDIVIDUALS, - materialize_hmrc_capital_gains_joint_distribution, + load_hmrc_cgt_conditioning_facts, + load_hmrc_cgt_joint_distribution, ) +from microcosm.build.uk_runtime.ledger_fact_vendoring import load_vendored_resource -_REPO_ROOT = Path(__file__).resolve().parents[3] -_PINNED_ODS_PATH = _REPO_ROOT / "inputs" / "hmrc" / HMRC_CGT_JOINT_ODS_FILENAME - -_NOTE_ROWS = 9 -_HEADER = ["Range of gain (Lower limit £)"] + [ - heading - for bound in (*HMRC_CGT_INCOME_BAND_LOWER_BOUNDS, "All") - for heading in (f"Number of individuals ({bound})", f"Amounts of gains ({bound})") -] - - -def _synthetic_rows(*, notes: int = _NOTE_ROWS, suppress: bool = False): - """A sheet shaped like the published one, with small round numbers.""" - rows: list[list[object]] = [[f"note {index}"] for index in range(notes)] - rows.append(list(_HEADER)) - for band_index, lower_bound in enumerate(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS): - row: list[object] = [float(lower_bound)] - row_count = 0.0 - row_amount = 0.0 - for income_index in range(len(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS)): - count = float(band_index + income_index + 1) - amount = float(10 * (band_index + 1) + income_index) - # The published all-incomes pair covers suppressed cells too. - row_count += count - row_amount += amount - if suppress and band_index == 0 and income_index == 0: - row.extend(["[Fewer than 1]", "[x]"]) - else: - row.extend([count, amount]) - row.extend([row_count, row_amount]) - rows.append(row) - - published_amount = sum( - float(10 * (band_index + 1) + income_index) - for band_index in range(len(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS)) - for income_index in range(len(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS)) - if not (suppress and band_index == 0 and income_index == 0) - ) - all_row: list[object] = ["All"] - for income_index in range(len(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS)): - column_count = 0.0 - column_amount = 0.0 - for band_index in range(len(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS)): - column_count += float(band_index + income_index + 1) - column_amount += float(10 * (band_index + 1) + income_index) - all_row.extend([column_count, column_amount]) - all_row.extend([1.0, published_amount]) - rows.append(all_row) - return rows - - -def _synthetic_ods( - ods, - tmp_path, - *, - notes: int = _NOTE_ROWS, - suppress: bool = False, - name: str = "cgt.ods", -) -> Path: - sheet = HMRC_CGT_JOINT_SHEET_NAMES["2023-24"] - return ods.write( - tmp_path / name, - ods.sheet(sheet, _synthetic_rows(notes=notes, suppress=suppress)), - ) - - -def _load(path: Path, **kwargs): - return materialize_hmrc_capital_gains_joint_distribution( - path, verify_fingerprint=False, **kwargs - ) - - -def test_parses_every_published_cell(tmp_path, ods) -> None: - distribution = _load(_synthetic_ods(ods, tmp_path)) - - assert len(distribution.cells) == len(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS) * len( - HMRC_CGT_INCOME_BAND_LOWER_BOUNDS - ) - assert {cell.gain_lower_bound for cell in distribution.cells} == set( - HMRC_CGT_GAIN_BAND_LOWER_BOUNDS - ) - assert {cell.income_lower_bound for cell in distribution.cells} == set( - HMRC_CGT_INCOME_BAND_LOWER_BOUNDS - ) - - -def test_converts_source_units_to_people_and_pounds(tmp_path, ods) -> None: - """Counts publish in thousands and amounts in £ millions.""" - distribution = _load(_synthetic_ods(ods, tmp_path)) - - cell = distribution.cell(gain_lower_bound=0, income_lower_bound=0) - - assert cell.individuals == 1_000.0 - assert cell.gains == 10_000_000.0 - - -def test_reports_suppressed_cells_as_unknown_rather_than_zero(tmp_path, ods) -> None: - """Counts publish in thousands: a withheld count means fewer than 1,000.""" - distribution = _load(_synthetic_ods(ods, tmp_path, suppress=True)) - - cell = distribution.cell(gain_lower_bound=0, income_lower_bound=0) - - assert cell.individuals is None - assert cell.individuals_suppressed - assert cell.gains is None - assert cell.gains_suppressed - - -def test_income_totals_come_from_the_published_all_row(tmp_path, ods) -> None: - """Column totals cover suppressed cells, like the row totals do.""" - distribution = _load(_synthetic_ods(ods, tmp_path, suppress=True)) - - column = distribution.income_total(0) - - assert column.individuals is not None and column.individuals > 0 - cell_sum = sum( - cell.individuals - for cell in distribution.cells - if cell.income_lower_bound == 0 and cell.individuals is not None - ) - assert column.individuals > cell_sum - - -def test_band_totals_come_from_the_published_row_pair(tmp_path, ods) -> None: - """Row totals cover suppressed cells, so they beat summing the cells.""" - distribution = _load(_synthetic_ods(ods, tmp_path, suppress=True)) - - band = distribution.band_total(0) - assert band.gains > 0 - assert distribution.gains_by_band()[0] == band.gains - cell_sum = sum( - cell.gains - for cell in distribution.cells - if cell.gain_lower_bound == 0 and cell.gains is not None - ) - assert band.gains > cell_sum - - -def test_finds_the_header_whatever_the_note_count(tmp_path, ods) -> None: - """2020-21 carries one fewer note than 2023-24.""" - fewer_notes = _load( - _synthetic_ods(ods, tmp_path, notes=_NOTE_ROWS - 1, name="fewer.ods") - ) - more_notes = _load( - _synthetic_ods(ods, tmp_path, notes=_NOTE_ROWS + 2, name="more.ods") - ) - - assert len(fewer_notes.cells) == len(more_notes.cells) - assert fewer_notes.cell( - gain_lower_bound=5_000_000, income_lower_bound=200_000 - ) == more_notes.cell(gain_lower_bound=5_000_000, income_lower_bound=200_000) - - -def test_rejects_an_unpublished_tax_year(tmp_path, ods) -> None: - with pytest.raises(ValueError, match="publishes"): - _load(_synthetic_ods(ods, tmp_path), tax_year="2019-20") +def _payload() -> dict: + return copy.deepcopy(load_vendored_resource(HMRC_CGT_CONDITIONING_RESOURCE)) -def test_rejects_a_missing_sheet(tmp_path, ods) -> None: - path = ods.write(tmp_path / "other.ods", ods.sheet("Contents", [["a"]])) +def _joint_rows(payload: dict) -> list[dict]: + return [ + row + for row in payload["rows"] + if row["layout"]["record_set_id"].startswith(HMRC_CGT_JOINT_RECORD_SET_PREFIX) + ] - with pytest.raises(ValueError, match="has no sheet"): - _load(path) - -def test_rejects_a_moved_header(tmp_path, ods) -> None: - rows = _synthetic_rows() - rows[_NOTE_ROWS][0] = "Something else entirely" - path = ods.write( - tmp_path / "moved.ods", - ods.sheet(HMRC_CGT_JOINT_SHEET_NAMES["2023-24"], rows), +def _load_from(monkeypatch: pytest.MonkeyPatch, payload: dict): + monkeypatch.setattr( + hmrc_capital_gains, "load_vendored_resource", lambda _name: payload ) + return load_hmrc_cgt_joint_distribution() - with pytest.raises(ValueError, match="no column headed"): - _load(path) - - -def test_rejects_a_reordered_band(tmp_path, ods) -> None: - rows = _synthetic_rows() - rows[_NOTE_ROWS + 1][0] = 999_999.0 - path = ods.write( - tmp_path / "reordered.ods", - ods.sheet(HMRC_CGT_JOINT_SHEET_NAMES["2023-24"], rows), - ) - - with pytest.raises(ValueError, match="opens band"): - _load(path) - - -def test_rejects_an_artifact_that_is_not_the_pinned_one(tmp_path, ods) -> None: - """Identity is checked before parsing, so a wrong file fails as itself.""" - path = _synthetic_ods(ods, tmp_path) - with pytest.raises(ValueError, match="bytes, not the pinned"): - materialize_hmrc_capital_gains_joint_distribution(path) +class TestCommittedResource: + def test_types_every_published_cell(self) -> None: + distribution = load_hmrc_cgt_joint_distribution() - -@pytest.mark.skipif( - not _PINNED_ODS_PATH.is_file(), - reason="reviewed HMRC capital gains ODS is an optional local input", -) -class TestPinnedPublication: - def test_matches_the_pinned_fingerprint(self) -> None: - distribution = materialize_hmrc_capital_gains_joint_distribution( - _PINNED_ODS_PATH + assert len(distribution.cells) == len(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS) * len( + HMRC_CGT_INCOME_BAND_LOWER_BOUNDS ) - - assert distribution.source.sha256 == HMRC_CGT_JOINT_ODS_SHA256 - assert distribution.source.size_bytes == HMRC_CGT_JOINT_ODS_SIZE_BYTES - assert distribution.source.local_path == _PINNED_ODS_PATH.resolve() - - def test_reproduces_the_published_2023_24_totals(self) -> None: - distribution = materialize_hmrc_capital_gains_joint_distribution( - _PINNED_ODS_PATH + assert {cell.gain_lower_bound for cell in distribution.cells} == set( + HMRC_CGT_GAIN_BAND_LOWER_BOUNDS ) + assert {cell.income_lower_bound for cell in distribution.cells} == set( + HMRC_CGT_INCOME_BAND_LOWER_BOUNDS + ) + assert [total.gain_lower_bound for total in distribution.band_totals] == list( + HMRC_CGT_GAIN_BAND_LOWER_BOUNDS + ) + assert [ + total.income_lower_bound for total in distribution.income_totals + ] == list(HMRC_CGT_INCOME_BAND_LOWER_BOUNDS) + + def test_values_are_people_and_pounds(self) -> None: + """The feed carries counts in people and amounts in pounds.""" + distribution = load_hmrc_cgt_joint_distribution() + cell = distribution.cell(gain_lower_bound=0, income_lower_bound=0) + assert cell.individuals == 71_000.0 + assert cell.gains == 414_000_000.0 assert distribution.total_individuals == HMRC_CGT_TOTAL_INDIVIDUALS assert distribution.total_gains == HMRC_CGT_TOTAL_GAINS_GBP - @pytest.mark.parametrize("tax_year", sorted(HMRC_CGT_JOINT_SHEET_NAMES)) - def test_every_published_year_parses(self, tax_year: str) -> None: - distribution = materialize_hmrc_capital_gains_joint_distribution( - _PINNED_ODS_PATH, tax_year=tax_year + def test_suppressed_cells_are_none_not_zero(self) -> None: + """A count too small to publish is absent from the feed, not zero.""" + distribution = load_hmrc_cgt_joint_distribution() + + top = distribution.cell(gain_lower_bound=5_000_000, income_lower_bound=0) + assert top.individuals_suppressed + assert not top.gains_suppressed + assert top.gains == 2_088_000_000.0 + assert distribution.band_total(5_000_000).individuals == 3_000.0 + assert distribution.unpublished_gains >= 0.0 + + def test_provenance_names_the_resource_and_the_publisher_workbook(self) -> None: + distribution = load_hmrc_cgt_joint_distribution() + conditioning = load_hmrc_cgt_conditioning_facts() + + source = distribution.source + assert source.resource == HMRC_CGT_CONDITIONING_RESOURCE + assert source.resource_sha256 == conditioning.resource_sha256 + assert source.source_commit == conditioning.source_commit + assert source.record_set_prefix == HMRC_CGT_JOINT_RECORD_SET_PREFIX + assert source.source_file == HMRC_CGT_JOINT_SOURCE_FILE + assert source.source_sha256 == HMRC_CGT_JOINT_SOURCE_SHA256 + assert source.source_vintage == HMRC_CGT_SOURCE_VINTAGE + assert source.build_period == HMRC_CGT_BUILD_PERIOD + + def test_joint_and_conditioning_rows_describe_one_universe(self) -> None: + """Table 3's all-gains row is the Table 1 individuals observation.""" + distribution = load_hmrc_cgt_joint_distribution() + conditioning = load_hmrc_cgt_conditioning_facts() + + assert ( + distribution.total_individuals == conditioning.table1.individuals_taxpayers ) + assert distribution.total_gains == conditioning.table1.individuals_gains + folded = conditioning.size_bands_aggregated(HMRC_CGT_GAIN_BAND_LOWER_BOUNDS) + for total in distribution.band_totals: + people, gains = folded[total.gain_lower_bound] + assert total.individuals == people + assert abs(total.gains - gains) <= 1_000_000.0 + + def test_every_record_set_the_manifests_declare_is_present(self) -> None: + payload = _payload() + record_sets = {row["layout"]["record_set_id"] for row in payload["rows"]} + for declared in HMRC_CGT_CONDITIONING_RECORD_SETS: + if declared.endswith("."): + assert any(name.startswith(declared) for name in record_sets), declared + else: + assert declared in record_sets + + +class TestRefusals: + def test_refuses_a_resource_from_another_feed( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + payload = _payload() + payload["source_fact_feed"]["facts_sha256"] = "0" * 64 + + with pytest.raises(ValueError, match="differs from the committed UK pin"): + _load_from(monkeypatch, payload) + + def test_refuses_rows_from_another_publisher_workbook( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + payload = _payload() + for row in _joint_rows(payload): + row["source"]["source_sha256"] = "f" * 64 + + with pytest.raises(ValueError, match="not the pinned"): + _load_from(monkeypatch, payload) + + def test_refuses_a_drifted_income_band_roster( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + payload = _payload() + for row in _joint_rows(payload): + band = row["dimensions"].get("cgt_taxable_income_band") + if band == "income_125140_to_199999": + row["dimensions"]["cgt_taxable_income_band"] = "income_150000_to_199999" + row["measure_id"] = row["measure_id"].replace("125140", "150000") + + with pytest.raises(ValueError, match="income-band roster drifted"): + _load_from(monkeypatch, payload) + + def test_refuses_a_missing_gain_band(self, monkeypatch: pytest.MonkeyPatch) -> None: + payload = _payload() + payload["rows"] = [ + row + for row in payload["rows"] + if row["layout"]["record_set_id"] + != f"{HMRC_CGT_JOINT_RECORD_SET_PREFIX}gain_25000_to_49999" + ] + payload["row_count"] = len(payload["rows"]) + + with pytest.raises(ValueError, match="gain-band roster drifted"): + _load_from(monkeypatch, payload) + + def test_refuses_a_drifted_published_total( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + payload = _payload() + for row in _joint_rows(payload): + if row["measure_id"] == "taxpayers_all_incomes" and not row["dimensions"]: + row["value"] = 552_000 + + with pytest.raises(ValueError, match="published totals drifted"): + _load_from(monkeypatch, payload) + + def test_refuses_cells_summing_past_the_published_total( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + payload = _payload() + for row in _joint_rows(payload): + if row["measure_id"] == "gains_income_0_to_37699" and row["dimensions"].get( + "cgt_gain_band" + ): + row["value"] = row["value"] * 10 + + with pytest.raises(ValueError, match="above the published total"): + _load_from(monkeypatch, payload) + + def test_refuses_a_measure_that_disagrees_with_its_band( + self, monkeypatch: pytest.MonkeyPatch + ) -> None: + payload = _payload() + row = next( + row + for row in _joint_rows(payload) + if row["measure_id"] == "taxpayers_income_0_to_37699" + and row["dimensions"].get("cgt_gain_band") == "gain_0_to_9999" + ) + row["measure_id"] = "taxpayers_income_37700_to_49999" + + with pytest.raises(ValueError, match="disagrees with its income band"): + _load_from(monkeypatch, payload) + + +def test_conditioning_loader_refuses_a_size_band_that_disagrees_with_table_3( + monkeypatch: pytest.MonkeyPatch, +) -> None: + payload = _payload() + for row in payload["rows"]: + if ( + row["layout"]["record_set_id"].startswith( + "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024." + ) + and row["dimensions"].get("cgt_gain_band") == "gain_25000_to_49999" + and row["measure_id"] == "taxpayers_individuals" + ): + row["value"] = row["value"] + 20_000 + monkeypatch.setattr( + hmrc_capital_gains, "load_vendored_resource", lambda _name: payload + ) - assert len(distribution.cells) == 60 - assert distribution.total_gains > 0 - # Suppressed cells hold a rounding-scale residual, not real mass. - assert abs(distribution.unpublished_gains) < 50_000_000 + with pytest.raises(ValueError, match="disagree on the band from 25000"): + load_hmrc_cgt_conditioning_facts() - def test_carries_the_top_tail_the_percentile_source_cannot_reach(self) -> None: - """The reason for reading this table rather than a percentile one.""" - distribution = materialize_hmrc_capital_gains_joint_distribution( - _PINNED_ODS_PATH - ) - by_band = distribution.gains_by_band() - assert by_band[5_000_000] > 20_000_000_000 - top_two = by_band[2_000_000] + by_band[5_000_000] - assert top_two / distribution.total_gains > 0.5 +def test_diagnostic_read_can_skip_the_feed_identity_check( + monkeypatch: pytest.MonkeyPatch, +) -> None: + payload = _payload() + payload["source_fact_feed"]["source_commit"] = "0" * 40 + monkeypatch.setattr( + hmrc_capital_gains, "load_vendored_resource", lambda _name: payload + ) + + distribution = load_hmrc_cgt_joint_distribution(verify_feed_identity=False) + + assert distribution.source.source_commit == "0" * 40 diff --git a/packages/microcosm-build/tests/test_uk_national_calibration.py b/packages/microcosm-build/tests/test_uk_national_calibration.py index 8eb2db68af..76dce2a8ad 100644 --- a/packages/microcosm-build/tests/test_uk_national_calibration.py +++ b/packages/microcosm-build/tests/test_uk_national_calibration.py @@ -41,7 +41,7 @@ from microcosm.calibrate import TargetRegistry, TargetSpec from microcosm.frame import EntitySchema, Frame, WeightKind, Weights -ACTIVE_REFERENCE_COUNT = 631 +ACTIVE_REFERENCE_COUNT = 705 def _uc_reference(**overrides) -> LedgerTargetReference: diff --git a/packages/microcosm-build/tests/test_uk_population_targets.py b/packages/microcosm-build/tests/test_uk_population_targets.py index b7c685e08a..0df76f2da2 100644 --- a/packages/microcosm-build/tests/test_uk_population_targets.py +++ b/packages/microcosm-build/tests/test_uk_population_targets.py @@ -44,6 +44,7 @@ NATIONAL_SELECTOR_KEYS = { "aggregate_fact_key", "source_name", + "source_table", "source_concept", "source_measure_id", "groupby_dimension", @@ -176,13 +177,14 @@ def test_uk_population_targets_shape_order_and_registry_accounting() -> None: "monthly_window_average", "monthly_window_sum_average", "linear_combination", + "scaled_by_ratio", ] assert resource["resolution_defaults"] == { "base_period_policy": "latest_not_after_build_base_period", "operation": "sum", "assertion_policy": "observed_only", } - assert len(resource["targets"]) == 298 + assert len(resource["targets"]) == 307 providers = resource["hierarchy"]["providers"] categories = resource["hierarchy"]["categories"] @@ -196,10 +198,10 @@ def test_uk_population_targets_shape_order_and_registry_accounting() -> None: target_ids = [target["target_id"] for target in resource["targets"]] registry_scope = resource["registry_parity"]["scope_target_ids"] profile_scope = resource["profile_parity"]["scope_target_ids"] - assert len(registry_scope) == 247 + assert len(registry_scope) == 256 assert len(profile_scope) == 51 - assert target_ids[:247] == registry_scope - assert target_ids[247:] == profile_scope + assert target_ids[:256] == registry_scope + assert target_ids[256:] == profile_scope parity = resource["registry_parity"] assert parity["pinned_ref"] == "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3" @@ -212,8 +214,8 @@ def test_uk_population_targets_shape_order_and_registry_accounting() -> None: assert set(mapped_target_ids).isdisjoint(unmapped_declarations) assert mapped_target_ids | set(unmapped_declarations) == set(registry_scope) assert all(reason for reason in unmapped_declarations.values()) - assert len(mapped_target_ids) == 192 - assert len(unmapped_declarations) == 55 + assert len(mapped_target_ids) == 194 + assert len(unmapped_declarations) == 62 suppressed_ancestors = parity["suppressed_ancestors"] assert len(suppressed_ancestors) == 5 assert set(suppressed_ancestors).isdisjoint(parity["mapped"]) @@ -332,7 +334,7 @@ def test_uk_population_targets_have_unique_target_ids() -> None: resource = _load() target_ids = [target["target_id"] for target in resource["targets"]] - assert len(target_ids) == 298 + assert len(target_ids) == 307 assert len(target_ids) == len(set(target_ids)) @@ -419,6 +421,11 @@ def test_childcare_bus_observation_basis_and_entity_pins_are_closed_world() -> N "fiscal_year_flow", "individuals_observed_disposal_year_2024_liability", "individuals_observed_disposal_year_2024_net_gains_and_aea", + "individuals_observed_disposal_year_2024_net_gains_and_aea_by_age_band", + "individuals_observed_disposal_year_2024_liability_by_age_band", + "individuals_observed_disposal_year_2024_net_gains_and_aea_by_size_of_gain", + "all_taxpayers_by_area_disposal_year_2024_scaled_to_individuals_by_table1_share", + "uk_residents_reporting_residential_property_disposals_disposal_year_2024_all_channels_scaled_to_individuals_by_table8b_share", } allowed_operations = set(resource["allowed_value_operations"]) for target in resource["targets"]: @@ -793,7 +800,7 @@ def test_uc_payment_bands_share_administrative_family_but_keep_source_window() - def test_paid_joint_diagnostics_do_not_add_active_targets() -> None: targets = _load()["targets"] - assert len(targets) == 298 + assert len(targets) == 307 assert not any( f.get("variable") == "uc_calibration_child_entitlement" for target in targets @@ -871,12 +878,51 @@ def test_uk_population_cgt_contract_names_match_runtime_specs() -> None: assert UK_CGT_TARGET_SPECS == () assert cgt_metric_names == [ + "hmrc/capital_gains_band", + "hmrc/capital_gains_by_age_band", + "hmrc/capital_gains_by_region", "hmrc/capital_gains_total", "hmrc/cgt_liability", + "hmrc/cgt_liability_by_age_band", + "hmrc/cgt_residential_property_gains", + "hmrc/cgt_residential_property_taxpayers", "hmrc/cgt_taxpayers", + "hmrc/cgt_taxpayers_band", + "hmrc/cgt_taxpayers_by_age_band", + "hmrc/cgt_taxpayers_by_region", ] assert mapped["hmrc/capital_gains_total"] == "hmrc.cgt.gains_total" assert mapped["hmrc/cgt_taxpayers"] == "hmrc.cgt.taxpayers_total" + # The eighteen incumbent banded names are mapped (microcosm#467), nine + # per measure, onto the Table 2.1a fan-out targets. + band_lowers = ( + 12300, + 25000, + 50000, + 100000, + 250000, + 500000, + 1000000, + 2000000, + 5000000, + ) + for lower in band_lowers: + assert mapped[f"hmrc/cgt_taxpayers_band_{lower}"] == ( + "hmrc.cgt.taxpayers_by_gain_band" + ) + assert mapped[f"hmrc/capital_gains_band_{lower}"] == ( + "hmrc.cgt.gains_by_gain_band" + ) + excluded = resource["registry_parity"]["excluded"] + assert not any("cgt" in name for name in excluded) + region = _target_by_id(resource, "hmrc.cgt.taxpayers_by_region") + assert region["value_operation"] == "scaled_by_ratio" + assert [operand["role"] for operand in region["value_operands"]] == [ + "base", + "numerator", + "denominator", + ] + assert region["geography_levels"] == ["country", "region"] def _target_by_id(resource: Mapping, target_id: str) -> Mapping: diff --git a/packages/microcosm-build/tests/test_uk_release_input_coverage.py b/packages/microcosm-build/tests/test_uk_release_input_coverage.py index e9755e947e..ce8ec7b0a1 100644 --- a/packages/microcosm-build/tests/test_uk_release_input_coverage.py +++ b/packages/microcosm-build/tests/test_uk_release_input_coverage.py @@ -608,6 +608,7 @@ def test_shipped_manifest_is_current(self) -> None: "cgt_incidence_clone", "cgt_band_donors", "hmrc_cgt_gains_spine", + "hmrc_cgt_asset_type_spine", "salary_sacrifice", "student_loans", "was_wealth", diff --git a/packages/microcosm-build/tests/test_uk_source_stages.py b/packages/microcosm-build/tests/test_uk_source_stages.py index 964f8a68c0..e6ac57c56d 100644 --- a/packages/microcosm-build/tests/test_uk_source_stages.py +++ b/packages/microcosm-build/tests/test_uk_source_stages.py @@ -66,6 +66,7 @@ "cgt_incidence_clone", "cgt_band_donors", "hmrc_cgt_gains_spine", + "hmrc_cgt_asset_type_spine", "salary_sacrifice", "student_loans", ] @@ -322,6 +323,7 @@ def test_country_stage_plan_assembles_spine_plan(self) -> None: "cgt_incidence_clone": _identity, "cgt_band_donors": _identity, "hmrc_cgt_gains_spine": _identity, + "hmrc_cgt_asset_type_spine": _identity, "salary_sacrifice": _identity, "student_loans": _identity, "age_tail": _identity, @@ -707,8 +709,9 @@ def test_e3_operation_kinds_are_declared_in_order(self) -> None: "stack_band_donor_households" ] assert [op.kind for op in stages["hmrc_cgt_gains_spine"].operations] == [ - "verify_pinned_cgt_ods", + "verify_vendored_fact_resource", "taxable_income_proxy", + "rake_allocation_targets", "rank_preserving_allocation", "within_band_draws", "sub_aea_remainder", @@ -949,7 +952,7 @@ def test_e8_declared_seed_lockstep(self) -> None: assert stages["cgt_incidence_clone"].operations[1].parameters["seed"] == 0 assert stages["cgt_band_donors"].operations[0].parameters["seed"] == 1 assert ( - stages["hmrc_cgt_gains_spine"].operations[3].parameters["seed_base"] == 552 + stages["hmrc_cgt_gains_spine"].operations[4].parameters["seed_base"] == 552 ) assert stages["salary_sacrifice"].operations[0].parameters["seed"] == 42 assert stages["salary_sacrifice"].operations[1].parameters["seed"] == 2024 diff --git a/packages/microcosm-build/tests/test_uk_spine_acceptance_receipt.py b/packages/microcosm-build/tests/test_uk_spine_acceptance_receipt.py index be784bb03f..11ba3c2d67 100644 --- a/packages/microcosm-build/tests/test_uk_spine_acceptance_receipt.py +++ b/packages/microcosm-build/tests/test_uk_spine_acceptance_receipt.py @@ -69,6 +69,11 @@ def _apply_pending_roster_transformations( # final age is fixed. assert "frs_relationships" not in roster roster.insert(roster.index("age_tail") + 1, "frs_relationships") + + # #725 re-mint pending: the asset-type stage classifies the redrawn + # gains right after the amounts stage. + assert "hmrc_cgt_asset_type_spine" not in roster + roster.insert(roster.index("hmrc_cgt_gains_spine") + 1, "hmrc_cgt_asset_type_spine") return tuple(roster) diff --git a/packages/microcosm-build/tests/test_uk_stage_health.py b/packages/microcosm-build/tests/test_uk_stage_health.py index 9e10d53007..eff64ec883 100644 --- a/packages/microcosm-build/tests/test_uk_stage_health.py +++ b/packages/microcosm-build/tests/test_uk_stage_health.py @@ -1,6 +1,7 @@ from __future__ import annotations import numpy as np +import pytest from microcosm.build.uk_runtime.stage_health import uk_stage_health_gate @@ -344,6 +345,53 @@ def test_age_tail_relative_deviation_parameter_is_live() -> None: ).passed +def test_cgt_summary_allocation_receipt_must_be_finite_and_non_negative() -> None: + parameters = { + "stage": "hmrc_cgt_gains_spine", + "check": "cgt_imputation_summary", + "minimum_band_rows": 1, + } + + def evidence(error: float, released: float) -> dict: + return { + "stage": "hmrc_cgt_gains_spine", + "rows": [{"gain_lower_bound": 12300.0}], + "taxpayer_mass": 1.0, + "published_taxpayer_mass": 1.0, + "remainder_mass": 0.0, + "allocation": { + "rake": { + "ipf_max_abs_margin_error": error, + "gains_margin_max_abs_error": error, + "ipf_zero_seed_cells": 0, + }, + "fallback_released_mass": released, + }, + } + + assert _passed( + uk_stage_health_gate( + evidence=evidence(0.01, 250.0), + stage="hmrc_cgt_gains_spine", + check="cgt_imputation_summary", + parameters=parameters, + ) + ) + assert not uk_stage_health_gate( + evidence=evidence(0.01, -1.0), + stage="hmrc_cgt_gains_spine", + check="cgt_imputation_summary", + parameters=parameters, + ).passed + with pytest.raises(ValueError): + uk_stage_health_gate( + evidence=evidence(float("nan"), 0.0), + stage="hmrc_cgt_gains_spine", + check="cgt_imputation_summary", + parameters=parameters, + ) + + def test_cgt_summary_minimum_rows_parameter_is_live() -> None: evidence = { "stage": "hmrc_cgt_gains_spine", @@ -486,3 +534,122 @@ def test_latent_attribute_realization_fails_on_empty_blocks_and_zero_rows() -> N zero_rows = _latent_receipt() zero_rows["incidence_by_region"]["LONDON"]["rows"] = 0 assert not _latent_gate(zero_rows).passed + + +def _asset_type_evidence(**overrides: object) -> dict[str, object]: + evidence: dict[str, object] = { + "stage": "hmrc_cgt_asset_type_spine", + "residential": { + "count_target_individuals_basis": 202_630.0, + "gains_target_individuals_basis": 12.24e9, + "expected_count": 202_630.0, + "expected_gains": 12.24e9, + "achieved_count": 202_620.0, + "achieved_gains": 11.9e9, + "achieved_rows": 3_377, + "max_liable_weight": 60.0, + "count_bernoulli_sigma": 2_000.0, + "gains_bernoulli_sigma": 0.15e9, + }, + "asset_type": { + "achieved_gains_share": { + "listed_shares": 0.094, + "unlisted_shares": 0.528, + "other_financial_assets": 0.282, + "agricultural_commercial_industrial_land_buildings": 0.044, + "other_non_financial_assets": 0.052, + } + }, + "value_counts": { + "none": 4_043, + "sub_aea": 1_309, + "residential_land_buildings": 3_377, + }, + } + evidence.update(overrides) + return evidence + + +def test_cgt_asset_type_summary_holds_the_residential_realisation() -> None: + parameters = { + "stage": "hmrc_cgt_asset_type_spine", + "check": "cgt_asset_type_summary", + "maximum_relative_deviation": 0.05, + "maximum_gains_sigma": 3.0, + "maximum_solve_relative_error": 1e-6, + } + + passed = uk_stage_health_gate( + stage="hmrc_cgt_asset_type_spine", + check="cgt_asset_type_summary", + evidence=_asset_type_evidence(), + parameters=parameters, + ) + assert passed.passed + assert passed.details["residential_count_gap"] == 10.0 + assert passed.details["residential_gains_bound"] == 0.05 * 12.24e9 + + # A small frame: the noise floor is wider than the band and governs. + noisy = _asset_type_evidence( + residential={ + **_asset_type_evidence()["residential"], + "achieved_gains": 9.0e9, + "gains_bernoulli_sigma": 1.5e9, + } + ) + assert uk_stage_health_gate( + stage="hmrc_cgt_asset_type_spine", + check="cgt_asset_type_summary", + evidence=noisy, + parameters=parameters, + ).passed + + # A count more than one person off the expectation is a broken draw. + off_count = _asset_type_evidence( + residential={ + **_asset_type_evidence()["residential"], + "achieved_count": 202_500.0, + } + ) + failed = uk_stage_health_gate( + stage="hmrc_cgt_asset_type_spine", + check="cgt_asset_type_summary", + evidence=off_count, + parameters=parameters, + ) + assert not failed.passed + assert any("count gap" in failure for failure in failed.failures) + + drifted = _asset_type_evidence( + residential={ + **_asset_type_evidence()["residential"], + "achieved_gains": 10.0e9, + } + ) + failed = uk_stage_health_gate( + stage="hmrc_cgt_asset_type_spine", + check="cgt_asset_type_summary", + evidence=drifted, + parameters=parameters, + ) + assert not failed.passed + assert any("gains gap" in failure for failure in failed.failures) + + bad_share = _asset_type_evidence( + asset_type={"achieved_gains_share": {"listed_shares": 1.5}} + ) + failed = uk_stage_health_gate( + stage="hmrc_cgt_asset_type_spine", + check="cgt_asset_type_summary", + evidence=bad_share, + parameters=parameters, + ) + assert not failed.passed + + with pytest.raises(ValueError, match="residential"): + uk_stage_health_gate( + stage="hmrc_cgt_asset_type_spine", + check="cgt_asset_type_summary", + evidence={"stage": "hmrc_cgt_asset_type_spine"}, + parameters=parameters, + ) diff --git a/packages/microcosm-build/tests/test_uk_target_references.py b/packages/microcosm-build/tests/test_uk_target_references.py index fb0c876714..9e42c86833 100644 --- a/packages/microcosm-build/tests/test_uk_target_references.py +++ b/packages/microcosm-build/tests/test_uk_target_references.py @@ -54,13 +54,14 @@ from tools.generate_uk_target_references import ( POLICYENGINE_BINDING_KEYS, _annual_uc_award_band_token, + _fanout_name, _geography_pins, _reference_metadata, _sum_target_ids, _value_operation_by_target_id, ) -ACTIVE_REFERENCE_COUNT = 631 +ACTIVE_REFERENCE_COUNT = 705 REGION_TIER_LEVEL = {code: level for level, code in UK_REGION_TIER} UK_DATA_REPO = "policyengine-" + "uk-data" @@ -225,6 +226,7 @@ def test_uk_target_references_follow_contract_derivation_rules() -> None: "linear_combination", "monthly_window_average", "monthly_window_sum_average", + "scaled_by_ratio", ] assert len(names) == len(set(names)) @@ -739,13 +741,20 @@ def test_uk_target_reference_membership_report_is_packaged() -> None: assert membership["target_period"] == 2025 assert membership["active_reference_count"] == ACTIVE_REFERENCE_COUNT assert membership["status_counts"] == { - "active": 631, + "active": 705, "no_fact_at_or_before_period": 7, - "signed_excluded": 8, + "signed_excluded": 13, } assert membership["genuine_sum_residue"] assert membership["uprating_holds"] - assert membership["fanout_family_outcomes"] == [ + outcomes = membership["fanout_family_outcomes"] + (cgt_outcome,) = [entry for entry in outcomes if entry["family"] == "hmrc_cgt"] + # 24 age-band rows, 24 region-tier cells and 24 size-of-gain rows + # (microcosm#725, #467). + assert cgt_outcome["status"] == "active_with_row_level_signed_exclusions" + assert cgt_outcome["active_reference_count"] == 74 + assert "scaled_by_ratio" in cgt_outcome["signed_rationale"] + assert [entry for entry in outcomes if entry["family"] != "hmrc_cgt"] == [ { "family": "hmrc_spi", "status": "active_with_signed_property_amount_exclusion", @@ -808,7 +817,20 @@ def test_uk_target_reference_membership_report_is_packaged() -> None: ), }, ] - assert membership["signed_exclusion_rationales"] == [ + rationales = membership["signed_exclusion_rationales"] + cgt_rows = [entry for entry in rationales if entry["family"] == "hmrc_cgt"] + assert [(entry["target_id"], entry["row"]) for entry in cgt_rows] == [ + ("hmrc.cgt.gains_by_age_band", "hmrc.cgt.gains_by_age_band.age_0_to_15"), + ("hmrc.cgt.gains_by_gain_band", "hmrc/capital_gains_band_0"), + ("hmrc.cgt.tax_by_age_band", "hmrc.cgt.tax_by_age_band.age_0_to_15"), + ( + "hmrc.cgt.taxpayers_by_age_band", + "hmrc.cgt.taxpayers_by_age_band.age_0_to_15", + ), + ("hmrc.cgt.taxpayers_by_gain_band", "hmrc/cgt_taxpayers_band_0"), + ] + assert all(entry["status"] == "signed_excluded" for entry in cgt_rows) + assert [entry for entry in rationales if entry["family"] != "hmrc_cgt"] == [ { "family": "hmrc_spi", "target_id": "hmrc.spi.property_income.amount_by_total_income_band", @@ -1401,10 +1423,11 @@ def test_two_level_targets_fan_out_over_the_region_tier() -> None: for target in contract["targets"] if sorted(target.get("geography_levels") or ()) == ["country", "region"] ] - assert len(two_level) == 18 + assert len(two_level) == 20 ons = [target_id for target_id in two_level if target_id.startswith("ons.")] mhclg = [target_id for target_id in two_level if target_id.startswith("mhclg.")] - assert len(ons) == 9 and len(mhclg) == 9 + hmrc = [target_id for target_id in two_level if target_id.startswith("hmrc.")] + assert len(ons) == 9 and len(mhclg) == 9 and len(hmrc) == 2 by_contract: dict[str, list[dict]] = {} for reference in resource["target_references"]: by_contract.setdefault(reference["metadata"]["contract_target_id"], []).append( @@ -1417,7 +1440,9 @@ def test_two_level_targets_fan_out_over_the_region_tier() -> None: cells = [row["metadata"]["geography_id"] for row in rows] # The retired single country row is gone: every row is a tier cell. assert all("@" in row["name"] for row in rows), target_id - assert cells == (tier_codes if target_id in ons else english), target_id + assert cells == ( + tier_codes if target_id in ons or target_id in hmrc else english + ), target_id assert [row["measure"] for row in rows] == [row["name"] for row in rows] assert {row["metadata"]["cross_grain_grain"] for row in rows} == {"region"} for row in rows: @@ -1427,6 +1452,15 @@ def test_two_level_targets_fan_out_over_the_region_tier() -> None: == UK_REGION_TIER_ENUM[row["metadata"]["geography_id"]] ) assert predicate["map_to"] == row["entity"] + if target_id in hmrc: + # Table 5 cells are restated on the individuals basis by the + # Table 1 share (microcosm#725). + assert row["value_operation"] == "scaled_by_ratio" + assert [o["role"] for o in row["value_operands"]] == [ + "base", + "numerator", + "denominator", + ] if target_id in mhclg: # The English stock cells are composed from their authorities' # MHCLG taxbase rows (microcosm#929): the selector names the @@ -1452,10 +1486,85 @@ def test_two_level_targets_fan_out_over_the_region_tier() -> None: candidates = membership["targets"][target_id]["candidates"] assert [entry["geography_id"] for entry in candidates] == cells assert {entry["status"] for entry in candidates} == {"active"} - assert sum(len(by_contract[target_id]) for target_id in two_level) == 189 + # 108 ONS + 81 MHCLG + 24 CGT region-tier rows (microcosm#725). + assert sum(len(by_contract[target_id]) for target_id in two_level) == 213 # The twelve ONS cells of a band sum to the retired UK row of the same # publication (the 0-9 band: 7,553,013 at mid-2024). zero_to_nine = membership["targets"]["ons.population.age_0_9_by_region"] assert sum(entry["resolved_value"] for entry in zero_to_nine["candidates"]) == ( 7_553_013.0 ) + + +def _cgt_band_fact(value_id: str) -> dict: + return { + "dimensions": {"cgt_gain_band": value_id}, + "layout": {"groupby_dimension": "cgt_gain_band", "groupby_value_id": value_id}, + } + + +_CGT_BAND_TARGET = { + "target_id": "hmrc.cgt.gains_by_gain_band", + "bindings": {"policyengine": {"metric_name": "hmrc/capital_gains_band"}}, +} +_CGT_BAND_INVERSE = { + "hmrc.cgt.gains_by_gain_band": [ + "hmrc/capital_gains_band_50000", + "hmrc/capital_gains_band_500000", + "hmrc/capital_gains_band_5000000", + ] +} + + +def test_cgt_band_fanout_names_match_incumbent_names_by_exact_suffix() -> None: + # ``_band_50000`` is a substring of ``_band_500000``; only the exact + # lower-edge suffix may claim an incumbent name. + assert ( + _fanout_name( + _CGT_BAND_TARGET, _cgt_band_fact("gain_50000_to_99999"), _CGT_BAND_INVERSE + ) + == "hmrc/capital_gains_band_50000" + ) + assert ( + _fanout_name( + _CGT_BAND_TARGET, _cgt_band_fact("gain_500000_to_999999"), _CGT_BAND_INVERSE + ) + == "hmrc/capital_gains_band_500000" + ) + assert ( + _fanout_name( + _CGT_BAND_TARGET, _cgt_band_fact("gain_5000000_plus"), _CGT_BAND_INVERSE + ) + == "hmrc/capital_gains_band_5000000" + ) + + +def test_cgt_band_fanout_row_without_incumbent_name_takes_the_declared_form() -> None: + fact = _cgt_band_fact("gain_3000_to_5999") + # Without the naming rule the row has no name and would be dropped, as + # every partially mapped family behaves today. + assert _fanout_name(_CGT_BAND_TARGET, fact, _CGT_BAND_INVERSE) is None + declared = {**_CGT_BAND_TARGET, "fanout_row_naming": "metric_name_band_lower"} + assert _fanout_name(declared, fact, _CGT_BAND_INVERSE) == ( + "hmrc/capital_gains_band_3000" + ) + # With no incumbent names at all the same form applies. + assert _fanout_name(declared, fact, {}) == "hmrc/capital_gains_band_3000" + + +def test_cgt_band_fanout_naming_refuses_unrecognised_bands_and_rules() -> None: + declared = {**_CGT_BAND_TARGET, "fanout_row_naming": "metric_name_band_lower"} + with pytest.raises(ValueError, match="Unrecognised HMRC CGT gain band value"): + _fanout_name(declared, _cgt_band_fact("band_3000"), _CGT_BAND_INVERSE) + with pytest.raises(ValueError, match="Unsupported fanout_row_naming"): + _fanout_name( + {**_CGT_BAND_TARGET, "fanout_row_naming": "something_else"}, + _cgt_band_fact("gain_3000_to_5999"), + _CGT_BAND_INVERSE, + ) + with pytest.raises(ValueError, match="no recognised band dimension"): + _fanout_name( + declared, + {"dimensions": {"age_band": "age_16_to_24"}, "layout": {}}, + _CGT_BAND_INVERSE, + ) diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index 6ef7ab71bb..e32fb95d6d 100644 --- a/packages/microcosm-data/src/microcosm/data/contract.py +++ b/packages/microcosm-data/src/microcosm/data/contract.py @@ -416,13 +416,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 = ( - "4456fa0956cde418ae23a60fe72a414428eefab446fd044aa14adf1b6e084fcd" + "211abff22b4eedf9cf69f4b43a6f77ca8966d61a386c1804c3fdb093b0e27aa0" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "ff27efe67f3cdb8292dfe8da20a6a98cc20f4e1f77ba61eff2ba206b8eb2fc19" + "462271cdc72631e4b6780be52b53d7ea7572ad97e9b91a00a1f3da199f56858c" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "61758f1d9700dd94564d592fafe36b4fc4881b8b77c785349d1756da0df2b0d4" + "8baa7f5c0db3f64c5e00859ff7fd2bd4cf2daf611367ec36f519d1e428af1ebd" ) #: Spec entry id -> the legacy gate name whose observable detail checks #: apply unchanged (the battery re-keys the report by entry id; the gate @@ -442,6 +442,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_take_up_signal": "take_up_signal", "uk_brma_enum_domain": "enum_domain", "uk_ons_household_type_enum_domain": "enum_domain", + "uk_capital_gains_asset_type_enum_domain": "enum_domain", "uk_uc_deduction_combination_enum_domain": "enum_domain", "uk_student_loan_plan_enum_domain": "enum_domain", "uk_target_surface": "target_surface", @@ -486,6 +487,10 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "stage_health", "transferred", ), + "uk_stage_hmrc_cgt_asset_type_spine_summary": ( + "stage_health", + "transferred", + ), "uk_stage_salary_sacrifice_realization": ( "stage_health", "transferred", @@ -512,6 +517,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_take_up_signal": ("take_up_signal", "terminal"), "uk_brma_enum_domain": ("enum_domain", "assembled"), "uk_ons_household_type_enum_domain": ("enum_domain", "assembled"), + "uk_capital_gains_asset_type_enum_domain": ("enum_domain", "transferred"), "uk_uc_deduction_combination_enum_domain": ("enum_domain", "terminal"), "uk_student_loan_plan_enum_domain": ("enum_domain", "terminal"), "uk_calibration_reference_coverage": ( @@ -558,6 +564,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_stage_cgt_incidence_clone_mass", "uk_stage_cgt_band_donors_support", "uk_stage_hmrc_cgt_gains_spine_summary", + "uk_stage_hmrc_cgt_asset_type_spine_summary", "uk_stage_salary_sacrifice_realization", "uk_stage_student_loans_realization", "uk_stage_age_tail_targets", @@ -693,6 +700,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "spine": frozenset( { "uk_brma_enum_domain", + "uk_capital_gains_asset_type_enum_domain", "uk_ons_household_type_enum_domain", "uk_stage_age_tail_targets", "uk_stage_cgt_band_donors_support", @@ -701,6 +709,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_stage_etb_vat_support", "uk_stage_frs_hmrc_spine_leaves_signal", "uk_stage_frs_relationships_composition", + "uk_stage_hmrc_cgt_asset_type_spine_summary", "uk_stage_hmrc_cgt_gains_spine_summary", "uk_stage_hmrc_spi_income_spine_identity", "uk_stage_lcfs_consumption_energy_rake", @@ -750,10 +759,10 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: _UK_CERTIFICATION_PART_DIGESTS: Mapping[str, Mapping[str, str]] = { "spine": { "gates_manifest_sha256": ( - "f033f570a74cad4f0cef99e3e7624f17a083ddc72204625f548066bd4652525c" + "778f5d32d421c4fb2cc8c37ef4232093070d2606ec17bf9d4f7ee1c1e6de8b8d" ), "policy_sha256": ( - "6a054c1630d0728c0259a17a4c29bfdaccf0c937c6788b3a958ffa7895d02d43" + "c59f645c51ec234e91bd582df2a1576116f2c67183c2cb015f51d3f1a2be9ea7" ), }, "calibration_seam": { @@ -766,10 +775,10 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: }, "release_cut": { "gates_manifest_sha256": ( - "7fbf9963c58a3c4ab165a0c1e1d6753243bf48fb685def436b7d394c8dabe57b" + "4becf8d00a08d319a26d33681b4bed159711a9873f6cae221af3d161929c5943" ), "policy_sha256": ( - "e4146dd4102bb0371a11913c94b41d9ed0114f65d81ef8e9c431c24549edf1bc" + "a7250c519e79e22d366316cd4943f5f4bd2cc86a0e76b919ee2ff2eacb2335f3" ), }, } diff --git a/packages/microcosm-data/tests/test_contract.py b/packages/microcosm-data/tests/test_contract.py index 82f892f087..cb73c6d9a4 100644 --- a/packages/microcosm-data/tests/test_contract.py +++ b/packages/microcosm-data/tests/test_contract.py @@ -138,13 +138,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 = ( - "4456fa0956cde418ae23a60fe72a414428eefab446fd044aa14adf1b6e084fcd" + "211abff22b4eedf9cf69f4b43a6f77ca8966d61a386c1804c3fdb093b0e27aa0" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "ff27efe67f3cdb8292dfe8da20a6a98cc20f4e1f77ba61eff2ba206b8eb2fc19" + "462271cdc72631e4b6780be52b53d7ea7572ad97e9b91a00a1f3da199f56858c" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "61758f1d9700dd94564d592fafe36b4fc4881b8b77c785349d1756da0df2b0d4" + "8baa7f5c0db3f64c5e00859ff7fd2bd4cf2daf611367ec36f519d1e428af1ebd" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "6f0243bcda09dad26945376230c44ec3cf55d4e417c3a25e29bae8c59bc1a69d" @@ -220,6 +220,11 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: "transferred", None, ), + "uk_stage_hmrc_cgt_asset_type_spine_summary": ( + "stage_health", + "transferred", + None, + ), "uk_stage_age_tail_targets": ("stage_health", "assembled", None), "uk_stage_frs_relationships_composition": ("stage_health", "assembled", None), "uk_ledger_compile_parity_local_incumbent_2025": ( @@ -262,6 +267,11 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: "uk_take_up_signal": ("take_up_signal", "terminal", "take_up_signal"), "uk_brma_enum_domain": ("enum_domain", "assembled", "enum_domain"), "uk_ons_household_type_enum_domain": ("enum_domain", "assembled", "enum_domain"), + "uk_capital_gains_asset_type_enum_domain": ( + "enum_domain", + "transferred", + "enum_domain", + ), "uk_uc_deduction_combination_enum_domain": ( "enum_domain", "terminal", @@ -1192,6 +1202,7 @@ def _gate_battery_payload( "uk_stage_cgt_incidence_clone_mass": "cgt_incidence_clone", "uk_stage_cgt_band_donors_support": "cgt_band_donors", "uk_stage_hmrc_cgt_gains_spine_summary": "hmrc_cgt_gains_spine", + "uk_stage_hmrc_cgt_asset_type_spine_summary": "hmrc_cgt_asset_type_spine", "uk_stage_salary_sacrifice_realization": "salary_sacrifice", "uk_stage_student_loans_realization": "student_loans", "uk_stage_age_tail_targets": "age_tail", diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/NORMALIZATION.md b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/NORMALIZATION.md index bf65a68d3b..11be3f1d9a 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/NORMALIZATION.md +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/NORMALIZATION.md @@ -1,6 +1,6 @@ # UK spine parity string normalization -The unchanged legacy transforms retain these 25 textual table columns as +The unchanged legacy transforms retain these 26 textual table columns as pandas `object`. The frozen graph dtype token `string` is specified by interface-freeze amendment 10 as pandas `StringDtype(storage="python")`. Before computing the legacy oracle's `uk_frame_content_identity` (live, @@ -8,6 +8,6 @@ in `legacy_oracle_identity`), exactly this audited surface is cast to that dtype. No values, row order, column order, weights, strata, mass records, or metadata change. -- `person`: `gender`, `marital_status`, `employment_status`, `employment_sector`, `aa_category`, `dla_sc_category`, `dla_m_category`, `pip_m_category`, `pip_dl_category`, `current_education`, `highest_education`, `person_support_channel`, `student_loan_plan`, `relationship_to_head`, `ons_family_role` +- `person`: `gender`, `marital_status`, `employment_status`, `employment_sector`, `aa_category`, `dla_sc_category`, `dla_m_category`, `pip_m_category`, `pip_dl_category`, `current_education`, `highest_education`, `person_support_channel`, `student_loan_plan`, `relationship_to_head`, `ons_family_role`, `capital_gains_asset_type` - `benunit`: `benunit_support_channel`, `uc_deduction_combination` - `household`: `region`, `tenure_type`, `accommodation_type`, `council_tax_band`, `brma`, `household_support_channel`, `source_household_key`, `ons_household_type` diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/PRODUCED_BY.txt b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/PRODUCED_BY.txt index b591b8f42e..b7efdb8490 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/PRODUCED_BY.txt +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/PRODUCED_BY.txt @@ -1 +1 @@ -tools/graph_uk_spine_fixture.py; current 29-transform legacy StagePlan oracle with parsed private-source seams. The acceptance test runs both sides from frs_raw in-process (root weights differ by one ulp between machines); the captured root tables serve the unbound registry's data-only CREATE path. +tools/graph_uk_spine_fixture.py; current 30-transform legacy StagePlan oracle with parsed private-source seams. The acceptance test runs both sides from frs_raw in-process (root weights differ by one ulp between machines); the captured root tables serve the unbound registry's data-only CREATE path. 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 new file mode 100644 index 0000000000..997ea4fae4 --- /dev/null +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/cgt_asset_type_facts.json @@ -0,0 +1,59 @@ +{ + "resource": "synthetic-cgt-asset-type.json", + "resource_sha256": "synthetic", + "source_commit": "synthetic", + "table7_total_disposals": 2743095.2380952383, + "table7_total_gains": 70000000000.0, + "table7_types": [ + { + "asset_type": "listed_shares", + "category": "financial", + "disposals": 1200000.0, + "gains": 6000000000.0, + "proceeds": 18000000000.0 + }, + { + "asset_type": "unlisted_shares", + "category": "financial", + "disposals": 275000.0, + "gains": 33000000000.0, + "proceeds": 99000000000.0 + }, + { + "asset_type": "other_financial_assets", + "category": "financial", + "disposals": 1066666.6666666667, + "gains": 16000000000.0, + "proceeds": 48000000000.0 + }, + { + "asset_type": "agricultural_commercial_industrial_land_buildings", + "category": "non_financial", + "disposals": 13333.333333333334, + "gains": 2000000000.0, + "proceeds": 6000000000.0 + }, + { + "asset_type": "residential_land_buildings", + "category": "non_financial", + "disposals": 166666.66666666666, + "gains": 10000000000.0, + "proceeds": 30000000000.0 + }, + { + "asset_type": "other_non_financial_assets", + "category": "non_financial", + "disposals": 21428.571428571428, + "gains": 3000000000.0, + "proceeds": 9000000000.0 + } + ], + "table8a_disposals_total": 1166.139425, + "table8a_gains_total": 1645659036.1744778, + "table8a_tax_total": 329131807.2348956, + "table8a_taxpayers_total": 1060.12675, + "table8b_all_gains": 1645659036.1744778, + "table8b_all_taxpayers": 1060.12675, + "table8b_individuals_gains": 1645659036.1744778, + "table8b_individuals_taxpayers": 1060.12675 +} diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/cgt_distribution.json b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/cgt_distribution.json index ad23e45955..05690c9c19 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/cgt_distribution.json +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/cgt_distribution.json @@ -79,7 +79,7 @@ { "gain_lower_bound": 0, "gains": 400000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -115,7 +115,7 @@ { "gain_lower_bound": 10000, "gains": 1600000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -151,7 +151,7 @@ { "gain_lower_bound": 25000, "gains": 3500000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -187,7 +187,7 @@ { "gain_lower_bound": 50000, "gains": 7000000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -223,7 +223,7 @@ { "gain_lower_bound": 100000, "gains": 16000000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -259,7 +259,7 @@ { "gain_lower_bound": 250000, "gains": 35000000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -295,7 +295,7 @@ { "gain_lower_bound": 500000, "gains": 70000000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -331,7 +331,7 @@ { "gain_lower_bound": 1000000, "gains": 140000000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -367,7 +367,7 @@ { "gain_lower_bound": 2000000, "gains": 320000000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -403,7 +403,7 @@ { "gain_lower_bound": 5000000, "gains": 1000000000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 100.0 }, { @@ -436,7 +436,7 @@ }, { "gains": 1593500000.0, - "income_lower_bound": 150000, + "income_lower_bound": 125140, "individuals": 1000.0 }, { @@ -447,11 +447,13 @@ ], "source": { "build_period": "2024", - "local_path": "synthetic-cgt.ods", - "sha256": "synthetic", - "sheet_name": "synthetic", - "size_bytes": 0, - "source_vintage": "2023-24" + "record_set_prefix": "synthetic.", + "resource": "synthetic-cgt.json", + "resource_sha256": "synthetic", + "source_commit": "synthetic", + "source_file": "synthetic.ods", + "source_sha256": "synthetic", + "source_vintage": "2024-25" }, "total_gains": 9561000000.0, "total_individuals": 6000.0 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 0378986547..c938789033 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 @@ -13,8 +13,9 @@ "spi_sample_fraction": 0.0135, "student_loans_calibration_year": 2025 }, - "description": "Data-only inputs for reconstructing the same 29 current UK stage transform classes used by the legacy StagePlan oracle.", + "description": "Data-only inputs for reconstructing the same 30 current UK stage transform classes used by the legacy StagePlan oracle.", "inputs": { + "cgt_asset_type_facts": "cgt_asset_type_facts.json", "cgt_distribution": "cgt_distribution.json", "etb": "etb.csv", "frs_raw": "frs_raw", @@ -84,8 +85,8 @@ { "format": "json", "kind": "public_aggregate_reference", - "resource": "hmrc_cgt_size_bands.json", - "role": "hmrc_cgt_size_bands", + "resource": "hmrc_cgt_conditioning_facts.json", + "role": "cgt_conditioning_facts", "runtime_sha256_required": true }, { @@ -98,7 +99,7 @@ ], "grain": "household", "nonnegative_outputs": [], - "notes": "Adds 270 positive-weight band donors. Rows below GBP 12,300 are excluded because they mix annual-exempt-amount regimes and the spline body already supplies that support.", + "notes": "Adds 270 positive-weight band donors. Rows below GBP 12,300 are excluded because they mix annual-exempt-amount regimes and the spline body already supplies that support. Band weights and starting gains come from the 2024-25 Table 2.1a rows of the vendored conditioning resource, the vintage the size-of-gain calibration targets fit (microcosm#725).", "operations": [ { "candidate_order": "household_id ascending", @@ -115,8 +116,11 @@ "never_zero_weight": true, "propensity": "Advani-Summers percent_with_gains at oldest-adult component-sum income", "reason": "Stack 30 positive-weight HMRC Table 2.1a support households per retained gain band; published donor mass is added explicitly.", + "retained_gains_gbp": 118209000000, + "retained_taxpayers": 392000, "seed": 1, - "size_band_resource": "hmrc_cgt_size_bands.json", + "size_band_resource": "hmrc_cgt_conditioning_facts.json", + "size_band_vintage": "2024-25", "weight_kind_out": "importance" } ], @@ -127,9 +131,9 @@ "rewrites": [ "capital_gains" ], - "source": "HMRC Capital Gains Tax statistics, July 2025, Table 2.1a", + "source": "HMRC Capital Gains Tax statistics, July 2026 release, Table 2.1a for 2024-25, via the vendored conditioning facts", "stage": "cgt_band_donors", - "survey": "HMRC Capital Gains Tax statistics Table 2.1a and Advani-Summers capital-gains incidence" + "survey": "HMRC Capital Gains Tax statistics Table 2.1a (2024-25 individuals) and Advani-Summers capital-gains incidence" }, "cgt_incidence_clone": { "artifacts": [ @@ -1772,32 +1776,132 @@ "stage": "frs_take_up", "survey": "Family Resources Survey 2024-25" }, - "hmrc_cgt_gains_spine": { + "hmrc_cgt_asset_type_spine": { "artifacts": [ { - "format": "ods", - "kind": "administrative_table", - "locator": "https://assets.publishing.service.gov.uk/media/6878ac62760bf6cedaf5bd93/Table_3_2025_Size_of_gain_by_income.ods", + "dependency": "policyengine-uk>=2.98.0 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", + "parameters": [ + "gov.hmrc.cgt.annual_exempt_amount" + ], + "role": "policy_parameters", + "runtime_sha256_required": false + }, + { + "format": "json", + "kind": "public_aggregate_reference", + "resource": "hmrc_cgt_asset_type_facts.json", + "role": "cgt_asset_type_facts", + "runtime_sha256_required": true + } + ], + "grain": "person", + "nonnegative_outputs": [ + "capital_gains_residential_property" + ], + "notes": "Spine stage after the amounts redraw: every liable gainer carries one main asset type and, where flagged residential, its net gain restated in capital_gains_residential_property. The residential flag is solved to the Table 8a 2024-25 totals on the individuals basis, which the hmrc.cgt.residential_property_taxpayers and hmrc.cgt.residential_property_gains targets bind; the non-residential composition follows the fenced Table 7 2023-24 prior and is diagnostic only. Carried interest (Table 9) is not modelled (microcosm#725).", + "operations": [ + { + "artifact_role": "cgt_asset_type_facts", + "fail_on_mismatch": true, + "feed_pin": "chronicle_feed.json", + "kind": "verify_vendored_fact_resource", "mapped_build_period": 2024, - "mime_type": "application/vnd.oasis.opendocument.spreadsheet", - "period_mapping": "latest_published_tax_year", - "publication": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", - "role": "cgt_published_fact_surface", - "runtime_sha256_required": true, - "sha256": "8e75c00bab949348a7238fea6d995f626c85e5d02813b46606dd7fea85e9d0c3", - "sheets": [ - "3_1_2023-24", - "3_2_2022-23", - "3_3_2021-22", - "3_4_2020-21" + "period_mapping": "published_tax_year_equals_build_period", + "record_sets": [ + "hmrc.cgt_table8_2026.table8a.ty2024", + "hmrc.cgt_table8_2026.table8b.ty2024", + "hmrc.cgt_table7_2026.asset_category.ty2023", + "hmrc.cgt_table7_2026.asset_category_total.ty2023", + "hmrc.cgt_table7_2026.financial_asset_type.ty2023", + "hmrc.cgt_table7_2026.non_financial_asset_type.ty2023" ], - "size_bytes": 11996, - "survey": "HMRC Capital Gains Tax statistics table 3", - "tax_year_start": 2023, - "vintage": "2023-24" + "require_before_source_read": true, + "resource": "hmrc_cgt_asset_type_facts.json", + "runtime_sha256_required": true, + "source_vintage": "2024-25" + }, + { + "basis_assumption": "trusts hold the same share of the Self Assessment component as of the UK Property service, and a flagged person's whole net gain is attributed to residential property", + "count_target": "Table 8a 2024-25 total taxpayers reporting residential property disposals times the Table 8b 2024-25 individuals/all taxpayer share on the UK Property service", + "gains_target": "Table 8a 2024-25 total residential property gains times the Table 8b 2024-25 individuals/all gains share on the UK Property service", + "kind": "assign_residential_property_flag", + "model": "logistic probability in centred log gains, p = 1 / (1 + exp(-(a + b (log g - c)))) with c the weighted mean log gain of the population", + "output_column": "capital_gains_residential_property", + "output_semantics": "the person's capital_gains where flagged residential, 0 otherwise", + "parameter_solver": "nested bisection; the intercept matches the expected weighted count at each trial slope, the slope matches the expected weighted gains", + "population": "persons with net capital gains above the annual exempt amount (the national taxpayer proxy)", + "realization": "weighted systematic sampling in ascending gain order with one seeded offset: a person is flagged when the expected weight owed so far reaches their own weight, so the flagged weight tracks the expected weight within one person's weight along the gains axis and the realised count and gains sit close to their expectations; the Bernoulli sigma of each is reported as the envelope", + "seed": 553, + "seed_mixing": "seed combined with the build period" + }, + { + "categories": [ + "listed_shares", + "unlisted_shares", + "other_financial_assets", + "agricultural_commercial_industrial_land_buildings", + "other_non_financial_assets" + ], + "diagnostic_only": true, + "kernel": "log-normal density in log gains centred on each type's Table 7 2023-24 mean gain per disposal, one common log-scale width", + "kind": "assign_main_asset_type", + "log_sigma": 1.5, + "none_semantics": "no positive net gains", + "output_column": "capital_gains_asset_type", + "population": "liable gainers not flagged residential", + "realization": "one seeded uniform per person against the cumulative type probabilities, consumed in person_id order", + "seed": 554, + "seed_mixing": "seed combined with the build period", + "share_targets": "Table 7 2023-24 gains by asset type excluding residential land and buildings, as shares", + "sub_aea_semantics": "positive net gains at or below the annual exempt amount; never a taxpayer, so never classified", + "value_domain": [ + "none", + "sub_aea", + "residential_land_buildings", + "listed_shares", + "unlisted_shares", + "other_financial_assets", + "agricultural_commercial_industrial_land_buildings", + "other_non_financial_assets" + ], + "weight_fitting": "multiplicative updates of the type weights until the household-weighted expected gains shares by type match the share targets", + "weight_fitting_iterations": 200, + "weight_fitting_tolerance": 1e-06 + }, + { + "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": "CGT asset-type assignment on the source spine: household weights pass through unchanged and total household mass is conserved." }, { - "dependency": "policyengine-uk>=2.88 via microcosm-build[uk]", + "adjudication": "https://github.com/PolicyEngine/microcosm/issues/725", + "calibrated_facts": "The Table 8a 2024-25 total residential property taxpayers and gains restated on the individuals basis (hmrc.cgt.residential_property_taxpayers, hmrc.cgt.residential_property_gains in uk_population_targets.json).", + "calibration_permitted": false, + "classification_rationale": "Table 7 is sample-based, published for 2023-24 only, counts disposals rather than taxpayers and includes trusts and non-UK assets; it seeds the asset-type draw and is reported against, never fitted.", + "fact_fence_id": "cgt_asset_type_facts_sample_based_prior_vintage", + "fenced_fact_composition": "Table 7 2023-24 rows: 6 asset-category rows, 3 category totals, 12 financial asset-type rows, 12 non-financial asset-type rows", + "fenced_fact_count": 33, + "kind": "classify_cgt_asset_type_facts_with_reviewed_fence" + } + ], + "outputs": [ + "capital_gains_asset_type", + "capital_gains_residential_property" + ], + "rewrites": [], + "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", + "stage": "hmrc_cgt_asset_type_spine", + "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative) and Table 7 (disposals, proceeds and gains by asset type, 2023-24, sample-based), vendored from the pinned Chronicle feed" + }, + "hmrc_cgt_gains_spine": { + "artifacts": [ + { + "dependency": "policyengine-uk>=2.98.0 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", @@ -1809,18 +1913,37 @@ ], "role": "policy_parameters", "runtime_sha256_required": false + }, + { + "format": "json", + "kind": "public_aggregate_reference", + "resource": "hmrc_cgt_conditioning_facts.json", + "role": "cgt_conditioning_facts", + "runtime_sha256_required": true } ], "grain": "person", "nonnegative_outputs": [], - "notes": "Spine manifest projection of the merged HMRC Table 3 amounts stage. It deliberately omits base_candidate and verify_certified_candidate, which belong only to the certified-H5 path.", + "notes": "Spine manifest projection of the merged HMRC Table 3 amounts stage. It deliberately omits base_candidate and verify_certified_candidate, which belong only to the certified-H5 path. The allocation targets are raked to the 2024-25 Table 6 age and Table 5 region margins from the vendored conditioning resource and walked inside income x age x region cells, so large gains land on the kind of person who holds them (microcosm#725).", "operations": [ { - "artifact_role": "cgt_published_fact_surface", + "artifact_role": "cgt_conditioning_facts", "fail_on_mismatch": true, - "kind": "verify_pinned_cgt_ods", + "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.cgt_table3_2026.ty2024.", + "hmrc.cgt_size_of_gain_2026.table2_1a.ty2024.", + "hmrc.cgt_table6_2026.age.ty2024", + "hmrc.cgt_table5_2026.country_region.ty2024", + "hmrc.cgt_statistics_2026.table1.ty2024" + ], "require_before_source_read": true, - "runtime_sha256_required": true + "resource": "hmrc_cgt_conditioning_facts.json", + "runtime_sha256_required": true, + "source_vintage": "2024-25" }, { "allowance": "tapered Personal Allowance from the policy_parameters artifact", @@ -1838,27 +1961,79 @@ "fail_on_missing_component": true, "kind": "taxable_income_proxy" }, + { + "age_group_lower_bounds": [ + 16, + 25, + 35, + 45, + 55, + 65, + 75 + ], + "age_margin": "Table 6 2024-25 individual taxpayers by age band, folded to the age groups; the 0-15 band, which adult carriers cannot hold, is spread across the groups by the normalisation rather than folded into the youngest group", + "band_aggregation": "Table 2.1a bands 0, 3,000 and 6,000 fold into Table 3 band 0; 10,000 and 12,300 fold into 10,000; the remaining bands map one to one; the folded rows must agree with Table 3's row totals within publication rounding and the difference is reported per band", + "conditioning_dimensions": [ + "income band", + "age group", + "region group" + ], + "fallback_policy": "pooled_income_band_rank_walk", + "gains_margin": "Table 6 2024-25 individual gains by age band, folded to the age groups the same way, as one linear constraint per group, the raked people in the group's cells times their Table 3 cell means summing to the group's gains, so each age group carries its published gains as well as its count instead of the frame's band mix (the amounts-consistent tilt; microcosm#725)", + "gains_tilt": "exponential tilt per age group; the group's cells are multiplied by exp(lambda x cell mean / largest cell mean) with lambda solved by bisection so the group's people-weighted mean gain meets its target while the group's count is held, alternated with the three count margins until every margin holds to the tolerance", + "joint_margin": "Table 3 2024-25 reconciled cells (2026 release; individuals with a liability by size of gain and taxable income), every income column rescaled onto its published All-row taxpayer total; the same tax year as the Table 1 observations the calibration fits, so no vintage move is applied", + "kind": "rake_allocation_targets", + "margin_normalization": "every count margin is rescaled onto the joint's total taxpayer mass and the gains margin onto the joint's gains at cell means before raking, so rounding cannot make the margins mutually infeasible", + "rake_rounds": 500, + "rake_tolerance": 1e-09, + "region_groups": { + "EAST_MIDLANDS": "rest_of_england", + "EAST_OF_ENGLAND": "south_east_and_east_of_england", + "LONDON": "london", + "NORTHERN_IRELAND": "wales_scotland_northern_ireland", + "NORTH_EAST": "rest_of_england", + "NORTH_WEST": "rest_of_england", + "SCOTLAND": "wales_scotland_northern_ireland", + "SOUTH_EAST": "south_east_and_east_of_england", + "SOUTH_WEST": "rest_of_england", + "WALES": "wales_scotland_northern_ireland", + "WEST_MIDLANDS": "rest_of_england", + "YORKSHIRE": "rest_of_england" + }, + "region_margin": "Table 5 2024-25 taxpayers by country and region (all taxpayers) times the Table 1 2024-25 individuals/total taxpayer share, folded to the region groups", + "reporting_grain": "Table 6 age bands and the twelve region-tier areas", + "resource": "hmrc_cgt_conditioning_facts.json", + "seed_joint": "joint cell mass times the frame's household-weighted (age group, region group | income band) shares among gainers", + "solver": "microcosm.build.uk_runtime.cgt_imputation._rake_with_gains_tilt (proportional scaling of the count margins and the gains tilt on the four-way array; the generic mean-raking helper scales columns independently and cannot hold a people-weighted gains constraint)", + "unattainable_policy": "a group whose target mean gain lies outside the means of its seeded cells takes the nearest attainable tilt and is reported", + "zero_seed_policy": "a cell with no frame support keeps a zero target and is reported; its joint mass is met from the income band's pooled fallback where support exists" + }, { "band_order": "highest gain band first", + "cell_order": "income band ascending, age group ascending, region group ascending, gain bands highest first inside a cell; then the pooled walk per income band", "column_reconciliation": "every income column rescales onto its published All-row taxpayer total", "kind": "rank_preserving_allocation", "minimum_allocation_people": 1, "ordering": "existing gains descending, person_id ascending on ties", - "shortfall_policy": "proportional scale-down when the population holds less gainer mass than published taxpayers", + "rounding": "systematic with one seeded offset per walk: a person joins the band whose cumulative boundary first covers (1 - offset) of their weight, so a band boundary smaller than a person's weight still receives that person on the share of walks it implies and the rounding is unbiased across the conditioning cells; each cell walk's signed rounding error is carried into the next cell's boundaries for the same gain band (error diffusion), so each gain band's walked total within an income band stays within one person's weight of its raked total instead of accumulating the overshoot of many cell walks", + "shortfall_policy": "proportional scale-down inside a cell that holds less gainer mass than its raked target; the income band's net shortfall after every cell walk, apportioned to gain bands in proportion to their positive shortfalls, is walked over the income band's pooled unassigned gainers, scaled down proportionally when the pool is short, so cell-walk rounding overshoot is netted rather than compounded", "suppressed_cell_allocation": "count implied by the cell's published gains at the band-total mean", "weights": "household_weight mapped to persons; no person splits across bands", - "within": "income band" + "within": "income band x age group x region group cell, then the income band's pooled unassigned gainers" }, { "bottom_band_floor": "annual exempt amount plus one pound", "bounded_band_family": "truncated exponential matched to the cell's published mean", + "cell_means": "ratios of the published Table 3 2024-25 cell gains to cell taxpayers, both rounded by the publisher (counts to the nearest thousand, amounts to the nearest million), so derived rather than published numbers; suppressed-count cells take the band-total mean; every mean is repaired into its band", "deterministic": true, "kind": "within_band_draws", "mean_repair_margin": 0.02, - "mean_repair_reason": "Published counts round to the nearest thousand and amounts to the nearest million; four cells of the 2023-24 table imply a mean outside their own band, and repaired means clamp just inside the violated boundary.", + "mean_repair_reason": "Published counts round to the nearest thousand and amounts to the nearest million; two cells of the 2024-25 table (gains of GBP 1m to 2m at taxable incomes of GBP 37,700 to 49,999 and GBP 100,000 to 125,139) imply a mean below their own band, and repaired means clamp just inside the violated boundary.", "open_band_family": "Pareto with alpha = mean / (mean - lower bound)", + "open_band_realization": "each open-band person takes the conditional mean of their weight-proportional quantile stratum, which averages back to the published mean exactly under the household weights; an iid draw from a Pareto with infinite variance sits well below it on a few dozen carriers, and equal strata on unequal weights put the tail's mass on whichever rows happen to be light", + "quantile_scheme": "stratified by weight: the persons a (gain band, income band) plan receives across every cell and the pooled walk take the quantile strata that partition (0, 1) in proportion to their household weights, in ascending prior-gain order with one seeded jitter per plan, so the plan's weighted realised mean sits on its published mean rather than carrying n independent draws or the weight-rank mix of equal strata", "seed_base": 552, - "seed_mixing": "seed combined with the build period; draws ordered by allocation rank" + "seed_mixing": "seed combined with the build period; each walk draws its rounding offset in cell order then pooled-fallback order, then each plan draws its quantile jitter, income bands ascending and gain bands highest first" }, { "kind": "sub_aea_remainder", @@ -1874,14 +2049,14 @@ }, { "adjudication": "https://github.com/PolicyEngine/microcosm/issues/552", - "calibrated_facts_unchanged": "The two aggregate facts in UK_CGT_TARGET_SPECS remain the only calibrated CGT facts.", + "calibrated_facts_unchanged": "The calibrated CGT facts are the FY2024-25 individual Table 1 references (hmrc.cgt.taxpayers_total, hmrc.cgt.gains_total, hmrc.cgt.liability_total; UK_CGT_TARGET_COVERAGE_REQUIREMENTS) and the Table 2.1a size-of-gain, Table 6 age-band and Table 5 region rows declared in uk_population_targets.json (microcosm#467, #725); the 76 Table 3 2024-25 joint and marginal cells stay fenced and condition the imputation only, and Table 3's all-gains, all-incomes pair restates the Table 1 individual observations already bound.", "calibration_permitted": false, "classification_rationale": "The taxpayer count is endogenous to policy, the income conditioning is an arithmetic proxy, and the published surface needs rounding and suppression reconciliation before any per-band fact is exact.", "fact_fence_id": "cgt_band_facts_policy_endogenous_proxy_conditioned", - "fenced_fact_composition": "60 joint cells, 10 gain-band row totals, 6 income-column totals", + "fenced_fact_composition": "60 joint cells, 10 gain-band row totals, 6 income-column totals (Table 3 2024-25, 2026 release)", "fenced_fact_count": 76, "kind": "classify_cgt_band_facts_with_reviewed_fence", - "promotion_path": "A separately reviewed target profile may lift specific band facts after the reconciliation and proxy adequacy are adjudicated." + "promotion_path": "A separately reviewed target profile may lift specific band facts after the reconciliation and proxy adequacy are adjudicated; the Table 2.1a, 6 and 5 rows were promoted under microcosm#467 and #725 on the FY2024-25 individual observations, while the Table 3 joint cells remain fenced because the taxable-income proxy is still an arithmetic approximation." } ], "outputs": [ @@ -1890,9 +2065,9 @@ "rewrites": [ "capital_gains" ], - "source": "https://assets.publishing.service.gov.uk/media/6878ac62760bf6cedaf5bd93/Table_3_2025_Size_of_gain_by_income.ods", + "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "stage": "hmrc_cgt_gains_spine", - "survey": "HMRC Capital Gains Tax statistics table 3 (size of gain by taxable income), 2020-21 to 2023-24" + "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 3 2024-25 (individual taxpayers and gains by size of gain and taxable income) conditioned on the 2024-25 Tables 2.1a, 5, 6 and 1, all vendored from the pinned Chronicle feed" }, "hmrc_spi_income_spine": { "artifacts": [ 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 96e78a59f1..c6a8c1b9db 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":[{"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":"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_uc_claimant","dtype":"bool","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":"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":"property_income","dtype":"float64","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":"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":"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":"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":{"sample_fraction":1.0,"sample_seed":578,"stage_contract_sha256":"047d30937efb21e39259fdbed5597751e4f5a0c341ea583c7446e4c9c11eba48","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"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","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":"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_uc_claimant","dtype":"bool","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":"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":"property_income","dtype":"float64","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":"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":"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":"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"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","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":"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":{"stage":"age_tail","stage_contract_sha256":"963a34f38caede2525e3b8735f904bb70a1bbef5a272f0eefd4346343444484f","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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":"ons_household_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"stage":"frs_relationships","stage_contract_sha256":"30628808d06d9829ebcbcf460cd355a01261e78c7c73e6006c75bec2e3d60c33","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_employment","stage_contract_sha256":"ddbefaf05b44788d794a6e4b0e8926c14318d66e50d2f11f50ca549538bbf60c","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_council_tax","stage_contract_sha256":"3381cd9f7a736514d5073c57480e07f5098890f3ca9ed3865392043594771eb9","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_disability","stage_contract_sha256":"ac500b4cb1bc04d4fb72d198592dd376d61da8c150921a6ac53914ac18be0508","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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"}],"params":{"stage":"frs_education","stage_contract_sha256":"836cb0f5a582fee1425190e96c9cb81bdef859bd236c8b6bc27660b6e3d0c2f8","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage frs_legacy_proxies.","id":"frs_legacy_proxies","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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"],"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":{"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"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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},{"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"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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":{"stage":"frs_education_grant_split","stage_contract_sha256":"8718f014b90498c2cc7c754289775ca4a41452d9b978d8cbc5f34b64cbdc7df2","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"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","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":{"stage":"frs_take_up","stage_contract_sha256":"067d31b7fbe733d1d182588705e9ce79df0c8e5f6e8f519314765af49b1b00d7","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_person_draws","stage_contract_sha256":"7e0af955541ec5669dcdf1de4e1e6ca642853e48b775ec4e25238b41491df324","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_household_draws","stage_contract_sha256":"c74c63b09264319c4bf0049dabba00ecd0ce660beb7b53d6dae71518434bc949","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage frs_brma.","id":"frs_brma","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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":{"stage":"frs_brma","stage_contract_sha256":"5b8f0b361310c7cd3efbaae3762b347649b7d4afb9e9943131d9bef9266fc3c8","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","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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},{"base":null,"citation":"","description":"Run UK spine stage was_wealth.","id":"was_wealth","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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.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":{"stage":"was_wealth","stage_contract_sha256":"c499dcb7c49a0176229dbc363b400415cb5c1da44af266ba2155f9a62a0bd2ed","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"base":"frs_brma.checkpoint","citation":"","description":"Ownership boundary before regional_property_uprating rewrites.","id":"regional_property_uprating.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"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":["region"],"entity":"household","rows":"all"},{"columns":["age","student_loan_balance"],"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"}],"params":{"stage":"regional_property_uprating","stage_contract_sha256":"4304356c6c5ba91a04883148cbf9078761ee926c8387aadb6c15b6b70ebb31f6","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage lcfs_consumption.","id":"lcfs_consumption","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance"],"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"}],"params":{"stage":"lcfs_consumption","stage_contract_sha256":"ffceb2646dd799cf651a227a570edb0d7d8b10d02d14fb778c1d4b51569d8a30","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage etb_vat.","id":"etb_vat","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance"],"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":{"stage":"etb_vat","stage_contract_sha256":"99a6756256adfe8255672fafda89710c08ae56bd2b8f011b20c3b8381eabfa1e","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage etb_services.","id":"etb_services","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance"],"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":{"stage":"etb_services","stage_contract_sha256":"87d09cc779aef3ce8b9fc74fe6dfafb36d03096a073d53a340d6049c7fa3ea1e","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"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":["region"],"entity":"household","rows":"all"},{"columns":["age","employee_pension_contributions","nhs_outpatient_spending"],"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":{"stage":"frs_hmrc_spine_leaves","stage_contract_sha256":"2bb3d068003489b47cc8676ac26c203ce3c39a9b6e92f3ecd0a3c06acd6addc4","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"regional_property_uprating.boundary","citation":"","description":"Run structural UK stage spi_support_channel.","id":"spi_support_channel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","stage":"spi_support_channel","stage_contract_sha256":"4b10f1a4a215cdf2c406c9974de2d1e580eb3cd3a25ed34973c1b63abf4a54bb","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},{"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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","ossben_identifiable_subset","srp_regular_code5","person_source_id","person_support_channel","person_support_clone_index"],"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":"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":"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"}],"params":{"stage":"hmrc_spi_income_spine","stage_contract_sha256":"4c2edca1f77416a00cff10c7e9d0a9da50e332a2bb6a995ef9ac1bdd00ff97a9","time_period":"2024"},"population":"spi_support_channel","sources":["frs"],"structural":"none","weights":null},{"base":"spi_support_channel","citation":"","description":"Ownership boundary before uc_reporter_redraw rewrites.","id":"uc_reporter_redraw.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Run UK spine stage uc_reporter_redraw.","id":"uc_reporter_redraw","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income"],"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":{"stage":"uc_reporter_redraw","stage_contract_sha256":"7e94e034cad29c5bae566ffb875c42cddf3a1025c15496907e783ceff1144f8b","time_period":"2024"},"population":"uc_reporter_redraw.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_reporter_redraw.boundary","citation":"","description":"Ownership boundary before uc_capital_coherence rewrites.","id":"uc_capital_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"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":["region"],"entity":"household","rows":"all"},{"columns":["age","is_benunit_head","is_parent","person_support_channel","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":"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":{"stage":"uc_capital_coherence","stage_contract_sha256":"059f27ee687ee15385b246d43068b17aeecbe3645ccc41fd52fcad06a006a081","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage uc_deduction_attributes.","id":"uc_deduction_attributes","inputs":[{"columns":["frs_benunit_capital","would_claim_uc"],"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":{"stage":"uc_deduction_attributes","stage_contract_sha256":"6bc7e3ec1a5712e23ca1b7d2956e8b17f2526b94431ba3e5a9294b04658e4fe0","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.boundary","citation":"","description":"Run structural UK stage cgt_incidence_clone.","id":"cgt_incidence_clone","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income"],"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","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":"Run structural UK stage cgt_band_donors.","id":"cgt_band_donors","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_band_donors@1","mass":"free","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_band_donor","bool"],["person","capital_gains","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","stage":"cgt_band_donors","stage_contract_sha256":"e10e10c49c0ca2a6a65048c91b683f818e8b6e207a6c6f57a20d76ea299160b0","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_band_donors.","id":"cgt_band_donors.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_band_donor","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_band_donor"]},"population":"cgt_band_donors","sources":[],"structural":"none","weights":null},{"base":"cgt_band_donors","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","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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_capital_gains_clone","household_is_cgt_band_donor"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"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":["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":{"stage":"hmrc_cgt_gains_spine","stage_contract_sha256":"20ada8d8ee94400bd160223e865a910db7aff9c40a7f0c8ee8ca8c40ed901b72","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage salary_sacrifice.","id":"salary_sacrifice","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_capital_gains_clone","household_is_cgt_band_donor"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","capital_gains"],"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"}],"params":{"stage":"salary_sacrifice","stage_contract_sha256":"a4af925af21cc6766eb7c8855b6743a3aa4eeeb38df12cfc83063d7ad6890539","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"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","current_education","employee_pension_contributions","highest_education","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":{"stage":"student_loans","stage_contract_sha256":"7c4c76398c2e80b41c7f941a5f06246b57d89b5eb0c36d42e3116ac35e82e203","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Content-bound UK FRS and donor fixture/source bundle.","name":"frs"}]} +{"country":"uk","nodes":[{"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":"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_uc_claimant","dtype":"bool","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":"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":"property_income","dtype":"float64","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":"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":"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":"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":{"sample_fraction":1.0,"sample_seed":578,"stage_contract_sha256":"047d30937efb21e39259fdbed5597751e4f5a0c341ea583c7446e4c9c11eba48","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"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","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":"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_uc_claimant","dtype":"bool","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":"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":"property_income","dtype":"float64","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":"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":"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":"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"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","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":"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":{"stage":"age_tail","stage_contract_sha256":"963a34f38caede2525e3b8735f904bb70a1bbef5a272f0eefd4346343444484f","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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":"ons_household_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"stage":"frs_relationships","stage_contract_sha256":"30628808d06d9829ebcbcf460cd355a01261e78c7c73e6006c75bec2e3d60c33","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_employment","stage_contract_sha256":"ddbefaf05b44788d794a6e4b0e8926c14318d66e50d2f11f50ca549538bbf60c","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_council_tax","stage_contract_sha256":"3381cd9f7a736514d5073c57480e07f5098890f3ca9ed3865392043594771eb9","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_disability","stage_contract_sha256":"ac500b4cb1bc04d4fb72d198592dd376d61da8c150921a6ac53914ac18be0508","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"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"}],"params":{"stage":"frs_education","stage_contract_sha256":"836cb0f5a582fee1425190e96c9cb81bdef859bd236c8b6bc27660b6e3d0c2f8","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage frs_legacy_proxies.","id":"frs_legacy_proxies","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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"],"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":{"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"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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},{"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"],"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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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":{"stage":"frs_education_grant_split","stage_contract_sha256":"8718f014b90498c2cc7c754289775ca4a41452d9b978d8cbc5f34b64cbdc7df2","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"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","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":{"stage":"frs_take_up","stage_contract_sha256":"067d31b7fbe733d1d182588705e9ce79df0c8e5f6e8f519314765af49b1b00d7","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_person_draws","stage_contract_sha256":"7e0af955541ec5669dcdf1de4e1e6ca642853e48b775ec4e25238b41491df324","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"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":{"stage":"frs_household_draws","stage_contract_sha256":"c74c63b09264319c4bf0049dabba00ecd0ce660beb7b53d6dae71518434bc949","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage frs_brma.","id":"frs_brma","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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":{"stage":"frs_brma","stage_contract_sha256":"5b8f0b361310c7cd3efbaae3762b347649b7d4afb9e9943131d9bef9266fc3c8","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","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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},{"base":null,"citation":"","description":"Run UK spine stage was_wealth.","id":"was_wealth","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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.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":{"stage":"was_wealth","stage_contract_sha256":"c499dcb7c49a0176229dbc363b400415cb5c1da44af266ba2155f9a62a0bd2ed","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"base":"frs_brma.checkpoint","citation":"","description":"Ownership boundary before regional_property_uprating rewrites.","id":"regional_property_uprating.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"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":["region"],"entity":"household","rows":"all"},{"columns":["age","student_loan_balance"],"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"}],"params":{"stage":"regional_property_uprating","stage_contract_sha256":"4304356c6c5ba91a04883148cbf9078761ee926c8387aadb6c15b6b70ebb31f6","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage lcfs_consumption.","id":"lcfs_consumption","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance"],"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"}],"params":{"stage":"lcfs_consumption","stage_contract_sha256":"09edc53ce6c0fd1b6e7374ca84902d72dad5eff305c9ea9a312e8d4bb5d3d411","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage etb_vat.","id":"etb_vat","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance"],"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":{"stage":"etb_vat","stage_contract_sha256":"99a6756256adfe8255672fafda89710c08ae56bd2b8f011b20c3b8381eabfa1e","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage etb_services.","id":"etb_services","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance"],"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":{"stage":"etb_services","stage_contract_sha256":"841c690d7f23ac8661f663f59a15c20c2795a17149709b337e92d04848b3fe17","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"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":["region"],"entity":"household","rows":"all"},{"columns":["age","employee_pension_contributions","nhs_outpatient_spending"],"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":{"stage":"frs_hmrc_spine_leaves","stage_contract_sha256":"2bb3d068003489b47cc8676ac26c203ce3c39a9b6e92f3ecd0a3c06acd6addc4","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"regional_property_uprating.boundary","citation":"","description":"Run structural UK stage spi_support_channel.","id":"spi_support_channel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","stage":"spi_support_channel","stage_contract_sha256":"4b10f1a4a215cdf2c406c9974de2d1e580eb3cd3a25ed34973c1b63abf4a54bb","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},{"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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","ossben_identifiable_subset","srp_regular_code5","person_source_id","person_support_channel","person_support_clone_index"],"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":"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":"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"}],"params":{"stage":"hmrc_spi_income_spine","stage_contract_sha256":"4c2edca1f77416a00cff10c7e9d0a9da50e332a2bb6a995ef9ac1bdd00ff97a9","time_period":"2024"},"population":"spi_support_channel","sources":["frs"],"structural":"none","weights":null},{"base":"spi_support_channel","citation":"","description":"Ownership boundary before uc_reporter_redraw rewrites.","id":"uc_reporter_redraw.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Run UK spine stage uc_reporter_redraw.","id":"uc_reporter_redraw","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income"],"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":{"stage":"uc_reporter_redraw","stage_contract_sha256":"7e94e034cad29c5bae566ffb875c42cddf3a1025c15496907e783ceff1144f8b","time_period":"2024"},"population":"uc_reporter_redraw.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_reporter_redraw.boundary","citation":"","description":"Ownership boundary before uc_capital_coherence rewrites.","id":"uc_capital_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"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":["region"],"entity":"household","rows":"all"},{"columns":["age","is_benunit_head","is_parent","person_support_channel","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":"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":{"stage":"uc_capital_coherence","stage_contract_sha256":"059f27ee687ee15385b246d43068b17aeecbe3645ccc41fd52fcad06a006a081","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage uc_deduction_attributes.","id":"uc_deduction_attributes","inputs":[{"columns":["frs_benunit_capital","would_claim_uc"],"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":{"stage":"uc_deduction_attributes","stage_contract_sha256":"6bc7e3ec1a5712e23ca1b7d2956e8b17f2526b94431ba3e5a9294b04658e4fe0","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.boundary","citation":"","description":"Run structural UK stage cgt_incidence_clone.","id":"cgt_incidence_clone","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","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","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income"],"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","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":"Run structural UK stage cgt_band_donors.","id":"cgt_band_donors","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_band_donors@1","mass":"free","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_band_donor","bool"],["person","capital_gains","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","stage":"cgt_band_donors","stage_contract_sha256":"6fde981ff62f0435f9d708ef4048f64b8edfdec34bab521a19dec677d2603694","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_band_donors.","id":"cgt_band_donors.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_band_donor","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_band_donor"]},"population":"cgt_band_donors","sources":[],"structural":"none","weights":null},{"base":"cgt_band_donors","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","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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_capital_gains_clone","household_is_cgt_band_donor"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"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":["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":{"stage":"hmrc_cgt_gains_spine","stage_contract_sha256":"2914b5187377b195d201a55b10792d6f602ae85475580a262bf84d10d9766e5a","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"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":["region"],"entity":"household","rows":"all"},{"columns":["age","capital_gains"],"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_residential_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"stage":"hmrc_cgt_asset_type_spine","stage_contract_sha256":"529706ff53425e28907eca2451a6d7c8ccb5b0f82643ed62eb3947ed4f71dfc3","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"base":null,"citation":"","description":"Run UK spine stage salary_sacrifice.","id":"salary_sacrifice","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","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","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","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","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","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_capital_gains_clone","household_is_cgt_band_donor"],"entity":"household","rows":"all"},{"columns":["age","gender","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_uc_claimant","employment_income","self_employment_income","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","property_income","maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_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","bsp_reported","relationship_to_head","ons_family_role","ons_family_index","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","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","student_loan_balance","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","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","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","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","capital_gains","capital_gains_asset_type","capital_gains_residential_property"],"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"}],"params":{"stage":"salary_sacrifice","stage_contract_sha256":"a4af925af21cc6766eb7c8855b6743a3aa4eeeb38df12cfc83063d7ad6890539","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"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","current_education","employee_pension_contributions","highest_education","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":{"stage":"student_loans","stage_contract_sha256":"7c4c76398c2e80b41c7f941a5f06246b57d89b5eb0c36d42e3116ac35e82e203","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Content-bound UK FRS and donor fixture/source bundle.","name":"frs"}]} diff --git a/packages/microcosm-graph/tests/test_acceptance_h_parity.py b/packages/microcosm-graph/tests/test_acceptance_h_parity.py index 34522c4ecb..cb6053a114 100644 --- a/packages/microcosm-graph/tests/test_acceptance_h_parity.py +++ b/packages/microcosm-graph/tests/test_acceptance_h_parity.py @@ -43,7 +43,7 @@ #: was taken under). KERNEL_PARITY = PARITY / "kernels" -#: H2: ``uk_spine.json`` — the 29-stage FRS spine expressed as a graph — plus +#: H2: ``uk_spine.json`` — the 30-stage FRS spine expressed as a graph — plus #: ``sources/``, the data-only bundle both the graph and the legacy oracle #: rebuild their transforms from. The root transform's weights differ at the #: last bit between machines, so both sides recompute the root from the raw @@ -250,13 +250,13 @@ def test_h2_uk_spine_parity(tmp_path: Path) -> None: engine tier (``requires_uk``) and skips in the engine-free fast lane. Expects ``packages/microcosm-graph/tests/fixtures/parity/uk_spine/`` with - ``uk_spine.json`` and ``sources/``; both sides run the 29 transforms from + ``uk_spine.json`` and ``sources/``; both sides run the 30 transforms from those sources in this process, root included, because the root weights differ at the last bit between machines. Stage order comes from declared ``consumes``: the assertion below is that the compiled topological order is derived, so the hand-maintained ``_STAGE_NAMES`` tuple - in ``tools/build_uk_frs_spine.py`` — the 29 names intersected with a - 29-stage packaged manifest, kept in step by hand — can be deleted. + in ``tools/build_uk_frs_spine.py`` — the 30 names intersected with a + 30-stage packaged manifest, kept in step by hand — can be deleted. """ _require(UK_SPINE_PARITY, "the UK migration lane (charter H2, María reviews)") @@ -280,7 +280,7 @@ def test_h2_uk_spine_parity(tmp_path: Path) -> None: graph = uk_spine_graph() assert graph_from_json((UK_SPINE_PARITY / "uk_spine.json").read_text()) == graph compiled = compile_graph(graph) - assert len(compiled.order) >= 30, "a CREATE node plus the 29 spine stages" + assert len(compiled.order) >= 31, "a CREATE node plus the 30 spine stages" assert all( set(compiled.predecessors[node_id]) <= set(compiled.order[:index]) for index, node_id in enumerate(compiled.order) diff --git a/tools/build_uk_frs_spine.py b/tools/build_uk_frs_spine.py index 232e2bc36e..e1627525f9 100644 --- a/tools/build_uk_frs_spine.py +++ b/tools/build_uk_frs_spine.py @@ -57,6 +57,10 @@ UK_SPINE_GATE_SCOPE, uk_scoped_gate_manifest, ) +from microcosm.build.uk_runtime.cgt_asset_type import ( + CGT_ASSET_TYPE_DOMAIN, + uk_cgt_asset_type_stage_transform, +) from microcosm.build.uk_runtime.cgt_imputation import uk_cgt_spine_stage_transform from microcosm.build.uk_runtime.cgt_structure import ( UKCGTBandDonorStageTransform, @@ -210,11 +214,6 @@ def _parse_args(argv: list[str] | None = None) -> argparse.Namespace: type=Path, help="Pinned local HMRC collated ODS path.", ) - parser.add_argument( - "--cgt-ods", - type=Path, - help="Pinned local HMRC Capital Gains Tax Table 3 ODS path.", - ) parser.add_argument( "--synthetic-fixture-dir", type=Path, @@ -320,7 +319,6 @@ def _parse_args(argv: list[str] | None = None) -> argparse.Namespace: supplied.extend( flag for flag, value in ( - ("--cgt-ods", args.cgt_ods), ("--was-tab", args.was_tab), ("--lcfs-hh-tab", args.lcfs_hh_tab), ("--lcfs-person-tab", args.lcfs_person_tab), @@ -374,11 +372,6 @@ def _validate_args(args: argparse.Namespace) -> None: raise ValueError(f"--hmrc-ods must be an existing file: {args.hmrc_ods}") if args.hmrc_ods.suffix.lower() != ".ods": raise ValueError("--hmrc-ods must end with '.ods'.") - if args.cgt_ods is not None: - if not args.cgt_ods.is_file(): - raise ValueError(f"--cgt-ods must be an existing file: {args.cgt_ods}") - if args.cgt_ods.suffix.lower() != ".ods": - raise ValueError("--cgt-ods must end with '.ods'.") paths = { "spine_h5": args.spine_h5, "build_sidecar": args.spine_h5.with_suffix(".build.json"), @@ -434,7 +427,6 @@ def _synthetic_graph_sources(source: Path) -> dict[str, Path]: "etb": "etb", "spi": "spi_donor", "hmrc_income": "hmrc_income_targets", - "hmrc_cgt": "cgt_distribution", } resolved = {"frs": root} for role, name in names.items(): @@ -640,6 +632,11 @@ def _declared_seeds(stages) -> dict[str, dict[str, int]]: stage_seeds["stack_band_donor_households"] = seed elif operation.kind == "within_band_draws": stage_seeds["within_band_draws"] = seed + elif operation.kind in ( + "assign_residential_property_flag", + "assign_main_asset_type", + ): + stage_seeds[operation.kind] = seed elif operation.kind == "convert_donors_to_target_stock": stage_seeds[str(operation.parameters["salt"])] = seed elif operation.kind == "top_up_to_stock": @@ -1126,6 +1123,9 @@ def _spine_gate_artifacts(engine: object) -> dict[str, object]: # #791: ons_household_type is a frame column, not an engine variable, # so its enum_domain gate takes the declared domain as an artifact. "ons_household_type_enum_domain": CHRONICLE_ONS_HOUSEHOLD_TYPE_VALUE_IDS, + # #725: capital_gains_asset_type is likewise a frame column whose + # domain the asset-type stage declares. + "capital_gains_asset_type_enum_domain": CGT_ASSET_TYPE_DOMAIN, } @@ -1315,14 +1315,6 @@ def main(argv: list[str] | None = None) -> int: ) compiled_graph = compile_graph(graph) stage_names = _uk_spine_stage_names(spec) - if ( - args.synthetic_fixture_dir is None - and "hmrc_cgt_gains_spine" in stage_names - and args.cgt_ods is None - ): - raise ValueError( - "--cgt-ods is required when hmrc_cgt_gains_spine is scheduled." - ) if ( args.synthetic_fixture_dir is None and "was_wealth" in stage_names @@ -1537,10 +1529,13 @@ def main(argv: list[str] | None = None) -> int: stage=stages_by_name["cgt_band_donors"] ) if "hmrc_cgt_gains_spine" in stage_names: - implementations["hmrc_cgt_gains_spine"] = _GraphSourceTransform( - lambda sources: uk_cgt_spine_stage_transform( - stages_by_name["hmrc_cgt_gains_spine"], - sources["hmrc_cgt"], + implementations["hmrc_cgt_gains_spine"] = uk_cgt_spine_stage_transform( + stages_by_name["hmrc_cgt_gains_spine"] + ) + if "hmrc_cgt_asset_type_spine" in stage_names: + implementations["hmrc_cgt_asset_type_spine"] = ( + uk_cgt_asset_type_stage_transform( + stages_by_name["hmrc_cgt_asset_type_spine"] ) ) if "salary_sacrifice" in stage_names: @@ -1630,8 +1625,6 @@ def main(argv: list[str] | None = None) -> int: if "hmrc_spi_income_spine" in stage_names: graph_sources["spi"] = args.spi_tab graph_sources["hmrc_income"] = args.hmrc_ods - if "hmrc_cgt_gains_spine" in stage_names: - graph_sources["hmrc_cgt"] = args.cgt_ods graph_store = ContentStore(checkpoint_root / "node-graph") graph_manifest = run_graph( compiled_graph, diff --git a/tools/build_uk_ledger_compile_parity_signed_differences.py b/tools/build_uk_ledger_compile_parity_signed_differences.py index bc688c0a81..361b128e78 100644 --- a/tools/build_uk_ledger_compile_parity_signed_differences.py +++ b/tools/build_uk_ledger_compile_parity_signed_differences.py @@ -86,6 +86,45 @@ class ParityReceiptSpec: ), } +#: The nine incumbent banded CGT names per measure now map onto the Table +#: 2.1a fan-out (microcosm#467): the incumbent read uk-data's 2023-24 +#: size-of-gain CSV uprated by a national ratio; the current row binds the +#: published FY2024-25 individuals cell at identity. +_CGT_BAND_INCUMBENT_PREFIXES = ("hmrc/cgt_taxpayers_band_", "hmrc/capital_gains_band_") +_CGT_BAND_DRIFT_RATIONALE = ( + "Vintage and basis class: the incumbent banded CGT row reads uk-data's " + "2023-24 HMRC Table 2.1a size-of-gain CSV uprated by a national ratio, " + "while the current reference binds the published FY2024-25 individuals " + "cell for the same band at identity (Chronicle cgt_size_of_gain_2026), " + "measured in 2024 at calibration index 2025 like the national CGT " + "observations (microcosm#467, #725). The frozen incumbent fixture keeps " + "its historical value." +) +_CGT_NEW_ROW_PREFIXES = ( + "hmrc.cgt.taxpayers_by_age_band.", + "hmrc.cgt.gains_by_age_band.", + "hmrc.cgt.tax_by_age_band.", + "hmrc.cgt.taxpayers_by_region@", + "hmrc.cgt.gains_by_region@", + "hmrc/cgt_taxpayers_band_3000", + "hmrc/cgt_taxpayers_band_6000", + "hmrc/cgt_taxpayers_band_10000", + "hmrc/capital_gains_band_3000", + "hmrc/capital_gains_band_6000", + "hmrc/capital_gains_band_10000", + "hmrc.cgt.residential_property_taxpayers", + "hmrc.cgt.residential_property_gains", +) +_CGT_NEW_ROW_LEDGER_ONLY_RATIONALE = ( + "Declared ledger-only observation: HMRC CGT statistics 2026 release, " + "FY2024-25 individual rows by age band (Table 6), by country and region " + "on the individuals basis via the Table 1 share (Table 5), and the " + "size-of-gain bands the incumbent never carried (Table 2.1a), and the " + "residential property taxpayers and gains on the individuals basis via " + "the Table 8b share (Table 8a). The frozen incumbent fixture has no " + "equivalent row (microcosm#725, #467)." +) + _UC_PAID_WINDOW_NAMES = frozenset( {"dwp.uc.households"} | {f"dwp.uc.households_children_{i}" for i in (1, 2, 3, 4, "5_or_more")} @@ -497,6 +536,15 @@ def _add_signed_rationale_notes( continue elif name in _CGT_OBSERVED_RATIONALES: row["reason"] = _CGT_OBSERVED_RATIONALES[name] + elif ( + name.startswith(_CGT_BAND_INCUMBENT_PREFIXES) + and row.get("kind") == "calibration_drift" + ): + row["reason"] = _CGT_BAND_DRIFT_RATIONALE + elif ( + name.startswith(_CGT_NEW_ROW_PREFIXES) and row.get("kind") == "ledger_only" + ): + row["reason"] = _CGT_NEW_ROW_LEDGER_ONLY_RATIONALE elif name in _ONS_TERMINAL_BAND_RATIONALES: row["reason"] = _ONS_TERMINAL_BAND_RATIONALES[name] diff --git a/tools/build_uk_release_input_coverage_manifest.py b/tools/build_uk_release_input_coverage_manifest.py index 61fda0eea4..699d7ea413 100644 --- a/tools/build_uk_release_input_coverage_manifest.py +++ b/tools/build_uk_release_input_coverage_manifest.py @@ -801,6 +801,10 @@ def build_manifest( "hmrc_cgt_gains_spine": _cgt_spine_family_coverage_contract( candidate_source=candidate_source, ), + "hmrc_cgt_asset_type_spine": _source_stage_family_coverage_contract( + stage_name="hmrc_cgt_asset_type_spine", + candidate_source=candidate_source, + ), "salary_sacrifice": _source_stage_family_coverage_contract( stage_name="salary_sacrifice", candidate_source=candidate_source, @@ -898,12 +902,16 @@ def _cgt_family_coverage_contract( for operation in stage.get("operations", []) if isinstance(operation, dict) and isinstance(operation.get("kind"), str) } - required_artifacts = {"published_fact_surface", "policy_parameters"} + required_artifacts = { + "policy_parameters", + "cgt_conditioning_facts", + } missing_artifacts = sorted(required_artifacts - set(artifacts)) required_operations = { "verify_certified_candidate", - "verify_pinned_cgt_ods", + "verify_vendored_fact_resource", "taxable_income_proxy", + "rake_allocation_targets", "rank_preserving_allocation", "within_band_draws", "sub_aea_remainder", @@ -917,13 +925,18 @@ def _cgt_family_coverage_contract( f"missing_artifacts={missing_artifacts}, " f"missing_operations={missing_operations}." ) - surface = artifacts["published_fact_surface"] - verify = operations["verify_pinned_cgt_ods"] + surface = artifacts["cgt_conditioning_facts"] + verify = operations["verify_vendored_fact_resource"] fence = operations["classify_cgt_band_facts_with_reviewed_fence"] if not bool(verify.get("require_before_source_read")): raise ValueError( - f"{CGT_SOURCE_STAGES_PATH}: the pinned ODS must be verified before " - "it is read." + f"{CGT_SOURCE_STAGES_PATH}: the vendored resource must be checked " + "against the feed pin before it is read." + ) + if verify.get("resource") != surface.get("resource"): + raise ValueError( + f"{CGT_SOURCE_STAGES_PATH}: the verification must name the " + "cgt_conditioning_facts resource." ) if bool(fence.get("calibration_permitted", True)): raise ValueError( @@ -931,10 +944,10 @@ def _cgt_family_coverage_contract( "calibration_permitted false; promotion goes through a separately " "reviewed target profile." ) - if str(surface.get("sha256", "")) == "" or int(surface.get("size_bytes", 0)) <= 0: + if not bool(surface.get("runtime_sha256_required")): raise ValueError( - f"{CGT_SOURCE_STAGES_PATH}: published_fact_surface must pin sha256 " - "and size_bytes." + f"{CGT_SOURCE_STAGES_PATH}: cgt_conditioning_facts must require its " + "runtime sha256." ) return { "status": "required_at_build", @@ -954,8 +967,13 @@ def _cgt_family_coverage_contract( "base_candidate_sha256": str(base_candidate["sha256"]), "base_candidate_tier": base_candidate_tier, "source_vintages": { - "hmrc_surface": str(surface["vintage"]), - "mapped_build_period": str(surface["mapped_build_period"]), + "hmrc_surface": str(verify["source_vintage"]), + "mapped_build_period": str(verify["mapped_build_period"]), + "conditioning_surface": str(verify["source_vintage"]), + "conditioning_resource": str(surface["resource"]), + "conditioning_resource_sha256": _sha256( + UK_PACKAGE_DIR / str(surface["resource"]) + ), }, "output_weight_kind": str(stage["output_weight_kind"]), "required_mass_change_reason": str( @@ -1064,10 +1082,14 @@ def _cgt_spine_family_coverage_contract( for operation in stage.get("operations", []) if isinstance(operation, dict) and isinstance(operation.get("kind"), str) } - required_artifacts = {"cgt_published_fact_surface", "policy_parameters"} + required_artifacts = { + "policy_parameters", + "cgt_conditioning_facts", + } required_operations = { - "verify_pinned_cgt_ods", + "verify_vendored_fact_resource", "taxable_income_proxy", + "rake_allocation_targets", "rank_preserving_allocation", "within_band_draws", "sub_aea_remainder", @@ -1082,17 +1104,19 @@ def _cgt_spine_family_coverage_contract( f"missing_artifacts={missing_artifacts}, " f"missing_operations={missing_operations}." ) - surface = artifacts["cgt_published_fact_surface"] - verify = operations["verify_pinned_cgt_ods"] + surface = artifacts["cgt_conditioning_facts"] + verify = operations["verify_vendored_fact_resource"] fence = operations["classify_cgt_band_facts_with_reviewed_fence"] - if verify.get("artifact_role") != "cgt_published_fact_surface": - raise ValueError("Spine CGT verification must bind its distinct ODS role.") + if verify.get("artifact_role") != "cgt_conditioning_facts": + raise ValueError("Spine CGT verification must bind the vendored resource role.") + if verify.get("resource") != surface.get("resource"): + raise ValueError("Spine CGT verification must name the vendored resource.") if not bool(verify.get("require_before_source_read")): - raise ValueError("Spine CGT ODS must be verified before source read.") + raise ValueError("Spine CGT resource must be checked before source read.") if bool(fence.get("calibration_permitted", True)): raise ValueError("Spine CGT band facts must remain fenced from calibration.") - if str(surface.get("sha256", "")) == "" or int(surface.get("size_bytes", 0)) <= 0: - raise ValueError("Spine CGT surface must pin sha256 and size_bytes.") + if not bool(surface.get("runtime_sha256_required")): + raise ValueError("Spine CGT resource must require its runtime sha256.") return { "status": "required_at_build", "stage": "hmrc_cgt_gains_spine", @@ -1101,8 +1125,13 @@ def _cgt_spine_family_coverage_contract( "base_candidate_sha256": str(candidate_source["sha256"]), "base_candidate_tier": validate_uk_release_tier(candidate_source["tier"]), "source_vintages": { - "hmrc_surface": str(surface["vintage"]), - "mapped_build_period": str(surface["mapped_build_period"]), + "hmrc_surface": str(verify["source_vintage"]), + "mapped_build_period": str(verify["mapped_build_period"]), + "conditioning_surface": str(verify["source_vintage"]), + "conditioning_resource": str(surface["resource"]), + "conditioning_resource_sha256": _sha256( + UK_PACKAGE_DIR / str(surface["resource"]) + ), }, "output_weight_kind": "importance", "required_mass_change_reason": str( diff --git a/tools/generate_uk_target_references.py b/tools/generate_uk_target_references.py index de3f96073b..0705709693 100644 --- a/tools/generate_uk_target_references.py +++ b/tools/generate_uk_target_references.py @@ -127,6 +127,7 @@ def main() -> None: value_operation_by_target_id=_value_operation_by_target_id(contract), selector_pins_by_target_id=_selector_pins(contract), signed_exclusions_by_target_id=_signed_exclusions(contract), + signed_row_exclusions_by_target_id=_signed_row_exclusions(contract), reference_metadata_by_target_id=_reference_metadata(contract), binding_vocabulary=POLICYENGINE_BINDING_KEYS, source_fact_feed=args.source_fact_feed or str(args.ledger_facts), @@ -544,6 +545,7 @@ def _signed_exclusions(contract: Mapping[str, Any]) -> dict[str, str]: exclusions = { str(entry["target_id"]): str(entry["rationale"]) for entry in resource["exclusions"] + if "row" not in entry } return { target_id: rationale @@ -552,6 +554,50 @@ def _signed_exclusions(contract: Mapping[str, Any]) -> dict[str, str]: } +def _signed_row_exclusions( + contract: Mapping[str, Any], +) -> dict[str, dict[tuple[str, str], str]]: + """Row-level sign-outs from the same register: one fan-out row of a target. + + An entry carrying ``row: {dimension, value}`` signs out the fan-out row + whose selector pins that dimension value (the HMRC CGT age band 0-15, + which the frame cannot carry; the size-of-gain band below the annual + exempt amount) and leaves the target's other rows active. + """ + + target_ids = {str(target["target_id"]) for target in contract.get("targets", ())} + resource = _signed_exclusion_register() + rows: dict[str, dict[tuple[str, str], str]] = {} + for entry in resource["exclusions"]: + row = entry.get("row") + if row is None: + continue + target_id = str(entry["target_id"]) + if target_id not in target_ids: + continue + if not isinstance(row, Mapping) or set(row) != {"dimension", "value"}: + raise ValueError( + f"Signed exclusion for {target_id!r} declares a malformed row " + f"{row!r}; expected exactly dimension and value." + ) + key = (str(row["dimension"]), json.dumps(row["value"], sort_keys=True)) + rows.setdefault(target_id, {})[key] = str(entry["rationale"]) + return rows + + +def _signed_exclusion_register() -> dict[str, Any]: + return json.loads( + Path(__file__) + .resolve() + .parents[1] + .joinpath( + "packages/microcosm-build/src/microcosm/build/uk/" + "target_reference_signed_exclusions.json" + ) + .read_text() + ) + + def _reference_metadata(contract: Mapping[str, Any]) -> dict[str, dict[str, str]]: result = {} for target in contract.get("targets", ()): @@ -583,6 +629,33 @@ def _reference_metadata(contract: Mapping[str, Any]) -> dict[str, dict[str, str] return result +#: Contract-level naming rule for fan-out rows whose publisher band carries +#: no incumbent registry name: the row takes ``_``, +#: the same form as the incumbent banded names, so a published band the +#: incumbent never carried is authored rather than silently dropped. +FANOUT_ROW_NAMING_METRIC_BAND_LOWER = "metric_name_band_lower" + +_CGT_GAIN_BAND_VALUE = re.compile(r"^gain_(\d+)_(?:to_\d+|plus)$") + + +def _cgt_gain_band_lower(fact: Mapping[str, Any]) -> int | None: + """Lower edge of an HMRC CGT size-of-gain band value id, if the fact has one.""" + + dimensions = fact.get("dimensions") or {} + if not isinstance(dimensions, Mapping): + return None + value = dimensions.get("cgt_gain_band") + if not isinstance(value, str): + return None + match = _CGT_GAIN_BAND_VALUE.match(value) + if match is None: + raise ValueError( + f"Unrecognised HMRC CGT gain band value {value!r}; expected " + "gain__to_ or gain__plus." + ) + return int(match.group(1)) + + def _fanout_name( target: Mapping[str, Any], fact: Mapping[str, Any], @@ -591,7 +664,29 @@ def _fanout_name( target_id = str(target["target_id"]) value_id = str(fact.get("layout", {}).get("groupby_value_id") or "") preferred_tokens, fallback_tokens = _dimension_tokens(fact) + band_lower = _cgt_gain_band_lower(fact) candidates = inverse_mapping.get(target_id, ()) + if band_lower is not None: + # Incumbent banded names end in the band's lower edge; a substring + # match would let ``_band_50000`` claim ``_band_500000``. + suffix = f"_band_{band_lower}" + for candidate in candidates: + if candidate.endswith(suffix): + return candidate + naming = target.get("fanout_row_naming") + if naming == FANOUT_ROW_NAMING_METRIC_BAND_LOWER: + metric_name = str(target["bindings"]["policyengine"]["metric_name"]) + return f"{metric_name}_{band_lower}" + if naming is not None: + raise ValueError( + f"Unsupported fanout_row_naming {naming!r} on {target_id!r}." + ) + return None if candidates else f"{target_id}.{value_id or 'detail'}" + if target.get("fanout_row_naming") is not None: + raise ValueError( + f"{target_id!r} declares fanout_row_naming but its fact carries no " + "recognised band dimension; the row would otherwise be dropped." + ) for candidate in candidates: if value_id and value_id not in _GEOGRAPHY_VALUE_IDS and value_id in candidate: return candidate @@ -719,13 +814,36 @@ def _add_uk_membership_accounting( "(microcosm#929)." ), }, + { + "family": "hmrc_cgt", + "status": "active_with_row_level_signed_exclusions", + "active_reference_count": fanout_counts.get("hmrc_cgt", 0), + "signed_rationale": ( + "The FY2024-25 individual CGT observations fan out three ways " + "(microcosm#725, #467): Table 6 age bands as dimension rows " + "(the 0-15 band and the all-ages total are signed out row by " + "row), Table 5 country/region cells over the twelve-area " + "region tier restated on the individuals basis by the Table 1 " + "share through the scaled_by_ratio operation, and Table 2.1a " + "size-of-gain bands under the incumbent banded names (the " + "0-2,999 band below the 2024 annual exempt amount is signed " + "out). Chronicle's Table 2.1a package emits taxpayers and gains " + "only, although the published sheet also carries an amounts-of-" + "tax column, so liability binds nationally and by age band; a " + "liability-by-size-of-gain family becomes possible once Chronicle " + "emits that column." + ), + }, { "family": "ons_population", "status": "active_region_tier_fanout", "active_reference_count": sum( 1 for reference in references - if reference["metadata"]["contract_target_id"].endswith("_by_region") + if reference["metadata"]["contract_target_id"].startswith( + "ons.population." + ) + and reference["metadata"]["contract_target_id"].endswith("_by_region") ), "signed_rationale": ( "The nine ONS population-by-age-band targets fan out over the " @@ -757,6 +875,21 @@ def _add_uk_membership_accounting( ]["candidates"][0]["signed_rationale"], }, ] + for target_id, entry in sorted(report["targets"].items()): + if not str(target_id).startswith("hmrc.cgt."): + continue + for candidate in entry["candidates"]: + if candidate.get("status") != "signed_excluded": + continue + report["signed_exclusion_rationales"].append( + { + "family": "hmrc_cgt", + "target_id": target_id, + "row": candidate["name"], + "status": "signed_excluded", + "signed_rationale": candidate["signed_rationale"], + } + ) report["multi_fact_rationales"] = [] diff --git a/tools/graph_uk_spine_fixture.py b/tools/graph_uk_spine_fixture.py index 9315b47dc4..a29ce0310d 100644 --- a/tools/graph_uk_spine_fixture.py +++ b/tools/graph_uk_spine_fixture.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """Regenerate the hermetic charter-H2 UK spine parity fixture. -The oracle is the legacy :class:`microcosm.build.plan.StagePlan`: all 29 +The oracle is the legacy :class:`microcosm.build.plan.StagePlan`: all 30 stages are the current production transform classes. Private source files are replaced only through their supported parsed-input seams. The bundle's ``fixture.json`` is deliberately data-only so the graph's unbound UK registry @@ -27,6 +27,13 @@ from microcosm.build.country_spec import country_stage_plan, load_country_spec from microcosm.build.source_manifest import SourceManifest, SourceStageSpec from microcosm.build.uk_runtime.age_tail import UKAgeTailStageTransform +from microcosm.build.uk_runtime.cgt_asset_type import ( + CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES, + CGT_ASSET_TYPE_RESIDENTIAL, + HMRCCGTAssetTypeFacts, + HMRCCGTTable7Type, + UKCGTAssetTypeStageTransform, +) from microcosm.build.uk_runtime.cgt_imputation import ( UKCGTPolicyParameters, uk_cgt_policy_parameters, @@ -129,11 +136,11 @@ _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 = 29 +UK_FIXTURE_STAGE_COUNT = 30 _QRF_ESTIMATORS = 4 # These are the complete object-string surface observed in the unchanged -# legacy 29-stage output. Graph storage uses pandas StringDtype/python. +# legacy 30-stage output. Graph storage uses pandas StringDtype/python. _NORMALIZED_STRING_COLUMNS: Mapping[str, tuple[str, ...]] = { "person": ( "gender", @@ -151,6 +158,7 @@ "student_loan_plan", "relationship_to_head", "ons_family_role", + "capital_gains_asset_type", ), "benunit": ("benunit_support_channel", "uc_deduction_combination"), "household": ( @@ -808,11 +816,13 @@ def _cgt_distribution() -> HMRCCapitalGainsJointDistribution: band_totals=tuple(band_totals), income_totals=income_totals, source=HMRCCapitalGainsSourceProvenance( - local_path=Path("synthetic-cgt.ods"), - sha256="synthetic", - size_bytes=0, - sheet_name="synthetic", - source_vintage="2023-24", + resource="synthetic-cgt.json", + resource_sha256="synthetic", + source_commit="synthetic", + record_set_prefix="synthetic.", + source_file="synthetic.ods", + source_sha256="synthetic", + source_vintage="2024-25", build_period="2024", ), total_individuals=sum(value.individuals or 0.0 for value in band_totals), @@ -820,6 +830,89 @@ def _cgt_distribution() -> HMRCCapitalGainsJointDistribution: ) +#: Synthetic Table 7 shape for the fixture: medians spread like the published +#: mean gains per disposal, gains shares near the published ones. +_FIXTURE_TABLE7_ROWS: tuple[tuple[str, str, float, float], ...] = ( + ("listed_shares", "financial", 5_000.0, 6.0e9), + ("unlisted_shares", "financial", 120_000.0, 33.0e9), + ("other_financial_assets", "financial", 15_000.0, 16.0e9), + ( + "agricultural_commercial_industrial_land_buildings", + "non_financial", + 150_000.0, + 2.0e9, + ), + (CGT_ASSET_TYPE_RESIDENTIAL, "non_financial", 60_000.0, 10.0e9), + ("other_non_financial_assets", "non_financial", 140_000.0, 3.0e9), +) + + +def _cgt_asset_type_facts( + frame: Frame, parameters: UKCGTPolicyParameters +) -> HMRCCGTAssetTypeFacts: + """Synthetic Table 7/8 facts sized to the fixture frame after the redraw. + + The residential targets are a fixed share of the liable mass and of the + liable gains, so their mean is the population mean and the logistic + solve is always attainable on the tiny fixture; the data-only payload + the graph side reads is then exactly these numbers. + """ + + person = frame.table("person") + household = frame.table("household") + weights = pd.Series( + frame.weights_for("household").values, index=household["household_id"] + ) + person_weight = person["person_household_id"].map(weights).to_numpy(dtype=float) + gains = pd.to_numeric(person["capital_gains"], errors="raise").to_numpy(dtype=float) + liable = gains > parameters.annual_exempt_amount + liable_mass = float(person_weight[liable].sum()) + liable_gains = float((person_weight[liable] * gains[liable]).sum()) + if liable_mass <= 0.0 or liable_gains <= 0.0: + raise RuntimeError("The fixture frame has no liable gainers to classify.") + count = 0.3 * liable_mass + total_gains = 0.3 * liable_gains + rows = tuple( + HMRCCGTTable7Type( + asset_type=asset_type, + category=category, + disposals=type_gains / median, + proceeds=3.0 * type_gains, + gains=type_gains, + ) + for asset_type, category, median, type_gains in _FIXTURE_TABLE7_ROWS + ) + assert {row.asset_type for row in rows} == { + CGT_ASSET_TYPE_RESIDENTIAL, + *CGT_ASSET_TYPE_NON_RESIDENTIAL_TYPES, + } + return HMRCCGTAssetTypeFacts( + table8a_taxpayers_total=count, + table8a_gains_total=total_gains, + table8a_disposals_total=1.1 * count, + table8a_tax_total=0.2 * total_gains, + table8b_individuals_taxpayers=count, + table8b_individuals_gains=total_gains, + table8b_all_taxpayers=count, + table8b_all_gains=total_gains, + table7_types=rows, + table7_total_gains=sum(row.gains for row in rows), + table7_total_disposals=sum(row.disposals for row in rows), + resource="synthetic-cgt-asset-type.json", + resource_sha256="synthetic", + source_commit="synthetic", + ) + + +def _cgt_asset_type_facts_payload(facts: HMRCCGTAssetTypeFacts) -> dict[str, object]: + return { + **{ + key: value for key, value in facts.__dict__.items() if key != "table7_types" + }, + "table7_types": [dict(row.__dict__) for row in facts.table7_types], + } + + def _cgt_distribution_payload( distribution: HMRCCapitalGainsJointDistribution, ) -> dict[str, object]: @@ -827,10 +920,7 @@ def _cgt_distribution_payload( "cells": [value.__dict__ for value in distribution.cells], "band_totals": [value.__dict__ for value in distribution.band_totals], "income_totals": [value.__dict__ for value in distribution.income_totals], - "source": { - **distribution.source.__dict__, - "local_path": str(distribution.source.local_path), - }, + "source": dict(distribution.source.__dict__), "total_individuals": distribution.total_individuals, "total_gains": distribution.total_gains, } @@ -886,7 +976,7 @@ def _normalization_markdown() -> str: lines = [ "# UK spine parity string normalization", "", - "The unchanged legacy transforms retain these 25 textual table columns as", + "The unchanged legacy transforms retain these 26 textual table columns as", "pandas `object`. The frozen graph dtype token `string` is specified by", 'interface-freeze amendment 10 as pandas `StringDtype(storage="python")`.', "Before computing the legacy oracle's `uk_frame_content_identity` (live,", @@ -942,8 +1032,8 @@ def _normalize_legacy_strings(frame: Frame) -> Frame: for entity, columns in _NORMALIZED_STRING_COLUMNS.items() for column in columns ] - if observed != expected_order or len(observed) != 25: - raise RuntimeError("The legacy normalization audit is not exactly 25 cells.") + if observed != expected_order or len(observed) != 26: + raise RuntimeError("The legacy normalization audit is not exactly 26 cells.") return Frame( tables, frame.schema, @@ -1021,6 +1111,7 @@ def _build_implementations( income_targets: HMRCIncomeTargetSet, cgt_distribution: HMRCCapitalGainsJointDistribution, cgt_parameters: UKCGTPolicyParameters, + cgt_asset_type_facts: HMRCCGTAssetTypeFacts | None = None, ) -> tuple[dict[str, object], dict[str, Frame]]: engine = PolicyEngineUKEngine() contract = load_uk_take_up_contract() @@ -1129,10 +1220,14 @@ def capture_root(frame: Frame) -> Frame: ), "hmrc_cgt_gains_spine": uk_cgt_spine_stage_transform( stages["hmrc_cgt_gains_spine"], - "synthetic-cgt.ods", distribution=cgt_distribution, parameters=cgt_parameters, ), + "hmrc_cgt_asset_type_spine": UKCGTAssetTypeStageTransform( + stage=stages["hmrc_cgt_asset_type_spine"], + facts=cgt_asset_type_facts, + parameters=cgt_parameters, + ), "salary_sacrifice": UKSalarySacrificeStageTransform( stage=stages["salary_sacrifice"] ), @@ -1148,7 +1243,7 @@ def _run_legacy_plan( stages: Iterable[SourceStageSpec], implementations: Mapping[str, object], ) -> Frame: - """Run the legacy 29-stage StagePlan oracle and return its final frame.""" + """Run the legacy 30-stage StagePlan oracle and return its final frame.""" stages = tuple(stages) committed = load_country_spec("uk") @@ -1181,7 +1276,7 @@ def _run_legacy_plan( def legacy_oracle_frame(fixture: Path) -> Frame: """The legacy oracle's final frame on the fixture, computed live. - Rebuilds the same 29 transforms the graph's UK registry reconstructs from + Rebuilds the same 30 transforms the graph's UK registry reconstructs from ``fixture/sources``, runs them through the legacy StagePlan in this process, root included, and applies the one string normalization the fixture documents. The content identity is a byte-exact fingerprint of @@ -1238,7 +1333,7 @@ def generate(output: Path) -> None: _cgt_distribution_payload(cgt_distribution), ) - implementations, root_capture = _build_implementations( + build_kwargs = dict( stages=stage_map, raw_dir=raw_dir, was=was, @@ -1250,6 +1345,25 @@ def generate(output: Path) -> None: cgt_distribution=cgt_distribution, cgt_parameters=cgt_parameters, ) + # The asset-type facts are sized to the frame the amounts redraw leaves, + # so run the oracle up to that stage once, derive them, and only then + # run the full plan on fresh transforms. + implementations, _ = _build_implementations(**build_kwargs) + stage_names = [stage.stage for stage in stages] + prefix = stages[: stage_names.index("hmrc_cgt_asset_type_spine")] + prefix_names = {stage.stage for stage in prefix} + after_redraw = _run_legacy_plan( + prefix, + {name: impl for name, impl in implementations.items() if name in prefix_names}, + ) + cgt_asset_type_facts = _cgt_asset_type_facts(after_redraw, cgt_parameters) + _write_json( + sources / "cgt_asset_type_facts.json", + _cgt_asset_type_facts_payload(cgt_asset_type_facts), + ) + implementations, root_capture = _build_implementations( + **build_kwargs, cgt_asset_type_facts=cgt_asset_type_facts + ) final = _run_legacy_plan(stages, implementations) try: root_frame = root_capture["frame"] @@ -1260,7 +1374,7 @@ def generate(output: Path) -> None: descriptor = { "schema_version": "uk-spine-parity-fixture.v1", "description": ( - "Data-only inputs for reconstructing the same 29 current UK stage " + "Data-only inputs for reconstructing the same 30 current UK stage " "transform classes used by the legacy StagePlan oracle." ), "stages": {stage.stage: _stage_payload(stage) for stage in stages}, @@ -1279,6 +1393,7 @@ def generate(output: Path) -> None: "spi_donor": "spi_donor.csv", "hmrc_income_targets": "hmrc_income_targets.json", "cgt_distribution": "cgt_distribution.json", + "cgt_asset_type_facts": "cgt_asset_type_facts.json", }, "cgt_parameters": cgt_parameters.__dict__, } @@ -1296,7 +1411,7 @@ def generate(output: Path) -> None: _normalization_markdown(), encoding="utf-8" ) (output / "PRODUCED_BY.txt").write_text( - "tools/graph_uk_spine_fixture.py; current 29-transform legacy " + "tools/graph_uk_spine_fixture.py; current 30-transform legacy " "StagePlan oracle with parsed private-source seams. The acceptance " "test runs both sides from frs_raw in-process (root weights differ " "by one ulp between machines); the captured root tables serve the "