diff --git a/changelog.d/1359-lcfs-cross-fitted-gates.changed.md b/changelog.d/1359-lcfs-cross-fitted-gates.changed.md new file mode 100644 index 0000000000..95e95d9be9 --- /dev/null +++ b/changelog.d/1359-lcfs-cross-fitted-gates.changed.md @@ -0,0 +1,18 @@ +The LCFS consumption chain cross-fits its sign gates (`gate_calibration: cross_fitted` on its `fit_weighted_qrf_chain`). The in-sample gates had never seen the frame's households, and drew rare spending on them too rarely; now each spending is drawn at its donor rate. + +On the microcosm#1333 test spine, at prior weights, the share of households with each spending goes as follows (LCFS donors in brackets): +- solid fuels: 0.3% → 2.2% (2.5%); +- liquid fuels: 3.1% → 3.9% (4.5%); +- education: 4.3% → 6.7% (5.8%); +- tobacco: 8.2% → 11.2% (10.3%); +- gambling stakes: 14.6% → 16.7% (17.0%); +- betting and gaming: 2.0% → 2.6% (3.6%). + +The near-universal divisions' zeros are now drawn at their rate too. The twelve divisions' prior-weighted total falls 1.4%, and the seven divisions held at the shared frame-to-donor ratio fall with it. + +The excise inputs keep their national levels, but the multiples of spending change: +- tobacco duty is about 1.8 times the tobacco spending of the households that carry it, down from 2.2; +- the other gambling duties are 5.5 times betting and gaming stakes, down from 6.4; +- Lottery Duty is 0.61 times National Lottery stakes, up from 0.56. + +Every LCFS stage-health gate passes. diff --git a/changelog.d/1359-qrf-gate-calibration.added.md b/changelog.d/1359-qrf-gate-calibration.added.md new file mode 100644 index 0000000000..e71e7cc38f --- /dev/null +++ b/changelog.d/1359-qrf-gate-calibration.added.md @@ -0,0 +1,5 @@ +`RegimeGatedQRF` takes a `gate_calibration`, named by the new `GateCalibration` constants. The default, `in_sample`, is the sign gate as before, and its draws do not move. The gate is one boosted classifier, calibrated only on its own training rows. It memorises a rare class's training rows, so on every other row, every recipient included, it draws that class too rarely. + +`cross_fitted` fits a gate on each of five folds of the training rows, stratified by class. One weighted calibration (Platt scaling, for two classes) is fitted on the gates' out-of-fold scores and maps each of them, and a row's probability is the mean of the mapped gates. A rare class is then drawn at its rate on rows the gates were not fitted to. + +The forests and the draw uniforms are unchanged. A class with fewer rows than folds keeps the in-sample gate. A chain checkpoint names the calibration only when it is cross-fitted, so in-sample checkpoints are unchanged. diff --git a/changelog.d/1359-uk-excise-quantities.added.md b/changelog.d/1359-uk-excise-quantities.added.md new file mode 100644 index 0000000000..a10b7cde04 --- /dev/null +++ b/changelog.d/1359-uk-excise-quantities.added.md @@ -0,0 +1,6 @@ +The UK LCFS stage now writes policyengine-uk's excise inputs, so alcohol, tobacco and gambling duty no longer score zero on Microcosm data (#1359). The chain draws five shares on the donor, appended after its twenty targets so every existing draw is unchanged: tobacco within P602's off-trade lines, on-trade alcohol within P611, gambling stakes within P609, and within the stakes the National Lottery's share and the betting and gaming share of the rest. The new `level_excise_quantities` step then shares FY2024-25 national figures out to households in proportion to that spending, at prior weights: +- HMRC's alcohol clearances by product over the engine's strengths, with beer and cider draught shares from the draught-relief clearances; +- HMRC's tobacco clearances; +- each gambling duty's dutiable base: HMRC's receipts, or Machine Games Duty's liabilities, over the engine's rate. Lottery Duty's base follows the National Lottery stakes and every other base the betting and gaming stakes, so the society and Irish lotteries carry none. General Betting Duty's base is split by the Gambling Commission's gross gambling yield. + +No spending column moves, the VAT base included. `household_tax` rises by the three duties, about £24.8bn at FY2024-25 (£13.06bn alcohol, £8.17bn tobacco and £3.62bn gambling), so `household_net_income` falls by the same, and with it every net-income, decile and inequality output on the data; HBAI incomes do not move. The levels are national while spending and incidence stay at diary level, so a household's duty is one multiple of its own spending: about 2.2 times its tobacco spending, 0.56 times its National Lottery stakes and 6.4 times its betting and gaming stakes, against 0.41 times its alcohol spending. The stage notes give these and the other known biases: fewer households carry each duty than smoke or gamble, other tobacco includes e-cigarette refills, the draught shares are national, and alcohol volume follows spending, which leans it towards pub drinkers. The gambling inputs need policyengine-uk 2.151.0 or later. The new stage-health gate `uk_stage_lcfs_consumption_excise_quantities` recomputes every level from the vendored `excise_facts.json`. diff --git a/changelog.d/1359-uk-feed-repin-200bf6d.changed.md b/changelog.d/1359-uk-feed-repin-200bf6d.changed.md new file mode 100644 index 0000000000..61b1e55d8c --- /dev/null +++ b/changelog.d/1359-uk-feed-repin-200bf6d.changed.md @@ -0,0 +1,8 @@ +The UK Chronicle feed is re-pinned to `200bf6d` (PolicyEngine/chronicle#384), which adds the excise facts for #1359 and replaces the June 2026 ONS Consumer Trends edition with September's. + +The September revisions move these UK build values: +- **Household road fuel.** Calendar-2024 road fuel (COICOP 07.2.2) falls from £37.025bn to £35.460bn (−4.2%). This figure both sets the LCFS stage's petrol and diesel level and binds `ons.household_road_fuel_expenditure`, so household road-fuel spending and fuel duty fall with it. +- **Measured diagnostics.** The calendar-2025 electricity row moves from £26.5bn to £28.8bn and the gas row from £15.3bn to £19.0bn. +- **Report-only receipts.** The division capture and the uncarried liquid and solid fuels take the September values. + +No other compiled target moves on either surface. diff --git a/docs/evidence/spec-engine/us-f0-coverage.json b/docs/evidence/spec-engine/us-f0-coverage.json index 52fe0adb4f..eaf1afac87 100644 --- a/docs/evidence/spec-engine/us-f0-coverage.json +++ b/docs/evidence/spec-engine/us-f0-coverage.json @@ -1656,13 +1656,13 @@ "compiler_ir.node_slices" ], "expected": { - "map_sha256": "0db599df419dd16779097361dc72afdefb8df2abf8b134078da9c52d31d8e017", - "protocol_sha256": "2b7bdc1d6b0da1bdaf54b4cac29f10f2d3c8bed2e177729c2c89e6b33a099cc5" + "map_sha256": "54223ee7d55283c8b2c6127ecece8ba6e76b8da0b72946b3cac88a1ba8fa7883", + "protocol_sha256": "72d918a0cda5ccc95dee3aaabaa4ad1cbabbf4f282abc5046b49b5f183dc0dc9" }, "failures": [], "observed": { - "map_sha256": "0db599df419dd16779097361dc72afdefb8df2abf8b134078da9c52d31d8e017", - "protocol_sha256": "2b7bdc1d6b0da1bdaf54b4cac29f10f2d3c8bed2e177729c2c89e6b33a099cc5" + "map_sha256": "54223ee7d55283c8b2c6127ecece8ba6e76b8da0b72946b3cac88a1ba8fa7883", + "protocol_sha256": "72d918a0cda5ccc95dee3aaabaa4ad1cbabbf4f282abc5046b49b5f183dc0dc9" }, "status": "covered" }, @@ -1677,7 +1677,7 @@ "compiler_ir.seed_stream_map" ], "expected": { - "implementation_sha256": "2b7bdc1d6b0da1bdaf54b4cac29f10f2d3c8bed2e177729c2c89e6b33a099cc5", + "implementation_sha256": "72d918a0cda5ccc95dee3aaabaa4ad1cbabbf4f282abc5046b49b5f183dc0dc9", "protocol": "legacy-v1", "streams": [ "build_model", @@ -1698,7 +1698,7 @@ }, "failures": [], "observed": { - "implementation_sha256": "2b7bdc1d6b0da1bdaf54b4cac29f10f2d3c8bed2e177729c2c89e6b33a099cc5", + "implementation_sha256": "72d918a0cda5ccc95dee3aaabaa4ad1cbabbf4f282abc5046b49b5f183dc0dc9", "protocol": "legacy-v1", "streams": [ "build_model", @@ -2599,7 +2599,7 @@ "country": "us", "schema_id": "country_spec", "schema_version": 1, - "spec_sha256": "19460fc168a6f9ed44e580d0e36777cce78bb33cb52b75630ee86203fa795684" + "spec_sha256": "08fbb11e05114797f0b8977fd0cfd1f7afb5196f51c9dc4ad4941b8f0aa2154e" } }, "report_schema_version": 3, @@ -2609,7 +2609,7 @@ "country": "us", "schema_id": "country_spec", "schema_version": 1, - "spec_sha256": "19460fc168a6f9ed44e580d0e36777cce78bb33cb52b75630ee86203fa795684" + "spec_sha256": "08fbb11e05114797f0b8977fd0cfd1f7afb5196f51c9dc4ad4941b8f0aa2154e" }, "status": "pass" } diff --git a/docs/evidence/uk-excise-quantities-1359/README.md b/docs/evidence/uk-excise-quantities-1359/README.md new file mode 100644 index 0000000000..d6342ce4d2 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/README.md @@ -0,0 +1,49 @@ +# Excise quantities: measurement scripts and outputs + +Evidence for microcosm#1359, behind `experiments/1359-excise-quantities-receipts.md`. `receipts.json` holds the digests of the files here and of the spine the stage runs used. + +## What was measured + +- **Stage-only runs** (`scripts/stage_dev_run.py`, `scripts/run_stage_dev.sh`). The `lcfs_consumption` stage was re-run on a finished spine: microcosm#1333's `spine-b145-treat.h5`, 78,440 households. Both runs used policyengine-uk 2.151.0, and every LCFS stage-health gate ran on each run's receipts. The two runs: + - `outputs/stage_dev_run.base-74a2a378e.json`: microcosm#1383's head `74a2a378e`, the branch base, on the `abf0921` feed; + - `outputs/stage_dev_run.head-restack.json`: the branch head on the `200bf6d` feed, with the excise step declared. + + `outputs/stage_dev_run.comparison.json` (`scripts/compare_runs.py`) lists which of the base's 22 columns the head leaves byte-identical (13), and each other column's prior-weighted total in both runs. The other nine move through the re-pin, not the step: + - petrol and diesel, by exactly the Consumer Trends revision (−4.227%); + - the seven divisions #1383 holds at the shared frame-to-donor ratio, which the lower road fuel lowers (−0.149% each). + + The head adds the 24 excise inputs. + + A third run, `outputs/stage_dev_run.head-split.json`, is the head once the gambling stakes are split (Vahid's review): Lottery Duty's base follows the National Lottery stakes and every other gambling base the betting and gaming stakes. `outputs/stage_dev_run.split-comparison.json` sets it against the restacked head: 33 of the 46 columns are byte-identical, and only the 13 gambling inputs move. The run also records the share of households with each written column positive, at prior weights. +- **The national reconciliation** (`scripts/national_reconciliation.py`, `outputs/national_reconciliation.json`). One household holds every national level the committed declaration resolves to, run through policyengine-uk 2.151.0. Every duty is linear in its inputs, so this is the frame's duty at prior weights. Each OBR row is read through its own binding's variables against the value the national compile-parity receipt records from the pinned feed. Public figures only. +- **Who carries the duty** (`scripts/excise_incidence.py`, `outputs/excise_incidence.json`). From the split run, the reconciliation and the LCFS 2024-25 donor: + - each duty over the spending that shares it out, and the share of households that carry it; + - the share of donors and of frame households with each parent total and each part positive, and each part's rate within its parent, which shows where the frame loses incidence. + + Every donor share rests on 30 or more donors, which the script checks. +- **The pub lean of the spending rule** (`scripts/alcohol_channel_weights.py`, `outputs/alcohol_channel_weights.json`). Measured on the LCFS 2024-25 donor at survey weights: how far allocating alcohol volume by spending moves it, against channel weights for published on-trade volume shares of 20 to 35 percent, overall and by equivalised income decile. +- **The re-pin** (`scripts/repin_200bf6d.sh`). The commands that regenerated the vendored resources, the national and local references and membership, the local census, both compile-parity receipts and the coverage manifest. They ran on the national and local cuts of the pinned artifact that the runbook entry describes. + +## What is not here + +- **Unit records.** Household dumps, the spine and the LCFS tabs stay out of the repository. +- **Column digests.** The runs record the sha256 of every column they write. `scripts/sanitize_outputs.py` drops those digests, with any donor minimum or maximum, before an output is copied here; the comparison keeps only the verdicts. +- **Small cells.** Every count in the receipts is a band ("30+") or withheld ("<10"), so no figure here rests on fewer than ten households. + +## Re-running + +The stage runs need the licensed LCFS 2024-25 tabs and the spine: + +```bash +BASE_LABEL=base-74a2a378e HEAD_LABEL=head-restack scripts/run_stage_dev.sh +``` + +The reconciliation needs only the tree and its locked engine. The incidence script reads the split run, the reconciliation and the LCFS household tab: + +```bash +python scripts/national_reconciliation.py outputs/national_reconciliation.json +``` + +```bash +python scripts/excise_incidence.py outputs/stage_dev_run.head-split.json outputs/national_reconciliation.json outputs/excise_incidence.json +``` diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/alcohol_channel_weights.json b/docs/evidence/uk-excise-quantities-1359/outputs/alcohol_channel_weights.json new file mode 100644 index 0000000000..a24227f36f --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/alcohol_channel_weights.json @@ -0,0 +1,206 @@ +{ + "by_v": { + "0.2": { + "decile_share_channel": { + "1": 0.05256630738429888, + "10": 0.16251924953110025, + "2": 0.05326023979493307, + "3": 0.06982855194468635, + "4": 0.09022999346372193, + "5": 0.07847780743163882, + "6": 0.09008038971165136, + "7": 0.10645365490133937, + "8": 0.13757646695267162, + "9": 0.15900733888395843 + }, + "decile_spending_over_channel": { + "1": 0.8991829846472777, + "10": 1.1084215139898075, + "2": 0.9144419252310921, + "3": 0.8971043041743317, + "4": 0.9373556351590888, + "5": 0.9717899833896708, + "6": 1.0460821810658767, + "7": 1.0282597684462984, + "8": 0.9898997927959324, + "9": 1.0095420211358075 + }, + "pub_pound_overallocation": 2.148346081898008, + "share_of_national_volume_moved": 0.1633070937520641, + "shop_pound_allocation": 0.7129134795254979 + }, + "0.25": { + "decile_share_channel": { + "1": 0.05141256586374622, + "10": 0.166355328080157, + "2": 0.05226819487693822, + "3": 0.06826433329272477, + "4": 0.08899944095014692, + "5": 0.07799584030385238, + "6": 0.09098410264597774, + "7": 0.10710858717419604, + "8": 0.13727395561821207, + "9": 0.15933765119404866 + }, + "decile_spending_over_channel": { + "1": 0.9193614123630119, + "10": 1.0828618157090257, + "2": 0.9317979381345949, + "3": 0.9176606799222224, + "4": 0.9503160012090827, + "5": 0.9777950578305806, + "6": 1.0356918164867368, + "7": 1.0219723126502438, + "8": 0.992081240150249, + "9": 1.0074492065710414 + }, + "pub_pound_overallocation": 1.7186768655184064, + "share_of_national_volume_moved": 0.12775442014469934, + "shop_pound_allocation": 0.7604410448271978 + }, + "0.27": { + "decile_share_channel": { + "1": 0.05095106925552516, + "10": 0.16788975949977966, + "2": 0.05187137690974029, + "3": 0.06763864583194015, + "4": 0.08850721994471691, + "5": 0.0778030534527378, + "6": 0.09134558781970831, + "7": 0.1073705600833387, + "8": 0.1371529510844282, + "9": 0.15946977611808477 + }, + "decile_spending_over_channel": { + "1": 0.9276886600485714, + "10": 1.0729649810355817, + "2": 0.9389262271000718, + "3": 0.9261494480461296, + "4": 0.9556010558959604, + "5": 0.9802179194262256, + "6": 1.0315932360829085, + "7": 1.019478807357914, + "8": 0.9929565135365738, + "9": 1.006614508278182 + }, + "pub_pound_overallocation": 1.5913674680725984, + "share_of_national_volume_moved": 0.11353335070175342, + "shop_pound_allocation": 0.7812750460553403 + }, + "0.3": { + "decile_share_channel": { + "1": 0.05025882434319356, + "10": 0.17019140662921373, + "2": 0.05127614995894338, + "3": 0.06670011464076324, + "4": 0.08776888843657192, + "5": 0.07751387317606594, + "6": 0.09188781558030412, + "7": 0.10776351944705269, + "8": 0.1369714442837525, + "9": 0.15966796350413892 + }, + "decile_spending_over_channel": { + "1": 0.9404662720110231, + "10": 1.0584543378868112, + "2": 0.9498255281518766, + "3": 0.9391812119248586, + "4": 0.9636397855797082, + "5": 0.9838748091870372, + "6": 1.025505829534886, + "7": 1.0157612808191105, + "8": 0.9942723232728629, + "9": 1.0053650510058427 + }, + "pub_pound_overallocation": 1.4322307212653387, + "share_of_national_volume_moved": 0.0922017465373346, + "shop_pound_allocation": 0.8147582623148548 + }, + "0.35": { + "decile_share_channel": { + "1": 0.04910508282264091, + "10": 0.17402748517827046, + "2": 0.05028410504094855, + "3": 0.06513589598880169, + "4": 0.08653833592299691, + "5": 0.07703190604827953, + "6": 0.09279152851463054, + "7": 0.10841845171990935, + "8": 0.1366689329492929, + "9": 0.15999827581422915 + }, + "decile_spending_over_channel": { + "1": 0.9625628641421781, + "10": 1.0351228855213166, + "2": 0.9685644435092743, + "3": 0.9617353619363558, + "4": 0.9773424914115045, + "5": 0.9900306391568691, + "6": 1.0155182488018917, + "7": 1.0096252879712762, + "8": 0.9964731061489618, + "9": 1.003289500811369 + }, + "pub_pound_overallocation": 1.2276263325131476, + "share_of_national_volume_moved": 0.05664907292996989, + "shop_pound_allocation": 0.8774319748006129 + } + }, + "deciles": { + "1": { + "on_trade_share_of_its_alcohol_spending": 0.3100381371801737, + "share_of_volume_spending_weights": 0.0472667291657001, + "support": "30+" + }, + "10": { + "on_trade_share_of_its_alcohol_spending": 0.534037558606296, + "share_of_volume_spending_weights": 0.18013983261774946, + "support": "30+" + }, + "2": { + "on_trade_share_of_its_alcohol_spending": 0.32983874112325107, + "share_of_volume_spending_weights": 0.04870339621634823, + "support": "30+" + }, + "3": { + "on_trade_share_of_its_alcohol_spending": 0.30728862922647476, + "share_of_volume_spending_weights": 0.06264349450383902, + "support": "30+" + }, + "4": { + "on_trade_share_of_its_alcohol_spending": 0.35836160645506054, + "share_of_volume_spending_weights": 0.0845775928335875, + "support": "30+" + }, + "5": { + "on_trade_share_of_its_alcohol_spending": 0.3986957944955206, + "share_of_volume_spending_weights": 0.07626394718045007, + "support": "30+" + }, + "6": { + "on_trade_share_of_its_alcohol_spending": 0.47667220643505265, + "share_of_volume_spending_weights": 0.09423149054082841, + "support": "30+" + }, + "7": { + "on_trade_share_of_its_alcohol_spending": 0.45899327098154097, + "share_of_volume_spending_weights": 0.10946201053911338, + "support": "30+" + }, + "8": { + "on_trade_share_of_its_alcohol_spending": 0.4187824898318171, + "share_of_volume_spending_weights": 0.13618691613004608, + "support": "30+" + }, + "9": { + "on_trade_share_of_its_alcohol_spending": 0.43975417772508696, + "share_of_volume_spending_weights": 0.16052459027233767, + "support": "30+" + } + }, + "drinking_households_share": 0.6013231787655217, + "households": 4995, + "off_trade_only_share_of_drinkers": 0.4842431550469689, + "on_trade_only_share_of_drinkers": 0.17136932314633915, + "on_trade_share_of_alcohol_spending": 0.4296692163796016 +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/excise_incidence.json b/docs/evidence/uk-excise-quantities-1359/outputs/excise_incidence.json new file mode 100644 index 0000000000..66d7ae2421 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/excise_incidence.json @@ -0,0 +1,78 @@ +{ + "incidence": { + "betting_and_gaming": { + "donor_positive": 0.035838439975528005, + "donor_rate_within_parent": 0.46450448799454047, + "frame_positive": 0.019563867703070097, + "frame_rate_within_parent": 0.466385750470268, + "parent": "other_gambling_stakes" + }, + "gambling_stakes": { + "donor_positive": 0.17031459280906752, + "donor_rate_within_parent": 0.1751019221960336, + "frame_positive": 0.14629307418887494, + "frame_rate_within_parent": 0.14779666533001104, + "parent": "recreation" + }, + "national_lottery": { + "donor_positive": 0.11424026447367308, + "donor_rate_within_parent": 0.6707602830119378, + "frame_positive": 0.10681009830639804, + "frame_rate_within_parent": 0.7301104231940501, + "parent": "gambling_stakes" + }, + "other_gambling_stakes": { + "donor_positive": 0.0771541306958249, + "donor_rate_within_parent": 0.45300951270992457, + "frame_positive": 0.041947824699496886, + "frame_rate_within_parent": 0.28673828157674236, + "parent": "gambling_stakes" + }, + "tobacco": { + "donor_positive": 0.10336413849687878, + "donor_rate_within_parent": 0.18929547031982005, + "frame_positive": 0.08163306670501938, + "frame_rate_within_parent": 0.1548156913128009, + "parent": "alcohol_and_tobacco" + } + }, + "multiples": { + "alcohol": { + "carrying_share": 0.576136105053031, + "duty": 13062476800.0, + "duty_over_spending": 0.4086255087088696, + "spending": 31966865801.58295 + }, + "betting_and_gaming": { + "bases_over_spending": 34.197707062499674, + "carrying_share": 0.019563867703070097, + "duty": 2687416960.0, + "duty_over_spending": 6.352034826741068, + "spending": 423079695.45229775 + }, + "national_lottery": { + "bases_over_spending": 4.664037411892696, + "carrying_share": 0.10681009830639804, + "duty": 931886976.0, + "duty_over_spending": 0.5596844750128998, + "spending": 1665022021.5211823 + }, + "tobacco": { + "carrying_share": 0.08163306670501938, + "duty": 8166694912.0, + "duty_over_spending": 2.2187698892678007, + "spending": 3680730909.276504 + } + }, + "parents_positive": { + "alcohol_and_tobacco": { + "donor": 0.5460465499900349, + "frame": 0.527291943166678 + }, + "recreation": { + "donor": 0.9726597553760349, + "frame": 0.9898266233694869 + } + }, + "weights": "frame at prior weights; donor at its survey weights" +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/national_reconciliation.json b/docs/evidence/uk-excise-quantities-1359/outputs/national_reconciliation.json new file mode 100644 index 0000000000..8a61154e49 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/national_reconciliation.json @@ -0,0 +1,99 @@ +{ + "duties": { + "alcohol_duty": 13062476800.0, + "beer_duty": 3761580544.0, + "bingo_duty": 25233000.0, + "cider_duty": 288421984.0, + "gambling_duty": 3619303936.0, + "gaming_duty": 165396992.0, + "general_betting_duty": 713858112.0, + "household_tax": 24848474112.0, + "lottery_duty": 931886976.0, + "machine_games_duty": 612264960.0, + "other_fermented_duty": 298430528.0, + "pool_betting_duty": 8125000.5, + "remote_gaming_duty": 1162539008.0, + "sparkling_cider_duty": 0.0, + "spirits_duty": 4204673536.0, + "tobacco_duty": 8166694912.0, + "wine_duty": 4509370368.0 + }, + "national_levels": { + "beer_draught_share": 0.3972504238069507, + "beer_litres": 4631940882.095249, + "betting_exchange_commission": 123949909.1922428, + "bingo_net_receipts": 252330000.0, + "cider_draught_share": 0.23257594494574382, + "cider_litres": 674388250.8241311, + "cigarettes_per_week": 261113666.03291157, + "cigars_grams_per_week": 7598518.917797942, + "hand_rolling_tobacco_grams_per_week": 77470743.97904557, + "horse_and_dog_pool_betting_net_losses": 55219132.22492455, + "land_based_casino_net_losses": 702361489.1692535, + "land_based_fixed_odds_betting_net_losses": 1527826124.9133615, + "machine_games_higher_rate_net_takings": 2384000.0, + "machine_games_lower_rate_net_takings": 138420000.0, + "machine_games_standard_rate_net_takings": 3023740000.0, + "national_lottery_ticket_spending": 7765725000.0, + "other_fermented_litres": 239435846.48703998, + "other_tobacco_grams_per_week": 5797406.910050115, + "pool_betting_net_receipts": 54166666.66666667, + "remote_gaming_net_losses": 5535900000.0, + "remote_other_betting_net_losses": 2163978657.2782593, + "remote_uk_horseracing_betting_net_losses": 888079509.7245454, + "spirits_litres": 330123776.919805, + "wine_litres": 1266891770.4008167 + }, + "rows": { + "obr.beer_and_cider_duties": { + "engine": 4050002528.0, + "gap": 0.08115390496529629, + "measurement_period": 2024, + "obr": 3746000000.0, + "variables": [ + "beer_duty", + "cider_duty", + "sparkling_cider_duty" + ] + }, + "obr.betting_and_gaming_duties": { + "engine": 3619303936.0, + "gap": 0.000913699115044242, + "measurement_period": 2024, + "obr": 3616000000.0, + "variables": [ + "gambling_duty" + ] + }, + "obr.spirits_duties": { + "engine": 4204673536.0, + "gap": 0.02228872744955024, + "measurement_period": 2024, + "obr": 4113000000.0, + "variables": [ + "spirits_duty" + ] + }, + "obr.tobacco_duties": { + "engine": 8166694912.0, + "gap": 0.030237783776964733, + "measurement_period": 2024, + "obr": 7927000000.0, + "variables": [ + "tobacco_duty" + ] + }, + "obr.wine_duties": { + "engine": 4807800896.0, + "gap": 0.02599250874946657, + "measurement_period": 2024, + "obr": 4686000000.0, + "variables": [ + "wine_duty", + "other_fermented_duty" + ] + } + }, + "three_duties": 24848475648.0, + "year": 2024 +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.base-74a2a378e.json b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.base-74a2a378e.json new file mode 100644 index 0000000000..c6c651b911 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.base-74a2a378e.json @@ -0,0 +1,89 @@ +{ + "excise_quantities": null, + "excise_shares": null, + "fit_weight_records": [ + "uk_lcfs_2024_25_consumption:food_and_non_alcoholic_beverages_consumption", + "uk_lcfs_2024_25_consumption:alcohol_and_tobacco_consumption", + "uk_lcfs_2024_25_consumption:clothing_and_footwear_consumption", + "uk_lcfs_2024_25_consumption:housing_water_and_electricity_consumption", + "uk_lcfs_2024_25_consumption:household_furnishings_consumption", + "uk_lcfs_2024_25_consumption:health_consumption", + "uk_lcfs_2024_25_consumption:transport_consumption", + "uk_lcfs_2024_25_consumption:communication_consumption", + "uk_lcfs_2024_25_consumption:recreation_consumption", + "uk_lcfs_2024_25_consumption:education_consumption", + "uk_lcfs_2024_25_consumption:restaurants_and_hotels_consumption", + "uk_lcfs_2024_25_consumption:miscellaneous_consumption", + "uk_lcfs_2024_25_consumption:petrol_spending", + "uk_lcfs_2024_25_consumption:diesel_spending", + "uk_lcfs_2024_25_consumption:bus_fare_spending", + "uk_lcfs_2024_25_consumption:domestic_energy_consumption", + "uk_lcfs_2024_25_consumption:electricity_consumption", + "uk_lcfs_2024_25_consumption:gas_consumption", + "uk_lcfs_2024_25_consumption:liquid_fuel_consumption", + "uk_lcfs_2024_25_consumption:solid_fuel_consumption", + "uk_lcfs_2024_25_consumption:road_fuel_total", + "uk_lcfs_2024_25_consumption:petrol_share_of_road_fuel", + "uk_lcfs_2024_25_consumption:uses_energy_prepayment_meter", + "uk_lcfs_2024_25_consumption:gas_payer", + "uk_lcfs_2024_25_consumption:gas_payer_amount" + ], + "gates": { + "uk_stage_lcfs_consumption_basis": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_bus_pricing": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_energy_rake": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_recomposed_totals": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_road_fuel_incidence": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_road_fuel_level": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_support": { + "failures": [], + "passed": true + } + }, + "households": 78440, + "seconds": 79.0, + "spine": "spine-b145-treat.h5", + "tree": "populace-1359-base", + "weighted_totals": { + "alcohol_and_tobacco_consumption": 19959355984.09308, + "bus_fare_spending": 4213319387.928007, + "clothing_and_footwear_consumption": 29970951716.317703, + "communication_consumption": 24840636328.75895, + "diesel_spending": 10919430829.919106, + "domestic_energy_consumption": 48755237020.280426, + "education_consumption": 15900314839.150047, + "electricity_consumption": 29553493457.817688, + "food_and_non_alcoholic_beverages_consumption": 113906273128.46979, + "gas_consumption": 19201743562.462746, + "has_fuel_consumption": 21441113.692121513, + "health_consumption": 21599671689.87272, + "household_furnishings_consumption": 73854994938.5559, + "housing_water_and_electricity_consumption": 179339989499.86584, + "liquid_fuel_consumption": 1864608748.4273286, + "miscellaneous_consumption": 90503958600.04283, + "petrol_spending": 25936800863.379646, + "recreation_consumption": 148919519664.83423, + "restaurants_and_hotels_consumption": 84473828227.43405, + "solid_fuel_consumption": 114067143.27247077, + "transport_consumption": 175692353853.51312, + "uses_energy_prepayment_meter": 3446619.8864751486 + } +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.comparison.json b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.comparison.json new file mode 100644 index 0000000000..86ae43578b --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.comparison.json @@ -0,0 +1,111 @@ +{ + "differing_columns": { + "communication_consumption": { + "base_weighted_total": 24840636328.75895, + "head_weighted_total": 24803521172.601994 + }, + "diesel_spending": { + "base_weighted_total": 10919430829.919106, + "head_weighted_total": 10457880276.270939 + }, + "education_consumption": { + "base_weighted_total": 15900314839.150047, + "head_weighted_total": 15876557691.370522 + }, + "health_consumption": { + "base_weighted_total": 21599671689.87272, + "head_weighted_total": 21567398958.325157 + }, + "household_furnishings_consumption": { + "base_weighted_total": 73854994938.5559, + "head_weighted_total": 73744645926.80603 + }, + "miscellaneous_consumption": { + "base_weighted_total": 90503958600.04283, + "head_weighted_total": 90368733861.36032 + }, + "petrol_spending": { + "base_weighted_total": 25936800863.379646, + "head_weighted_total": 24840485040.255028 + }, + "recreation_consumption": { + "base_weighted_total": 148919519664.83423, + "head_weighted_total": 148697014445.80408 + }, + "transport_consumption": { + "base_weighted_total": 175692353853.51312, + "head_weighted_total": 175429846522.27753 + } + }, + "fit_weight_records": [ + 25, + 28 + ], + "gates": { + "base": { + "uk_stage_lcfs_consumption_basis": true, + "uk_stage_lcfs_consumption_bus_pricing": true, + "uk_stage_lcfs_consumption_energy_rake": true, + "uk_stage_lcfs_consumption_recomposed_totals": true, + "uk_stage_lcfs_consumption_road_fuel_incidence": true, + "uk_stage_lcfs_consumption_road_fuel_level": true, + "uk_stage_lcfs_consumption_support": true + }, + "head": { + "uk_stage_lcfs_consumption_basis": true, + "uk_stage_lcfs_consumption_bus_pricing": true, + "uk_stage_lcfs_consumption_energy_rake": true, + "uk_stage_lcfs_consumption_excise_quantities": true, + "uk_stage_lcfs_consumption_recomposed_totals": true, + "uk_stage_lcfs_consumption_road_fuel_incidence": true, + "uk_stage_lcfs_consumption_road_fuel_level": true, + "uk_stage_lcfs_consumption_support": true + } + }, + "head_only_columns": [ + "beer_litres", + "cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", + "beer_draught_share", + "cider_draught_share", + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week", + "remote_gaming_net_losses", + "pool_betting_net_receipts", + "bingo_net_receipts", + "national_lottery_ticket_spending", + "land_based_casino_net_losses", + "machine_games_lower_rate_net_takings", + "machine_games_standard_rate_net_takings", + "machine_games_higher_rate_net_takings", + "land_based_fixed_odds_betting_net_losses", + "remote_uk_horseracing_betting_net_losses", + "remote_other_betting_net_losses", + "betting_exchange_commission", + "horse_and_dog_pool_betting_net_losses" + ], + "households": [ + 78440, + 78440 + ], + "identical_columns": [ + "food_and_non_alcoholic_beverages_consumption", + "alcohol_and_tobacco_consumption", + "clothing_and_footwear_consumption", + "housing_water_and_electricity_consumption", + "restaurants_and_hotels_consumption", + "bus_fare_spending", + "domestic_energy_consumption", + "electricity_consumption", + "gas_consumption", + "liquid_fuel_consumption", + "solid_fuel_consumption", + "has_fuel_consumption", + "uses_energy_prepayment_meter" + ], + "shared_columns": 22 +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.head-restack.json b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.head-restack.json new file mode 100644 index 0000000000..0c28e22815 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.head-restack.json @@ -0,0 +1,1236 @@ +{ + "excise_quantities": { + "alcohol_volume_weights": { + "rule": "spending" + }, + "components": { + "gambling_stakes": { + "positive_share": 0.14629307418887494, + "weighted_total": 2272999752.204708 + }, + "off_trade_alcohol_spending": { + "positive_share": 0.4643342302308529, + "weighted_total": 16278625074.816578 + }, + "on_trade_alcohol_spending": { + "positive_share": 0.3036569993531277, + "weighted_total": 15688240726.766373 + }, + "tobacco_spending": { + "positive_share": 0.08163306670501938, + "weighted_total": 3680730909.276504 + } + }, + "draught_shares": { + "beer_draught_share": { + "denominator": [ + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all" + }, + "geography_id": "K02000001", + "published": 185277635.28381, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.total_clearances" + } + ], + "numerator": [ + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "draught_relief_only" + }, + "geography_id": "K02000001", + "published": 64367298.8324578, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_draught_relief_only" + }, + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief" + }, + "geography_id": "K02000001", + "published": 9234320.30598535, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_draught_and_small_producer_relief" + } + ], + "share": 0.3972504238069507 + }, + "cider_draught_share": { + "denominator": [ + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "all" + }, + "geography_id": "K02000001", + "published": 30347471.2870859, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.total_clearances" + } + ], + "numerator": [ + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "draught_relief_only" + }, + "geography_id": "K02000001", + "published": 6706864.9848297, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_draught_relief_only" + }, + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief" + }, + "geography_id": "K02000001", + "published": 351226.826478132, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_draught_and_small_producer_relief" + } + ], + "share": 0.23257594494574382 + } + }, + "fiscal_start": "2024-04-01", + "geography_id": "K02000001", + "keys": { + "alcohol": { + "positive_share": 0.576136105053031 + }, + "gambling": { + "positive_share": 0.14629307418887494 + }, + "tobacco": { + "positive_share": 0.08163306670501938 + } + }, + "operation": "level_excise_quantities", + "outputs": { + "beer_litres": { + "annual_level": 4631940882.095249, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.14489818647988575, + "frame_annual_total": 4631940882.095249, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 185277635.28381, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.beer_abv", + "value": 0.04 + }, + "unit": "litre_of_pure_alcohol" + }, + "betting_exchange_commission": { + "annual_level": 123949909.1922428, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 0.05453142221947756, + "frame_annual_total": 123949909.1922428, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.026045076722312304, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "bingo_net_receipts": { + "annual_level": 252330000.0, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "bingo_duty" + }, + "factor": 0.1110118906767373, + "frame_annual_total": 252330000.0, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 25233000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.bingo.rate", + "value": 0.1 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.bingo_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "cider_litres": { + "annual_level": 674388250.8241311, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.021096477052521566, + "frame_annual_total": 674388250.824131, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 30347471.2870859, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.cider_abv", + "value": 0.045 + }, + "unit": "litre_of_pure_alcohol" + }, + "cigarettes_per_week": { + "annual_level": 13577910633.711401, + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "cigarettes" + }, + "factor": 3.688916948394991, + "frame_annual_total": 13577910633.711401, + "geography_id": "K02000001", + "key": "tobacco", + "key_total": 3680730909.276504, + "positive_share": 0.08163306670501938, + "published": 13577910633.711401, + "share": 1.0, + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.cigarettes", + "stored_per": "week", + "strength": null, + "unit": "stick" + }, + "cigars_grams_per_week": { + "annual_level": 395122983.72549295, + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "cigars" + }, + "factor": 0.10734905470260513, + "frame_annual_total": 395122983.7254929, + "geography_id": "K02000001", + "key": "tobacco", + "key_total": 3680730909.276504, + "positive_share": 0.08163306670501938, + "published": 395122.98372549296, + "share": 1.0, + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.cigars", + "stored_per": "week", + "strength": null, + "unit": "kilogram" + }, + "hand_rolling_tobacco_grams_per_week": { + "annual_level": 4028478686.91037, + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "hand_rolling_tobacco" + }, + "factor": 1.0944779138179976, + "frame_annual_total": 4028478686.91037, + "geography_id": "K02000001", + "key": "tobacco", + "key_total": 3680730909.276504, + "positive_share": 0.08163306670501938, + "published": 4028478.68691037, + "share": 1.0, + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.hand_rolling_tobacco", + "stored_per": "week", + "strength": null, + "unit": "kilogram" + }, + "horse_and_dog_pool_betting_net_losses": { + "annual_level": 55219132.22492455, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 0.024293505607013138, + "frame_annual_total": 55219132.22492454, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.011602965623049235, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "land_based_casino_net_losses": { + "annual_level": 702361489.1692535, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "gaming_duty" + }, + "factor": 0.3090020086838964, + "frame_annual_total": 702361489.1692535, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 165397000.0, + "rate": { + "parameter_path": "household.consumption.gambling.casino_effective_rate", + "value": 0.235487 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.gaming_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "land_based_fixed_odds_betting_net_losses": { + "annual_level": 1527826124.9133615, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 0.6721629086987091, + "frame_annual_total": 1527826124.9133615, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.3210357224223924, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "machine_games_higher_rate_net_takings": { + "annual_level": 2384000.0, + "concept": "hmrc.machine_games_duty_liabilities", + "dimensions": { + "mgd_rate": "higher_rate" + }, + "factor": 0.0010488342542438144, + "frame_annual_total": 2384000.0, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 596000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.higher", + "value": 0.25 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.higher_rate_liabilities", + "stored_per": "year", + "unit": "gbp" + }, + "machine_games_lower_rate_net_takings": { + "annual_level": 138420000.0, + "concept": "hmrc.machine_games_duty_liabilities", + "dimensions": { + "mgd_rate": "lower_rate" + }, + "factor": 0.06089749893977718, + "frame_annual_total": 138420000.0, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 6921000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.lower", + "value": 0.05 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.lower_rate_liabilities", + "stored_per": "year", + "unit": "gbp" + }, + "machine_games_standard_rate_net_takings": { + "annual_level": 3023740000.0, + "concept": "hmrc.machine_games_duty_liabilities", + "dimensions": { + "mgd_rate": "standard_rate" + }, + "factor": 1.3302861107077146, + "frame_annual_total": 3023740000.0000005, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 604748000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.standard", + "value": 0.2 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.standard_rate_liabilities", + "stored_per": "year", + "unit": "gbp" + }, + "national_lottery_ticket_spending": { + "annual_level": 7765725000.0, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "lottery_duty" + }, + "factor": 3.4165093913748095, + "frame_annual_total": 7765725000.0, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 931887000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.lottery.rate", + "value": 0.12 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.lottery_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "other_fermented_litres": { + "annual_level": 239435846.48703998, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "other_fermented_products", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.007490125806302333, + "frame_annual_total": 239435846.48703998, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 11971792.324352, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.other_fermented_abv", + "value": 0.05 + }, + "unit": "litre_of_pure_alcohol" + }, + "other_tobacco_grams_per_week": { + "annual_level": 301465159.32260597, + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "other" + }, + "factor": 0.08190361282940482, + "frame_annual_total": 301465159.32260597, + "geography_id": "K02000001", + "key": "tobacco", + "key_total": 3680730909.276504, + "positive_share": 0.08163306670501938, + "published": 301465.159322606, + "share": 1.0, + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.other", + "stored_per": "week", + "strength": null, + "unit": "kilogram" + }, + "pool_betting_net_receipts": { + "annual_level": 54166666.66666667, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "pool_betting_duty" + }, + "factor": 0.023830476274415528, + "frame_annual_total": 54166666.66666667, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 8125000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.pool_betting.rate", + "value": 0.15 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.pool_betting_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "remote_gaming_net_losses": { + "annual_level": 5535900000.0, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "remote_gaming_duty" + }, + "factor": 2.43550400506222, + "frame_annual_total": 5535900000.0, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 1162539000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.remote_gaming.rate", + "value": 0.21 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.remote_gaming_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "remote_other_betting_net_losses": { + "annual_level": 2163978657.2782593, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 0.9520364686266669, + "frame_annual_total": 2163978657.278259, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.45470779705731235, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "remote_uk_horseracing_betting_net_losses": { + "annual_level": 888079509.7245454, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 0.3907081419006526, + "frame_annual_total": 888079509.7245452, + "geography_id": "K02000001", + "key": "gambling", + "key_total": 2272999752.204708, + "positive_share": 0.14629307418887494, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.18660843817493364, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "spirits_litres": { + "annual_level": 330123776.919805, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "spirits", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.01032706111912472, + "frame_annual_total": 330123776.919805, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 132049510.767922, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024.spirits.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.spirits_abv", + "value": 0.4 + }, + "unit": "litre_of_pure_alcohol" + }, + "wine_litres": { + "annual_level": 1266891770.4008167, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "wine", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.039631403912550045, + "frame_annual_total": 1266891770.400817, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 152027012.448098, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024.wine.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.wine_abv", + "value": 0.12 + }, + "unit": "litre_of_pure_alcohol" + } + }, + "period_type": "fiscal_year", + "period_value": 2024, + "resource": "excise_facts.json", + "weeks_per_year": 52 + }, + "excise_shares": { + "gambling_stakes_share_of_recreation": { + "donor": { + "clipped_at_one": "<10", + "denominator": [ + "p609" + ], + "numerator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315", + "c94316", + "c94319" + ], + "positive_share": 0.17031459280906752, + "positive_support": "30+", + "share_of_denominator": 0.01525742406937271, + "total": "recreation_consumption" + }, + "frame": { + "draws_outside_unit_interval": 0, + "positive_share": 0.14629307418887494, + "share_of_total": 0.01528611560007584 + }, + "total": "recreation_consumption" + }, + "on_trade_alcohol_share_of_restaurants_and_hotels": { + "donor": { + "clipped_at_one": "<10", + "denominator": [ + "p611" + ], + "numerator": [ + "cb111c", + "cb111d", + "cb111e", + "cb111f", + "cb111g", + "cb111h", + "cb111i", + "cb111j" + ], + "positive_share": 0.310136545477233, + "positive_support": "30+", + "share_of_denominator": 0.13899575634777211, + "total": "restaurants_and_hotels_consumption" + }, + "frame": { + "draws_outside_unit_interval": 0, + "positive_share": 0.3036569993531277, + "share_of_total": 0.18571717484530195 + }, + "total": "restaurants_and_hotels_consumption" + }, + "tobacco_share_of_alcohol_and_tobacco": { + "donor": { + "clipped_at_one": 0, + "denominator": [ + "c21111", + "c21211", + "c21212", + "c21213", + "c21214", + "c21221", + "c21311", + "c22111", + "c22121", + "c22131" + ], + "numerator": [ + "c22111", + "c22121", + "c22131" + ], + "positive_share": 0.10336413849687878, + "positive_support": "30+", + "share_of_denominator": 0.2056073057933273, + "total": "alcohol_and_tobacco_consumption", + "total_beside_lines": "<10" + }, + "frame": { + "draws_outside_unit_interval": 0, + "positive_share": 0.08163306670501938, + "share_of_total": 0.18441130626709198 + }, + "total": "alcohol_and_tobacco_consumption" + } + }, + "fit_weight_records": [ + "uk_lcfs_2024_25_consumption:food_and_non_alcoholic_beverages_consumption", + "uk_lcfs_2024_25_consumption:alcohol_and_tobacco_consumption", + "uk_lcfs_2024_25_consumption:clothing_and_footwear_consumption", + "uk_lcfs_2024_25_consumption:housing_water_and_electricity_consumption", + "uk_lcfs_2024_25_consumption:household_furnishings_consumption", + "uk_lcfs_2024_25_consumption:health_consumption", + "uk_lcfs_2024_25_consumption:transport_consumption", + "uk_lcfs_2024_25_consumption:communication_consumption", + "uk_lcfs_2024_25_consumption:recreation_consumption", + "uk_lcfs_2024_25_consumption:education_consumption", + "uk_lcfs_2024_25_consumption:restaurants_and_hotels_consumption", + "uk_lcfs_2024_25_consumption:miscellaneous_consumption", + "uk_lcfs_2024_25_consumption:petrol_spending", + "uk_lcfs_2024_25_consumption:diesel_spending", + "uk_lcfs_2024_25_consumption:bus_fare_spending", + "uk_lcfs_2024_25_consumption:domestic_energy_consumption", + "uk_lcfs_2024_25_consumption:electricity_consumption", + "uk_lcfs_2024_25_consumption:gas_consumption", + "uk_lcfs_2024_25_consumption:liquid_fuel_consumption", + "uk_lcfs_2024_25_consumption:solid_fuel_consumption", + "uk_lcfs_2024_25_consumption:tobacco_share_of_alcohol_and_tobacco", + "uk_lcfs_2024_25_consumption:on_trade_alcohol_share_of_restaurants_and_hotels", + "uk_lcfs_2024_25_consumption:gambling_stakes_share_of_recreation", + "uk_lcfs_2024_25_consumption:road_fuel_total", + "uk_lcfs_2024_25_consumption:petrol_share_of_road_fuel", + "uk_lcfs_2024_25_consumption:uses_energy_prepayment_meter", + "uk_lcfs_2024_25_consumption:gas_payer", + "uk_lcfs_2024_25_consumption:gas_payer_amount" + ], + "gates": { + "uk_stage_lcfs_consumption_basis": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_bus_pricing": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_energy_rake": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_excise_quantities": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_recomposed_totals": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_road_fuel_incidence": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_road_fuel_level": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_support": { + "failures": [], + "passed": true + } + }, + "households": 78440, + "seconds": 97.9, + "spine": "spine-b145-treat.h5", + "tree": "populace-1359", + "weighted_totals": { + "alcohol_and_tobacco_consumption": 19959355984.09308, + "beer_draught_share": 11509311.287968487, + "beer_litres": 4631940882.095249, + "betting_exchange_commission": 123949909.1922428, + "bingo_net_receipts": 252330000.0, + "bus_fare_spending": 4213319387.928007, + "cider_draught_share": 6738290.982352255, + "cider_litres": 674388250.8241313, + "cigarettes_per_week": 261113666.03291157, + "cigars_grams_per_week": 7598518.917797941, + "clothing_and_footwear_consumption": 29970951716.317703, + "communication_consumption": 24803521172.601994, + "diesel_spending": 10457880276.270939, + "domestic_energy_consumption": 48755237020.280426, + "education_consumption": 15876557691.370522, + "electricity_consumption": 29553493457.817688, + "food_and_non_alcoholic_beverages_consumption": 113906273128.46979, + "gas_consumption": 19201743562.462746, + "hand_rolling_tobacco_grams_per_week": 77470743.97904557, + "has_fuel_consumption": 21441113.692121513, + "health_consumption": 21567398958.325157, + "horse_and_dog_pool_betting_net_losses": 55219132.22492454, + "household_furnishings_consumption": 73744645926.80603, + "housing_water_and_electricity_consumption": 179339989499.86584, + "land_based_casino_net_losses": 702361489.1692535, + "land_based_fixed_odds_betting_net_losses": 1527826124.9133615, + "liquid_fuel_consumption": 1864608748.4273286, + "machine_games_higher_rate_net_takings": 2383999.9999999995, + "machine_games_lower_rate_net_takings": 138420000.0, + "machine_games_standard_rate_net_takings": 3023740000.0000005, + "miscellaneous_consumption": 90368733861.36032, + "national_lottery_ticket_spending": 7765725000.0, + "other_fermented_litres": 239435846.48703998, + "other_tobacco_grams_per_week": 5797406.910050116, + "petrol_spending": 24840485040.255028, + "pool_betting_net_receipts": 54166666.66666667, + "recreation_consumption": 148697014445.80408, + "remote_gaming_net_losses": 5535900000.0, + "remote_other_betting_net_losses": 2163978657.2782593, + "remote_uk_horseracing_betting_net_losses": 888079509.7245452, + "restaurants_and_hotels_consumption": 84473828227.43405, + "solid_fuel_consumption": 114067143.27247077, + "spirits_litres": 330123776.919805, + "transport_consumption": 175429846522.27753, + "uses_energy_prepayment_meter": 3446619.8864751486, + "wine_litres": 1266891770.400817 + } +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.head-split.json b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.head-split.json new file mode 100644 index 0000000000..996afc9bd1 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.head-split.json @@ -0,0 +1,1356 @@ +{ + "excise_quantities": { + "alcohol_volume_weights": { + "rule": "spending" + }, + "components": { + "betting_and_gaming_stakes": { + "positive_share": 0.019563867703070097, + "weighted_total": 423079695.45229775 + }, + "gambling_stakes": { + "positive_share": 0.14629307418887494, + "weighted_total": 2272999752.204708 + }, + "national_lottery_stakes": { + "positive_share": 0.10681009830639804, + "weighted_total": 1665022021.5211823 + }, + "off_trade_alcohol_spending": { + "positive_share": 0.4643342302308529, + "weighted_total": 16278625074.816578 + }, + "on_trade_alcohol_spending": { + "positive_share": 0.3036569993531277, + "weighted_total": 15688240726.766373 + }, + "other_gambling_stakes": { + "positive_share": 0.041947824699496886, + "weighted_total": 607977730.6835256 + }, + "tobacco_spending": { + "positive_share": 0.08163306670501938, + "weighted_total": 3680730909.276504 + } + }, + "draught_shares": { + "beer_draught_share": { + "denominator": [ + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all" + }, + "geography_id": "K02000001", + "published": 185277635.28381, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.total_clearances" + } + ], + "numerator": [ + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "draught_relief_only" + }, + "geography_id": "K02000001", + "published": 64367298.8324578, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_draught_relief_only" + }, + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief" + }, + "geography_id": "K02000001", + "published": 9234320.30598535, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_draught_and_small_producer_relief" + } + ], + "share": 0.3972504238069507 + }, + "cider_draught_share": { + "denominator": [ + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "all" + }, + "geography_id": "K02000001", + "published": 30347471.2870859, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.total_clearances" + } + ], + "numerator": [ + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "draught_relief_only" + }, + "geography_id": "K02000001", + "published": 6706864.9848297, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_draught_relief_only" + }, + { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief" + }, + "geography_id": "K02000001", + "published": 351226.826478132, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_draught_and_small_producer_relief" + } + ], + "share": 0.23257594494574382 + } + }, + "fiscal_start": "2024-04-01", + "geography_id": "K02000001", + "keys": { + "alcohol": { + "positive_share": 0.576136105053031 + }, + "betting_and_gaming": { + "positive_share": 0.019563867703070097 + }, + "national_lottery": { + "positive_share": 0.10681009830639804 + }, + "tobacco": { + "positive_share": 0.08163306670501938 + } + }, + "operation": "level_excise_quantities", + "outputs": { + "beer_litres": { + "annual_level": 4631940882.095249, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.14489818647988575, + "frame_annual_total": 4631940882.095249, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 185277635.28381, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.beer_abv", + "value": 0.04 + }, + "unit": "litre_of_pure_alcohol" + }, + "betting_exchange_commission": { + "annual_level": 123949909.1922428, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 0.2929705928329481, + "frame_annual_total": 123949909.1922428, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.026045076722312304, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "bingo_net_receipts": { + "annual_level": 252330000.0, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "bingo_duty" + }, + "factor": 0.5964124554127893, + "frame_annual_total": 252330000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 25233000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.bingo.rate", + "value": 0.1 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.bingo_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "cider_litres": { + "annual_level": 674388250.8241311, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.021096477052521566, + "frame_annual_total": 674388250.824131, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 30347471.2870859, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.cider_abv", + "value": 0.045 + }, + "unit": "litre_of_pure_alcohol" + }, + "cigarettes_per_week": { + "annual_level": 13577910633.711401, + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "cigarettes" + }, + "factor": 3.688916948394991, + "frame_annual_total": 13577910633.711401, + "geography_id": "K02000001", + "key": "tobacco", + "key_total": 3680730909.276504, + "positive_share": 0.08163306670501938, + "published": 13577910633.711401, + "share": 1.0, + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.cigarettes", + "stored_per": "week", + "strength": null, + "unit": "stick" + }, + "cigars_grams_per_week": { + "annual_level": 395122983.72549295, + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "cigars" + }, + "factor": 0.10734905470260513, + "frame_annual_total": 395122983.7254929, + "geography_id": "K02000001", + "key": "tobacco", + "key_total": 3680730909.276504, + "positive_share": 0.08163306670501938, + "published": 395122.98372549296, + "share": 1.0, + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.cigars", + "stored_per": "week", + "strength": null, + "unit": "kilogram" + }, + "hand_rolling_tobacco_grams_per_week": { + "annual_level": 4028478686.91037, + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "hand_rolling_tobacco" + }, + "factor": 1.0944779138179976, + "frame_annual_total": 4028478686.91037, + "geography_id": "K02000001", + "key": "tobacco", + "key_total": 3680730909.276504, + "positive_share": 0.08163306670501938, + "published": 4028478.68691037, + "share": 1.0, + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.hand_rolling_tobacco", + "stored_per": "week", + "strength": null, + "unit": "kilogram" + }, + "horse_and_dog_pool_betting_net_losses": { + "annual_level": 55219132.22492455, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 0.13051709363147754, + "frame_annual_total": 55219132.22492455, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.011602965623049235, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "land_based_casino_net_losses": { + "annual_level": 702361489.1692535, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "gaming_duty" + }, + "factor": 1.6601162776634473, + "frame_annual_total": 702361489.1692535, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 165397000.0, + "rate": { + "parameter_path": "household.consumption.gambling.casino_effective_rate", + "value": 0.235487 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.gaming_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "land_based_fixed_odds_betting_net_losses": { + "annual_level": 1527826124.9133615, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 3.611201722361134, + "frame_annual_total": 1527826124.9133615, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.3210357224223924, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "machine_games_higher_rate_net_takings": { + "annual_level": 2384000.0, + "concept": "hmrc.machine_games_duty_liabilities", + "dimensions": { + "mgd_rate": "higher_rate" + }, + "factor": 0.0056348721662271214, + "frame_annual_total": 2384000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 596000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.higher", + "value": 0.25 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.higher_rate_liabilities", + "stored_per": "year", + "unit": "gbp" + }, + "machine_games_lower_rate_net_takings": { + "annual_level": 138420000.0, + "concept": "hmrc.machine_games_duty_liabilities", + "dimensions": { + "mgd_rate": "lower_rate" + }, + "factor": 0.32717240153068716, + "frame_annual_total": 138420000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 6921000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.lower", + "value": 0.05 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.lower_rate_liabilities", + "stored_per": "year", + "unit": "gbp" + }, + "machine_games_standard_rate_net_takings": { + "annual_level": 3023740000.0, + "concept": "hmrc.machine_games_duty_liabilities", + "dimensions": { + "mgd_rate": "standard_rate" + }, + "factor": 7.146974984860569, + "frame_annual_total": 3023740000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 604748000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.standard", + "value": 0.2 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.standard_rate_liabilities", + "stored_per": "year", + "unit": "gbp" + }, + "national_lottery_ticket_spending": { + "annual_level": 7765725000.0, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "lottery_duty" + }, + "factor": 4.664037411892696, + "frame_annual_total": 7765725000.000001, + "geography_id": "K02000001", + "key": "national_lottery", + "key_total": 1665022021.5211823, + "positive_share": 0.10681009830639804, + "published": 931887000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.lottery.rate", + "value": 0.12 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.lottery_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "other_fermented_litres": { + "annual_level": 239435846.48703998, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "other_fermented_products", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.007490125806302333, + "frame_annual_total": 239435846.48703998, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 11971792.324352, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.other_fermented_abv", + "value": 0.05 + }, + "unit": "litre_of_pure_alcohol" + }, + "other_tobacco_grams_per_week": { + "annual_level": 301465159.32260597, + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "other" + }, + "factor": 0.08190361282940482, + "frame_annual_total": 301465159.32260597, + "geography_id": "K02000001", + "key": "tobacco", + "key_total": 3680730909.276504, + "positive_share": 0.08163306670501938, + "published": 301465.159322606, + "share": 1.0, + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.other", + "stored_per": "week", + "strength": null, + "unit": "kilogram" + }, + "pool_betting_net_receipts": { + "annual_level": 54166666.66666667, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "pool_betting_duty" + }, + "factor": 0.12802946406766044, + "frame_annual_total": 54166666.66666668, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 8125000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.pool_betting.rate", + "value": 0.15 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.pool_betting_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "remote_gaming_net_losses": { + "annual_level": 5535900000.0, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "remote_gaming_duty" + }, + "factor": 13.084768802439902, + "frame_annual_total": 5535900000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 1162539000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.remote_gaming.rate", + "value": 0.21 + }, + "share": 1.0, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.remote_gaming_duty_receipts", + "stored_per": "year", + "unit": "gbp" + }, + "remote_other_betting_net_losses": { + "annual_level": 2163978657.2782593, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 5.114825127603525, + "frame_annual_total": 2163978657.2782593, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.45470779705731235, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "remote_uk_horseracing_betting_net_losses": { + "annual_level": 888079509.7245454, + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty" + }, + "factor": 2.0990832679293074, + "frame_annual_total": 888079509.7245454, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 423079695.45229775, + "positive_share": 0.019563867703070097, + "published": 713858000.0, + "rate": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "remote_horse_racing_share": 0.29097725571746264, + "share": 0.18660843817493364, + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "split_by": { + "exchange": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 101354147.86830999, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange" + }, + "over_the_counter": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 1249307207.97355, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter" + }, + "pools_non_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote" + }, + "geography_id": "K03000001", + "published": 21233797.52638, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting" + }, + "pools_remote": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 23919023.715339996, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting" + }, + "remote_all_events": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2620948697.1002502, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote" + }, + "remote_fixed_odds": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 2495675525.5166, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting" + }, + "remote_horses": { + "concept": "gambling_commission.gross_gambling_yield", + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote" + }, + "geography_id": "K03000001", + "published": 762636459.2584901, + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses" + } + }, + "stored_per": "year", + "unit": "gbp" + }, + "spirits_litres": { + "annual_level": 330123776.919805, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "spirits", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.01032706111912472, + "frame_annual_total": 330123776.919805, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 132049510.767922, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024.spirits.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.spirits_abv", + "value": 0.4 + }, + "unit": "litre_of_pure_alcohol" + }, + "wine_litres": { + "annual_level": 1266891770.4008167, + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "wine", + "duty_point": "all", + "duty_relief": "all" + }, + "factor": 0.039631403912550045, + "frame_annual_total": 1266891770.400817, + "geography_id": "K02000001", + "key": "alcohol", + "key_total": 31966865801.58295, + "positive_share": 0.576136105053031, + "published": 152027012.448098, + "share": 1.0, + "source_record_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024.wine.total_clearances", + "stored_per": "year", + "strength": { + "parameter_path": "household.consumption.alcohol.wine_abv", + "value": 0.12 + }, + "unit": "litre_of_pure_alcohol" + } + }, + "period_type": "fiscal_year", + "period_value": 2024, + "resource": "excise_facts.json", + "weeks_per_year": 52 + }, + "excise_shares": { + "betting_and_gaming_share_of_other_gambling_stakes": { + "donor": { + "clipped_at_one": 0, + "denominator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315" + ], + "numerator": [ + "c94311", + "c94312", + "c94314" + ], + "positive_share": 0.035838439975528005, + "positive_support": "30+", + "share_of_denominator": 0.7286000798018258, + "total": "other_gambling_stakes" + }, + "frame": { + "draws_outside_unit_interval": 0, + "positive_share": 0.019563867703070097, + "share_of_total": 0.6958802503779963 + }, + "total": "other_gambling_stakes" + }, + "gambling_stakes_share_of_recreation": { + "donor": { + "clipped_at_one": "<10", + "denominator": [ + "p609" + ], + "numerator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315", + "c94316", + "c94319" + ], + "positive_share": 0.17031459280906752, + "positive_support": "30+", + "share_of_denominator": 0.01525742406937271, + "total": "recreation_consumption" + }, + "frame": { + "draws_outside_unit_interval": 0, + "positive_share": 0.14629307418887494, + "share_of_total": 0.01528611560007584 + }, + "total": "recreation_consumption" + }, + "national_lottery_share_of_gambling_stakes": { + "donor": { + "clipped_at_one": 0, + "denominator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315", + "c94316", + "c94319" + ], + "numerator": [ + "c94316", + "c94319" + ], + "positive_share": 0.11424026447367308, + "positive_support": "30+", + "share_of_denominator": 0.5123176004819209, + "total": "gambling_stakes" + }, + "frame": { + "draws_outside_unit_interval": 0, + "positive_share": 0.10681009830639804, + "share_of_total": 0.7325218667121215 + }, + "total": "gambling_stakes" + }, + "on_trade_alcohol_share_of_restaurants_and_hotels": { + "donor": { + "clipped_at_one": "<10", + "denominator": [ + "p611" + ], + "numerator": [ + "cb111c", + "cb111d", + "cb111e", + "cb111f", + "cb111g", + "cb111h", + "cb111i", + "cb111j" + ], + "positive_share": 0.310136545477233, + "positive_support": "30+", + "share_of_denominator": 0.13899575634777211, + "total": "restaurants_and_hotels_consumption" + }, + "frame": { + "draws_outside_unit_interval": 0, + "positive_share": 0.3036569993531277, + "share_of_total": 0.18571717484530195 + }, + "total": "restaurants_and_hotels_consumption" + }, + "tobacco_share_of_alcohol_and_tobacco": { + "donor": { + "clipped_at_one": 0, + "denominator": [ + "c21111", + "c21211", + "c21212", + "c21213", + "c21214", + "c21221", + "c21311", + "c22111", + "c22121", + "c22131" + ], + "numerator": [ + "c22111", + "c22121", + "c22131" + ], + "positive_share": 0.10336413849687878, + "positive_support": "30+", + "share_of_denominator": 0.2056073057933273, + "total": "alcohol_and_tobacco_consumption", + "total_beside_lines": "<10" + }, + "frame": { + "draws_outside_unit_interval": 0, + "positive_share": 0.08163306670501938, + "share_of_total": 0.18441130626709198 + }, + "total": "alcohol_and_tobacco_consumption" + } + }, + "fit_weight_records": [ + "uk_lcfs_2024_25_consumption:food_and_non_alcoholic_beverages_consumption", + "uk_lcfs_2024_25_consumption:alcohol_and_tobacco_consumption", + "uk_lcfs_2024_25_consumption:clothing_and_footwear_consumption", + "uk_lcfs_2024_25_consumption:housing_water_and_electricity_consumption", + "uk_lcfs_2024_25_consumption:household_furnishings_consumption", + "uk_lcfs_2024_25_consumption:health_consumption", + "uk_lcfs_2024_25_consumption:transport_consumption", + "uk_lcfs_2024_25_consumption:communication_consumption", + "uk_lcfs_2024_25_consumption:recreation_consumption", + "uk_lcfs_2024_25_consumption:education_consumption", + "uk_lcfs_2024_25_consumption:restaurants_and_hotels_consumption", + "uk_lcfs_2024_25_consumption:miscellaneous_consumption", + "uk_lcfs_2024_25_consumption:petrol_spending", + "uk_lcfs_2024_25_consumption:diesel_spending", + "uk_lcfs_2024_25_consumption:bus_fare_spending", + "uk_lcfs_2024_25_consumption:domestic_energy_consumption", + "uk_lcfs_2024_25_consumption:electricity_consumption", + "uk_lcfs_2024_25_consumption:gas_consumption", + "uk_lcfs_2024_25_consumption:liquid_fuel_consumption", + "uk_lcfs_2024_25_consumption:solid_fuel_consumption", + "uk_lcfs_2024_25_consumption:tobacco_share_of_alcohol_and_tobacco", + "uk_lcfs_2024_25_consumption:on_trade_alcohol_share_of_restaurants_and_hotels", + "uk_lcfs_2024_25_consumption:gambling_stakes_share_of_recreation", + "uk_lcfs_2024_25_consumption:national_lottery_share_of_gambling_stakes", + "uk_lcfs_2024_25_consumption:betting_and_gaming_share_of_other_gambling_stakes", + "uk_lcfs_2024_25_consumption:road_fuel_total", + "uk_lcfs_2024_25_consumption:petrol_share_of_road_fuel", + "uk_lcfs_2024_25_consumption:uses_energy_prepayment_meter", + "uk_lcfs_2024_25_consumption:gas_payer", + "uk_lcfs_2024_25_consumption:gas_payer_amount" + ], + "gates": { + "uk_stage_lcfs_consumption_basis": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_bus_pricing": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_energy_rake": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_excise_quantities": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_recomposed_totals": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_road_fuel_incidence": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_road_fuel_level": { + "failures": [], + "passed": true + }, + "uk_stage_lcfs_consumption_support": { + "failures": [], + "passed": true + } + }, + "households": 78440, + "positive_shares": { + "alcohol_and_tobacco_consumption": 0.527291943166678, + "beer_draught_share": 1.0, + "beer_litres": 0.576136105053031, + "betting_exchange_commission": 0.019563867703070097, + "bingo_net_receipts": 0.019563867703070097, + "bus_fare_spending": 0.7125035103771835, + "cider_draught_share": 1.0, + "cider_litres": 0.576136105053031, + "cigarettes_per_week": 0.08163306670501938, + "cigars_grams_per_week": 0.08163306670501938, + "clothing_and_footwear_consumption": 0.5076314490748526, + "communication_consumption": 0.9152532967962318, + "diesel_spending": 0.21835210616092002, + "domestic_energy_consumption": 1.0, + "education_consumption": 0.043070403031541624, + "electricity_consumption": 0.9995995991549779, + "food_and_non_alcoholic_beverages_consumption": 0.9966913803743381, + "gas_consumption": 0.8378831075116069, + "hand_rolling_tobacco_grams_per_week": 0.08163306670501938, + "has_fuel_consumption": 0.7400522314477876, + "health_consumption": 0.5539447030685003, + "horse_and_dog_pool_betting_net_losses": 0.019563867703070097, + "household_furnishings_consumption": 0.9344039932588121, + "housing_water_and_electricity_consumption": 1.0, + "land_based_casino_net_losses": 0.019563867703070097, + "land_based_fixed_odds_betting_net_losses": 0.019563867703070097, + "liquid_fuel_consumption": 0.030863911640611287, + "machine_games_higher_rate_net_takings": 0.019563867703070097, + "machine_games_lower_rate_net_takings": 0.019563867703070097, + "machine_games_standard_rate_net_takings": 0.019563867703070097, + "miscellaneous_consumption": 0.984321067316606, + "national_lottery_ticket_spending": 0.10681009830639804, + "other_fermented_litres": 0.576136105053031, + "other_tobacco_grams_per_week": 0.08163306670501938, + "petrol_spending": 0.5660231695059225, + "pool_betting_net_receipts": 0.019563867703070097, + "recreation_consumption": 0.9898266233694869, + "remote_gaming_net_losses": 0.019563867703070097, + "remote_other_betting_net_losses": 0.019563867703070097, + "remote_uk_horseracing_betting_net_losses": 0.019563867703070097, + "restaurants_and_hotels_consumption": 0.7857928118368214, + "solid_fuel_consumption": 0.0032579837095080204, + "spirits_litres": 0.576136105053031, + "transport_consumption": 0.9512208016876837, + "uses_energy_prepayment_meter": 0.11896204528198058, + "wine_litres": 0.576136105053031 + }, + "seconds": 96.2, + "spine": "spine-b145-treat.h5", + "tree": "populace-1359", + "weighted_totals": { + "alcohol_and_tobacco_consumption": 19959355984.09308, + "beer_draught_share": 11509311.287968487, + "beer_litres": 4631940882.095249, + "betting_exchange_commission": 123949909.1922428, + "bingo_net_receipts": 252330000.0, + "bus_fare_spending": 4213319387.928007, + "cider_draught_share": 6738290.982352255, + "cider_litres": 674388250.8241313, + "cigarettes_per_week": 261113666.03291157, + "cigars_grams_per_week": 7598518.917797941, + "clothing_and_footwear_consumption": 29970951716.317703, + "communication_consumption": 24803521172.601994, + "diesel_spending": 10457880276.270939, + "domestic_energy_consumption": 48755237020.280426, + "education_consumption": 15876557691.370522, + "electricity_consumption": 29553493457.817688, + "food_and_non_alcoholic_beverages_consumption": 113906273128.46979, + "gas_consumption": 19201743562.462746, + "hand_rolling_tobacco_grams_per_week": 77470743.97904557, + "has_fuel_consumption": 21441113.692121513, + "health_consumption": 21567398958.325157, + "horse_and_dog_pool_betting_net_losses": 55219132.22492455, + "household_furnishings_consumption": 73744645926.80603, + "housing_water_and_electricity_consumption": 179339989499.86584, + "land_based_casino_net_losses": 702361489.1692535, + "land_based_fixed_odds_betting_net_losses": 1527826124.9133615, + "liquid_fuel_consumption": 1864608748.4273286, + "machine_games_higher_rate_net_takings": 2384000.0, + "machine_games_lower_rate_net_takings": 138420000.0, + "machine_games_standard_rate_net_takings": 3023740000.0, + "miscellaneous_consumption": 90368733861.36032, + "national_lottery_ticket_spending": 7765725000.000001, + "other_fermented_litres": 239435846.48703998, + "other_tobacco_grams_per_week": 5797406.910050116, + "petrol_spending": 24840485040.255028, + "pool_betting_net_receipts": 54166666.66666668, + "recreation_consumption": 148697014445.80408, + "remote_gaming_net_losses": 5535900000.0, + "remote_other_betting_net_losses": 2163978657.2782593, + "remote_uk_horseracing_betting_net_losses": 888079509.7245454, + "restaurants_and_hotels_consumption": 84473828227.43405, + "solid_fuel_consumption": 114067143.27247077, + "spirits_litres": 330123776.919805, + "transport_consumption": 175429846522.27753, + "uses_energy_prepayment_meter": 3446619.8864751486, + "wine_litres": 1266891770.400817 + } +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.split-comparison.json b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.split-comparison.json new file mode 100644 index 0000000000..b4ff9c4e22 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.split-comparison.json @@ -0,0 +1,123 @@ +{ + "differing_columns": { + "betting_exchange_commission": { + "base_weighted_total": 123949909.1922428, + "head_weighted_total": 123949909.1922428 + }, + "bingo_net_receipts": { + "base_weighted_total": 252330000.0, + "head_weighted_total": 252330000.0 + }, + "horse_and_dog_pool_betting_net_losses": { + "base_weighted_total": 55219132.22492454, + "head_weighted_total": 55219132.22492455 + }, + "land_based_casino_net_losses": { + "base_weighted_total": 702361489.1692535, + "head_weighted_total": 702361489.1692535 + }, + "land_based_fixed_odds_betting_net_losses": { + "base_weighted_total": 1527826124.9133615, + "head_weighted_total": 1527826124.9133615 + }, + "machine_games_higher_rate_net_takings": { + "base_weighted_total": 2383999.9999999995, + "head_weighted_total": 2384000.0 + }, + "machine_games_lower_rate_net_takings": { + "base_weighted_total": 138420000.0, + "head_weighted_total": 138420000.0 + }, + "machine_games_standard_rate_net_takings": { + "base_weighted_total": 3023740000.0000005, + "head_weighted_total": 3023740000.0 + }, + "national_lottery_ticket_spending": { + "base_weighted_total": 7765725000.0, + "head_weighted_total": 7765725000.000001 + }, + "pool_betting_net_receipts": { + "base_weighted_total": 54166666.66666667, + "head_weighted_total": 54166666.66666668 + }, + "remote_gaming_net_losses": { + "base_weighted_total": 5535900000.0, + "head_weighted_total": 5535900000.0 + }, + "remote_other_betting_net_losses": { + "base_weighted_total": 2163978657.2782593, + "head_weighted_total": 2163978657.2782593 + }, + "remote_uk_horseracing_betting_net_losses": { + "base_weighted_total": 888079509.7245452, + "head_weighted_total": 888079509.7245454 + } + }, + "fit_weight_records": [ + 28, + 30 + ], + "gates": { + "base": { + "uk_stage_lcfs_consumption_basis": true, + "uk_stage_lcfs_consumption_bus_pricing": true, + "uk_stage_lcfs_consumption_energy_rake": true, + "uk_stage_lcfs_consumption_excise_quantities": true, + "uk_stage_lcfs_consumption_recomposed_totals": true, + "uk_stage_lcfs_consumption_road_fuel_incidence": true, + "uk_stage_lcfs_consumption_road_fuel_level": true, + "uk_stage_lcfs_consumption_support": true + }, + "head": { + "uk_stage_lcfs_consumption_basis": true, + "uk_stage_lcfs_consumption_bus_pricing": true, + "uk_stage_lcfs_consumption_energy_rake": true, + "uk_stage_lcfs_consumption_excise_quantities": true, + "uk_stage_lcfs_consumption_recomposed_totals": true, + "uk_stage_lcfs_consumption_road_fuel_incidence": true, + "uk_stage_lcfs_consumption_road_fuel_level": true, + "uk_stage_lcfs_consumption_support": true + } + }, + "head_only_columns": [], + "households": [ + 78440, + 78440 + ], + "identical_columns": [ + "food_and_non_alcoholic_beverages_consumption", + "alcohol_and_tobacco_consumption", + "clothing_and_footwear_consumption", + "housing_water_and_electricity_consumption", + "household_furnishings_consumption", + "health_consumption", + "transport_consumption", + "communication_consumption", + "recreation_consumption", + "education_consumption", + "restaurants_and_hotels_consumption", + "miscellaneous_consumption", + "petrol_spending", + "diesel_spending", + "bus_fare_spending", + "domestic_energy_consumption", + "electricity_consumption", + "gas_consumption", + "liquid_fuel_consumption", + "solid_fuel_consumption", + "has_fuel_consumption", + "uses_energy_prepayment_meter", + "beer_litres", + "cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", + "beer_draught_share", + "cider_draught_share", + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week" + ], + "shared_columns": 46 +} diff --git a/docs/evidence/uk-excise-quantities-1359/receipts.json b/docs/evidence/uk-excise-quantities-1359/receipts.json new file mode 100644 index 0000000000..9d01d6123d --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/receipts.json @@ -0,0 +1,41 @@ +{ + "issue": "PolicyEngine/microcosm#1359", + "measured": { + "stage_runs_spine": { + "name": "spine-b145-treat.h5 (microcosm#1333, arm b145-treat)", + "sha256": "6b882b459566ce103d166e94c7f58201fe0ca848241c7e4a34baaf52364d07d6", + "households": 78440 + }, + "engine": "policyengine-uk 2.151.0 on policyengine-core 3.33.3", + "donor": "LCFS 2024-25 (UKDS SN 9603, 2nd edition)" + }, + "stage_run_trees": { + "stage_dev_run.base-74a2a378e.json": "microcosm#1383's head 74a2a378e, the branch base, on the abf0921 feed", + "stage_dev_run.head-restack.json": "the branch head on the 200bf6d feed", + "stage_dev_run.head-split.json": "the branch head once the gambling stakes are split (Vahid's review), on the 200bf6d feed" + }, + "not_committed": [ + "the spine and the LCFS tabs: licensed microdata", + "per-column sha256 digests of the written columns (compare_runs.py reduces them to verdicts)", + "donor minima and maxima" + ], + "files_sha256": { + "README.md": "884f08a035231118f50aa51aee06dbbc2b5679b9a61415c73c255a4c7e88bc66", + "outputs/alcohol_channel_weights.json": "a954d7f712a17bc665cf2e4f6540fb26a8f7f34be61e4997f471e28395164dcd", + "outputs/excise_incidence.json": "b556731ee5dc43ad8214791cbc4dd94b357318183ff9a3e354bab32d7ff282b3", + "outputs/national_reconciliation.json": "8f6b38ced9dc39c3ad23f1bd0936dea1ff24a900a51cb7f18d244651e7536cbe", + "outputs/stage_dev_run.base-74a2a378e.json": "c91a0bb815d867637acf6a0e8b130cb904faee878ab1043a2546ff0212ca570b", + "outputs/stage_dev_run.comparison.json": "e43fc4dac314c1d5d9adef399a696d3b9f290e97a0702341187e53e0f295a4ba", + "outputs/stage_dev_run.head-restack.json": "88f5c2507da769c738c167b2a51b5f59f40d23c501d2eaee89ff94daf3bc9980", + "outputs/stage_dev_run.head-split.json": "737e6bf88f1572e9162285b74da83b681dbf00fdb115c6cd299ad124d826752a", + "outputs/stage_dev_run.split-comparison.json": "357b620571609a735024e4cc329cdda07713d7bfa5da8d91e89431e62d997323", + "scripts/alcohol_channel_weights.py": "61ce5ede7faa5c92ff62aa9fb27b0c89eb2c4cf7ee76ccddcd26a786405f6af6", + "scripts/compare_runs.py": "b6eb778ebe250f084534fb6f986de285d4a1ccda1dd89d6a96ba0da17e9c5341", + "scripts/excise_incidence.py": "3f50eea6b5f1a288cda6524589b04e8121db48bca7618fd26cdb8116e18d9f7f", + "scripts/national_reconciliation.py": "d2d92bac43929c6b9ab11d659d0068ad526d8dc0d5197ba99f7c5d8860c0e186", + "scripts/repin_200bf6d.sh": "bce41a86e44531e98cb9ab939c3cfa374c810937fbbaa8695088cfadc3dbec25", + "scripts/run_stage_dev.sh": "44c211d1f8b38b24ffddab058a0912c651de44ac5f4e1a3f0330613d0a9ad7c3", + "scripts/sanitize_outputs.py": "17d4c099d22997131b5e041cef42634f45b6b12335611af15a683fbe9e52c57c", + "scripts/stage_dev_run.py": "5a06e200e93698ccfc48a48cee293ecfe9aee213ad9e5f49735b44ad26813ef8" + } +} diff --git a/docs/evidence/uk-excise-quantities-1359/scripts/alcohol_channel_weights.py b/docs/evidence/uk-excise-quantities-1359/scripts/alcohol_channel_weights.py new file mode 100644 index 0000000000..908f55b270 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/alcohol_channel_weights.py @@ -0,0 +1,101 @@ +"""How much allocating alcohol volume by spending moves it, against channel weights. + +Local, licensed output (LCFS 2024-25): stays under data/ukds/acceptance. + +Spending weights give every pound of alcohol spending the same volume. Channel +weights give the on-trade a published share v of national volume and the +off-trade 1 - v, each spread over its own spenders. Per pound, spending weights +over-allocate the on-trade by S_on / v and under-allocate the off-trade by +(1 - S_on) / (1 - v), where S_on is the on-trade share of alcohol spending. +This script measures S_on on the diary and the difference by equivalised +income decile, for a range of v. +""" + +from __future__ import annotations + +import json +import sys + +import numpy as np +import pandas as pd + +OFF = ("c21111", "c21211", "c21212", "c21213", "c21214", "c21221", "c21311") +ON = ("cb111c", "cb111d", "cb111e", "cb111f", "cb111g", "cb111h", "cb111i", "cb111j") + + +def main() -> None: + tab, out = sys.argv[1], sys.argv[2] + wanted = {*OFF, *ON, "cal_weight_annual", "p389p", "g018", "g019"} + data = pd.read_csv(tab, sep="\t", usecols=lambda c: c.lower() in wanted, low_memory=False) + data.columns = [c.lower() for c in data.columns] + num = lambda c: pd.to_numeric(data[c], errors="coerce").fillna(0.0).to_numpy() # noqa: E731 + w = num("cal_weight_annual") + off = sum(np.maximum(num(c), 0.0) for c in OFF) + on = sum(np.maximum(num(c), 0.0) for c in ON) + scale = 1.0 + 0.5 * np.maximum(num("g018") - 1.0, 0.0) + 0.3 * num("g019") + income = num("p389p") / scale + order = np.argsort(income, kind="stable") + cum = np.cumsum(w[order]) / w.sum() + decile = np.empty(len(w), dtype=int) + decile[order] = np.minimum((cum * 10).astype(int), 9) + s_on = float(w @ on / (w @ (off + on))) + spending = (off + on) / (w @ (off + on)) + + def channel(v: float) -> np.ndarray: + return (1 - v) * off / (w @ off) + v * on / (w @ on) + + report = { + "households": int(len(w)), + "on_trade_share_of_alcohol_spending": s_on, + "drinking_households_share": float(w[(off + on) > 0].sum() / w.sum()), + "on_trade_only_share_of_drinkers": float( + w[(on > 0) & (off == 0)].sum() / w[(off + on) > 0].sum() + ), + "off_trade_only_share_of_drinkers": float( + w[(off > 0) & (on == 0)].sum() / w[(off + on) > 0].sum() + ), + "deciles": {}, + "by_v": {}, + } + for d in range(10): + mask = decile == d + report["deciles"][d + 1] = { + "support": "30+" if int(((off + on) > 0)[mask].sum()) >= 30 else "<30", + "on_trade_share_of_its_alcohol_spending": float( + w[mask] @ on[mask] / (w[mask] @ (off[mask] + on[mask])) + ), + "share_of_volume_spending_weights": float(w[mask] @ spending[mask]), + } + for v in (0.20, 0.25, 0.27, 0.30, 0.35): + b = channel(v) + moved = 0.5 * float(w @ np.abs(spending - b)) + report["by_v"][str(v)] = { + "pub_pound_overallocation": s_on / v, + "shop_pound_allocation": (1 - s_on) / (1 - v), + "share_of_national_volume_moved": moved, + "decile_share_channel": { + d + 1: float(w[decile == d] @ b[decile == d]) for d in range(10) + }, + "decile_spending_over_channel": { + d + 1: float( + (w[decile == d] @ spending[decile == d]) + / (w[decile == d] @ b[decile == d]) + ) + for d in range(10) + }, + } + with open(out, "w") as handle: + json.dump(report, handle, indent=1) + print(json.dumps({k: report[k] for k in ("on_trade_share_of_alcohol_spending", "drinking_households_share", "on_trade_only_share_of_drinkers", "off_trade_only_share_of_drinkers")}, indent=1)) + for v in ("0.25", "0.27", "0.3"): + r = report["by_v"][v] + print(v, "pub x", round(r["pub_pound_overallocation"], 2), "shop x", round(r["shop_pound_allocation"], 2), "moved", round(r["share_of_national_volume_moved"], 3)) + print(" spending/channel by decile:", {k: round(x, 3) for k, x in r["decile_spending_over_channel"].items()}) + print("decile on-trade share of own spend:", {k: round(x["on_trade_share_of_its_alcohol_spending"], 2) for k, x in report["deciles"].items()}) + print("decile volume share (spending):", {k: round(x["share_of_volume_spending_weights"], 3) for k, x in report["deciles"].items()}) + print("decile volume share (channel 0.27):", {k: round(x, 3) for k, x in report["by_v"]["0.27"]["decile_share_channel"].items()}) + print("supports:", {k: x["support"] for k, x in report["deciles"].items()}) + + +if __name__ == "__main__": + main() diff --git a/docs/evidence/uk-excise-quantities-1359/scripts/compare_runs.py b/docs/evidence/uk-excise-quantities-1359/scripts/compare_runs.py new file mode 100644 index 0000000000..c019e9dcda --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/compare_runs.py @@ -0,0 +1,46 @@ +"""Compare a base and a head stage run: which written columns are byte-identical. + +Usage: python compare_runs.py + +Reads the unsanitized run outputs (their per-column digests stay local) and +writes only aggregates: the columns both runs write and whether each is +identical, each differing column's prior-weighted total in both runs, the +columns only the head writes, the fit records and the gate verdicts. +""" + +from __future__ import annotations + +import json +import sys +from pathlib import Path + + +def main() -> None: + base = json.loads(Path(sys.argv[1]).read_text()) + head = json.loads(Path(sys.argv[2]).read_text()) + shared = [c for c in base["output_sha256"] if c in head["output_sha256"]] + differing = [c for c in shared if base["output_sha256"][c] != head["output_sha256"][c]] + report = { + "households": [base["households"], head["households"]], + "fit_weight_records": [len(base["fit_weight_records"]), len(head["fit_weight_records"])], + "shared_columns": len(shared), + "identical_columns": [c for c in shared if c not in differing], + "differing_columns": { + c: { + "base_weighted_total": base.get("weighted_totals", {}).get(c), + "head_weighted_total": head["weighted_totals"][c], + } + for c in differing + }, + "head_only_columns": [c for c in head["output_sha256"] if c not in base["output_sha256"]], + "gates": { + "base": {k: v["passed"] for k, v in base["gates"].items()}, + "head": {k: v["passed"] for k, v in head["gates"].items()}, + }, + } + Path(sys.argv[3]).write_text(json.dumps(report, indent=1, sort_keys=True) + "\n") + print("identical", len(report["identical_columns"]), "of", len(shared), "differing", differing) + + +if __name__ == "__main__": + main() diff --git a/docs/evidence/uk-excise-quantities-1359/scripts/excise_incidence.py b/docs/evidence/uk-excise-quantities-1359/scripts/excise_incidence.py new file mode 100644 index 0000000000..e8aeccff70 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/excise_incidence.py @@ -0,0 +1,142 @@ +"""Who carries the excise inputs: multiples of spending and incidence, frame and donor. + +Usage: python excise_incidence.py + +Reads a sanitized stage run (``outputs/stage_dev_run.head-split.json``) and the +national reconciliation, and the LCFS 2024-25 household tab for the donor side. +Writes aggregates only: + +- each duty over the spending that shares it out, at prior weights, and the + share of households that carry it; +- the weighted share of donors, and of frame households, with each parent + total and each part positive, and each part's rate among households with the + parent positive, which shows where the frame loses incidence. + +Every donor share rests on 30 or more donors; no count, value or extreme of a +donor is written. +""" + +from __future__ import annotations + +import json +import sys +from pathlib import Path + +import numpy as np +import pandas as pd + +TOBACCO = ("c22111", "c22121", "c22131") +OFF_TRADE = ("c21111", "c21211", "c21212", "c21213", "c21214", "c21221", "c21311") +STAKES = ("c94311", "c94312", "c94313", "c94314", "c94315", "c94316", "c94319") +NATIONAL_LOTTERY = ("c94316", "c94319") +BETTING_AND_GAMING = ("c94311", "c94312", "c94314") +#: The smallest donor support a share here may rest on. +SUPPORT_FLOOR = 30 + + +def _donor(path: Path) -> dict[str, float]: + columns = (*TOBACCO, *OFF_TRADE, *STAKES, "p602", "p609", "cal_weight_annual") + tab = pd.read_csv(path, sep="\t", usecols=list(columns)) + tab = tab.apply(pd.to_numeric, errors="coerce").fillna(0.0) + weights = tab["cal_weight_annual"].to_numpy(dtype=float) + + def lines(codes) -> np.ndarray: + return sum(tab[code].clip(lower=0.0).to_numpy(dtype=float) for code in codes) + + masks = { + "alcohol_and_tobacco": tab["p602"].to_numpy(dtype=float) > 0, + "tobacco": lines(TOBACCO) > 0, + "recreation": tab["p609"].to_numpy(dtype=float) > 0, + "gambling_stakes": lines(STAKES) > 0, + "national_lottery": lines(NATIONAL_LOTTERY) > 0, + "other_gambling_stakes": (lines(STAKES) - lines(NATIONAL_LOTTERY)) > 0, + "betting_and_gaming": lines(BETTING_AND_GAMING) > 0, + } + for name, mask in masks.items(): + if int(mask.sum()) < SUPPORT_FLOOR: + raise ValueError(f"{name} rests on fewer than {SUPPORT_FLOOR} donors.") + return { + name: float(weights[mask].sum() / weights.sum()) for name, mask in masks.items() + } + + +def main() -> None: + head = json.loads(Path(sys.argv[1]).read_text()) + reconciliation = json.loads(Path(sys.argv[2]).read_text()) + donor = _donor(Path(sys.argv[3])) + components = head["excise_quantities"]["components"] + positive = head["positive_shares"] + duty = reconciliation["duties"] + spending = { + "alcohol": components["off_trade_alcohol_spending"]["weighted_total"] + + components["on_trade_alcohol_spending"]["weighted_total"], + "tobacco": components["tobacco_spending"]["weighted_total"], + "national_lottery": components["national_lottery_stakes"]["weighted_total"], + "betting_and_gaming": components["betting_and_gaming_stakes"]["weighted_total"], + } + keys = head["excise_quantities"]["keys"] + charged = { + "alcohol": duty["alcohol_duty"], + "tobacco": duty["tobacco_duty"], + "national_lottery": duty["lottery_duty"], + "betting_and_gaming": duty["gambling_duty"] - duty["lottery_duty"], + } + bases = {key: 0.0 for key in ("national_lottery", "betting_and_gaming")} + for output in head["excise_quantities"]["outputs"].values(): + if output["key"] in bases: + bases[output["key"]] += output["annual_level"] + multiples = { + key: { + "duty": charged[key], + "spending": spending[key], + "duty_over_spending": charged[key] / spending[key], + "carrying_share": keys[key]["positive_share"], + **( + {"bases_over_spending": bases[key] / spending[key]} + if key in bases + else {} + ), + } + for key in charged + } + frame = { + "alcohol_and_tobacco": positive["alcohol_and_tobacco_consumption"], + "tobacco": components["tobacco_spending"]["positive_share"], + "recreation": positive["recreation_consumption"], + "gambling_stakes": components["gambling_stakes"]["positive_share"], + "national_lottery": components["national_lottery_stakes"]["positive_share"], + "other_gambling_stakes": components["other_gambling_stakes"]["positive_share"], + "betting_and_gaming": components["betting_and_gaming_stakes"]["positive_share"], + } + parents = { + "tobacco": "alcohol_and_tobacco", + "gambling_stakes": "recreation", + "national_lottery": "gambling_stakes", + "other_gambling_stakes": "gambling_stakes", + "betting_and_gaming": "other_gambling_stakes", + } + incidence = { + part: { + "parent": parent, + "donor_positive": donor[part], + "frame_positive": frame[part], + "donor_rate_within_parent": donor[part] / donor[parent], + "frame_rate_within_parent": frame[part] / frame[parent], + } + for part, parent in parents.items() + } + report = { + "weights": "frame at prior weights; donor at its survey weights", + "multiples": multiples, + "parents_positive": { + name: {"donor": donor[name], "frame": frame[name]} + for name in ("alcohol_and_tobacco", "recreation") + }, + "incidence": incidence, + } + Path(sys.argv[4]).write_text(json.dumps(report, indent=1, sort_keys=True) + "\n") + print(json.dumps(report["multiples"], indent=1)) + + +if __name__ == "__main__": + main() diff --git a/docs/evidence/uk-excise-quantities-1359/scripts/national_reconciliation.py b/docs/evidence/uk-excise-quantities-1359/scripts/national_reconciliation.py new file mode 100644 index 0000000000..46eb2b636e --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/national_reconciliation.py @@ -0,0 +1,139 @@ +"""The engine's duty on the committed declaration's national levels, against OBR. + +Usage, from the tree (its packages first on PYTHONPATH, policyengine-uk as locked): + /bin/python + +One household holds every national level the committed ``level_excise_quantities`` +declaration resolves to from the vendored ``excise_facts.json``. Every duty is +linear in its inputs, so its duty is the frame's at prior weights however the +step shares the levels out. Each OBR row is read through its own binding's +variables, at the binding's measurement period, against the value the national +compile-parity receipt records from the pinned feed. Public figures only: the +levels are published national quantities and nothing here reads microdata. +""" + +from __future__ import annotations + +import importlib.resources +import json +import sys +from pathlib import Path + +from microcosm.build.country_spec import load_country_spec +from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_EXCISE_TOBACCO_OUTPUTS, + UK_PE_UK_WEEKS_IN_YEAR, + excise_levels, + excise_quantities_operation, +) + +ROWS = ( + "obr.beer_and_cider_duties", + "obr.wine_duties", + "obr.spirits_duties", + "obr.tobacco_duties", + "obr.betting_and_gaming_duties", +) +DUTIES = ( + "beer_duty", + "cider_duty", + "sparkling_cider_duty", + "wine_duty", + "other_fermented_duty", + "spirits_duty", + "alcohol_duty", + "tobacco_duty", + "general_betting_duty", + "pool_betting_duty", + "remote_gaming_duty", + "machine_games_duty", + "bingo_duty", + "lottery_duty", + "gaming_duty", + "gambling_duty", + "household_tax", +) + + +def _resource(name: str) -> dict: + return json.loads( + importlib.resources.files("microcosm.build.uk").joinpath(name).read_text() + ) + + +def main() -> None: + from policyengine_uk import Simulation + + declared = excise_quantities_operation( + load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + ) + resolved = excise_levels(declared) + year = int(declared["period_value"]) + inputs = { + column: level.annual / UK_PE_UK_WEEKS_IN_YEAR + if column in UK_LCFS_EXCISE_TOBACCO_OUTPUTS + else level.annual + for column, level in resolved.quantities.items() + } + inputs.update( + { + column: float(draught["share"]) + for column, draught in resolved.draught.items() + } + ) + simulation = Simulation( + situation={ + "people": {"adult": {"age": {year: 40}}}, + "benunits": {"benunit": {"members": ["adult"]}}, + "households": { + "household": { + "members": ["adult"], + **{column: {year: value} for column, value in inputs.items()}, + } + }, + } + ) + duty = {name: float(simulation.calculate(name, year)[0]) for name in DUTIES} + bindings = { + target["target_id"]: target["bindings"]["policyengine"] + for target in _resource("uk_population_targets.json")["targets"] + } + published = { + row["name"]: row["ledger_value"] + for row in _resource( + "ledger_compile_parity_incumbent_2025_signed_differences.json" + )["differences"] + if row["name"] in ROWS + } + rows = {} + for name in ROWS: + binding = bindings[name] + variables = ( + binding["value_expression"].split(" + ") + if "value_expression" in binding + else [binding["value_variable"]] + ) + engine = sum(duty[variable] for variable in variables) + rows[name] = { + "variables": variables, + "measurement_period": binding["measurement_period"], + "engine": engine, + "obr": published[name], + "gap": engine / published[name] - 1.0, + } + report = { + "year": year, + "national_levels": inputs, + "duties": duty, + "rows": rows, + "three_duties": duty["alcohol_duty"] + + duty["tobacco_duty"] + + duty["gambling_duty"], + } + Path(sys.argv[1]).write_text(json.dumps(report, indent=1, sort_keys=True) + "\n") + for name, row in rows.items(): + print(f"{name}: {row['engine'] / 1e9:.3f}bn against {row['obr'] / 1e9:.3f}bn") + + +if __name__ == "__main__": + main() diff --git a/docs/evidence/uk-excise-quantities-1359/scripts/repin_200bf6d.sh b/docs/evidence/uk-excise-quantities-1359/scripts/repin_200bf6d.sh new file mode 100755 index 0000000000..01b0c7fb3a --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/repin_200bf6d.sh @@ -0,0 +1,175 @@ +#!/usr/bin/env bash +# microcosm#1359 B1: re-pin the UK Chronicle feed to 200bf6d55 (chronicle main after +# PolicyEngine/chronicle#384) in repos/populace-1359, in docs/uk-chronicle-feed-repin.md's +# order: the pin, then the vendored resources (first, on a fresh pin), the national +# references and membership, the local census, the local references and membership, the +# compile-parity receipts one surface at a time, and the coverage manifest. +# +# Memory (24 GiB machine): the generators and parity hold every parsed fact, so the national +# steps read a national cut (constituency, MSOA and county rows dropped, as on abf0921) and the +# local steps a local cut (constituency and local-authority rows, the #1306 approach). Each heavy +# step waits for a quiet machine. Writes only inside the tree and data/ukds/acceptance. +set -euo pipefail +T=/Users/mariajuaristi/Desktop/PolicyEngine/repos/populace-1359 +D=/Users/mariajuaristi/Desktop/PolicyEngine/data/ukds/acceptance +A=$D/chronicle-uk-artifact-200bf6d +NAT=$D/chronicle-uk-artifact-200bf6d-national +LOC=$D/chronicle-uk-artifact-200bf6d-local-levels +UK=$T/packages/microcosm-build/src/microcosm/build/uk +PY=$T/.venv/bin/python +COMMIT=200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1 +NATIONAL_LABEL=chronicle-uk-200bf6d-consumer-facts +LOCAL_LABEL=chronicle-uk-artifact-200bf6d +FACTS=$A/consumer_facts.jsonl +LOG=$D/1359-excise/b1_repin.log +FROM=${1:-pin} + +step() { echo "== $1 $(date -u +%FT%TZ)" | tee -a "$LOG"; } +run() { /usr/bin/time -l nice -n 10 "$@" >> "$LOG" 2>&1; } +quiet() { + # Wait up to 30 minutes until no other process holds more than 3 GB. + local deadline=$(( $(date +%s) + 1800 )) + while true; do + local big + big=$( (ps -axo rss=,pid=,command= | awk -v me=$$ '$1 > 3000000 && $2 != me' | grep -v -E "awk|ps -axo" || true) | wc -l | tr -d ' ') + if [[ $big -eq 0 ]]; then echo " quiet at $(date -u +%FT%TZ)" >> "$LOG"; return; fi + if [[ $(date +%s) -ge $deadline ]]; then + echo " waited 30 min; $big other process(es) above 3 GB; proceeding at low priority" >> "$LOG" + ps -axo rss=,etime=,command= | awk '$1 > 3000000' | cut -c1-160 >> "$LOG" + return + fi + sleep 60 + done +} +reached=0 +at() { [[ $reached -eq 1 || $FROM == "$1" ]] && reached=1; [[ $reached -eq 1 ]]; } + +cd "$T" +FACTS_SHA=$(shasum -a 256 "$FACTS" | cut -d' ' -f1) +MANIFEST_SHA=$(shasum -a 256 "$A/manifest.json" | cut -d' ' -f1) +step "b1 from $FROM in $T at $(git rev-parse --short HEAD); facts $FACTS_SHA manifest $MANIFEST_SHA" + +if at pin; then + step "0. .codex-work mirrors, 1. the pin and the validation register's restatement" + mkdir -p .codex-work + ln -sfn "$FACTS" .codex-work/consumer_facts_uk.jsonl + ln -sfn "$A/manifest.json" .codex-work/consumer_facts_uk_manifest.json + ln -sfn "$A" .codex-work/uk-artifact + FACTS_SHA="$FACTS_SHA" MANIFEST_SHA="$MANIFEST_SHA" COMMIT="$COMMIT" A="$A" UK="$UK" "$PY" - >> "$LOG" 2>&1 <<'EOF' +import json, os +from pathlib import Path +uk, art = Path(os.environ["UK"]), Path(os.environ["A"]) +manifest = json.loads((art / "manifest.json").read_text()) +feed_path = uk / "chronicle_feed.json" +feed = json.loads(feed_path.read_text()) +assert manifest["consumer_fact_schema_sha256"] == feed["consumer_fact_schema_sha256"], "schema moved" +assert manifest["schema_version"] == feed["artifact_schema_version"] +assert manifest["consumer_fact_schema_versions"] == feed["consumer_fact_schema_versions"] +assert manifest["facts_sha256"] == os.environ["FACTS_SHA"] +feed.update( + source_commit=os.environ["COMMIT"], + fact_row_count=int(manifest["fact_row_count"]), + facts_sha256=os.environ["FACTS_SHA"], + manifest_sha256=os.environ["MANIFEST_SHA"], +) +feed_path.write_text(json.dumps(feed, indent=2) + "\n") +levels_path = uk / "local_validation_levels.json" +levels = json.loads(levels_path.read_text()) +levels["source_feed"].update( + sha256=os.environ["FACTS_SHA"], + manifest_sha256=os.environ["MANIFEST_SHA"], + source_commit=os.environ["COMMIT"], +) +levels_path.write_text(json.dumps(levels, indent=2, ensure_ascii=False) + "\n") +print("pin:", feed["source_commit"], feed["fact_row_count"]) +EOF +fi + +if at vendor; then + step "2. vendored resources from the full artifact" + quiet + run "$PY" tools/vendor_uk_ledger_facts.py --ledger-facts .codex-work/uk-artifact \ + --ledger-facts-sha256 "$FACTS_SHA" --ledger-manifest-sha256 "$MANIFEST_SHA" +fi + +if at cuts; then + step "3. national and local cuts (streamed)" + mkdir -p "$NAT" "$LOC" + FACTS="$FACTS" FACTS_SHA="$FACTS_SHA" NAT="$NAT" LOC="$LOC" python3 - >> "$LOG" 2>&1 <<'EOF' +import collections, json, os +src = os.environ["FACTS"] +nat_drop = {"constituency", "msoa", "county"} +loc_keep = {"constituency", "local_authority"} +# microcosm#1262 binds Scotland's private rents at BRMA grain (statistical_scope +# rows, S33...), so the local cut keeps every statistical_scope row but the small +# areas (LSOAs, data zones, output areas) no local reference reads. +small_areas = ("E01", "S00", "S01", "W01", "N08") +levels = collections.Counter() +kept = collections.Counter() +with open(src) as rows, open(os.path.join(os.environ["NAT"], "consumer_facts.jsonl"), "w") as nat, \ + open(os.path.join(os.environ["LOC"], "consumer_facts.jsonl"), "w") as loc: + for line in rows: + if not line.strip(): + continue + geography = json.loads(line)["geography"] + level = geography["level"] + levels[level] += 1 + if level not in nat_drop: + nat.write(line); kept["national"] += 1 + if level in loc_keep or ( + level == "statistical_scope" and not str(geography["id"]).startswith(small_areas) + ): + loc.write(line); kept["local"] += 1 +for name, path, rule in (("national", os.environ["NAT"], {"dropped_levels": sorted(nat_drop)}), + ("local", os.environ["LOC"], {"kept_levels": sorted(loc_keep), + "kept_statistical_scope_except_prefixes": list(small_areas)})): + receipt = {"source": src, "source_sha256": os.environ["FACTS_SHA"], **rule, + "rows_by_geography_level": dict(sorted(levels.items())), "kept_rows": kept[name]} + with open(os.path.join(path, "cut_receipt.json"), "w") as out: + json.dump(receipt, out, indent=1) +print(json.dumps({"levels": dict(sorted(levels.items())), "kept": dict(kept)})) +EOF +fi + +if at national; then + step "4. national references and membership (national cut)" + quiet + run "$PY" tools/generate_uk_target_references.py --contract "$UK/uk_population_targets.json" \ + --ledger-facts "$NAT/consumer_facts.jsonl" --source-fact-feed "$NATIONAL_LABEL" \ + --output "$UK/target_references.json" --membership-report "$UK/target_reference_membership.json" +fi + +if at census; then + step "5. local census" + run "$PY" tools/census_uk_local_targets.py +fi + +if at local; then + step "6. local references and membership (local cut)" + quiet + run "$PY" tools/generate_uk_local_target_references.py --ledger-facts "$LOC/consumer_facts.jsonl" \ + --source-fact-feed "$LOCAL_LABEL" +fi + +if at parity_national; then + step "7a. compile parity, national surface (national cut)" + quiet + run "$PY" tools/build_uk_ledger_compile_parity_signed_differences.py \ + --ledger-facts "$NAT/consumer_facts.jsonl" --surface national +fi + +if at parity_local; then + step "7b. compile parity, local surface (local cut)" + quiet + run "$PY" tools/build_uk_ledger_compile_parity_signed_differences.py \ + --ledger-facts "$LOC/consumer_facts.jsonl" --surface local +fi + +if at coverage; then + step "8. release-input coverage manifest" + run "$PY" tools/build_uk_release_input_coverage_manifest.py +fi + +step "done" +git status --short >> "$LOG" +git diff --stat >> "$LOG" diff --git a/docs/evidence/uk-excise-quantities-1359/scripts/run_stage_dev.sh b/docs/evidence/uk-excise-quantities-1359/scripts/run_stage_dev.sh new file mode 100755 index 0000000000..1902d77209 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/run_stage_dev.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Stage-only dev runs of lcfs_consumption for microcosm#1359: the base tree, +# then the head tree, on the same spine, with the head worktree's venv +# (policyengine-uk 2.145.0) and each tree's packages first on PYTHONPATH. +# Waits up to 15 minutes for a quiet machine, then runs at low priority. +set -uo pipefail +D=/Users/mariajuaristi/Desktop/PolicyEngine/data/ukds/acceptance/1359-excise +VENV=/Users/mariajuaristi/Desktop/PolicyEngine/repos/populace-1359/.venv +SPINE=/Users/mariajuaristi/Desktop/microcosm-1333-arm-spine/spine-b145-treat.h5 +LOG=$D/stage_dev_run${LOG_SUFFIX:-}.log +echo "== start $(date -u +%FT%TZ)" > "$LOG" +deadline=$(( $(date +%s) + 900 )) +while true; do + busy=$(ps -eo pcpu,command | awk '$1 > 50.0' | grep -v -E "stage_dev_run|awk|ps -eo" | wc -l | tr -d ' ') + avail=$(vm_stat | awk '/Pages free|Pages inactive/ {gsub("\\.","",$NF); s+=$NF} END {printf "%d", s*16384/1e9}') + if [[ $busy -le 2 && $avail -ge 4 ]]; then echo "== quiet enough at $(date -u +%FT%TZ): busy=$busy avail=${avail}GB" >> "$LOG"; break; fi + if [[ $(date +%s) -ge $deadline ]]; then echo "== waited 15 min; proceeding at low priority: busy=$busy avail=${avail}GB" >> "$LOG"; break; fi + sleep 30 +done +BASE_LABEL=${BASE_LABEL:-base}; HEAD_LABEL=${HEAD_LABEL:-head} +for pair in "$BASE_LABEL:/Users/mariajuaristi/Desktop/PolicyEngine/repos/populace-1359-base" "$HEAD_LABEL:/Users/mariajuaristi/Desktop/PolicyEngine/repos/populace-1359"; do + LABEL=${pair%%:*} + TREE=${pair#*:} + echo "== $LABEL $TREE $(git -C "$TREE" rev-parse --short HEAD) dirty=$(git -C "$TREE" status --short | wc -l | tr -d ' ') $(date -u +%FT%TZ)" >> "$LOG" + cd "$TREE" + PP=$(ls -d "$TREE"/packages/*/src | tr '\n' ':') + PYTHONPATH="$PP" HDF5_USE_FILE_LOCKING=FALSE /usr/bin/time -l nice -n 15 "$VENV/bin/python" "$D/stage_dev_run_1359.py" "$TREE" "$SPINE" "$D/stage_dev_run.$LABEL.json" >> "$LOG" 2>&1 + echo "== $LABEL exit=$? $(date -u +%FT%TZ)" >> "$LOG" +done diff --git a/docs/evidence/uk-excise-quantities-1359/scripts/sanitize_outputs.py b/docs/evidence/uk-excise-quantities-1359/scripts/sanitize_outputs.py new file mode 100644 index 0000000000..3ffef99780 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/sanitize_outputs.py @@ -0,0 +1,61 @@ +"""Copy the #1359 measurement outputs into the repository as aggregates only. + +Usage: python sanitize_outputs.py + +The stage receipts carry no unit record by construction: shares, positive +shares and weighted totals over the frame or the donor, the donor support as a +band and any count under ten withheld. As for #1113, a ``donor_floor``, +``donor_min`` or ``donor_max`` key (licensed unit-record extremes) is dropped +wherever it appears, and so is ``output_sha256``, the digest of each written +column, which ``compare_runs.py`` reads in place and reduces to which columns +two runs leave identical. The ``tree`` and ``spine`` fields keep only their +names, since the paths are machine-local. Household dumps are never copied. +""" + +from __future__ import annotations + +import json +import sys +from pathlib import Path + +#: Output files that hold aggregates only once ``DROPPED`` keys are removed. +AGGREGATE_OUTPUTS = ( + "stage_dev_run.base-74a2a378e.json", + "stage_dev_run.head-restack.json", + "stage_dev_run.head-split.json", + "alcohol_channel_weights.json", +) +DROPPED = ("donor_floor", "donor_min", "donor_max", "output_sha256") +#: Keys whose string value is a machine-local path; only the file name stays. +PATH_KEYS = ("spine", "tree") + + +def _strip(value): + if isinstance(value, dict): + return { + k: (Path(v).name if k in PATH_KEYS and isinstance(v, str) else _strip(v)) + for k, v in value.items() + if k not in DROPPED + } + if isinstance(value, list): + return [_strip(item) for item in value] + return value + + +def main() -> None: + source, target = Path(sys.argv[1]), Path(sys.argv[2]) + target.mkdir(parents=True, exist_ok=True) + for name in AGGREGATE_OUTPUTS: + path = source / name + if not path.exists(): + print("missing", name) + continue + payload = _strip(json.loads(path.read_text())) + (target / name).write_text( + json.dumps(payload, indent=1, sort_keys=True, default=float) + "\n" + ) + print("wrote", name) + + +if __name__ == "__main__": + main() diff --git a/docs/evidence/uk-excise-quantities-1359/scripts/stage_dev_run.py b/docs/evidence/uk-excise-quantities-1359/scripts/stage_dev_run.py new file mode 100644 index 0000000000..f9193d0412 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/stage_dev_run.py @@ -0,0 +1,112 @@ +"""Stage-only development run of lcfs_consumption for microcosm#1359. + +Usage, from the tree whose stage code runs (PYTHONPATH puts its packages first): + /bin/python + +Re-runs the tree's committed lcfs_consumption stage on a finished spine (as the +#1113 stage trials did) and records, for every household column the stage +writes, the sha256 of its bytes, so a base run and a head run on the same spine +can be compared column by column; plus the head's excise_shares receipt and the +stage's own gates. Licensed output: it stays under data/ukds/acceptance. +""" + +from __future__ import annotations + +import hashlib +import importlib.util +import json +import sys +import time +from pathlib import Path + +import numpy as np + +from microcosm.build.country_spec import load_country_spec +from microcosm.build.uk_runtime.lcfs_consumption import ( + UKLCFSConsumptionStageTransform, +) +from microcosm.build.uk_runtime.national_frame import load_uk_national_frame +from microcosm.build.uk_runtime.stage_health import uk_stage_health_gate +from microcosm.frame.adapters.policyengine_uk import PolicyEngineUKEngine + +LCFS = Path("/Users/mariajuaristi/Desktop/PolicyEngine/data/ukds/lcfs_2024_25") + + +def _tool(tree: Path): + spec = importlib.util.spec_from_file_location( + "tool", tree / "tools" / "verify_uk_identity_stability.py" + ) + tool = importlib.util.module_from_spec(spec) + spec.loader.exec_module(tool) + return tool + + +def main() -> None: + tree, spine, out = Path(sys.argv[1]), Path(sys.argv[2]), Path(sys.argv[3]) + started = time.time() + frame, _ = load_uk_national_frame(spine) + frame = _tool(tree)._engine_safe_frame(frame) + stage = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + transform = UKLCFSConsumptionStageTransform( + stage=stage, + engine=PolicyEngineUKEngine(), + lcfs_hh_tab_path=LCFS / "dvhh_uk_anon_v3_2024.tab", + lcfs_person_tab_path=LCFS / "dvper_uk_anon_2024.tab", + ) + result = transform(frame) + household = result.table("household") + columns = transform.output_columns() + digests = { + column: hashlib.sha256( + np.ascontiguousarray(household[column].to_numpy()).tobytes() + ).hexdigest() + for column in columns + } + evidence = transform.checkpoint_metadata()["evidence"] + gates = {} + for gate in load_country_spec("uk").gates.gates: + parameters = dict(gate.parameters) + if gate.gate != "stage_health" or parameters.get("stage") != "lcfs_consumption": + continue + checked = uk_stage_health_gate( + evidence=evidence, + stage="lcfs_consumption", + check=str(parameters["check"]), + parameters=parameters, + ) + gates[gate.id] = {"passed": checked.passed, "failures": list(checked.failures)} + report = { + "tree": str(tree), + "spine": str(spine), + "households": int(len(household)), + "seconds": round(time.time() - started, 1), + "fit_weight_records": [record.fit_name for record in transform.fit_weight_records], + "output_sha256": digests, + "gates": gates, + "excise_shares": evidence.get("excise_shares"), + "excise_quantities": evidence.get("excise_quantities"), + # Prior-weighted frame totals of every written column (aggregates). + "weighted_totals": { + column: float( + result.weights_for("household").values + @ household[column].to_numpy(dtype=float) + ) + for column in columns + }, + # The prior-weighted share of households with each column positive. + "positive_shares": { + column: float( + result.weights_for("household").values[ + household[column].to_numpy(dtype=float) > 0 + ].sum() + / result.weights_for("household").values.sum() + ) + for column in columns + }, + } + out.write_text(json.dumps(report, indent=1, default=str) + "\n") + print(f"wrote {out} in {report['seconds']} s") + + +if __name__ == "__main__": + main() diff --git a/docs/uk-chronicle-feed-repin.md b/docs/uk-chronicle-feed-repin.md index ae0644f1fc..587c6ed82c 100644 --- a/docs/uk-chronicle-feed-repin.md +++ b/docs/uk-chronicle-feed-repin.md @@ -255,3 +255,43 @@ surface was not recompiled for this entry. The twelve restamped OBR lines move t national register version with no value moved, so the uk-candidate-eval scoring register is re-frozen before the next national solve. The high-value home stock still names `735820c`: its TS054 tenure, OBR share and HPSSA facts are the same on `abf0921`, so it was not rebuilt. + +The `200bf6d` re-pin (microcosm#1359, PolicyEngine/chronicle#381 via #384, on top of `abf0921`) +brought the UK excise facts: HMRC's Alcohol Bulletin clearances by product, ABV band, duty point +and relief, the Tobacco Bulletin clearances, HMRC's betting and gaming duty receipts and Machine +Games Duty liabilities and both bulletins' duty receipts, the Gambling Commission's industry +statistics for Great Britain (gross gambling yield by sector, activity and betting event, turnover, +gaming machines and lottery sales), and the OBR March 2026 receipts lines for alcohol, tobacco and +betting and gaming duties beside its alcohol and tobacco clearances. It also replaced the June 2026 +Consumer Trends edition with September's (chronicle `a8c4a6c4`), whose revisions move every +Consumer Trends row the feed carries (1,502,291 rows, up 2,990; the schema digest is unchanged). + +A new vendored resource, `excise_facts.json`, carries the 98 FY2024-25 rows the LCFS excise step +reads. The other vendored resources carry the same rows under the new feed identity, except +`ons_household_expenditure_facts.json`, whose 93 rows take the September values. Compiled values +move only for the three Consumer Trends rows the contract reads: + +- the bound calendar-2024 household road fuel (07.2.2), from GBP 37.025bn to GBP 35.460bn + (−4.2%); +- the measured calendar-2025 electricity (04.5.1), from GBP 26.522bn to GBP 28.840bn; +- the measured calendar-2025 gas (04.5.2), from GBP 15.339bn to GBP 18.958bn. + +The national surface also gains the five OBR excise rows, measured at FY2024-25 and held out of +the objective; the national receipt lists them as ledger-only. + +On the local surface, the reference files and the compile-parity receipt are byte-identical, and +the membership moves only its feed label. + +Both surfaces were regenerated from cuts of the pinned artifact: + +- national generator and parity: the constituency, MSOA and county rows dropped (931,024 rows); +- local generator and parity: the constituency and local-authority rows, plus the + statistical-scope rows other than small areas (884,729 rows). The latter carry the Scottish BRMA + rents microcosm#1262 binds; a cut without them fails the local generator on those rows. + +The regeneration diffs above are the check on both cuts. + +The national register version moves with the five new references, so the uk-candidate-eval scoring +register is re-frozen before the next national solve. The high-value home stock still names +`735820c`: its inputs are the same on `200bf6d` (the feed-gated fingerprint check passes), so it +was not rebuilt. diff --git a/experiments/1359-excise-quantities-receipts.md b/experiments/1359-excise-quantities-receipts.md new file mode 100644 index 0000000000..3a1ef5a0e8 --- /dev/null +++ b/experiments/1359-excise-quantities-receipts.md @@ -0,0 +1,219 @@ +# microcosm#1359 receipts: alcohol, tobacco and gambling inputs for policyengine-uk's excise duties + +Plan: `repos/microcosm-1359-implementation-plan.md`, approved 2026-10-23. María's rulings of that day: + +- Quantities are levelled to published FY2024-25 figures. Spending, the division totals and the VAT base stay at survey level. +- Diary incidence is kept; there is no redraw. +- Alcohol volume follows spending, with the bias documented (decision 2). +- FY2024-25 is the quantity basis (decision 1). +- The OBR alcohol and tobacco rows are measured at FY2024-25 (decision 3). +- Gambling is implemented on the policyengine-uk bump that carries it, and the branch is built on that bump (2026-10-24). + +Branch `uk-excise-quantities-1359`, stacked on microcosm#1383 (`uk-pe-uk-bump-2572` at `74a2a378e`). That PR locks policyengine-uk 2.151.0, the first release with the gambling duties (PolicyEngine/policyengine-uk#2590). + +## Commits + +- `db9b2aeff`: the tobacco and on-trade alcohol shares drawn inside the LCFS chain. +- `1f014b3dc`: the `level_excise_quantities` step and its gate, dormant until declared. +- `5398cb86b`: the engine checks of the excise inputs. +- `602905bbc`: the clearances are read in the units Chronicle stores them in. +- `9e62036a0`: the pub lean of the spending rule is documented. +- `46c0820cd`: the gambling stakes share of recreation. +- `e44af4a97`: draught shares and the gambling duty bases. +- `ecc3aaec1`: the re-pin to `200bf6d`, the vendored excise facts and the five measured OBR rows. +- `8c49c19d7`: the step is declared and its inputs are exported. +- `1c96edc93`: the charter-H2 fixture is regenerated. +- `352af5e41`: these receipts. + +Vahid's review at `e07424ddf`, addressed on the restacked branch: + +- `9e143959b`: Lottery Duty and the other gambling bases keyed to their own stakes, and the known biases stated in the stage notes. +- `303d1abf0`: the engine's duty on the national levels pinned against OBR, and the exclusion reasons restated with it. + +## What the stage does + +**Five scratch shares.** The `lcfs_consumption` chain draws them on the donor's diary lines, after its twenty targets: the eighteen spend targets and the two heating fuels microcosm#1383 draws. + +- tobacco within P602's off-trade alcohol and tobacco lines; +- on-trade alcohol within P611; +- gambling stakes (the seven games-of-chance stake lines) within P609; +- the National Lottery's share of those stakes (scratchcards and draws, c94316 and c94319); +- the betting and gaming share of the rest (football pools, bingo, and bookmaker and tote betting with gaming machines: c94311, c94312 and c94314). Society lotteries (c94313) and the Irish Lottery (c94315) pay no UK gambling duty. + +Appending targets to the identity-keyed chain leaves every earlier draw bit-identical. A household's parts are its shares of the totals it drew, so no total moves. + +**The `level_excise_quantities` step.** It shares each published FY2024-25 national figure out to households in proportion to the spending that buys it, at prior weights (one factor per input, the `level_road_fuel` scaling). The figures come from `excise_facts.json`, vendored from the pinned Chronicle feed: + +- litres of beer, cider, wine, spirits and other fermented products: HMRC's clearances in litres of pure alcohol over the engine's own strength for each product, which policyengine-uk multiplies back; +- the beer and cider draught shares: draught-relief clearances (alone or with small producer relief) over all clearances; +- cigarettes a week and grams a week of hand-rolling tobacco, cigars and other tobacco: HMRC's clearances over the engine's 52 weeks; +- the thirteen gambling duty bases. Each single-duty base is HMRC's cash receipts for the duty, or Machine Games Duty's liabilities for the band, over the engine's FY2024-25 rate, so the engine charges back the published receipts. General Betting Duty's base, its receipts over 15 percent, is split by the Gambling Commission's gross gambling yield for Great Britain. Lottery Duty's base follows the National Lottery stakes and the other twelve follow the betting and gaming stakes. + +Sparkling cider, heated tobacco and spread betting have no published quantity of their own and keep the engine's zero. + +**Deviation from the plan's Group C.** The plan took the Gambling Commission's yield by sector as each base, with HMRC's receipts as the check. The yield covers Great Britain only and includes undutiable parts (on-course betting, society lotteries). Receipts over rates give the dutiable UK base directly, and reproduce the receipts the way the clearances reproduce alcohol and tobacco duty. The yield now only splits General Betting Duty. + +## The spending rule for alcohol volume + +No on-trade volume share can be archived: MESAS is a NielsenIQ and Circana dashboard with no fixed file. So a pound buys the same volume in a pub as in a shop. Against a published on-trade volume share of about 27 percent, measured on the LCFS 2024-25 donor at survey weights: + +- a pound spent in a pub is given about 1.6 times the volume it buys (1.4 to 1.7 times for shares of 25 to 30 percent); +- a pound spent in a shop is given about 0.78 times; +- about 11 percent of the volume, and so of the duty, sits with other households (9 to 13 percent); +- the bottom three income deciles bear about 7 percent too little of the duty, and the top decile about 7 percent too much. + +## The national figures the step levels to + +These come from the declared rows of the pinned feed (`200bf6d`, FY2024-25, UK unless stated). They are public figures only. + +- **Alcohol, litres of product a year, at the engine's strengths:** + - beer 4.63bn (4.0%) and cider 0.67bn (4.5%); + - wine 1.27bn (12%), spirits 0.33bn (40%) and other fermented products 0.24bn (5%); + - draught shares: beer 0.397 and cider 0.233. +- **Tobacco, a year:** cigarettes 13.58bn sticks; hand-rolling tobacco 4,028 tonnes, cigars 395 tonnes and other tobacco 301 tonnes. The engine's inputs are a week, so each is divided by 52. +- **Gambling duty bases, a year:** + - remote gaming £5.54bn, the National Lottery £7.77bn, land-based casinos £0.70bn, bingo £0.25bn and pool betting £0.05bn; + - Machine Games Duty bands: lower £0.14bn, standard £3.02bn, higher £2.4m; + - General Betting Duty's £4.76bn base, split by the Commission's Great Britain yield: land-based fixed odds 32.1 percent, remote UK horse racing 18.7, remote other 45.5, exchange 2.6, horse and dog pools 1.2. + +## The duty those levels give, against OBR + +`docs/evidence/uk-excise-quantities-1359/outputs/national_reconciliation.json`. One household holds every national level, run through policyengine-uk 2.151.0 at FY2024-25. Every duty is linear in its inputs, so this is the frame's duty at prior weights, and the final-weight arms will add only the drift. The engine test `test_the_national_levels_sit_at_the_stated_gaps_from_obr` pins each gap to half a percentage point. + +| OBR row | Engine on the levels | OBR FY2024-25 | Gap | +|---|---|---|---| +| Beer and cider (accrued) | £4.050bn | £3.746bn | +8.1% | +| Wine and other fermented (accrued) | £4.808bn | £4.686bn | +2.6% | +| Spirits (accrued) | £4.205bn | £4.113bn | +2.2% | +| Alcohol total | £13.062bn | £12.545bn | +4.1% | +| Tobacco (cash) | £8.167bn | £7.927bn | +3.0% | +| Betting and gaming (cash) | £3.619bn | £3.616bn | +0.1% | + +- **Alcohol and tobacco.** The gaps are what the engine leaves out. For beer, that is one strength per product with no small producer relief or lower-strength rate. For tobacco, it is one pack price for the ad valorem element and the minimum excise tax, and cash receipts against the year's clearances. +- **Betting and gaming is an identity.** Each base is receipts over the engine's own rate, so the engine charges the receipts back. Its £3m gap is Machine Games Duty's liabilities (£612.3m) against its cash receipts (£609.2m); HMRC's receipts for all the duties are OBR's £3.616bn. Only weight drift can move the row, so it says nothing about whether the gambling inputs are right. Its exclusion has its own reason. +- **Household tax.** The three duties add £24.8bn to `household_tax` at FY2024-25, and `household_net_income` falls by the same. + +## The stage on a real spine + +Stage-only runs on microcosm#1333's spine (78,440 households), all on policyengine-uk 2.151.0; see `docs/evidence/uk-excise-quantities-1359/`. + +- **Against #1383's head** (`74a2a378e`, the `abf0921` feed), the restacked head (the `200bf6d` feed): + - thirteen of the twenty-two columns #1383 writes are byte-identical; + - every other existing column moves through the re-pin, not the excise step. Petrol and diesel move by −4.227 percent, exactly the September Consumer Trends revision of 07.2.2. The seven divisions #1383's levelling holds at the shared frame-to-donor ratio move by −0.149 percent each, because the lower road fuel lowers that ratio. The seven are furnishings, health, transport, communication, recreation, education and miscellaneous; + - the head adds the 24 excise inputs, and fit records go from 25 to 28. +- **The gambling split against the restacked head:** 33 of the 46 columns are byte-identical; only the 13 gambling inputs move. Fit records go from 28 to 30. +- **Gates.** All eight LCFS stage-health gates pass on every head run, including `uk_stage_lcfs_consumption_excise_quantities`. +- **The spending that shares out the quantities** (prior weights, frame): + + | Spending | Total | Households with any | + |---|---|---| + | Tobacco | £3.68bn | 8.2% | + | Off-trade alcohol | £16.28bn | 46.4% | + | On-trade alcohol | £15.69bn | 30.4% | + | Gambling stakes | £2.27bn | 14.6% | + | of which the National Lottery | £1.67bn | 10.7% | + | of which betting and gaming | £0.42bn | 2.0% | +- **The shares on the frame against the donor:** + + | Share | Frame | Donor | Frame positive | Donor positive | + |---|---|---|---|---| + | Tobacco, of P602's off-trade lines | 18.4% | 20.6% | 8.2% | 10.3% | + | On-trade alcohol, of P611 | 18.6% | 13.9% | 30.4% | 31.0% | + | Gambling stakes, of P609 | 1.5% | 1.5% | 14.6% | 17.0% | + | The National Lottery, of the stakes | 73.3% | 51.2% | 10.7% | 11.4% | + | Betting and gaming, of the other stakes | 69.6% | 72.9% | 2.0% | 3.6% | + + Every share rests on 30 or more donors. + +## Who carries the duty + +`docs/evidence/uk-excise-quantities-1359/outputs/excise_incidence.json`, at prior weights. + +**Each duty is one multiple of the spending that shares it out.** The levels are national while spending stays at diary level, so every household that carries a duty pays the same multiple of its own spending: + +| Duty | Duty | Spending it follows | Multiple | Households carrying it | +|---|---|---|---|---| +| Alcohol | £13.06bn | £31.97bn | 0.41 | 57.6% | +| Tobacco | £8.17bn | £3.68bn | 2.22 | 8.2% | +| Lottery | £0.93bn | £1.67bn | 0.56 | 10.7% | +| Other gambling | £2.69bn | £0.42bn | 6.35 | 2.0% | + +The diary records a fraction of what is bought. The National Lottery's base, ticket sales, is 4.7 times the National Lottery stakes it follows, and the other gambling bases are 34 times the betting and gaming stakes. So a tobacco or betting household pays more duty than the diary says it spent. VAT on the same goods stays on the survey base. + +**The duty sits on fewer households than buy.** 8.2 percent of households carry tobacco, against 11.9 percent of UK adults who smoked cigarettes in 2023 (ONS, *Adult smoking habits in the UK: 2023*). 10.7 percent carry the National Lottery and 2.0 percent betting and gaming, against 47 percent of adults in Great Britain who gambled in the past four weeks of 2025, or 27 percent once lottery-draw-only players are left out (Gambling Commission, *GSGB annual report 2025*). The share of households with a smoker or a gambler is above the adult rate, so these comparisons understate the gap. With the levels fixed, the duty per carrying household is higher by the same factor. + +**Where the frame loses incidence.** Part of the gap is the diary's two weeks, and part is the frame's. Weighted shares of households: + +| Part | Parent | Donor positive | Frame positive | Donor rate within parent | Frame rate within parent | +|---|---|---|---|---|---| +| Tobacco | Alcohol and tobacco | 10.3% | 8.2% | 18.9% | 15.5% | +| Gambling stakes | Recreation | 17.0% | 14.6% | 17.5% | 14.8% | +| National Lottery | Stakes | 11.4% | 10.7% | 67.1% | 73.0% | +| Other stakes | Stakes | 7.7% | 4.2% | 45.3% | 28.7% | +| Betting and gaming | Other stakes | 3.6% | 2.0% | 46.5% | 46.6% | + +The parents carry almost the donor's incidence: alcohol and tobacco spending is positive for 52.7 percent of the frame against 54.6 percent of donors. The loss is in the share draws. A share comes out zero more often on the frame than on the donor among households that carry the parent. Within the stakes, the chain more often draws all of a household's stakes as the National Lottery's, so other stakes, and with them betting and gaming, lose almost half their incidence. The regime gate of the share draw is the place to look. A prevalence redraw, like `redraw_zero_road_fuel`, is the follow-up the review names. + +**Other known biases**, in the stage notes: + +- Other tobacco (c22131) includes e-cigarette refills, so the tobacco inputs also follow vaping spending, and a household that only vapes carries tobacco duty. ONS counts 9.8 percent of adults in Great Britain using e-cigarettes in 2023. Vaping Products Duty, from 1 October 2026, needs a key of its own. +- The draught shares are national constants, so a household that buys alcohol only in shops takes the same draught relief as one that drinks in pubs. +- Remote UK horse racing is split out by the horse-racing share of all remote betting yield, which includes non-UK racing. From April 2027, when the engine charges other remote betting at 25 percent, too much of the base stays at 15 percent, so the rise is understated. + +## The gambling split + +The review asked for two shares: the lottery and the rest. On the donor the rest includes society lotteries (c94313) and the Irish Lottery (c94315). Neither pays UK gambling duty, and more than half of the donors with non-lottery stakes play only those. So the second share is betting and gaming within the rest, and the society and Irish lotteries carry no base. + +Keyed this way, the duties follow the right products. But on the diary's incidence, the betting and gaming duties concentrate: + +- **One key** (the restacked head): all £3.62bn of gambling duty on the 14.6 percent of households with any stakes, about £850 a year each. +- **The split** (this head): + - Lottery Duty, £0.93bn, on the 10.7 percent with National Lottery stakes: about £300 each; + - the other duties, £2.69bn, on the 2.0 percent with betting and gaming stakes: about £4,700 each. + +National revenue doesn't move, but the distribution of any betting or gaming reform does. Until a prevalence redraw lifts betting incidence, it lands on 2 percent of households. The choice between the split, a lottery-only split and one key is María's. + +## The re-pin + +The feed moves from `abf0921` to `200bf6d` (1,502,291 rows, up 2,990). Chronicle #384 retired the June Consumer Trends edition, so the feed carries September's. `docs/uk-chronicle-feed-repin.md` has the full entry. In outline: + +- **Vendored resources.** `excise_facts.json` is new, with 98 rows. `ons_household_expenditure_facts.json` takes the September values. Every other resource carries the same rows under the new feed identity. +- **National surface.** + - Calendar-2024 road fuel (07.2.2, bound) moves from £37.025bn to £35.460bn, −4.2 percent. It is also the level the stage sets petrol and diesel to. + - The measured calendar-2025 electricity row moves from £26.522bn to £28.840bn, and the gas row from £15.339bn to £18.958bn. + - The five OBR excise rows are added: beer and cider £3.746bn, wine £4.686bn and spirits £4.113bn, all accrued; tobacco £7.927bn and betting and gaming £3.616bn, both cash. Each is measured at FY2024-25, and the national compile-parity receipt lists them as ledger-only. +- **Local surface.** Byte-identical, apart from the membership's feed label. + +## Tests + +Run on the restacked head and kept to the surfaces the change touches: + +- **The LCFS stage, its stage-health gate and battery bindings:** 294 tests once the step was restacked; with the stage manifest, 168 once the gambling share was. +- **The re-pin:** the pin, the contract and references, the measure register and its tool, the holds, vendoring, the coverage manifest and the resource lists. 245 tests; the six feed-gated ones skip. +- **The declaration:** the spec, schema and re-emission, the gates and contract mirrors, the export surface, the graph, diagnostics and the LCFS stage. 863 tests. +- **Engine, the locked policyengine-uk 2.151.0:** the five engine files the stage touches, 65 of 65. +- **Charter-H2 parity** (`test_acceptance_h_parity.py`, engine and engine-free): 3 of 3. +- **Integration smoke** (`HF_STAGING_READ_TOKEN= bash tools/run_integration_tests.sh`): passes. + +For the review's changes: + +- **The LCFS stage** (`test_uk_lcfs_consumption.py`): 132 of 132. +- **The surfaces the split moves:** the stage-health gate, the spec and its re-emission, diagnostics, the coverage manifest, battery bindings, the contract mirrors and engine-free H2 parity. 732 of 732. +- **Engine:** the excise inputs with the new reconciliation, 10 of 10. H2 parity and the coverage manifest on the engine, 54 of 54. +- `tools/ci_test_plan.py verify`: ok. The battery digests do not move, since no gate changes. + +Before the restack, the full engine-free UK and shared suites ran once on the earlier head (14,175 tests); their only failures were environmental. The vendoring and national-reference regeneration checks against the full feed were not run: each holds the feed twice, about 50 GB. Instead, the tools ran on the pin, and their outputs were checked by diff against the base. + +## Disclosure + +Nothing here rests on fewer than ten households. The donor shares' parent residuals (P602 beside its lines, the P611 clip) are withheld as "<10" in every receipt. Donor support is reported as a band, and the incidence script refuses a share on fewer than 30 donors. No minimum, maximum or single record appears. + +## Open items + +- **Stacked on microcosm#1383.** This PR's CI runs once #1383 merges. #1383 must be merged without deleting its branch, or this PR closes with it. +- **The signatures.** The five measure exclusions (expiring 2027-01-08) and the `matched_period` hold (expiring 2026-12-11) were approved by María on 2026-10-24 as drafted. The exclusion reasons restated for the review need her approval again. +- **The measurement arms**, a control on #1383's head and the head, each a spine plus a national calibration. They will give the duty against OBR at final weights, which only adds drift to the table above. They will also give each duty by equivalised income decile beside ONS *Effects of taxes and benefits*, and the drift at final weights. +- **The scoring register.** The uk-candidate-eval register is re-frozen before the next national solve, since the national register version moves with the five new references. +- **Decisions for María:** the gambling keys (the split, a lottery-only split or one key), and whether tobacco and gambling spending should be levelled to Consumer Trends 02.2 and 09.4.3, as road fuel is to 07.2.2. Levelling would move the VAT base. +- **Follow-ups:** a prevalence redraw for tobacco and gambling, which would also correct the share draws' loss of incidence; a key for Vaping Products Duty; draught relief keyed to on-trade spending. +- **The betting and gaming binding note** in `uk_population_targets.json` still puts the row's gap down to spread betting and the two receipts series. Its exclusion reason now gives the gap correctly. Correcting the note re-derives every surface that pins the contract's hash, so it waits for the next change to the contract. diff --git a/packages/microcosm-build/src/microcosm/build/source_manifest.py b/packages/microcosm-build/src/microcosm/build/source_manifest.py index 1eeaddd96e..f76f65741b 100644 --- a/packages/microcosm-build/src/microcosm/build/source_manifest.py +++ b/packages/microcosm-build/src/microcosm/build/source_manifest.py @@ -152,6 +152,7 @@ "impute_prepayment_meter", "iterative_proportional_fit", "level_road_fuel", + "level_excise_quantities", "redraw_zero_road_fuel", "recompose_from_remainder", "pair_clone_households_to_originals", diff --git a/packages/microcosm-build/src/microcosm/build/spec_engine/inventory_coverage.py b/packages/microcosm-build/src/microcosm/build/spec_engine/inventory_coverage.py index 4a20e69687..6058bdeffd 100644 --- a/packages/microcosm-build/src/microcosm/build/spec_engine/inventory_coverage.py +++ b/packages/microcosm-build/src/microcosm/build/spec_engine/inventory_coverage.py @@ -367,8 +367,8 @@ # moves both again: calibrate gains budget_search_bracket, whose default # keeps the US bracket, and the budget search, which the US solve does # not run, changes its probes, so again no US solve changes. - "seed_map": "0db599df419dd16779097361dc72afdefb8df2abf8b134078da9c52d31d8e017", - "seed_protocol": "2b7bdc1d6b0da1bdaf54b4cac29f10f2d3c8bed2e177729c2c89e6b33a099cc5", + "seed_map": "54223ee7d55283c8b2c6127ecece8ba6e76b8da0b72946b3cac88a1ba8fa7883", + "seed_protocol": "72d918a0cda5ccc95dee3aaabaa4ad1cbabbf4f282abc5046b49b5f183dc0dc9", "source_manifest": "f4f8bfeb79268a4043a843b47cec1d1c0e58e9f5dd6bc23417ada95446dd7b8e", "take_up": "9522ce40f7dea569312dd7a7beb474e5a5afadd2f1e10cb5876534c3ef623d35", "tail": "ac92829c88a1a4fb6460d61190918d5d99c6c377fc8dd8f62f02b332d09bf59c", 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 e7e73f8185..93733b5b8b 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 @@ -7368,6 +7368,37 @@ "type": "number" } } + }, + "shares": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": false, + "required": [ + "total", + "numerator", + "denominator" + ], + "properties": { + "total": { + "type": "string" + }, + "numerator": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "denominator": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + } + } + } } } }, @@ -7473,6 +7504,12 @@ }, "seed": { "type": "integer" + }, + "gate_calibration": { + "enum": [ + "in_sample", + "cross_fitted" + ] } } }, @@ -12355,6 +12392,255 @@ } } }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "kind", + "resource", + "period_type", + "period_value", + "fiscal_start", + "geography_id", + "weeks_per_year", + "alcohol_volume_weights", + "outputs" + ], + "properties": { + "kind": { + "const": "level_excise_quantities" + }, + "resource": { + "type": "string" + }, + "period_type": { + "const": "fiscal_year" + }, + "period_value": { + "type": "integer" + }, + "fiscal_start": { + "type": "string" + }, + "geography_id": { + "type": "string" + }, + "weeks_per_year": { + "type": "integer" + }, + "alcohol_volume_weights": { + "type": "object", + "additionalProperties": false, + "required": [ + "rule" + ], + "properties": { + "rule": { + "enum": [ + "spending", + "published_on_trade_share" + ] + }, + "concept": { + "type": "string" + }, + "geography_id": { + "type": "string" + }, + "dimensions": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "outputs": { + "type": "object", + "minProperties": 1, + "additionalProperties": { + "type": "object", + "additionalProperties": false, + "required": [ + "concept", + "dimensions", + "unit" + ], + "properties": { + "concept": { + "type": "string" + }, + "dimensions": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "minProperties": 1 + }, + "unit": { + "type": "string" + }, + "share": { + "type": "number" + }, + "strength": { + "type": "object", + "additionalProperties": false, + "required": [ + "value", + "parameter_path" + ], + "properties": { + "value": { + "type": "number" + }, + "parameter_path": { + "type": "string" + } + } + } + } + } + }, + "draught_shares": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": false, + "required": [ + "concept", + "unit", + "numerator", + "denominator" + ], + "properties": { + "concept": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "numerator": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "minProperties": 1 + } + }, + "denominator": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "minProperties": 1 + } + } + } + } + }, + "gambling": { + "type": "object", + "additionalProperties": false, + "required": [ + "receipts", + "machine_games_liabilities", + "yield", + "rates" + ], + "properties": { + "receipts": { + "type": "object", + "additionalProperties": false, + "required": [ + "concept" + ], + "properties": { + "concept": { + "type": "string" + }, + "geography_id": { + "type": "string" + }, + "dimensions": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "machine_games_liabilities": { + "type": "object", + "additionalProperties": false, + "required": [ + "concept" + ], + "properties": { + "concept": { + "type": "string" + }, + "geography_id": { + "type": "string" + }, + "dimensions": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "yield": { + "type": "object", + "additionalProperties": false, + "required": [ + "concept" + ], + "properties": { + "concept": { + "type": "string" + }, + "geography_id": { + "type": "string" + }, + "dimensions": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "rates": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": false, + "required": [ + "value", + "parameter_path" + ], + "properties": { + "value": { + "type": "number" + }, + "parameter_path": { + "type": "string" + } + } + } + } + } + } + } + }, { "type": "object", "additionalProperties": false, diff --git a/packages/microcosm-build/src/microcosm/build/uk/ashe_employer_pension_contribution_rates.json b/packages/microcosm-build/src/microcosm/build/uk/ashe_employer_pension_contribution_rates.json index ace5763211..549925e76a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ashe_employer_pension_contribution_rates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ashe_employer_pension_contribution_rates.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json index 1c6c7f3d7c..0b96e71804 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json +++ b/packages/microcosm-build/src/microcosm/build/uk/calibration_measure_exclusions.json @@ -330,6 +330,51 @@ "approved_on": "2026-10-24", "expires_on": "2027-01-24" }, + { + "name": "obr.beer_and_cider_duties", + "reason": "Level set by the build, not the weights: the lcfs_consumption stage levels beer and cider litres to HMRC's FY2024-25 clearances at the engine's strengths, at prior weights (microcosm#1359), so the row reads those clearances at the engine's rates and reliefs: £4.050bn against OBR's £3.746bn accrued (+8.1 percent). The gap is the engine's one strength per product, the small producer relief and lower-strength rates it does not charge, sparkling cider, which the clearances count within cider, and the timing of receipts, none of which the frame holds, so binding the row would move weight onto the households that buy to cover them. Measured at its FY2024-25 period on every evaluation with tools/diagnose_uk_consumption_taxes.py, where any move from that gap is weight drift; rebind when the engine's duty on published clearances reproduces the receipts.", + "tracking": "microcosm#1359", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-23 on the microcosm#1359 plan (decision 3): the OBR alcohol and tobacco rows are compared at FY2024-25, the base year, as measured diagnostics, with the exclusions expiring beside the VAT and road-fuel ones; the betting and gaming row is the plan's Group C row. Receipts: experiments/1359-excise-quantities-receipts.md.", + "approved_on": "2026-10-23", + "expires_on": "2027-01-08" + }, + { + "name": "obr.wine_duties", + "reason": "Level set by the build, not the weights: the lcfs_consumption stage levels wine and other fermented litres to HMRC's FY2024-25 clearances at the engine's strengths, at prior weights (microcosm#1359), so the row reads those clearances at the engine's rates and reliefs: £4.808bn against OBR's £4.686bn accrued (+2.6 percent). The gap is the engine's one strength per product against the strengths cleared, the small producer relief it does not charge and the timing of receipts, none of which the frame holds, so binding the row would move weight onto the households that buy to cover them. Measured at its FY2024-25 period on every evaluation with tools/diagnose_uk_consumption_taxes.py, where any move from that gap is weight drift; rebind when the engine's duty on published clearances reproduces the receipts.", + "tracking": "microcosm#1359", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-23 on the microcosm#1359 plan (decision 3): the OBR alcohol and tobacco rows are compared at FY2024-25, the base year, as measured diagnostics, with the exclusions expiring beside the VAT and road-fuel ones; the betting and gaming row is the plan's Group C row. Receipts: experiments/1359-excise-quantities-receipts.md.", + "approved_on": "2026-10-23", + "expires_on": "2027-01-08" + }, + { + "name": "obr.spirits_duties", + "reason": "Level set by the build, not the weights: the lcfs_consumption stage levels spirits litres to HMRC's FY2024-25 clearances at the engine's strength, at prior weights (microcosm#1359), so the row reads those clearances at the engine's rates: £4.205bn against OBR's £4.113bn accrued (+2.2 percent). The gap is the engine's one strength against the strengths cleared and the timing of receipts, none of which the frame holds, so binding the row would move weight onto the households that buy to cover them. Measured at its FY2024-25 period on every evaluation with tools/diagnose_uk_consumption_taxes.py, where any move from that gap is weight drift; rebind when the engine's duty on published clearances reproduces the receipts.", + "tracking": "microcosm#1359", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-23 on the microcosm#1359 plan (decision 3): the OBR alcohol and tobacco rows are compared at FY2024-25, the base year, as measured diagnostics, with the exclusions expiring beside the VAT and road-fuel ones; the betting and gaming row is the plan's Group C row. Receipts: experiments/1359-excise-quantities-receipts.md.", + "approved_on": "2026-10-23", + "expires_on": "2027-01-08" + }, + { + "name": "obr.tobacco_duties", + "reason": "Level set by the build, not the weights: the lcfs_consumption stage levels cigarettes and grams of tobacco to HMRC's FY2024-25 clearances, at prior weights (microcosm#1359), so the row reads those clearances at the engine's rates: £8.167bn against OBR's £7.927bn in cash (+3.0 percent). The gap is the engine's one pack price, on which it charges the ad valorem element and the minimum excise tax, against the prices sold, and cash receipts against the year's clearances, none of which the frame holds, so binding the row would move weight onto the households that buy to cover them. Measured at its FY2024-25 period on every evaluation with tools/diagnose_uk_consumption_taxes.py, where any move from that gap is weight drift; rebind when the engine's duty on published clearances reproduces the receipts.", + "tracking": "microcosm#1359", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-23 on the microcosm#1359 plan (decision 3): the OBR alcohol and tobacco rows are compared at FY2024-25, the base year, as measured diagnostics, with the exclusions expiring beside the VAT and road-fuel ones; the betting and gaming row is the plan's Group C row. Receipts: experiments/1359-excise-quantities-receipts.md.", + "approved_on": "2026-10-23", + "expires_on": "2027-01-08" + }, + { + "name": "obr.betting_and_gaming_duties", + "reason": "An identity, not a check: the lcfs_consumption stage levels each gambling base to HMRC's FY2024-25 cash receipts for its duty, or Machine Games Duty's liabilities for its band, over the engine's own rate (Gaming Duty's over the engine's effective-rate proxy, itself those receipts over the Gambling Commission's casino yield), at prior weights (microcosm#1359), so the engine charges the receipts back by construction: £3.619bn against OBR's £3.616bn in cash (+0.1 percent), the gap being Machine Games Duty's £612.3m of liabilities against its £609.2m of receipts. Only weight drift can move it, so the row is measured for drift and is no evidence that the gambling inputs are right: their test is who carries them, by income decile. Binding it would move weight onto the households that gamble to hold a level the build already sets. Measured at its FY2024-25 period on every evaluation with tools/diagnose_uk_consumption_taxes.py; rebind if the bases come from published stakes or yield rather than receipts.", + "tracking": "microcosm#1359", + "approved_by": "juaristi22", + "adjudication": "María's ruling of 2026-10-23 on the microcosm#1359 plan (decision 3): the OBR alcohol and tobacco rows are compared at FY2024-25, the base year, as measured diagnostics, with the exclusions expiring beside the VAT and road-fuel ones; the betting and gaming row is the plan's Group C row. Receipts: experiments/1359-excise-quantities-receipts.md.", + "approved_on": "2026-10-23", + "expires_on": "2027-01-08" + }, { "name": "ons.household_electricity_expenditure", "reason": "Published-source residual, not a weight question: the lcfs_consumption stage sets electricity spend from the DESNZ Energy Trends domestic volume over the four quarters of calendar 2024 at QEP calendar-2024 average prices paid (the level the energy_rake gate checks), and ONS Consumer Trends 04.5.1 sits below it on every aligned basis. For calendar 2024 it is GBP 26.10bn against the stage's GBP 29.52bn on microcosm#1121's head spine (0.88). For calendar 2025 it is GBP 26.52bn against GBP 29.60bn for Energy Trends volume times QEP unit and fixed costs (0.90), and 1.11 times unit cost alone; meters against households explains about 2 percent. On the 2026-09-30 national problem the calibration took electricity from GBP 29.11bn at design weights to GBP 26.54bn (8.8 percent; 93.0 to 82.9 TWh, 10.9 percent). In a re-solve with the four consumption-tax rows masked together it stayed at GBP 28.70bn, and the other 1,086 rows fitted no worse. Measured on every evaluation with tools/diagnose_uk_consumption_taxes.py; retire if the reconciliation microcosm#1278 tracks finds a concept difference to bridge. On arm 2 of the next policyengine-uk bump (policyengine-uk 2.151.0, with the liquid and solid fuels drawn), held out, electricity spend stays within the consumption drift block's 2 percent flag of its design-weight level; the frame's energy totals rest in part on households of the SPI support channel, so no new figure is given (SN 9422).", 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 3fc93950b5..53c9a97b56 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", "consumer_fact_schema_versions": [ "chronicle.consumer_fact.v4" ], "consumer_fact_schema_sha256": "d953306d6f01fbc64db4372d0262d3012ee590269f8a25b276b18dca0626c6a0", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" } 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 6b95f1e4f7..477ef27a35 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/country_package.json +++ b/packages/microcosm-build/src/microcosm/build/uk/country_package.json @@ -497,6 +497,11 @@ "kind": "legacy_json", "schema_id": "legacy_json" }, + { + "path": "excise_facts.json", + "kind": "legacy_json", + "schema_id": "legacy_json" + }, { "path": "dft_bus_journeys.json", "kind": "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 1a4d942dad..ffe2e3f77c 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/desnz_local_energy_facts.json b/packages/microcosm-build/src/microcosm/build/uk/desnz_local_energy_facts.json index c7885e764a..f053cf2080 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/desnz_local_energy_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/desnz_local_energy_facts.json @@ -21,12 +21,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/desnz_road_fuel_by_vehicle.json b/packages/microcosm-build/src/microcosm/build/uk/desnz_road_fuel_by_vehicle.json index af19886e34..71a2ecad0c 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/desnz_road_fuel_by_vehicle.json +++ b/packages/microcosm-build/src/microcosm/build/uk/desnz_road_fuel_by_vehicle.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 87ad3a59f2..8b41930436 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 @@ -17,12 +17,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/dft_bus_journeys.json b/packages/microcosm-build/src/microcosm/build/uk/dft_bus_journeys.json index e6792d1436..32425e6e7b 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/dft_bus_journeys.json +++ b/packages/microcosm-build/src/microcosm/build/uk/dft_bus_journeys.json @@ -17,12 +17,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 91c6620b7f..de7419a9cd 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/dwp_move_to_uc_facts.json b/packages/microcosm-build/src/microcosm/build/uk/dwp_move_to_uc_facts.json index 377caeba34..34ba5028de 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/dwp_move_to_uc_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/dwp_move_to_uc_facts.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/dwp_uc_award_band_facts.json b/packages/microcosm-build/src/microcosm/build/uk/dwp_uc_award_band_facts.json index 8a1c4221db..14197562a1 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/dwp_uc_award_band_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/dwp_uc_award_band_facts.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/excise_facts.json b/packages/microcosm-build/src/microcosm/build/uk/excise_facts.json new file mode 100644 index 0000000000..4055cbfa27 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk/excise_facts.json @@ -0,0 +1,4812 @@ +{ + "schema_version": 1, + "country": "uk", + "kind": "uk_vendored_ledger_facts", + "resource": "excise_facts.json", + "purpose": "HMRC FY2024-25 alcohol clearances by product, ABV band, duty point and relief (Alcohol Bulletin) and tobacco clearances by product (Tobacco Bulletin), HMRC betting and gaming duty cash receipts by duty and Machine Games Duty liabilities by rate band (Betting and Gaming statistics), and the Gambling Commission's FY2024-25 gross gambling yield for Great Britain by sector, activity and betting event: the national quantities and bases the LCFS level_excise_quantities step shares out to households (microcosm#1359, PolicyEngine/chronicle#381).", + "consumers": [ + "uk_runtime.lcfs_consumption" + ], + "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": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", + "build": "build-bundle --suite uk -> build-consumer-artifact", + "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" + }, + "selections": [ + { + "label": "hmrc_alcohol_clearances_fy2024", + "selector": { + "source_name": "hmrc", + "source_concept": "hmrc.alcohol_clearances", + "geography_id": "K02000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "row_count": 40 + }, + { + "label": "hmrc_tobacco_clearances_fy2024", + "selector": { + "source_name": "hmrc", + "source_concept": "hmrc.tobacco_clearances", + "geography_id": "K02000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "row_count": 5 + }, + { + "label": "hmrc_betting_and_gaming_duty_receipts_fy2024", + "selector": { + "source_name": "hmrc", + "source_concept": "hmrc.betting_and_gaming_duty_receipts", + "geography_id": "K02000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "row_count": 9 + }, + { + "label": "hmrc_machine_games_duty_liabilities_fy2024", + "selector": { + "source_name": "hmrc", + "source_concept": "hmrc.machine_games_duty_liabilities", + "geography_id": "K02000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "row_count": 4 + }, + { + "label": "gambling_commission_gross_gambling_yield_fy2024", + "selector": { + "source_name": "gambling_commission", + "source_concept": "gambling_commission.gross_gambling_yield", + "geography_id": "K03000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "row_count": 40 + } + ], + "row_count": 98, + "rows": [ + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_abd296c0ca997d6be961641a", + "semantic_fact_key": "ledger_semantic_fact_v2_c21bcce6fbc4f0820c82b2fc", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_all", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_all", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "all", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 16727655237.425915 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3fc6fc26f196f92a20441bca", + "semantic_fact_key": "ledger_semantic_fact_v2_48efe357969575fac538d8f6", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_all_excluding_lotteries", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_all_excluding_lotteries", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "all_excluding_lotteries", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 12565077307.365917 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_19876f1d1f062bd8e91a76a0", + "semantic_fact_key": "ledger_semantic_fact_v2_8ae35affa0282d04b5c7cc0a", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10.fy2024.great_britain.ggy_all_remote", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_all_remote", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "all_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 7755915228.680349 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2912f36d3d5094f4dcfe321c", + "semantic_fact_key": "ledger_semantic_fact_v2_a86d731a61e8bbeb0e0eca58", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_arcades_non_remote", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_arcades_non_remote", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "arcades_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 722829269.7436398 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_36535e1c8c7c5d6ca216942d", + "semantic_fact_key": "ledger_semantic_fact_v2_724d9180c7d1434cc7f7c333", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_non_remote", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_non_remote", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 2505753290.27197 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3333cc9a2ba6d8d2c46ab493", + "semantic_fact_key": "ledger_semantic_fact_v2_09ed919f201b638ce7a3cef2", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_betting_remote", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 2620948697.1002502 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d4e1b388c95a1e4711cf2f36", + "semantic_fact_key": "ledger_semantic_fact_v2_c6a5e65e96fed15dcfd88785", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_bingo_non_remote", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_bingo_non_remote", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "bingo_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 650187642.13044 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c28aa760a498eba828088633", + "semantic_fact_key": "ledger_semantic_fact_v2_e2c55fef3533f00fad3c9c47", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_bingo_remote", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_bingo_remote", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "bingo_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 171354430.56746998 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0e021da3aa3ba46779af2fbb", + "semantic_fact_key": "ledger_semantic_fact_v2_8006de845632ea793bbe62b4", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_casino_non_remote", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_non_remote", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "casino_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 930391876.5395198 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_27744f87188553d9bfbcc427", + "semantic_fact_key": "ledger_semantic_fact_v2_503ac373265d56aad127fead", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_casino_remote", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_remote", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "casino_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 4963612101.012628 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_621958763359ff2da8c7391b", + "semantic_fact_key": "ledger_semantic_fact_v2_76160f58cee7351028554eec", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024.great_britain.ggy_lotteries", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_lotteries", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "lotteries", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 792167240.3899996 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d5ea3c4f668dd8314cdcc34d", + "semantic_fact_key": "ledger_semantic_fact_v2_73f3c712b0cb344cdb075231", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_1_national_lottery.fy2024.great_britain.ggy_national_lottery", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_national_lottery", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_1_national_lottery.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "all", + "gambling_sector": "national_lottery", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 3370410689.6699996 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_48efb9511f09a5fba6a73ddc", + "semantic_fact_key": "ledger_semantic_fact_v2_bba795a43113310fe2baa3cc", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_betting", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 2495675525.5166 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_41d1e5ae450c6a208acd3218", + "semantic_fact_key": "ledger_semantic_fact_v2_a8069fef9ce43bf97d63b0ef", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_betting_exchange", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_betting_exchange", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "betting_exchange", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 101354147.86830999 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a25746b57a9c1111c6e732f8", + "semantic_fact_key": "ledger_semantic_fact_v2_4edbd766a99195902dd4f7cd", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_7.fy2024.great_britain.ggy_bingo_non_remote_bingo_games", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_bingo_non_remote_bingo_games", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_7.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "bingo_games", + "gambling_sector": "bingo_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 226250544.64849004 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c280b466f7417dae03b51ce6", + "semantic_fact_key": "ledger_semantic_fact_v2_8bb4a02c657cb43d92beb04d", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024.great_britain.ggy_casino_remote_blackjack", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_remote_blackjack", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "blackjack", + "gambling_sector": "casino_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 187729116.59390998 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a4a33d53ebc0f2d08a1b6e87", + "semantic_fact_key": "ledger_semantic_fact_v2_f51155331d3f8ddb3b24e437", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024.great_britain.ggy_casino_remote_card_game", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_remote_card_game", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "card_game", + "gambling_sector": "casino_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 0 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0c82c28018745f0792c0cb9d", + "semantic_fact_key": "ledger_semantic_fact_v2_a592a526474e6e258e7ae9dd", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_8.fy2024.great_britain.ggy_casino_non_remote_casino_games", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_non_remote_casino_games", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_8.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "casino_games", + "gambling_sector": "casino_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 698918414.8386999 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_58dfbd94707a994f56dde606", + "semantic_fact_key": "ledger_semantic_fact_v2_d1b8d217c30490d66881867c", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_7.fy2024.great_britain.ggy_bingo_non_remote_gaming_machines", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_bingo_non_remote_gaming_machines", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_7.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "gaming_machines", + "gambling_sector": "bingo_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 423937097.47524995 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_17e83dda624f5bdff3fa8591", + "semantic_fact_key": "ledger_semantic_fact_v2_6061f140113b9f4c827af764", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_8.fy2024.great_britain.ggy_casino_non_remote_gaming_machines", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_non_remote_gaming_machines", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_8.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "gaming_machines", + "gambling_sector": "casino_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 231473461.70081997 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9e76fa384e8155a59e091709", + "semantic_fact_key": "ledger_semantic_fact_v2_9320c4fa302c7237db4a7685", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_gaming_machines", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_non_remote_off_course_gaming_machines", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_gaming_machines", + "gambling_sector": "betting_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 1207436991.42725 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a960e966a483aa0a729f2b6e", + "semantic_fact_key": "ledger_semantic_fact_v2_195cd6843d93641c17079efe", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_off_course_over_the_counter", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_non_remote_off_course_over_the_counter", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "off_course_over_the_counter", + "gambling_sector": "betting_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 1249307207.97355 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_35cf94566453569ec6c30a96", + "semantic_fact_key": "ledger_semantic_fact_v2_217c1b97578759ff767a8d5f", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_on_course", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_non_remote_on_course", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "on_course", + "gambling_sector": "betting_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 27784638.927430008 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_86b27162f954f3024831fb48", + "semantic_fact_key": "ledger_semantic_fact_v2_608620d4356d2351e28287bc", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024.great_britain.ggy_casino_remote_other_casino_games", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_remote_other_casino_games", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "other_casino_games", + "gambling_sector": "casino_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 220729834.43699002 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1dec05141f583f08f4961ba7", + "semantic_fact_key": "ledger_semantic_fact_v2_400c1f9d91cffd173198412b", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024.great_britain.ggy_casino_remote_poker_peer_to_peer", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_remote_poker_peer_to_peer", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "poker_peer_to_peer", + "gambling_sector": "casino_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 35507105.665690005 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f4506a8efe55ac842bacfb82", + "semantic_fact_key": "ledger_semantic_fact_v2_93260e8cdf523567f19a5678", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024.great_britain.ggy_betting_non_remote_pool_betting", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_non_remote_pool_betting", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_6.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_non_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 21233797.52638 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_358890ee4bd5dfb88542101b", + "semantic_fact_key": "ledger_semantic_fact_v2_cb208c9623c82e8eabd5e7bf", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024.great_britain.ggy_betting_remote_pool_betting", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_pool_betting", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_type.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "pool_betting", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 23919023.715339996 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_048a9ca1c3525a2353989eaf", + "semantic_fact_key": "ledger_semantic_fact_v2_879025f4c9ad1e56d0a70db8", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024.great_britain.ggy_casino_remote_roulette", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_remote_roulette", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "roulette", + "gambling_sector": "casino_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 371620314.16479 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_90e671240dd74c6a18e3bd32", + "semantic_fact_key": "ledger_semantic_fact_v2_cad148d4fd9432307122bbce", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024.great_britain.ggy_casino_remote_slots", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_remote_slots", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "slots", + "gambling_sector": "casino_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 4148025730.1512485 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d2fbf85f8511bc31630fc4c4", + "semantic_fact_key": "ledger_semantic_fact_v2_b01233a286170699e4e1b30f", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024.great_britain.ggy_casino_remote_table_game", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_casino_remote_table_game", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10a.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "all", + "gambling_activity": "table_game", + "gambling_sector": "casino_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 0 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7c438fe3ccb847b63504cf56", + "semantic_fact_key": "ledger_semantic_fact_v2_41f63cf905143e03dff3ca7b", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_cricket", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_cricket", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "cricket", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 61118228.15077 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_96d8271b0bf0f4ce5460ebdd", + "semantic_fact_key": "ledger_semantic_fact_v2_85f95f0f7a16d996c9ea3d73", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_dogs", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_dogs", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "dogs", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 74079707.63013001 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_003fe01246a06d22ce8e97cb", + "semantic_fact_key": "ledger_semantic_fact_v2_60f78fbe1e8c2cc1ac4c9dec", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_financials", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_financials", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "financials", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 0 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fb7194a85ef06dd3095544f2", + "semantic_fact_key": "ledger_semantic_fact_v2_cbb9e2f791234fc8be6646ac", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_football", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_football", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "football", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 1329648829.74057 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d5212cffedfd89a41cef4a1f", + "semantic_fact_key": "ledger_semantic_fact_v2_db6eb92325ecbea459cabbbe", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_golf", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_golf", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "golf", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 12678173.806009999 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3e56c9fcc662045d7ee83a90", + "semantic_fact_key": "ledger_semantic_fact_v2_f1bf8ba921e5f7449e09f0c1", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_horses", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_horses", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "horses", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 762636459.2584901 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2ef8c62c9ad5abb95d3f3211", + "semantic_fact_key": "ledger_semantic_fact_v2_0af03d37b1a4c6bf737db3e3", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_other", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_other", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "other", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 255178517.16403002 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5d2385ee5fe07a0d2d22667a", + "semantic_fact_key": "ledger_semantic_fact_v2_c02982790ead17969276ee8c", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_tennis", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_tennis", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "tennis", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 82622938.62931 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_75cf39d5b5d0182c704ca4b0", + "semantic_fact_key": "ledger_semantic_fact_v2_83729113b667849fc74a8226", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_unallocated_revenue_share", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_unallocated_revenue_share", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "unallocated_revenue_share", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 0 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9fd9e4e80caed519296af043", + "semantic_fact_key": "ledger_semantic_fact_v2_de837748863f0bd6bf520ac7", + "source_record_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024.great_britain.ggy_betting_remote_virtual", + "concept": "gambling_commission.gross_gambling_yield", + "measure_id": "ggy_betting_remote_virtual", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "licensed_gambling_operators" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "gambling_commission.industry_statistics_2026_09.sheet_10b_by_event.fy2024", + "groupby_dimension": "gambling_commission.statistics_scope", + "groupby_value_id": "great_britain", + "table_record_kind": "total" + }, + "dimensions": { + "betting_event": "virtual", + "gambling_activity": "all", + "gambling_sector": "betting_remote", + "published_unit": "gbp_million" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Industry Statistics - Annual report - Financial year April 2025 to March 2026 - Official statistics", + "source_file": "Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx", + "source_sha256": "a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58", + "vintage": "2026_09_17_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-industry-statistics-fy2025-26/2026/a6ea23b5ddff2f3839ebec2a8cc0d9a0817e218f5bf10921e0172ecae768da58/Industry_Statistics_-_Annual_report_-_Financial_year_April_2025_to_March_2026_-_Official_Statistics.xlsx" + }, + "value": 42985842.720939994 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bbb77534d8614a24a2455197", + "semantic_fact_key": "ledger_semantic_fact_v2_a1d9cd23a35d1863b16cd2c3", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.total_clearances", + "concept": "hmrc.alcohol_clearances", + "measure_id": "total_clearances", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 185277635.28381 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_77de58f54fcc8fc98870192e", + "semantic_fact_key": "ledger_semantic_fact_v2_7f4ae3d1dec26bb839cb2753", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_draught_and_small_producer_relief", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_draught_and_small_producer_relief", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 9234320.30598535 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ac36d662f0ad1c3fc719b305", + "semantic_fact_key": "ledger_semantic_fact_v2_c9eb8907c9512b77e1c5c3df", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_draught_relief_only", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_draught_relief_only", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "draught_relief_only", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 64367298.8324578 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_12b8833ecdd09eded0b1c626", + "semantic_fact_key": "ledger_semantic_fact_v2_b1ab117693c2eda7d69fca16", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_no_relief", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_no_relief", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "no_relief", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 108157743.823733 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3f7bcb7ba73af94e40fcbe8b", + "semantic_fact_key": "ledger_semantic_fact_v2_8aa7822dea0c51a097825801", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_small_producer_relief_only", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_small_producer_relief_only", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "small_producer_relief_only", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 3518272.32163325 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_318d703b2ec0d8e2da40134e", + "semantic_fact_key": "ledger_semantic_fact_v2_492558311ed35de92d8ab14f", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_ex_ship", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_ship", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "ex_ship", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 6311996.08838668 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a560b176187f4846200d89cc", + "semantic_fact_key": "ledger_semantic_fact_v2_de91554f04ac9ef72c19e848", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_ex_warehouse", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_warehouse", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "ex_warehouse", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 57478033.9157708 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c5fb6e3fd0427efca59d0ecb", + "semantic_fact_key": "ledger_semantic_fact_v2_7e9c1d0a4075db069783562f", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_uk_registered", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_uk_registered", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "uk_registered", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 121487605.279652 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f234983fae5fb8b314426076", + "semantic_fact_key": "ledger_semantic_fact_v2_146a2a2d7476432835b2a62d", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_below_3_5_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_below_3_5_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "below_3_5", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 13294837.6479363 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_16947f1d5f40c2847b928148", + "semantic_fact_key": "ledger_semantic_fact_v2_4ad7f91e6dace66e1d40c1ef", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_3_5_to_8_5_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_3_5_to_8_5_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "from_3_5_below_8_5", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 171798982.219733 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7b903b88f5ba457a5b4872e3", + "semantic_fact_key": "ledger_semantic_fact_v2_346e6018ab1998a2e79161aa", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024.beer.clearances_from_8_5_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_from_8_5_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.beer.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "beer", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "from_8_5", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 183815.416140202 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_940365fde77c4d3b8ded3288", + "semantic_fact_key": "ledger_semantic_fact_v2_b84f3f0499354411aecdcc91", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.total_clearances", + "concept": "hmrc.alcohol_clearances", + "measure_id": "total_clearances", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "cider", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 30347471.2870859 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_096a4bdb5a0b2206b439a7f4", + "semantic_fact_key": "ledger_semantic_fact_v2_447b4b84e984fa1e6460ed35", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_draught_and_small_producer_relief", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_draught_and_small_producer_relief", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "cider", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 351226.826478132 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3178546bd95a18a7ea8483e2", + "semantic_fact_key": "ledger_semantic_fact_v2_d739cb4a1a16e25f4aa17c52", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_draught_relief_only", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_draught_relief_only", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "cider", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "draught_relief_only", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 6706864.9848297 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9d652461669908bb77adb643", + "semantic_fact_key": "ledger_semantic_fact_v2_42cc863986d39bca51ae6ca6", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_no_relief", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_no_relief", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "cider", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "no_relief", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 22899369.8441633 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4b1ac653690e4f2a71a5095f", + "semantic_fact_key": "ledger_semantic_fact_v2_94cb1cd7145ead2b5ed875ee", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_small_producer_relief_only", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_small_producer_relief_only", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "cider", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "small_producer_relief_only", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 390009.631614714 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d1fd3c849d76ccfa775a96dd", + "semantic_fact_key": "ledger_semantic_fact_v2_ca7cd9ee2315465e88697746", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_ex_ship", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_ship", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "cider", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "ex_ship", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 2044694.15691132 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f2d17e1dcc46e1c398bf1a1e", + "semantic_fact_key": "ledger_semantic_fact_v2_4116d9e644a04e5694320dc1", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_ex_warehouse", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_warehouse", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "cider", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "ex_warehouse", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 14190279.367336 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b2a795545543131a178cc025", + "semantic_fact_key": "ledger_semantic_fact_v2_1c048c694178af0c1ccca3e0", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024.cider.clearances_uk_registered", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_uk_registered", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.cider.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "cider", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "uk_registered", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 14112497.7628385 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4f9f0abdbd76aa06180441a9", + "semantic_fact_key": "ledger_semantic_fact_v2_bd6ec5e787b0c7d20840b1a1", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.total_clearances", + "concept": "hmrc.alcohol_clearances", + "measure_id": "total_clearances", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "other_fermented_products", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "other_fermented_products", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 11971792.324352 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e56c5d1254eee5e111caa6e7", + "semantic_fact_key": "ledger_semantic_fact_v2_2f4842bbf39742c589fd6559", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.clearances_draught_and_or_small_producer_relief", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_draught_and_or_small_producer_relief", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "other_fermented_products", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "other_fermented_products", + "duty_point": "all", + "duty_relief": "draught_and_or_small_producer_relief", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 1704043.72763335 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9b4203bda0c93fe7134b4c7a", + "semantic_fact_key": "ledger_semantic_fact_v2_42a3376c8efe882e4fdbc531", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.clearances_no_relief", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_no_relief", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "other_fermented_products", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "other_fermented_products", + "duty_point": "all", + "duty_relief": "no_relief", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 10267748.5967187 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9343c93a3f60a66763bc2e39", + "semantic_fact_key": "ledger_semantic_fact_v2_8c1f58017c145d20a5d2baf1", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.clearances_ex_ship", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_ship", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "other_fermented_products", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "other_fermented_products", + "duty_point": "ex_ship", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 2183757.98849039 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d52c9aa83e995c966718aa87", + "semantic_fact_key": "ledger_semantic_fact_v2_f0366c821c37e16a39827477", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.clearances_ex_warehouse", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_warehouse", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "other_fermented_products", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "other_fermented_products", + "duty_point": "ex_warehouse", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 7641018.96883086 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e210cfac74daa838286d496c", + "semantic_fact_key": "ledger_semantic_fact_v2_9db6ed0a9c63f79cde069ef4", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.clearances_uk_registered", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_uk_registered", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "other_fermented_products", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "other_fermented_products", + "duty_point": "uk_registered", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 2147015.36703077 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1a9d50b4c6d3146f8d5289fa", + "semantic_fact_key": "ledger_semantic_fact_v2_a2405b1fd38276575891d03f", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.clearances_below_8_5_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_below_8_5_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "other_fermented_products", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "below_8_5", + "alcohol_product": "other_fermented_products", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 8686482.74400836 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4d58fce569c3e2cb91d95021", + "semantic_fact_key": "ledger_semantic_fact_v2_330a6cdd6e01d0144ccd278f", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024.other_fermented_products.clearances_from_8_5_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_from_8_5_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.other_fermented_products.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "other_fermented_products", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "from_8_5", + "alcohol_product": "other_fermented_products", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 3285309.58034366 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_46b90dbd5186655fdcec6f0c", + "semantic_fact_key": "ledger_semantic_fact_v2_dd67698cb3690b87d24c8eeb", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024.spirits.total_clearances", + "concept": "hmrc.alcohol_clearances", + "measure_id": "total_clearances", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "spirits", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "spirits", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 132049510.767922 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ed46ec790249558a5e45f2b9", + "semantic_fact_key": "ledger_semantic_fact_v2_909576bab4c898f272ffda33", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024.spirits.clearances_ex_ship", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_ship", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "spirits", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "spirits", + "duty_point": "ex_ship", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 9763541.32513466 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5cdb6c990d971abea097b38f", + "semantic_fact_key": "ledger_semantic_fact_v2_8459116b1761a40aed261f5b", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024.spirits.clearances_ex_warehouse_and_uk_registered", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_warehouse_and_uk_registered", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "spirits", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "spirits", + "duty_point": "ex_warehouse_and_uk_registered", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 122285969.442788 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d6e3920282d7e6faec1f3fef", + "semantic_fact_key": "ledger_semantic_fact_v2_57a1e7c99fd1e6575f509fbd", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024.spirits.clearances_below_3_5_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_below_3_5_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "spirits", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "below_3_5", + "alcohol_product": "spirits", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 862543.290545981 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6a35cb73c5a2a6abe09cd476", + "semantic_fact_key": "ledger_semantic_fact_v2_b7e09f252d430e8e3cfce87f", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024.spirits.clearances_from_22_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_from_22_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "spirits", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "from_22", + "alcohol_product": "spirits", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 116330938.956889 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_029024cd841ab17dd133d8ff", + "semantic_fact_key": "ledger_semantic_fact_v2_81a0d2f3624841b1a5f7fab8", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024.spirits.clearances_3_5_to_8_5_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_3_5_to_8_5_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "spirits", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "from_3_5_below_8_5", + "alcohol_product": "spirits", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 5267602.30640004 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_83b6ca08c26647a1533f15d3", + "semantic_fact_key": "ledger_semantic_fact_v2_ee46d6acfe0a0c4208df9bc4", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024.spirits.clearances_8_5_to_22_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_8_5_to_22_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.spirits.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "spirits", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "from_8_5_below_22", + "alcohol_product": "spirits", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 9588426.21408682 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6340e4855201ff216a3f072e", + "semantic_fact_key": "ledger_semantic_fact_v2_0ac883340317819b63f863f8", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024.wine.total_clearances", + "concept": "hmrc.alcohol_clearances", + "measure_id": "total_clearances", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "wine", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "wine", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 152027012.448098 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cc3262dd05a032cd5ff8ffb4", + "semantic_fact_key": "ledger_semantic_fact_v2_c1a9d689d2b09a458cbbcdee", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024.wine.clearances_ex_ship", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_ship", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "wine", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "wine", + "duty_point": "ex_ship", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 41563701.4801002 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ebe7a9c25def7757c73abc41", + "semantic_fact_key": "ledger_semantic_fact_v2_b149bcd6907495ba98482a01", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024.wine.clearances_ex_warehouse", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_ex_warehouse", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "wine", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "wine", + "duty_point": "ex_warehouse", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 109770092.525674 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_05b201d43042145ea9ea1826", + "semantic_fact_key": "ledger_semantic_fact_v2_e8560bfc2dccfce2c525432d", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024.wine.clearances_uk_registered", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_uk_registered", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "wine", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "all", + "alcohol_product": "wine", + "duty_point": "uk_registered", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 693218.442324271 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_74d37b782dcc0916a661067b", + "semantic_fact_key": "ledger_semantic_fact_v2_57f37946c6fc17186bcfa415", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024.wine.clearances_below_8_5_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_below_8_5_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "wine", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "below_8_5", + "alcohol_product": "wine", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 1993772.32743718 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6ffe3f33227130bf00d62fd4", + "semantic_fact_key": "ledger_semantic_fact_v2_d370dcb79a6ec6c4c090ac58", + "source_record_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024.wine.clearances_from_8_5_abv", + "concept": "hmrc.alcohol_clearances", + "measure_id": "clearances_from_8_5_abv", + "unit": "litre_of_pure_alcohol", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "alcohol_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.alcohol_bulletin_2026_08.wine.clearances.fy2024", + "groupby_dimension": "hmrc.alcohol_product", + "groupby_value_id": "wine", + "table_record_kind": "detail" + }, + "dimensions": { + "abv_band": "from_8_5", + "alcohol_product": "wine", + "duty_point": "all", + "duty_relief": "all", + "published_unit": "litres_of_alcohol" + }, + "source": { + "source_name": "hmrc", + "source_table": "Alcohol Bulletin tables (May 2026 to July 2026)", + "source_file": "Alcohol_Tables_Jul26.ods", + "source_sha256": "e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-alcohol-bulletin-july-2026/2026/e01eba25c179422c694611db71782647bf91c30d05798e7218fa368d0610f8b3/Alcohol_Tables_Jul26.ods" + }, + "value": 150033240.120661 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_41f1e111c98586b80253c367", + "semantic_fact_key": "ledger_semantic_fact_v2_ce38362e8184e6b55f72e19b", + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.all_receipts", + "concept": "hmrc.betting_and_gaming_duty_receipts", + "measure_id": "all_receipts", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.receipts.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "all", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 3616284000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0b1ba2092298b014bfbf19ac", + "semantic_fact_key": "ledger_semantic_fact_v2_68d205bb964f8d6df1b27615", + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.betting_total_receipts", + "concept": "hmrc.betting_and_gaming_duty_receipts", + "measure_id": "betting_total_receipts", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.receipts.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "betting_total", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 721983000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9ce83438c818805f4c999fc7", + "semantic_fact_key": "ledger_semantic_fact_v2_dfe1f1c814e6693ae38ef5e6", + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.bingo_duty_receipts", + "concept": "hmrc.betting_and_gaming_duty_receipts", + "measure_id": "bingo_duty_receipts", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.receipts.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "bingo_duty", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 25233000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_902030056152e318f4dc51b8", + "semantic_fact_key": "ledger_semantic_fact_v2_64a4119be75dff2f908dbb8c", + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.gaming_duty_receipts", + "concept": "hmrc.betting_and_gaming_duty_receipts", + "measure_id": "gaming_duty_receipts", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.receipts.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "gaming_duty", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 165397000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2c52e0b4ccc6021e9b8f07ec", + "semantic_fact_key": "ledger_semantic_fact_v2_a67ffb6f97a4ca5487666470", + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.general_betting_duty_receipts", + "concept": "hmrc.betting_and_gaming_duty_receipts", + "measure_id": "general_betting_duty_receipts", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.receipts.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "general_betting_duty", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 713858000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_287c9ae4a2cb7b8b00c4623a", + "semantic_fact_key": "ledger_semantic_fact_v2_69bbec5eeb4b0a82df2bc6c8", + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.lottery_duty_receipts", + "concept": "hmrc.betting_and_gaming_duty_receipts", + "measure_id": "lottery_duty_receipts", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.receipts.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "lottery_duty", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 931887000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f3a62af67314f71468b00d17", + "semantic_fact_key": "ledger_semantic_fact_v2_c80d3990da00985a288f394c", + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.machine_games_duty_receipts", + "concept": "hmrc.betting_and_gaming_duty_receipts", + "measure_id": "machine_games_duty_receipts", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.receipts.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "machine_games_duty", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 609245000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d36e0d5705364ba8c837f2e2", + "semantic_fact_key": "ledger_semantic_fact_v2_4475f3a32a0472ba4d129b4e", + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.pool_betting_duty_receipts", + "concept": "hmrc.betting_and_gaming_duty_receipts", + "measure_id": "pool_betting_duty_receipts", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.receipts.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "pool_betting_duty", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 8125000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1078dcbe39ced755f0f5791d", + "semantic_fact_key": "ledger_semantic_fact_v2_f46e3e248919002515dc11af", + "source_record_id": "hmrc.betting_gaming_2026_09.receipts.fy2024.united_kingdom.remote_gaming_duty_receipts", + "concept": "hmrc.betting_and_gaming_duty_receipts", + "measure_id": "remote_gaming_duty_receipts", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.receipts.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "accounting_basis": "cash", + "gambling_duty": "remote_gaming_duty", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 1162539000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_45dc67cafcb84efbbe06033b", + "semantic_fact_key": "ledger_semantic_fact_v2_f9788efbe1ca14544276e2ee", + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.all_liabilities", + "concept": "hmrc.machine_games_duty_liabilities", + "measure_id": "all_liabilities", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "mgd_rate": "all", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 612266000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_03372fb31d30dc218dada23a", + "semantic_fact_key": "ledger_semantic_fact_v2_8149727c048f3eaa3e74dcc5", + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.higher_rate_liabilities", + "concept": "hmrc.machine_games_duty_liabilities", + "measure_id": "higher_rate_liabilities", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "mgd_rate": "higher_rate", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 596000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_161b064b00d3ea14a2e67ea3", + "semantic_fact_key": "ledger_semantic_fact_v2_f4f5f5025aca80c5e9aadd6d", + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.lower_rate_liabilities", + "concept": "hmrc.machine_games_duty_liabilities", + "measure_id": "lower_rate_liabilities", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "mgd_rate": "lower_rate", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 6921000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f6c2062676b945d729a81d73", + "semantic_fact_key": "ledger_semantic_fact_v2_7cdaead28fa99481bde556ed", + "source_record_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024.united_kingdom.standard_rate_liabilities", + "concept": "hmrc.machine_games_duty_liabilities", + "measure_id": "standard_rate_liabilities", + "unit": "gbp", + "aggregation": "sum", + "entity": { + "name": "person", + "role": "resident_population" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.betting_gaming_2026_09.mgd_liabilities.fy2024", + "groupby_dimension": "hmrc.betting_gaming_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "mgd_rate": "standard_rate", + "published_unit": "gbp_thousand" + }, + "source": { + "source_name": "hmrc", + "source_table": "UK Betting and Gaming Statistics tables (August 2025 to July 2026)", + "source_file": "2026_Jul_Bet_and_Gam_Tab.ods", + "source_sha256": "3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8", + "vintage": "2026_09_30_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-betting-gaming-statistics-july-2026/2026/3979df37c0611cce371f80950bacac6bc5e9dad499c726f6138f838c882914e8/2026_Jul_Bet_and_Gam_Tab.ods" + }, + "value": 604748000 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c545202fc107811dbcdf4408", + "semantic_fact_key": "ledger_semantic_fact_v2_749e7d5a85bf2cb7e14fbbeb", + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.cigarettes", + "concept": "hmrc.tobacco_clearances", + "measure_id": "cigarettes", + "unit": "stick", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "tobacco_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024", + "groupby_dimension": "hmrc.tobacco_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "published_unit": "million_sticks", + "tobacco_product": "cigarettes" + }, + "source": { + "source_name": "hmrc", + "source_table": "Tobacco Bulletin tables July 2026", + "source_file": "Tobacco_Tab_Jul_26.ods", + "source_sha256": "41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-tobacco-bulletin-july-2026/2026/41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4/Tobacco_Tab_Jul_26.ods" + }, + "value": 13577910633.711401 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_61e4707d3e6325c10c34b94b", + "semantic_fact_key": "ledger_semantic_fact_v2_f12d2bf1e04a4583b2b8557d", + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.cigars", + "concept": "hmrc.tobacco_clearances", + "measure_id": "cigars", + "unit": "kilogram", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "tobacco_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024", + "groupby_dimension": "hmrc.tobacco_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "published_unit": "thousand_kilograms", + "tobacco_product": "cigars" + }, + "source": { + "source_name": "hmrc", + "source_table": "Tobacco Bulletin tables July 2026", + "source_file": "Tobacco_Tab_Jul_26.ods", + "source_sha256": "41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-tobacco-bulletin-july-2026/2026/41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4/Tobacco_Tab_Jul_26.ods" + }, + "value": 395122.98372549296 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ac02b8d2cb27793da45b443f", + "semantic_fact_key": "ledger_semantic_fact_v2_c03e926643eaa1ce0006e624", + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.hand_rolling_tobacco", + "concept": "hmrc.tobacco_clearances", + "measure_id": "hand_rolling_tobacco", + "unit": "kilogram", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "tobacco_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024", + "groupby_dimension": "hmrc.tobacco_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "published_unit": "thousand_kilograms", + "tobacco_product": "hand_rolling_tobacco" + }, + "source": { + "source_name": "hmrc", + "source_table": "Tobacco Bulletin tables July 2026", + "source_file": "Tobacco_Tab_Jul_26.ods", + "source_sha256": "41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-tobacco-bulletin-july-2026/2026/41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4/Tobacco_Tab_Jul_26.ods" + }, + "value": 4028478.68691037 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2623f1ae78390ca8f0373c8e", + "semantic_fact_key": "ledger_semantic_fact_v2_05e4d4f05b5c41336e1b51c3", + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.non_cigarette_tobacco_total", + "concept": "hmrc.tobacco_clearances", + "measure_id": "non_cigarette_tobacco_total", + "unit": "kilogram", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "tobacco_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024", + "groupby_dimension": "hmrc.tobacco_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "published_unit": "thousand_kilograms", + "tobacco_product": "non_cigarette_tobacco" + }, + "source": { + "source_name": "hmrc", + "source_table": "Tobacco Bulletin tables July 2026", + "source_file": "Tobacco_Tab_Jul_26.ods", + "source_sha256": "41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-tobacco-bulletin-july-2026/2026/41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4/Tobacco_Tab_Jul_26.ods" + }, + "value": 4725066.829958471 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7fb2bfb2e2b4cecb39f2dec5", + "semantic_fact_key": "ledger_semantic_fact_v2_9975167217b64934fbe2d225", + "source_record_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024.united_kingdom.other", + "concept": "hmrc.tobacco_clearances", + "measure_id": "other", + "unit": "kilogram", + "aggregation": "sum", + "entity": { + "name": "institutional_sector", + "role": "tobacco_market" + }, + "geography": { + "id": "K02000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "fiscal_year", + "value": 2024 + }, + "period_coverage": { + "start_date": "2024-04-01", + "end_date": "2025-03-31", + "basis": "fiscal" + }, + "layout": { + "record_set_id": "hmrc.tobacco_bulletin_2026_08.clearances.fy2024", + "groupby_dimension": "hmrc.tobacco_scope", + "groupby_value_id": "united_kingdom", + "table_record_kind": "total" + }, + "dimensions": { + "published_unit": "thousand_kilograms", + "tobacco_product": "other" + }, + "source": { + "source_name": "hmrc", + "source_table": "Tobacco Bulletin tables July 2026", + "source_file": "Tobacco_Tab_Jul_26.ods", + "source_sha256": "41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4", + "vintage": "2026_08_28_release", + "raw_r2_key": "raw/uk/hmrc/hmrc-tobacco-bulletin-july-2026/2026/41154c1d1e01c0269a8e0f99dccda780172d150bd2769e6515ca679bfe04a4a4/Tobacco_Tab_Jul_26.ods" + }, + "value": 301465.159322606 + } + ] +} diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index b32b926fe1..383a893d59 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -392,6 +392,22 @@ }, "notes": "Stage-time check on the lcfs recomposed_totals receipt (microcosm#1113): housing_water_and_electricity_consumption and transport_consumption each keep their own chain draw less the chain's draws of the parts the stage re-levels (the drawn electricity and gas, or the drawn petrol, diesel and bus fares; floored at zero where the parts outgrow the total) and add the levelled parts back, so no household's total is below its electricity and gas, or its petrol, diesel and priced bus fares, and no remainder is negative. The declared parts must be the receipt's, the weighted remainder must equal the drawn total less the drawn parts plus the floored mass, and the weighted total the remainder plus the levelled parts, to the declared tolerance. The step floors the remainder and adds the parts, so on a receipt the declared step wrote these are identities: the check guards the declaration and the receipt, not the size of the totals. The committed support bounds do that, on the emitted frame, through the terminal uk_support gate. The ONS 04.5.3 and 04.5.4 liquid and solid fuel spend no frame column carries is recomputed from the vendored rows and must equal the receipt's; the housing remainder holds the diary's other fuels, which the stage's energy derivation leaves out of electricity and gas (microcosm#1164). A population fact check: the synthetic smoke records it without blocking. Since microcosm#1278 (María's ruling of 2026-10-23) the stage levels the divisions' relative over-draw before the hold, so a recomposed total's remainder is its draw less the drawn parts plus the floored mass, times its recorded levelling factor, which must lie in [0, 1]; the published heating-fuel spend (published_fuels, ONS 04.5.3 and 04.5.4) replaced the uncarried block when the stage began drawing those fuels." }, + { + "id": "uk_stage_lcfs_consumption_excise_quantities", + "gate": "stage_health", + "phase": "transferred", + "criticality": "release_blocking", + "evidence_absent_blocks": true, + "population_fact_check": true, + "parameters": { + "stage": "lcfs_consumption", + "check": "excise_quantities", + "maximum_relative_deviation": 1e-09, + "maximum_parent_residual_share": 0.01, + "required_support_band": "30+" + }, + "notes": "Stage-time fact check on the lcfs excise_quantities and excise_shares receipts (microcosm#1359): every policyengine-uk excise input the stage declares is recomputed from the vendored rows through the stage's own declaration, never taken from the receipt: each alcohol product's FY2024-25 HMRC clearances over the engine's strength, each tobacco product's clearances, each gambling duty base (HMRC's receipts for the duty or Machine Games Duty's liabilities for the band over the engine's rate, and General Betting Duty's base split by the Gambling Commission's gross gambling yield) and the beer and cider draught shares. The receipt's levels must equal them, the prior-weighted frame total of each input must equal its level and the factor must reproduce it from the household spending it is shared by, and an input is positive exactly where that spending is; the basis must be the declared fiscal year over the engine's 52 weeks, and each draught share written must be the published ratio. The three shares the spending comes from (tobacco of P602's off-trade lines, on-trade alcohol of P611, gambling stakes of P609) must have stayed in [0, 1] on the frame and rest on 30 or more donors each, and at most one percent of the donors, by weight, may carry a published total beside a share's diary lines (a share withheld for resting on under ten donors is under it). The levels are recomputed from the same vendored rows the stage read, so the check catches a step that did not apply the declared levels; it cannot catch an error in the rows themselves or a later stage moving the columns. A population fact check: the synthetic smoke records it without blocking." + }, { "id": "uk_stage_lcfs_consumption_basis", "gate": "stage_health", @@ -1080,6 +1096,30 @@ "household.geography_household_key", "household.has_fuel_consumption", "household.uses_energy_prepayment_meter", + "household.beer_litres", + "household.cider_litres", + "household.wine_litres", + "household.spirits_litres", + "household.other_fermented_litres", + "household.beer_draught_share", + "household.cider_draught_share", + "household.cigarettes_per_week", + "household.hand_rolling_tobacco_grams_per_week", + "household.cigars_grams_per_week", + "household.other_tobacco_grams_per_week", + "household.remote_gaming_net_losses", + "household.pool_betting_net_receipts", + "household.bingo_net_receipts", + "household.national_lottery_ticket_spending", + "household.land_based_casino_net_losses", + "household.machine_games_lower_rate_net_takings", + "household.machine_games_standard_rate_net_takings", + "household.machine_games_higher_rate_net_takings", + "household.land_based_fixed_odds_betting_net_losses", + "household.remote_uk_horseracing_betting_net_losses", + "household.remote_other_betting_net_losses", + "household.betting_exchange_commission", + "household.horse_and_dog_pool_betting_net_losses", "household.household_is_capital_gains_clone", "household.household_is_cgt_support_copy", "household.household_is_spi_income_band_donor", @@ -1249,7 +1289,7 @@ "household.property_wealth": "policyengine-uk derives property_wealth from main_residence_value, other_residential_property_value and non_residential_property_value; a persisted copy overrides that sum and has no uprating index, so the candidate must drop it (microcosm#1106, the uk-data#543 defect)." } }, - "notes": "Reviewed candidate-only fields from the June UK prototype (source provenance or genuine additional model inputs, not incumbent-surface losses), with household.uses_energy_prepayment_meter added for microcosm#1110 (the LCFS prepayment-meter flag policyengine-uk reads from 2.123.3 for the Energy Price Guarantee prepayment discount; an older engine ignores it, and the incumbent does not carry it until uk-data#539) plus the two reviewed reference-side exclusions (the all-zero incapacity benefit layer and the formula-owned property_wealth total, microcosm#1106). The two hard-required columns that may never be waived stay a code-level guard, per the microcosm#327 rule that a parity comparison's registers are declared inputs. During the migration window the runtime merges the exclusion register with the legacy constant and the spec-pin tests hold the two equal; the register becomes solely load-bearing when the constant retires." + "notes": "Reviewed candidate-only fields from the June UK prototype (source provenance or genuine additional model inputs, not incumbent-surface losses), with household.uses_energy_prepayment_meter added for microcosm#1110 (the LCFS prepayment-meter flag policyengine-uk reads from 2.123.3 for the Energy Price Guarantee prepayment discount; an older engine ignores it, and the incumbent does not carry it until uk-data#539), the LCFS excise step's 24 household inputs added for microcosm#1359 (alcohol litres and the beer and cider draught shares, tobacco a week and the gambling duty bases; policyengine-uk reads the alcohol and tobacco ones from 2.145.0 and the gambling ones from 2.151.0, an older engine ignores them, and the incumbent carries none) plus the two reviewed reference-side exclusions (the all-zero incapacity benefit layer and the formula-owned property_wealth total, microcosm#1106). The two hard-required columns that may never be waived stay a code-level guard, per the microcosm#327 rule that a parity comparison's registers are declared inputs. During the migration window the runtime merges the exclusion register with the legacy constant and the spec-pin tests hold the two equal; the register becomes solely load-bearing when the constant retires." }, { "id": "uk_take_up_signal", 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 index e9d79d7162..3caa55e647 100644 --- 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 @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { 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 index b59a6daab2..c078ca4599 100644 --- 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 @@ -16,12 +16,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_child_benefit_statistics.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_child_benefit_statistics.json index 88887c0bd1..8bed775eae 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/hmrc_child_benefit_statistics.json +++ b/packages/microcosm-build/src/microcosm/build/uk/hmrc_child_benefit_statistics.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_itl_taxpayer_counts.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_itl_taxpayer_counts.json index 499865aff5..2da9f62938 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/hmrc_itl_taxpayer_counts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/hmrc_itl_taxpayer_counts.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_property_rental_income_facts.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_property_rental_income_facts.json index 8ba25ca94d..75cbe1bdc4 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/hmrc_property_rental_income_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/hmrc_property_rental_income_facts.json @@ -16,12 +16,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_spi_table_3_11_uk_rows.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_spi_table_3_11_uk_rows.json index ab7dd7dddc..7ba6a92b83 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/hmrc_spi_table_3_11_uk_rows.json +++ b/packages/microcosm-build/src/microcosm/build/uk/hmrc_spi_table_3_11_uk_rows.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/hmrc_stamp_tax_facts.json b/packages/microcosm-build/src/microcosm/build/uk/hmrc_stamp_tax_facts.json index b80f1318cc..8452746726 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/hmrc_stamp_tax_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/hmrc_stamp_tax_facts.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { 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 a8af72a67a..d8e4af522e 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": 1336, + "compiled_count": 1341, "counts_by_kind": { "calibration_drift": 558, "fixture_only": 49, - "ledger_only": 748 + "ledger_only": 753 }, - "difference_count": 1355, + "difference_count": 1360, "differences": [ { "fixture_value": 1608000.0, @@ -5292,6 +5292,20 @@ "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." }, + { + "kind": "ledger_only", + "ledger_value": 3746000000.0, + "name": "obr.beer_and_cider_duties", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3616000000.0, + "name": "obr.betting_and_gaming_duties", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, { "kind": "ledger_only", "ledger_value": 14400000000.0, @@ -5299,6 +5313,20 @@ "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." }, + { + "kind": "ledger_only", + "ledger_value": 4113000000.0, + "name": "obr.spirits_duties", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 7927000000.0, + "name": "obr.tobacco_duties", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, { "kind": "ledger_only", "ledger_value": 76054754387.77309, @@ -5308,21 +5336,28 @@ }, { "kind": "ledger_only", - "ledger_value": 26522000000.0, + "ledger_value": 4686000000.0, + "name": "obr.wine_duties", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 28840000000.0, "name": "ons.household_electricity_expenditure", "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." }, { "kind": "ledger_only", - "ledger_value": 15339000000.0, + "ledger_value": 18958000000.0, "name": "ons.household_gas_expenditure", "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." }, { "kind": "ledger_only", - "ledger_value": 37025000000.0, + "ledger_value": 35460000000.0, "name": "ons.household_road_fuel_expenditure", "period": 2025, "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." 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 f9e8b57724..3f1f47c512 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 @@ -500,6 +500,81 @@ } ] }, + { + "resource": "excise_facts.json", + "purpose": "HMRC FY2024-25 alcohol clearances by product, ABV band, duty point and relief (Alcohol Bulletin) and tobacco clearances by product (Tobacco Bulletin), HMRC betting and gaming duty cash receipts by duty and Machine Games Duty liabilities by rate band (Betting and Gaming statistics), and the Gambling Commission's FY2024-25 gross gambling yield for Great Britain by sector, activity and betting event: the national quantities and bases the LCFS level_excise_quantities step shares out to households (microcosm#1359, PolicyEngine/chronicle#381).", + "consumers": [ + "uk_runtime.lcfs_consumption" + ], + "planned_consumers": [], + "selections": [ + { + "label": "hmrc_alcohol_clearances_fy2024", + "selector": { + "source_name": "hmrc", + "source_concept": "hmrc.alcohol_clearances", + "geography_id": "K02000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "expected_row_count": 40 + }, + { + "label": "hmrc_tobacco_clearances_fy2024", + "selector": { + "source_name": "hmrc", + "source_concept": "hmrc.tobacco_clearances", + "geography_id": "K02000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "expected_row_count": 5 + }, + { + "label": "hmrc_betting_and_gaming_duty_receipts_fy2024", + "selector": { + "source_name": "hmrc", + "source_concept": "hmrc.betting_and_gaming_duty_receipts", + "geography_id": "K02000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "expected_row_count": 9 + }, + { + "label": "hmrc_machine_games_duty_liabilities_fy2024", + "selector": { + "source_name": "hmrc", + "source_concept": "hmrc.machine_games_duty_liabilities", + "geography_id": "K02000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "expected_row_count": 4 + }, + { + "label": "gambling_commission_gross_gambling_yield_fy2024", + "selector": { + "source_name": "gambling_commission", + "source_concept": "gambling_commission.gross_gambling_yield", + "geography_id": "K03000001", + "period_type": "fiscal_year", + "period_value": [ + 2024 + ] + }, + "expected_row_count": 40 + } + ] + }, { "resource": "desnz_domestic_energy_facts.json", "purpose": "DESNZ domestic energy volumes: Energy Trends domestic electricity (table 5.5) and gas (table 4.1) consumption at actual temperature, annual and quarterly, United Kingdom, 2022 to the latest quarter (the published level the LCFS kWh rake scales to, summed over the four quarters of calendar 2024; microcosm#1113), and the subnational electricity and gas statistics' domestic consumption and meter counts for Great Britain, England and Wales, the countries and the English regions, 2023 and 2024 (the published gas-connected share by region: gas meters over electricity meters; and the Great Britain totals that level the local-authority energy rows, microcosm#1207).", 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 e2cc373c13..2a75d8181a 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 11982b0d88..99425cdab6 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-artifact-abf0921", + "source_fact_feed": "chronicle-uk-artifact-200bf6d", "target_period": 2025, "candidate_count": 27133, "contract_target_count": 59, 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 4265faa098..57b0ec8c47 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": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", + "sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164" + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1" }, "rows": [ { 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 ff389672b8..e5ccaf9f54 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 ff5cb69baf..739d108eb6 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/nts_car_availability.json b/packages/microcosm-build/src/microcosm/build/uk/nts_car_availability.json index 144a9a9ddf..63451b50a2 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/nts_car_availability.json +++ b/packages/microcosm-build/src/microcosm/build/uk/nts_car_availability.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/nts_trip_rates.json b/packages/microcosm-build/src/microcosm/build/uk/nts_trip_rates.json index 8ca07bfe3a..22fc84c7d7 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/nts_trip_rates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/nts_trip_rates.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/obr_hvcts_costing_facts.json b/packages/microcosm-build/src/microcosm/build/uk/obr_hvcts_costing_facts.json index bf07741ad4..4fbdc273dd 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/obr_hvcts_costing_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/obr_hvcts_costing_facts.json @@ -16,12 +16,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/obr_salary_sacrifice_costing_facts.json b/packages/microcosm-build/src/microcosm/build/uk/obr_salary_sacrifice_costing_facts.json index 0c74d976c9..f84e70b910 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/obr_salary_sacrifice_costing_facts.json +++ b/packages/microcosm-build/src/microcosm/build/uk/obr_salary_sacrifice_costing_facts.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 3e7f573a99..0cb369eb45 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 7fa8b96c49..23dbf33aec 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 @@ -17,12 +17,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { @@ -105,9 +105,9 @@ "row_count": 93, "rows": [ { - "aggregate_fact_key": "ledger_aggregate_fact_v2_757e464b14a1c434720c155f", + "aggregate_fact_key": "ledger_aggregate_fact_v2_43c772e5bef43baf904e1755", "semantic_fact_key": "ledger_semantic_fact_v2_e7a50fe26f35ce62d4b243c9", - "source_record_id": "ons.consumer_trends.04cn_04_5_1.cy2020.coicop_04_5_1.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2020.coicop_04_5_1.expenditure", "concept": "ons.household_expenditure.electricity", "measure_id": "expenditure", "unit": "gbp", @@ -131,7 +131,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_1.cy2020", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2020", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_1", "table_record_kind": "detail" @@ -147,18 +147,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 18805000000 + "value": 20624000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_b1c4a44cee50e6a99a7a044c", + "aggregate_fact_key": "ledger_aggregate_fact_v2_d3fdd3b095323fe9086e3e5c", "semantic_fact_key": "ledger_semantic_fact_v2_23563e995e1641ea91b80efc", - "source_record_id": "ons.consumer_trends.04cn_04_5_1.cy2021.coicop_04_5_1.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2021.coicop_04_5_1.expenditure", "concept": "ons.household_expenditure.electricity", "measure_id": "expenditure", "unit": "gbp", @@ -182,7 +182,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_1.cy2021", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2021", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_1", "table_record_kind": "detail" @@ -198,18 +198,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 20550000000 + "value": 22834000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_e2685d017e4c31bb21ce6aac", + "aggregate_fact_key": "ledger_aggregate_fact_v2_db75952e0b49b069478f9538", "semantic_fact_key": "ledger_semantic_fact_v2_b2ad70860c88c877990d1812", - "source_record_id": "ons.consumer_trends.04cn_04_5_1.cy2022.coicop_04_5_1.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2022.coicop_04_5_1.expenditure", "concept": "ons.household_expenditure.electricity", "measure_id": "expenditure", "unit": "gbp", @@ -233,7 +233,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_1.cy2022", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2022", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_1", "table_record_kind": "detail" @@ -249,18 +249,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 27770000000 + "value": 30505000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_4b05f105923ba1719c248498", + "aggregate_fact_key": "ledger_aggregate_fact_v2_693c3175b9ea7e4868bcb2ab", "semantic_fact_key": "ledger_semantic_fact_v2_36cc0603b81fcae2a361ebea", - "source_record_id": "ons.consumer_trends.04cn_04_5_1.cy2023.coicop_04_5_1.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2023.coicop_04_5_1.expenditure", "concept": "ons.household_expenditure.electricity", "measure_id": "expenditure", "unit": "gbp", @@ -284,7 +284,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_1.cy2023", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2023", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_1", "table_record_kind": "detail" @@ -300,18 +300,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 30589000000 + "value": 33651000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_a08fabead329bf8b06fb5c4e", + "aggregate_fact_key": "ledger_aggregate_fact_v2_c8825aa49363757f1b8df415", "semantic_fact_key": "ledger_semantic_fact_v2_3a367fa31eb41f7a54a3629d", - "source_record_id": "ons.consumer_trends.04cn_04_5_1.cy2024.coicop_04_5_1.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2024.coicop_04_5_1.expenditure", "concept": "ons.household_expenditure.electricity", "measure_id": "expenditure", "unit": "gbp", @@ -335,7 +335,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_1.cy2024", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2024", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_1", "table_record_kind": "detail" @@ -351,18 +351,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 26099000000 + "value": 28129000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_643fd0413421fbcff9ea2bb5", + "aggregate_fact_key": "ledger_aggregate_fact_v2_f3cf2a0e3e5ab3e4771086f2", "semantic_fact_key": "ledger_semantic_fact_v2_394f2c58a2fb6fc6347c5a5e", - "source_record_id": "ons.consumer_trends.04cn_04_5_1.cy2025.coicop_04_5_1.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2025.coicop_04_5_1.expenditure", "concept": "ons.household_expenditure.electricity", "measure_id": "expenditure", "unit": "gbp", @@ -386,7 +386,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_1.cy2025", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_1.cy2025", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_1", "table_record_kind": "detail" @@ -402,18 +402,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 26522000000 + "value": 28840000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_32647c12f2c1161ff5203033", + "aggregate_fact_key": "ledger_aggregate_fact_v2_a8621ae8740d374678f6631b", "semantic_fact_key": "ledger_semantic_fact_v2_078f45770bf839c60975b947", - "source_record_id": "ons.consumer_trends.04cn.cy2020.coicop_04_5.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn.cy2020.coicop_04_5.expenditure", "concept": "ons.household_expenditure.electricity_gas_other_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -437,7 +437,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn.cy2020", + "record_set_id": "ons.consumer_trends_2026_09.04cn.cy2020", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5", "table_record_kind": "detail" @@ -453,18 +453,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 31805000000 + "value": 34492000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_e2cb337c3dfe75524cee2553", + "aggregate_fact_key": "ledger_aggregate_fact_v2_af456f58e03955757f684f3d", "semantic_fact_key": "ledger_semantic_fact_v2_695f33bd9aea33e02703e53d", - "source_record_id": "ons.consumer_trends.04cn.cy2021.coicop_04_5.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn.cy2021.coicop_04_5.expenditure", "concept": "ons.household_expenditure.electricity_gas_other_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -488,7 +488,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn.cy2021", + "record_set_id": "ons.consumer_trends_2026_09.04cn.cy2021", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5", "table_record_kind": "detail" @@ -504,18 +504,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 34437000000 + "value": 38643000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_5e18c23bee8020b2c82de1b0", + "aggregate_fact_key": "ledger_aggregate_fact_v2_33bdb30787892a1145f38b14", "semantic_fact_key": "ledger_semantic_fact_v2_8112da34428e09fcf2b80d7b", - "source_record_id": "ons.consumer_trends.04cn.cy2022.coicop_04_5.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn.cy2022.coicop_04_5.expenditure", "concept": "ons.household_expenditure.electricity_gas_other_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -539,7 +539,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn.cy2022", + "record_set_id": "ons.consumer_trends_2026_09.04cn.cy2022", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5", "table_record_kind": "detail" @@ -555,18 +555,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 49403000000 + "value": 54246000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_9cde7ccefd77be924921b6bb", + "aggregate_fact_key": "ledger_aggregate_fact_v2_58c5da183216005ddbd03f9d", "semantic_fact_key": "ledger_semantic_fact_v2_0cb1a7ea4c71d4792d40a81f", - "source_record_id": "ons.consumer_trends.04cn.cy2023.coicop_04_5.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn.cy2023.coicop_04_5.expenditure", "concept": "ons.household_expenditure.electricity_gas_other_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -590,7 +590,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn.cy2023", + "record_set_id": "ons.consumer_trends_2026_09.04cn.cy2023", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5", "table_record_kind": "detail" @@ -606,18 +606,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 52505000000 + "value": 59413000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_447c0e2734a87cc178535e7b", + "aggregate_fact_key": "ledger_aggregate_fact_v2_4b2ac9208622ae0480a4ee5e", "semantic_fact_key": "ledger_semantic_fact_v2_7ad2ee8a8483229d31211fa5", - "source_record_id": "ons.consumer_trends.04cn.cy2024.coicop_04_5.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn.cy2024.coicop_04_5.expenditure", "concept": "ons.household_expenditure.electricity_gas_other_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -641,7 +641,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn.cy2024", + "record_set_id": "ons.consumer_trends_2026_09.04cn.cy2024", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5", "table_record_kind": "detail" @@ -657,18 +657,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 42288000000 + "value": 47944000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_a2963d508c2dfd729030e2be", + "aggregate_fact_key": "ledger_aggregate_fact_v2_93658b6c1ce0fd4d6f94998a", "semantic_fact_key": "ledger_semantic_fact_v2_49f9a92169bbce7a467e9471", - "source_record_id": "ons.consumer_trends.04cn.cy2025.coicop_04_5.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn.cy2025.coicop_04_5.expenditure", "concept": "ons.household_expenditure.electricity_gas_other_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -692,7 +692,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn.cy2025", + "record_set_id": "ons.consumer_trends_2026_09.04cn.cy2025", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5", "table_record_kind": "detail" @@ -708,18 +708,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 43427000000 + "value": 49322000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_e504779235b7b6f64b0b9a11", + "aggregate_fact_key": "ledger_aggregate_fact_v2_e4a8710f4f5ef04d77186b6c", "semantic_fact_key": "ledger_semantic_fact_v2_372753cd716c93e8e33f05f3", - "source_record_id": "ons.consumer_trends.04cn_04_5_2.cy2020.coicop_04_5_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2020.coicop_04_5_2.expenditure", "concept": "ons.household_expenditure.gas", "measure_id": "expenditure", "unit": "gbp", @@ -743,7 +743,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_2.cy2020", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2020", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_2", "table_record_kind": "detail" @@ -759,18 +759,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 11767000000 + "value": 12613000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_47e26d3fd67b3b979d518f39", + "aggregate_fact_key": "ledger_aggregate_fact_v2_90f654c39b5ec700ba96eb25", "semantic_fact_key": "ledger_semantic_fact_v2_0c3a558c64187053c41a985f", - "source_record_id": "ons.consumer_trends.04cn_04_5_2.cy2021.coicop_04_5_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2021.coicop_04_5_2.expenditure", "concept": "ons.household_expenditure.gas", "measure_id": "expenditure", "unit": "gbp", @@ -794,7 +794,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_2.cy2021", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2021", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_2", "table_record_kind": "detail" @@ -810,18 +810,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 12218000000 + "value": 14143000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_2370e5dea8fc0b4179c685ac", + "aggregate_fact_key": "ledger_aggregate_fact_v2_8793fb8d25e9b454c5f47856", "semantic_fact_key": "ledger_semantic_fact_v2_de44ebfeae661f5f466be743", - "source_record_id": "ons.consumer_trends.04cn_04_5_2.cy2022.coicop_04_5_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2022.coicop_04_5_2.expenditure", "concept": "ons.household_expenditure.gas", "measure_id": "expenditure", "unit": "gbp", @@ -845,7 +845,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_2.cy2022", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2022", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_2", "table_record_kind": "detail" @@ -861,18 +861,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 19459000000 + "value": 21412000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_8dced1a5ac41962dc6ab396c", + "aggregate_fact_key": "ledger_aggregate_fact_v2_e7ca4ce4487e44e23847be07", "semantic_fact_key": "ledger_semantic_fact_v2_4ab12ad7c3894d8a05086dad", - "source_record_id": "ons.consumer_trends.04cn_04_5_2.cy2023.coicop_04_5_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2023.coicop_04_5_2.expenditure", "concept": "ons.household_expenditure.gas", "measure_id": "expenditure", "unit": "gbp", @@ -896,7 +896,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_2.cy2023", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2023", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_2", "table_record_kind": "detail" @@ -912,18 +912,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 20085000000 + "value": 23826000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_40f17c830f5d71927e9adf5d", + "aggregate_fact_key": "ledger_aggregate_fact_v2_87253990ee4d5e51c2b1e47d", "semantic_fact_key": "ledger_semantic_fact_v2_fc24615029b337f867506c55", - "source_record_id": "ons.consumer_trends.04cn_04_5_2.cy2024.coicop_04_5_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2024.coicop_04_5_2.expenditure", "concept": "ons.household_expenditure.gas", "measure_id": "expenditure", "unit": "gbp", @@ -947,7 +947,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_2.cy2024", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2024", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_2", "table_record_kind": "detail" @@ -963,18 +963,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 14642000000 + "value": 18298000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_03c5f13d5fbab023177a1aea", + "aggregate_fact_key": "ledger_aggregate_fact_v2_9bf03b93645200761324e994", "semantic_fact_key": "ledger_semantic_fact_v2_948fbb40165d556eff8b2990", - "source_record_id": "ons.consumer_trends.04cn_04_5_2.cy2025.coicop_04_5_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2025.coicop_04_5_2.expenditure", "concept": "ons.household_expenditure.gas", "measure_id": "expenditure", "unit": "gbp", @@ -998,7 +998,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_2.cy2025", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_2.cy2025", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_2", "table_record_kind": "detail" @@ -1014,18 +1014,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 15339000000 + "value": 18958000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_0ccea060f68d08a99df9a046", + "aggregate_fact_key": "ledger_aggregate_fact_v2_62c82000b9638d3bb49bf9ba", "semantic_fact_key": "ledger_semantic_fact_v2_4e9602b387ebec3cf923a31e", - "source_record_id": "ons.consumer_trends.04cn_04_5_3.cy2020.coicop_04_5_3.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2020.coicop_04_5_3.expenditure", "concept": "ons.household_expenditure.liquid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -1049,7 +1049,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_3.cy2020", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2020", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_3", "table_record_kind": "detail" @@ -1065,18 +1065,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 868000000 + "value": 881000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_7bfeff7f3d7cbb51ac4cc27f", + "aggregate_fact_key": "ledger_aggregate_fact_v2_9a2cf00c328d5601829200ef", "semantic_fact_key": "ledger_semantic_fact_v2_d3fd432d67dfc0aa975ef3b0", - "source_record_id": "ons.consumer_trends.04cn_04_5_3.cy2021.coicop_04_5_3.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2021.coicop_04_5_3.expenditure", "concept": "ons.household_expenditure.liquid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -1100,7 +1100,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_3.cy2021", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2021", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_3", "table_record_kind": "detail" @@ -1116,18 +1116,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1186000000 + "value": 1169000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_efa5e26236915527baa5fb6a", + "aggregate_fact_key": "ledger_aggregate_fact_v2_92208156bff18282037e7fa3", "semantic_fact_key": "ledger_semantic_fact_v2_974e4fd64dac47e2f64ce8ef", - "source_record_id": "ons.consumer_trends.04cn_04_5_3.cy2022.coicop_04_5_3.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2022.coicop_04_5_3.expenditure", "concept": "ons.household_expenditure.liquid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -1151,7 +1151,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_3.cy2022", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2022", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_3", "table_record_kind": "detail" @@ -1167,18 +1167,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1624000000 + "value": 1781000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_3c997a0aa817f78bb9a3e551", + "aggregate_fact_key": "ledger_aggregate_fact_v2_990ece8783789a728cd8d90b", "semantic_fact_key": "ledger_semantic_fact_v2_6b9a8fb62f53c04efc9ed6a6", - "source_record_id": "ons.consumer_trends.04cn_04_5_3.cy2023.coicop_04_5_3.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2023.coicop_04_5_3.expenditure", "concept": "ons.household_expenditure.liquid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -1202,7 +1202,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_3.cy2023", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2023", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_3", "table_record_kind": "detail" @@ -1218,18 +1218,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1302000000 + "value": 1406000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_def858f5909802e76a3bd816", + "aggregate_fact_key": "ledger_aggregate_fact_v2_bbc649362565ce78392ffd21", "semantic_fact_key": "ledger_semantic_fact_v2_ac0d85b006807bc73d65b477", - "source_record_id": "ons.consumer_trends.04cn_04_5_3.cy2024.coicop_04_5_3.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2024.coicop_04_5_3.expenditure", "concept": "ons.household_expenditure.liquid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -1253,7 +1253,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_3.cy2024", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2024", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_3", "table_record_kind": "detail" @@ -1269,18 +1269,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1195000000 + "value": 1180000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_931ecb3b4370f97af488624e", + "aggregate_fact_key": "ledger_aggregate_fact_v2_fab64d168e8fde17911daaac", "semantic_fact_key": "ledger_semantic_fact_v2_eacfe3015761faf8330b4d2d", - "source_record_id": "ons.consumer_trends.04cn_04_5_3.cy2025.coicop_04_5_3.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2025.coicop_04_5_3.expenditure", "concept": "ons.household_expenditure.liquid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -1304,7 +1304,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_3.cy2025", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_3.cy2025", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_3", "table_record_kind": "detail" @@ -1320,18 +1320,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1254000000 + "value": 1229000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_d80377763eab7b280fbe50de", + "aggregate_fact_key": "ledger_aggregate_fact_v2_a037eb4bcc19c1f10414427b", "semantic_fact_key": "ledger_semantic_fact_v2_2ece6f9e40a4520992e73fea", - "source_record_id": "ons.consumer_trends.07cn_07_2_2.cy2020.coicop_07_2_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2020.coicop_07_2_2.expenditure", "concept": "ons.household_expenditure.personal_transport_fuels_lubricants", "measure_id": "expenditure", "unit": "gbp", @@ -1355,7 +1355,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_2_2.cy2020", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2020", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_2_2", "table_record_kind": "detail" @@ -1371,18 +1371,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 23650000000 + "value": 23889000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_4b7c894cc2dd4843ed56e9df", + "aggregate_fact_key": "ledger_aggregate_fact_v2_e74b6a38e841d9b12f2bac34", "semantic_fact_key": "ledger_semantic_fact_v2_020eab7b7f41ded9a27521f4", - "source_record_id": "ons.consumer_trends.07cn_07_2_2.cy2021.coicop_07_2_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2021.coicop_07_2_2.expenditure", "concept": "ons.household_expenditure.personal_transport_fuels_lubricants", "measure_id": "expenditure", "unit": "gbp", @@ -1406,7 +1406,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_2_2.cy2021", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2021", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_2_2", "table_record_kind": "detail" @@ -1422,18 +1422,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 31684000000 + "value": 31357000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_90e61da4c97487740653f2f1", + "aggregate_fact_key": "ledger_aggregate_fact_v2_3732a4669864d58c12eec201", "semantic_fact_key": "ledger_semantic_fact_v2_1e714f4857046e33b0762b79", - "source_record_id": "ons.consumer_trends.07cn_07_2_2.cy2022.coicop_07_2_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2022.coicop_07_2_2.expenditure", "concept": "ons.household_expenditure.personal_transport_fuels_lubricants", "measure_id": "expenditure", "unit": "gbp", @@ -1457,7 +1457,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_2_2.cy2022", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2022", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_2_2", "table_record_kind": "detail" @@ -1473,18 +1473,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 42154000000 + "value": 42343000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_4621528f192e3238a2f5b53f", + "aggregate_fact_key": "ledger_aggregate_fact_v2_84d73542b25681f6d22aa9e9", "semantic_fact_key": "ledger_semantic_fact_v2_6e144ac2588818eb11cf817d", - "source_record_id": "ons.consumer_trends.07cn_07_2_2.cy2023.coicop_07_2_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2023.coicop_07_2_2.expenditure", "concept": "ons.household_expenditure.personal_transport_fuels_lubricants", "measure_id": "expenditure", "unit": "gbp", @@ -1508,7 +1508,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_2_2.cy2023", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2023", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_2_2", "table_record_kind": "detail" @@ -1524,18 +1524,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 38504000000 + "value": 38080000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_d5c11a14d2062955b622275a", + "aggregate_fact_key": "ledger_aggregate_fact_v2_e29f3ad312cbfa894a9c965b", "semantic_fact_key": "ledger_semantic_fact_v2_52a387587b484beecf404fd5", - "source_record_id": "ons.consumer_trends.07cn_07_2_2.cy2024.coicop_07_2_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2024.coicop_07_2_2.expenditure", "concept": "ons.household_expenditure.personal_transport_fuels_lubricants", "measure_id": "expenditure", "unit": "gbp", @@ -1559,7 +1559,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_2_2.cy2024", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2024", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_2_2", "table_record_kind": "detail" @@ -1575,18 +1575,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 37025000000 + "value": 35460000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_98696a3d0a85269f7b2445ff", + "aggregate_fact_key": "ledger_aggregate_fact_v2_e60aad73d4b47c3e8dfd7d20", "semantic_fact_key": "ledger_semantic_fact_v2_b37136996871ae4581a3d8da", - "source_record_id": "ons.consumer_trends.07cn_07_2_2.cy2025.coicop_07_2_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2025.coicop_07_2_2.expenditure", "concept": "ons.household_expenditure.personal_transport_fuels_lubricants", "measure_id": "expenditure", "unit": "gbp", @@ -1610,7 +1610,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_2_2.cy2025", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_2_2.cy2025", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_2_2", "table_record_kind": "detail" @@ -1626,18 +1626,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 35099000000 + "value": 33974000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_dc106e0ebfeb201ba1cb2474", + "aggregate_fact_key": "ledger_aggregate_fact_v2_51dfc90216fe1734e7f614ff", "semantic_fact_key": "ledger_semantic_fact_v2_354b1286ee41dbcc6bc7786b", - "source_record_id": "ons.consumer_trends.07cn_07_3_2.cy2020.coicop_07_3_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2020.coicop_07_3_2.expenditure", "concept": "ons.household_expenditure.road_transport_services", "measure_id": "expenditure", "unit": "gbp", @@ -1661,7 +1661,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_3_2.cy2020", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2020", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_3_2", "table_record_kind": "detail" @@ -1677,18 +1677,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 5042000000 + "value": 4935000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_e03a2b5cb6f91f0db018d2fb", + "aggregate_fact_key": "ledger_aggregate_fact_v2_c8fb25170915b9cefa2fb589", "semantic_fact_key": "ledger_semantic_fact_v2_56fda94971b8facd80ea42f8", - "source_record_id": "ons.consumer_trends.07cn_07_3_2.cy2021.coicop_07_3_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2021.coicop_07_3_2.expenditure", "concept": "ons.household_expenditure.road_transport_services", "measure_id": "expenditure", "unit": "gbp", @@ -1712,7 +1712,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_3_2.cy2021", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2021", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_3_2", "table_record_kind": "detail" @@ -1728,18 +1728,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 5629000000 + "value": 5930000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_4f3f49d8ecbeddd01fa4c4aa", + "aggregate_fact_key": "ledger_aggregate_fact_v2_62fa6f291fee8aba4ee14281", "semantic_fact_key": "ledger_semantic_fact_v2_5a3c2f8cc65ead94ad6b8b78", - "source_record_id": "ons.consumer_trends.07cn_07_3_2.cy2022.coicop_07_3_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2022.coicop_07_3_2.expenditure", "concept": "ons.household_expenditure.road_transport_services", "measure_id": "expenditure", "unit": "gbp", @@ -1763,7 +1763,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_3_2.cy2022", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2022", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_3_2", "table_record_kind": "detail" @@ -1779,18 +1779,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 6928000000 + "value": 7607000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_d7bad25eb585c8812ae87d42", + "aggregate_fact_key": "ledger_aggregate_fact_v2_8e863d2dd191d5daf71c7f8b", "semantic_fact_key": "ledger_semantic_fact_v2_1c59b9ce02e8dae1d57327f0", - "source_record_id": "ons.consumer_trends.07cn_07_3_2.cy2023.coicop_07_3_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2023.coicop_07_3_2.expenditure", "concept": "ons.household_expenditure.road_transport_services", "measure_id": "expenditure", "unit": "gbp", @@ -1814,7 +1814,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_3_2.cy2023", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2023", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_3_2", "table_record_kind": "detail" @@ -1830,18 +1830,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 6851000000 + "value": 8453000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_34d3ea7cd0e9a930fcf04d6d", + "aggregate_fact_key": "ledger_aggregate_fact_v2_561f5f77506e7c247499fe6e", "semantic_fact_key": "ledger_semantic_fact_v2_5f8a7c32ec1a91344a346903", - "source_record_id": "ons.consumer_trends.07cn_07_3_2.cy2024.coicop_07_3_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2024.coicop_07_3_2.expenditure", "concept": "ons.household_expenditure.road_transport_services", "measure_id": "expenditure", "unit": "gbp", @@ -1865,7 +1865,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_3_2.cy2024", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2024", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_3_2", "table_record_kind": "detail" @@ -1881,18 +1881,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 8000000000 + "value": 9021000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_5e2a3124654c1293cd8c0e30", + "aggregate_fact_key": "ledger_aggregate_fact_v2_38966682466a56d4a924a665", "semantic_fact_key": "ledger_semantic_fact_v2_72c298dbb8c9e4116ac54584", - "source_record_id": "ons.consumer_trends.07cn_07_3_2.cy2025.coicop_07_3_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2025.coicop_07_3_2.expenditure", "concept": "ons.household_expenditure.road_transport_services", "measure_id": "expenditure", "unit": "gbp", @@ -1916,7 +1916,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.07cn_07_3_2.cy2025", + "record_set_id": "ons.consumer_trends_2026_09.07cn_07_3_2.cy2025", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07_3_2", "table_record_kind": "detail" @@ -1932,18 +1932,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 8603000000 + "value": 9469000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_0c7d5bd0f03a0a0d5e71173e", + "aggregate_fact_key": "ledger_aggregate_fact_v2_8cd573d1bed1744f03b488a9", "semantic_fact_key": "ledger_semantic_fact_v2_569b0881de5a757c5f0effb4", - "source_record_id": "ons.consumer_trends.04cn_04_5_4.cy2020.coicop_04_5_4.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2020.coicop_04_5_4.expenditure", "concept": "ons.household_expenditure.solid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -1967,7 +1967,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_4.cy2020", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2020", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_4", "table_record_kind": "detail" @@ -1983,18 +1983,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 365000000 + "value": 374000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_671d3a9fc0911d443d7f6961", + "aggregate_fact_key": "ledger_aggregate_fact_v2_78782c4be068c6c6888e9248", "semantic_fact_key": "ledger_semantic_fact_v2_2947afe6f603730a6cc3ea07", - "source_record_id": "ons.consumer_trends.04cn_04_5_4.cy2021.coicop_04_5_4.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2021.coicop_04_5_4.expenditure", "concept": "ons.household_expenditure.solid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -2018,7 +2018,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_4.cy2021", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2021", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_4", "table_record_kind": "detail" @@ -2034,18 +2034,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 483000000 + "value": 497000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_d61d8af99838bf61b2c03bac", + "aggregate_fact_key": "ledger_aggregate_fact_v2_c62d3b1d35c95d28c65b3c38", "semantic_fact_key": "ledger_semantic_fact_v2_0f4cbd132d23844d6535a131", - "source_record_id": "ons.consumer_trends.04cn_04_5_4.cy2022.coicop_04_5_4.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2022.coicop_04_5_4.expenditure", "concept": "ons.household_expenditure.solid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -2069,7 +2069,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_4.cy2022", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2022", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_4", "table_record_kind": "detail" @@ -2085,18 +2085,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 550000000 + "value": 548000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_9e80f8ce6e17c9f155cf8a93", + "aggregate_fact_key": "ledger_aggregate_fact_v2_891fb3a35ce35253504d5dec", "semantic_fact_key": "ledger_semantic_fact_v2_f69061289be48c35c134428d", - "source_record_id": "ons.consumer_trends.04cn_04_5_4.cy2023.coicop_04_5_4.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2023.coicop_04_5_4.expenditure", "concept": "ons.household_expenditure.solid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -2120,7 +2120,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_4.cy2023", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2023", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_4", "table_record_kind": "detail" @@ -2136,18 +2136,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 529000000 + "value": 530000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_e16a5c15d553955ec50ae5a8", + "aggregate_fact_key": "ledger_aggregate_fact_v2_3c961b9314edf211e9470540", "semantic_fact_key": "ledger_semantic_fact_v2_a43402e366adb17edc33c7dd", - "source_record_id": "ons.consumer_trends.04cn_04_5_4.cy2024.coicop_04_5_4.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2024.coicop_04_5_4.expenditure", "concept": "ons.household_expenditure.solid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -2171,7 +2171,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_4.cy2024", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2024", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_4", "table_record_kind": "detail" @@ -2187,18 +2187,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 352000000 + "value": 337000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_bc599354d39c6c27cf134f33", + "aggregate_fact_key": "ledger_aggregate_fact_v2_7b34c1b033c1c8fc6e302cc1", "semantic_fact_key": "ledger_semantic_fact_v2_ec6e4441226ad0dd0d777e10", - "source_record_id": "ons.consumer_trends.04cn_04_5_4.cy2025.coicop_04_5_4.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2025.coicop_04_5_4.expenditure", "concept": "ons.household_expenditure.solid_fuels", "measure_id": "expenditure", "unit": "gbp", @@ -2222,7 +2222,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.04cn_04_5_4.cy2025", + "record_set_id": "ons.consumer_trends_2026_09.04cn_04_5_4.cy2025", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_5_4", "table_record_kind": "detail" @@ -2238,18 +2238,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 312000000 + "value": 295000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_119dc4e5bc95e324b75733e8", + "aggregate_fact_key": "ledger_aggregate_fact_v2_e687d17b554b29c84030e822", "semantic_fact_key": "ledger_semantic_fact_v2_33ce232860767dbacae7736e", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_0.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_0.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2273,7 +2273,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_0", "table_record_kind": "detail" @@ -2291,18 +2291,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1630297000000 + "value": 1635517000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_118a077a27a6f05ec5c8f25b", + "aggregate_fact_key": "ledger_aggregate_fact_v2_d34dde93d0fe9c122b74ebcd", "semantic_fact_key": "ledger_semantic_fact_v2_46e7fbda7fed449f4f076f73", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_01.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_01.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2326,7 +2326,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_01", "table_record_kind": "detail" @@ -2344,18 +2344,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 139909000000 + "value": 148438000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_ed787ceac10b5b4283c54512", + "aggregate_fact_key": "ledger_aggregate_fact_v2_f574eb1aaf5851602e340f9b", "semantic_fact_key": "ledger_semantic_fact_v2_b215b9ba2217814142024645", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_02.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_02.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2379,7 +2379,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_02", "table_record_kind": "detail" @@ -2397,18 +2397,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 50348000000 + "value": 49226000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_38803d2247a8b4b1f7f8b6b4", + "aggregate_fact_key": "ledger_aggregate_fact_v2_d22f0f7c85c48947bd456e98", "semantic_fact_key": "ledger_semantic_fact_v2_d725cffd694a7f677d62b707", - "source_record_id": "ons.consumer_trends.expanded_02cn.cy2023.published.coicop_02_3.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_02cn.cy2023.published.coicop_02_3.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2432,7 +2432,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_02cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_02cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_02_3", "table_record_kind": "detail" @@ -2450,18 +2450,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 3344000000 + "value": 3208000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_efccc773435308ec534d6162", + "aggregate_fact_key": "ledger_aggregate_fact_v2_c6022041790b774c10cc3d2a", "semantic_fact_key": "ledger_semantic_fact_v2_d3fa68fe7ea1be71ee1058bb", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_03.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_03.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2485,7 +2485,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_03", "table_record_kind": "detail" @@ -2503,18 +2503,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 79913000000 + "value": 78938000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_9ec24b35db63aefc2bef7d0a", + "aggregate_fact_key": "ledger_aggregate_fact_v2_03a86017967ac937e4ed52d4", "semantic_fact_key": "ledger_semantic_fact_v2_6043d822382edf8c7dc661b1", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_04.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_04.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2538,7 +2538,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04", "table_record_kind": "detail" @@ -2556,18 +2556,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 431667000000 + "value": 435230000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_09d1af38710f23674a931d4f", + "aggregate_fact_key": "ledger_aggregate_fact_v2_4640b047dd114a555cf90706", "semantic_fact_key": "ledger_semantic_fact_v2_80fd5a77f8febf7ba1aec86f", - "source_record_id": "ons.consumer_trends.expanded_04cn.cy2023.published.coicop_04_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_04cn.cy2023.published.coicop_04_2.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2591,7 +2591,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_04cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_04cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_2", "table_record_kind": "detail" @@ -2609,18 +2609,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 266330000000 + "value": 264384000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_17bbb2e670f11d1bdb3bfd45", + "aggregate_fact_key": "ledger_aggregate_fact_v2_945e031c5b7af0e9217e12d6", "semantic_fact_key": "ledger_semantic_fact_v2_d49f272f321fd32568b9e656", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_05.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_05.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2644,7 +2644,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_05", "table_record_kind": "detail" @@ -2662,18 +2662,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 77105000000 + "value": 78354000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_09994b1303245de703ff9a96", + "aggregate_fact_key": "ledger_aggregate_fact_v2_03df26b7269bf095374acb4c", "semantic_fact_key": "ledger_semantic_fact_v2_423370078189cfec79111fcc", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_06.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_06.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2697,7 +2697,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_06", "table_record_kind": "detail" @@ -2715,18 +2715,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 31659000000 + "value": 32482000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_7007df456ebcacf0a5dcd7fd", + "aggregate_fact_key": "ledger_aggregate_fact_v2_a0feccbd8c004f9b16236865", "semantic_fact_key": "ledger_semantic_fact_v2_b01a8dc4c0dc2589cde14303", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_07.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_07.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2750,7 +2750,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07", "table_record_kind": "detail" @@ -2768,18 +2768,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 210930000000 + "value": 212907000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_7ebe9c4469b9ef50cdba0cef", + "aggregate_fact_key": "ledger_aggregate_fact_v2_23736c9a6342c63343938048", "semantic_fact_key": "ledger_semantic_fact_v2_d79a59ea841fb9eda2731977", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_08.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_08.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2803,7 +2803,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_08", "table_record_kind": "detail" @@ -2821,18 +2821,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 29321000000 + "value": 29276000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_039f1f1fad554b41eb635f95", + "aggregate_fact_key": "ledger_aggregate_fact_v2_ab6c327f25972468863e15c6", "semantic_fact_key": "ledger_semantic_fact_v2_35d89fa006c9d4c99bce256a", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_09.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_09.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2856,7 +2856,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_09", "table_record_kind": "detail" @@ -2874,18 +2874,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 156163000000 + "value": 158628000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_ea0704ec2b12857a02ccf2dd", + "aggregate_fact_key": "ledger_aggregate_fact_v2_25f4aadc38459a431192e615", "semantic_fact_key": "ledger_semantic_fact_v2_c5712e2a32a76176bc7517ca", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_10.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_10.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2909,7 +2909,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_10", "table_record_kind": "detail" @@ -2927,18 +2927,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 39455000000 + "value": 39755000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_3007c584c41fae874ca5a236", + "aggregate_fact_key": "ledger_aggregate_fact_v2_d41d99dc7d745b311fad9843", "semantic_fact_key": "ledger_semantic_fact_v2_01823f63266bf3d594896af9", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_11.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_11.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -2962,7 +2962,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_11", "table_record_kind": "detail" @@ -2980,18 +2980,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 175197000000 + "value": 159674000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_07d0b1de1b76ace57d954c16", + "aggregate_fact_key": "ledger_aggregate_fact_v2_d5ed081b4afb3d1e63e01649", "semantic_fact_key": "ledger_semantic_fact_v2_d867fd60d4268a2e5beeabaa", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.coicop_12.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.coicop_12.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3015,7 +3015,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_12", "table_record_kind": "detail" @@ -3033,18 +3033,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 208630000000 + "value": 212609000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_9b1df9adde8c44efe1ce54b8", + "aggregate_fact_key": "ledger_aggregate_fact_v2_670641fb254e97fd524b49f4", "semantic_fact_key": "ledger_semantic_fact_v2_8acb0636ba59e840eb195e3d", - "source_record_id": "ons.consumer_trends.expanded_12cn.cy2023.published.coicop_12_6_1.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_12cn.cy2023.published.coicop_12_6_1.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3068,7 +3068,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_12cn.cy2023.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_12cn.cy2023.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_12_6_1", "table_record_kind": "detail" @@ -3086,18 +3086,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, "value": 58452000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_e44e14ff2b8587a47e335448", + "aggregate_fact_key": "ledger_aggregate_fact_v2_fd491d0806559b73d8301801", "semantic_fact_key": "ledger_semantic_fact_v2_9b1c4f5718cf9478b89195fb", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2023.published.national.coicop_nat0.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.national.coicop_nat0.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3121,7 +3121,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2023.published.national", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2023.published.national", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_nat0", "table_record_kind": "detail" @@ -3139,18 +3139,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1652281000000 + "value": 1655276000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_a9b5d74a1905275b8b8dadae", + "aggregate_fact_key": "ledger_aggregate_fact_v2_b1f89682d673e6877a6737da", "semantic_fact_key": "ledger_semantic_fact_v2_a73977aeaa41f815044099fe", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_0.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_0.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3174,7 +3174,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_0", "table_record_kind": "detail" @@ -3192,18 +3192,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1685220000000 + "value": 1692413000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_19b25cb53e05c9f045fb1cec", + "aggregate_fact_key": "ledger_aggregate_fact_v2_56d74c9095bcb721695e9636", "semantic_fact_key": "ledger_semantic_fact_v2_8488ba6ec631b3f828ef2739", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_01.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_01.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3227,7 +3227,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_01", "table_record_kind": "detail" @@ -3245,18 +3245,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 142184000000 + "value": 153437000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_1e134fc0c63ee8affdf1c3ba", + "aggregate_fact_key": "ledger_aggregate_fact_v2_e71744217e4a014946f0f928", "semantic_fact_key": "ledger_semantic_fact_v2_9f4c3da6794bc0ee887ee82d", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_02.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_02.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3280,7 +3280,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_02", "table_record_kind": "detail" @@ -3298,18 +3298,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 51116000000 + "value": 47204000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_a9c2cf60ddc9feb86cd54407", + "aggregate_fact_key": "ledger_aggregate_fact_v2_1e8040a9e05dbd8689711a7b", "semantic_fact_key": "ledger_semantic_fact_v2_9a83fd9699b4fb97c9bfc4f0", - "source_record_id": "ons.consumer_trends.expanded_02cn.cy2024.published.coicop_02_3.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_02cn.cy2024.published.coicop_02_3.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3333,7 +3333,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_02cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_02cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_02_3", "table_record_kind": "detail" @@ -3351,18 +3351,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 3030000000 + "value": 3044000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_565438cdaa9a16854138834f", + "aggregate_fact_key": "ledger_aggregate_fact_v2_1e8d7181722851c45b0f44eb", "semantic_fact_key": "ledger_semantic_fact_v2_520f95da39f8cb35d288497d", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_03.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_03.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3386,7 +3386,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_03", "table_record_kind": "detail" @@ -3404,18 +3404,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 78930000000 + "value": 78065000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_3d2eab52c411caf62b4b327b", + "aggregate_fact_key": "ledger_aggregate_fact_v2_23f344fac5c163f240644eda", "semantic_fact_key": "ledger_semantic_fact_v2_3d923cd09e1028c729eb19b8", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_04.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_04.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3439,7 +3439,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04", "table_record_kind": "detail" @@ -3457,18 +3457,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 455559000000 + "value": 459318000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_9a759bc4b58b961b03999eb6", + "aggregate_fact_key": "ledger_aggregate_fact_v2_dd7ddf8f9fc14de9d2d3f10e", "semantic_fact_key": "ledger_semantic_fact_v2_b6111c445869ba1343ae7c97", - "source_record_id": "ons.consumer_trends.expanded_04cn.cy2024.published.coicop_04_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_04cn.cy2024.published.coicop_04_2.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3492,7 +3492,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_04cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_04cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_2", "table_record_kind": "detail" @@ -3510,18 +3510,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 291755000000 + "value": 291626000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_77a67bd726abdc70bffe5d1c", + "aggregate_fact_key": "ledger_aggregate_fact_v2_926a880e957409cfcf8d4993", "semantic_fact_key": "ledger_semantic_fact_v2_2ceea72d01dbb3ad0117e019", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_05.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_05.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3545,7 +3545,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_05", "table_record_kind": "detail" @@ -3563,18 +3563,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 76041000000 + "value": 78242000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_e536c31570dee9e8aa7c654f", + "aggregate_fact_key": "ledger_aggregate_fact_v2_c564130ad965bdf9ec3d79b0", "semantic_fact_key": "ledger_semantic_fact_v2_68c95bad830d0a49f3a12f53", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_06.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_06.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3598,7 +3598,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_06", "table_record_kind": "detail" @@ -3616,18 +3616,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 33157000000 + "value": 33769000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_e1618424b63e1e44f5f98fc6", + "aggregate_fact_key": "ledger_aggregate_fact_v2_2a8f9763d220ce525af770ef", "semantic_fact_key": "ledger_semantic_fact_v2_639dc1779e5c47a565a12892", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_07.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_07.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3651,7 +3651,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07", "table_record_kind": "detail" @@ -3669,18 +3669,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 215510000000 + "value": 221273000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_331dd633a5e6612464f55409", + "aggregate_fact_key": "ledger_aggregate_fact_v2_2a9f0674192163fbc1d2a463", "semantic_fact_key": "ledger_semantic_fact_v2_27081b8e489dbe495915beb6", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_08.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_08.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3704,7 +3704,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_08", "table_record_kind": "detail" @@ -3722,18 +3722,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 31725000000 + "value": 30985000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_1baceb48cd8c830a43e2c337", + "aggregate_fact_key": "ledger_aggregate_fact_v2_c2b29138a2cff953183bea47", "semantic_fact_key": "ledger_semantic_fact_v2_8cdee0441150b72dc575b2c7", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_09.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_09.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3757,7 +3757,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_09", "table_record_kind": "detail" @@ -3775,18 +3775,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 164060000000 + "value": 163561000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_21ada720cc8c4205939a355a", + "aggregate_fact_key": "ledger_aggregate_fact_v2_b3b254dcbd1f72cac61d39eb", "semantic_fact_key": "ledger_semantic_fact_v2_2a80ee54018cf4d88c6345cb", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_10.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_10.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3810,7 +3810,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_10", "table_record_kind": "detail" @@ -3828,18 +3828,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 42334000000 + "value": 41836000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_c773d9c9e853e850ce3b026d", + "aggregate_fact_key": "ledger_aggregate_fact_v2_406947e180520feef26304f3", "semantic_fact_key": "ledger_semantic_fact_v2_688853034059206a8c2f7478", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_11.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_11.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3863,7 +3863,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_11", "table_record_kind": "detail" @@ -3881,18 +3881,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 182600000000 + "value": 168609000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_017640e890c0d4542c4e318f", + "aggregate_fact_key": "ledger_aggregate_fact_v2_7904e662b8c651f09db4cda8", "semantic_fact_key": "ledger_semantic_fact_v2_ec80ee0fd14e794642f430f8", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.coicop_12.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.coicop_12.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3916,7 +3916,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_12", "table_record_kind": "detail" @@ -3934,18 +3934,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 212004000000 + "value": 216114000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_be49a987c62579a9fcb89886", + "aggregate_fact_key": "ledger_aggregate_fact_v2_4aaa632ca88a5ce731fca722", "semantic_fact_key": "ledger_semantic_fact_v2_13228714785f6dc459e4963f", - "source_record_id": "ons.consumer_trends.expanded_12cn.cy2024.published.coicop_12_6_1.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_12cn.cy2024.published.coicop_12_6_1.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -3969,7 +3969,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_12cn.cy2024.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_12cn.cy2024.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_12_6_1", "table_record_kind": "detail" @@ -3987,18 +3987,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, "value": 55794000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_9cf45d098c7b6040db848411", + "aggregate_fact_key": "ledger_aggregate_fact_v2_c0c11fcb52a57cac2370a700", "semantic_fact_key": "ledger_semantic_fact_v2_b5926c7e5559ecea14c0a022", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2024.published.national.coicop_nat0.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.national.coicop_nat0.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4022,7 +4022,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2024.published.national", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2024.published.national", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_nat0", "table_record_kind": "detail" @@ -4040,18 +4040,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1699387000000 + "value": 1708930000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_ed792b8fd35240decb2a8cf1", + "aggregate_fact_key": "ledger_aggregate_fact_v2_34ceb1b08d281e77e5eb07b1", "semantic_fact_key": "ledger_semantic_fact_v2_684d36f2bed3831081724975", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_0.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_0.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4075,7 +4075,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_0", "table_record_kind": "detail" @@ -4093,18 +4093,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1762970000000 + "value": 1766604000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_1faaa0418f29a4a141a6622a", + "aggregate_fact_key": "ledger_aggregate_fact_v2_90363cf103e69d271378f934", "semantic_fact_key": "ledger_semantic_fact_v2_cc38678c03000ed594a430ac", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_01.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_01.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4128,7 +4128,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_01", "table_record_kind": "detail" @@ -4146,18 +4146,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 148165000000 + "value": 160360000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_5e5a13e6602c1a5422627bf0", + "aggregate_fact_key": "ledger_aggregate_fact_v2_833b21ca88e22993441726b2", "semantic_fact_key": "ledger_semantic_fact_v2_118e178c8dd2e668559c913b", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_02.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_02.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4181,7 +4181,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_02", "table_record_kind": "detail" @@ -4199,18 +4199,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 52880000000 + "value": 47251000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_61fb174b349f577248108ed2", + "aggregate_fact_key": "ledger_aggregate_fact_v2_ae4b921d48b44da1b5210e7b", "semantic_fact_key": "ledger_semantic_fact_v2_1a75184724794d7fa16f9825", - "source_record_id": "ons.consumer_trends.expanded_02cn.cy2025.published.coicop_02_3.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_02cn.cy2025.published.coicop_02_3.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4234,7 +4234,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_02cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_02cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_02_3", "table_record_kind": "detail" @@ -4252,18 +4252,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 3058000000 + "value": 2911000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_8bdd83499c4b6b67e3ce08fd", + "aggregate_fact_key": "ledger_aggregate_fact_v2_2f71542fe17e8b77ee53f26a", "semantic_fact_key": "ledger_semantic_fact_v2_09a8fea16cdceb56a1b499ed", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_03.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_03.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4287,7 +4287,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_03", "table_record_kind": "detail" @@ -4305,18 +4305,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 82340000000 + "value": 81042000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_715ba2476efc3e5594aff863", + "aggregate_fact_key": "ledger_aggregate_fact_v2_588bd05e4db3097303a7ddd4", "semantic_fact_key": "ledger_semantic_fact_v2_50e5556b8b35f7d427f6c3ce", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_04.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_04.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4340,7 +4340,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04", "table_record_kind": "detail" @@ -4358,18 +4358,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 486444000000 + "value": 491873000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_5a7a7ff5326cedc65125f71d", + "aggregate_fact_key": "ledger_aggregate_fact_v2_380718aa4a57961a1338ba24", "semantic_fact_key": "ledger_semantic_fact_v2_01598fb8c6a0098a8e97faaf", - "source_record_id": "ons.consumer_trends.expanded_04cn.cy2025.published.coicop_04_2.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_04cn.cy2025.published.coicop_04_2.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4393,7 +4393,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_04cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_04cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_04_2", "table_record_kind": "detail" @@ -4411,18 +4411,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 313154000000 + "value": 312051000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_b87304a6051c5c0a917800ad", + "aggregate_fact_key": "ledger_aggregate_fact_v2_516e7ee4d04f77f73473a5bf", "semantic_fact_key": "ledger_semantic_fact_v2_bb9df930ed3545099a7e4354", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_05.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_05.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4446,7 +4446,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_05", "table_record_kind": "detail" @@ -4464,18 +4464,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 75906000000 + "value": 77735000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_d08711c664e4d83374c451df", + "aggregate_fact_key": "ledger_aggregate_fact_v2_3a806e75d5b78508320d920b", "semantic_fact_key": "ledger_semantic_fact_v2_7cc09b839827a1ddf5de094a", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_06.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_06.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4499,7 +4499,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_06", "table_record_kind": "detail" @@ -4517,18 +4517,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 35880000000 + "value": 36129000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_198f412cb804cefeeb26fadb", + "aggregate_fact_key": "ledger_aggregate_fact_v2_31867c2177996fbf9e17c855", "semantic_fact_key": "ledger_semantic_fact_v2_8e62f055806fa3a9ab5aeb50", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_07.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_07.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4552,7 +4552,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_07", "table_record_kind": "detail" @@ -4570,18 +4570,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 223393000000 + "value": 230894000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_9a375187cea82a8be5420b30", + "aggregate_fact_key": "ledger_aggregate_fact_v2_41ac1ed45df0aa6274d42426", "semantic_fact_key": "ledger_semantic_fact_v2_c20c7cbc943743239a668c49", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_08.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_08.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4605,7 +4605,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_08", "table_record_kind": "detail" @@ -4623,18 +4623,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 31619000000 + "value": 30511000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_b3c1ad05ca7f31c8829cd5c8", + "aggregate_fact_key": "ledger_aggregate_fact_v2_8e68a20cd9471450620a02c3", "semantic_fact_key": "ledger_semantic_fact_v2_fa66b21a89f9d80a390ea539", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_09.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_09.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4658,7 +4658,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_09", "table_record_kind": "detail" @@ -4676,18 +4676,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 171605000000 + "value": 169961000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_ce5d57216c3b28fe662c6ea3", + "aggregate_fact_key": "ledger_aggregate_fact_v2_38b6b241ae8a6b3cd5673d76", "semantic_fact_key": "ledger_semantic_fact_v2_ba85efbaeaf0e090a7f74be9", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_10.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_10.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4711,7 +4711,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_10", "table_record_kind": "detail" @@ -4729,18 +4729,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 46028000000 + "value": 44709000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_6a56cddb7d8e27dc81935c05", + "aggregate_fact_key": "ledger_aggregate_fact_v2_a553958d3dd3e51ce5fd2800", "semantic_fact_key": "ledger_semantic_fact_v2_edfe814e6e1fb80420706dbf", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_11.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_11.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4764,7 +4764,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_11", "table_record_kind": "detail" @@ -4782,18 +4782,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 192883000000 + "value": 176373000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_77a94b7cb65deb219d254195", + "aggregate_fact_key": "ledger_aggregate_fact_v2_99c6415f12703254800a7cc5", "semantic_fact_key": "ledger_semantic_fact_v2_76307839c9a823112fa8bcd4", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.coicop_12.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.coicop_12.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4817,7 +4817,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_12", "table_record_kind": "detail" @@ -4835,18 +4835,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 215827000000 + "value": 219766000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_b7d4f70b6cada2419c81a171", + "aggregate_fact_key": "ledger_aggregate_fact_v2_81d2b55d2d3c4b9e9b47953a", "semantic_fact_key": "ledger_semantic_fact_v2_62f82c0a4b5cef35953abd2b", - "source_record_id": "ons.consumer_trends.expanded_12cn.cy2025.published.coicop_12_6_1.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_12cn.cy2025.published.coicop_12_6_1.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4870,7 +4870,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_12cn.cy2025.published", + "record_set_id": "ons.consumer_trends_2026_09.expanded_12cn.cy2025.published", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_12_6_1", "table_record_kind": "detail" @@ -4888,18 +4888,18 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 56934000000 + "value": 56931000000 }, { - "aggregate_fact_key": "ledger_aggregate_fact_v2_a033855d0326c275f294e556", + "aggregate_fact_key": "ledger_aggregate_fact_v2_7d002ae45e2bdccf8e7750cc", "semantic_fact_key": "ledger_semantic_fact_v2_c247000f9965d60f2ae14aff", - "source_record_id": "ons.consumer_trends.expanded_0cn.cy2025.published.national.coicop_nat0.expenditure", + "source_record_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.national.coicop_nat0.expenditure", "concept": "ons.household_final_consumption_expenditure", "measure_id": "expenditure", "unit": "gbp", @@ -4923,7 +4923,7 @@ "basis": "calendar" }, "layout": { - "record_set_id": "ons.consumer_trends.expanded_0cn.cy2025.published.national", + "record_set_id": "ons.consumer_trends_2026_09.expanded_0cn.cy2025.published.national", "groupby_dimension": "ons.coicop", "groupby_value_id": "coicop_nat0", "table_record_kind": "detail" @@ -4941,13 +4941,13 @@ }, "source": { "source_name": "ons", - "source_table": "Consumer Trends current price, not seasonally adjusted, 0CN, 01CN-12CN and TOURCN", + "source_table": "Consumer Trends current price, not seasonally adjusted, 30 September 2026 release, 0CN, 01CN-12CN and TOURCN", "source_file": "cpnsa.xlsx", - "source_sha256": "109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c", - "vintage": "2026_06_30_release_2026_q1", - "raw_r2_key": "raw/ons/ons-consumer-trends-current-price-2026/2026/109e53de0c09d30327ae2053a0487cee159fe44135884707c9000c252438143c/cpnsa.xlsx" + "source_sha256": "982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df", + "vintage": "2026_09_30_release_2026_q2", + "raw_r2_key": "raw/uk/ons/ons-consumer-trends-current-price-september-2026/2026/982307e5fd2a790bf2821df8d920ed708cef55f04dd5d64a2ca2b618674cf7df/cpnsa.xlsx" }, - "value": 1776550000000 + "value": 1782389000000 } ] } diff --git a/packages/microcosm-build/src/microcosm/build/uk/ons_single_year_age_populations.json b/packages/microcosm-build/src/microcosm/build/uk/ons_single_year_age_populations.json index a94ffe6cfc..6be64bc01a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ons_single_year_age_populations.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ons_single_year_age_populations.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "selections": [ { diff --git a/packages/microcosm-build/src/microcosm/build/uk/ons_spree_tenure_dwellings.json b/packages/microcosm-build/src/microcosm/build/uk/ons_spree_tenure_dwellings.json index 54397534ee..ad67b3e424 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/ons_spree_tenure_dwellings.json +++ b/packages/microcosm-build/src/microcosm/build/uk/ons_spree_tenure_dwellings.json @@ -15,12 +15,12 @@ }, "source_fact_feed": { "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 c7cd28ad6d..2d3c354bc4 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 f3802f3b04..77de8cb0ef 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 9f881e6c28..f69403c8a0 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json +++ b/packages/microcosm-build/src/microcosm/build/uk/release_input_coverage_manifest.json @@ -470,7 +470,7 @@ "required_mass_change_reason": "Capital-gains incidence anchor moves the mass of non-liable clone households back to their paired originals until the sub-exempt and loss-making clone mass match the Advani-Summers reporter composition at the redrawn liable mass; every pair's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, the HMRC Table 3 redrawn gains on the spine and Advani-Summers capital-gains incidence" @@ -493,7 +493,7 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "Advani and Summers (2020), Capital Gains and UK Inequality, CAGE Working Paper 465", "survey": "Family Resources Survey 2024-25, SPI synthetic support, and Advani-Summers capital-gains incidence" @@ -516,7 +516,7 @@ "required_mass_change_reason": "Capital-gains residential split divides every household carrying liable gainers into arms weighted by the solved residential probabilities, one arm per subset of residential gainers; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative) on the amounts the Table 3 redraw placed" @@ -538,7 +538,7 @@ "required_mass_change_reason": "Capital-gains support split divides the wealthiest households of each HMRC Table 3 income band into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "HMRC Capital Gains Tax statistics, July 2026 release, Table 3 for 2024-25, via the vendored conditioning facts", "survey": "Family Resources Survey 2024-25, SPI synthetic support and HMRC Capital Gains Tax statistics Table 3 (2024-25 individuals by size of gain and taxable income)" @@ -567,7 +567,7 @@ "required_mass_change_reason": "ETB public-services imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab, DfT rail fare index, and public NHS activity/cost table.", "survey": "Effects of Taxes and Benefits 1977-2024 and NHS age-gender public table" @@ -587,7 +587,7 @@ "required_mass_change_reason": "ETB VAT expenditure-rate imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "UK Data Service SN 8856 Effects of Taxes and Benefits household tab and cited VAT anchor resource.", "survey": "Effects of Taxes and Benefits 1977-2024" @@ -609,7 +609,7 @@ "required_mass_change_reason": "High-value home support divides every owner household in the top value stratum of its region into light copies at equal weight; every household's mass and the total household mass are conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "Microcosm structural operator (microcosm#1240 fix 1); no publisher input", "survey": "Family Resources Survey 2024-25 and SPI synthetic support, after the WAS wealth draw and the regional property uprating" @@ -630,7 +630,7 @@ "required_mass_change_reason": "CGT asset-type assignment on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "survey": "HMRC Capital Gains Tax statistics 2026 release, Table 8 (UK residential property disposals, 2024-25, administrative), Table 4.1 (individuals claiming Business Asset Disposal Relief or Investors' Relief by band of qualifying gain, 2024-25, administrative) and Table 7 (disposals, proceeds and gains by asset type, 2023-24, sample-based), vendored from the pinned Chronicle feed" @@ -654,10 +654,10 @@ "capital_gains" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "conditioning_resource": "hmrc_cgt_conditioning_facts.json", - "conditioning_resource_sha256": "054b1ee1a66cae6ed3793053eb0d3b9eea6b3f8976953479948ae11f7eedcd35", + "conditioning_resource_sha256": "f328a239a4ab94054c516df1c4ae663c60188d81d04f27ed790d9594144a5a7c", "conditioning_surface": "2024-25", "hmrc_surface": "2024-25", "mapped_build_period": "2024" @@ -744,7 +744,7 @@ "full_frs_tei_band_unavailable" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "hmrc_surface": "2023-24", "mapped_build_period": "2024", @@ -783,12 +783,36 @@ "liquid_fuel_consumption", "solid_fuel_consumption", "has_fuel_consumption", - "uses_energy_prepayment_meter" + "uses_energy_prepayment_meter", + "beer_litres", + "cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", + "beer_draught_share", + "cider_draught_share", + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week", + "remote_gaming_net_losses", + "pool_betting_net_receipts", + "bingo_net_receipts", + "national_lottery_ticket_spending", + "land_based_casino_net_losses", + "machine_games_lower_rate_net_takings", + "machine_games_standard_rate_net_takings", + "machine_games_higher_rate_net_takings", + "land_based_fixed_odds_betting_net_losses", + "remote_uk_horseracing_betting_net_losses", + "remote_other_betting_net_losses", + "betting_exchange_commission", + "horse_and_dog_pool_betting_net_losses" ], "required_mass_change_reason": "LCFS consumption imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "UK Data Service SN 9603 Living Costs and Food Survey 2024-25 (2nd edition) household/person tabs and the vendored Chronicle facts for NEED 2024 mean kWh, DESNZ Energy Trends and QEP average prices paid for calendar 2024, road-fuel outturn (DESNZ, HMRC, ONS Consumer Trends) and road fuel by vehicle type (DESNZ), ONS Consumer Trends household spending by COICOP division, the DfT VEH1103 licensed-car stock, NTS bus use, and the DfT and devolved bus finance tables and fares indices.", "survey": "Living Costs and Food Survey 2024-25" @@ -814,7 +838,7 @@ "required_mass_change_reason": "NTS bus-travel imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "Department for Transport National Travel Survey, UK Data Service SN 5340 (End User Licence, 19th edition, November 2025), DOI 10.5255/UKDA-SN-5340-19; local licensed tab files (household, individual, trip); England residents only from 2013.", "survey": "National Travel Survey 2002-2024" @@ -834,7 +858,7 @@ "required_mass_change_reason": "Private-school attendance stored on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "policyengine-uk attends_private_school (the gov.simulation.private_school_vat attendance rates and factor), evaluated by the pinned engine", "survey": "policyengine-uk private-school attendance imputation, stored at the spine's weights" @@ -857,7 +881,7 @@ "property_finance_costs" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "https://www.gov.uk/government/statistics/property-rental-income-statistics", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Property Rental Income Statistics 2026 (tax year 2024-25)" @@ -878,7 +902,7 @@ "required_mass_change_reason": "Annual property purchases imputed on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "https://www.gov.uk/government/statistics/uk-stamp-tax-statistics", "survey": "HMRC Annual Stamp Tax Statistics 2024 to 2025 (corrected 11 March 2026), Tables 6b, 8a and 8b" @@ -901,7 +925,7 @@ "property_wealth" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "uk/high_value_home_value_knots.json, built by tools/build_uk_high_value_home_stock.py from PolicyEngine/chronicle#343's registrations", "survey": "HM Land Registry Price Paid latest sales uprated with the UK House Price Index, owner-weighted by region (the dense value node's knots, region level)" @@ -925,7 +949,7 @@ "non_residential_property_value" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "MHCLG dwellings and the UK House Price Index regional average price averaged over the twelve months of calendar 2024 from the July 2026 full file, the frame's valuation basis, so the engine's annual uprating from 2024 projects the value once (microcosm#1240 fix 5).", "survey": "Public regional property reference" @@ -953,7 +977,7 @@ "employment_income" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "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" @@ -986,7 +1010,7 @@ "household_source_id" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "Reserved SPI support households for the HMRC Table 2.5 total-income bands from GBP 200,000, stacked at the published band taxpayer count over the donors per band (PolicyEngine/chronicle#280 lane).", "survey": "Survey of Personal Incomes Public Use Tape 2022-23 and HMRC Income Tax liabilities statistics July 2026 Table 2.5" @@ -1008,7 +1032,7 @@ "student_loan_plan" ], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "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" @@ -1030,7 +1054,7 @@ "required_mass_change_reason": "WAS Lifetime ISA imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "source_vintages": { "source": "Office for National Statistics Wealth and Assets Survey, UK Data Service SN 7215, DOI 10.5255/UKDA-SN-7215-20; local licensed round-8 person and household tabs (interviews April 2020 to March 2022, Great Britain).", "survey": "Wealth and Assets Survey round 8" @@ -1069,7 +1093,7 @@ "required_mass_change_reason": "WAS wealth imputation on the source spine: household weights pass through unchanged and total household mass is conserved.", "rewrites": [], "source_manifest": "source_stages.json", - "source_manifest_sha256": "7989ebb85425cdefb556623cb78233351bac54c4b1b33a39b8a5ee596a104311", + "source_manifest_sha256": "a7fc3b5195839347a28c2c1b2d0250c1530413418440ecc9bd2445e67dd9c716", "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 68110c823a..3edee73ad0 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": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "build": "build-bundle --suite uk -> build-consumer-artifact", "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" }, "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 ad02dbc037..006363ae19 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/source_stages.json +++ b/packages/microcosm-build/src/microcosm/build/uk/source_stages.json @@ -4089,6 +4089,12 @@ "resource": "desnz_road_fuel_by_vehicle.json", "kind": "public_aggregate_reference", "format": "json" + }, + { + "role": "excise_facts", + "resource": "excise_facts.json", + "kind": "public_aggregate_reference", + "format": "json" } ], "operations": [ @@ -4111,7 +4117,91 @@ "LCFS accommodation 4 and 5 -> FLAT" ], "unmapped_codes": "refuse", - "floor": 0.0 + "floor": 0.0, + "shares": { + "tobacco_share_of_alcohol_and_tobacco": { + "total": "alcohol_and_tobacco_consumption", + "numerator": [ + "c22111", + "c22121", + "c22131" + ], + "denominator": [ + "c21111", + "c21211", + "c21212", + "c21213", + "c21214", + "c21221", + "c21311", + "c22111", + "c22121", + "c22131" + ] + }, + "on_trade_alcohol_share_of_restaurants_and_hotels": { + "total": "restaurants_and_hotels_consumption", + "numerator": [ + "cb111c", + "cb111d", + "cb111e", + "cb111f", + "cb111g", + "cb111h", + "cb111i", + "cb111j" + ], + "denominator": [ + "p611" + ] + }, + "gambling_stakes_share_of_recreation": { + "total": "recreation_consumption", + "numerator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315", + "c94316", + "c94319" + ], + "denominator": [ + "p609" + ] + }, + "national_lottery_share_of_gambling_stakes": { + "total": "gambling_stakes", + "numerator": [ + "c94316", + "c94319" + ], + "denominator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315", + "c94316", + "c94319" + ] + }, + "betting_and_gaming_share_of_other_gambling_stakes": { + "total": "other_gambling_stakes", + "numerator": [ + "c94311", + "c94312", + "c94314" + ], + "denominator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315" + ] + } + } }, { "kind": "uprate_donor_columns", @@ -4321,7 +4411,12 @@ "electricity_consumption", "gas_consumption", "liquid_fuel_consumption", - "solid_fuel_consumption" + "solid_fuel_consumption", + "tobacco_share_of_alcohol_and_tobacco", + "on_trade_alcohol_share_of_restaurants_and_hotels", + "gambling_stakes_share_of_recreation", + "national_lottery_share_of_gambling_stakes", + "betting_and_gaming_share_of_other_gambling_stakes" ], "categorical_predictors": [ "region", @@ -4330,7 +4425,8 @@ ], "weights": "explicit", "seed": 0, - "n_estimators": 100 + "n_estimators": 100, + "gate_calibration": "cross_fitted" }, { "kind": "support_clip", @@ -4720,6 +4816,225 @@ ] } }, + { + "kind": "level_excise_quantities", + "resource": "excise_facts.json", + "period_type": "fiscal_year", + "period_value": 2024, + "fiscal_start": "2024-04-01", + "geography_id": "K02000001", + "weeks_per_year": 52, + "alcohol_volume_weights": { + "rule": "spending" + }, + "outputs": { + "beer_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "alcohol_product": "beer", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "all" + }, + "unit": "litre_of_pure_alcohol", + "strength": { + "value": 0.04, + "parameter_path": "household.consumption.alcohol.beer_abv" + } + }, + "cider_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "alcohol_product": "cider", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "all" + }, + "unit": "litre_of_pure_alcohol", + "strength": { + "value": 0.045, + "parameter_path": "household.consumption.alcohol.cider_abv" + } + }, + "wine_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "alcohol_product": "wine", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "all" + }, + "unit": "litre_of_pure_alcohol", + "strength": { + "value": 0.12, + "parameter_path": "household.consumption.alcohol.wine_abv" + } + }, + "spirits_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "alcohol_product": "spirits", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "all" + }, + "unit": "litre_of_pure_alcohol", + "strength": { + "value": 0.4, + "parameter_path": "household.consumption.alcohol.spirits_abv" + } + }, + "other_fermented_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "alcohol_product": "other_fermented_products", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "all" + }, + "unit": "litre_of_pure_alcohol", + "strength": { + "value": 0.05, + "parameter_path": "household.consumption.alcohol.other_fermented_abv" + } + }, + "cigarettes_per_week": { + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "cigarettes" + }, + "unit": "stick" + }, + "hand_rolling_tobacco_grams_per_week": { + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "hand_rolling_tobacco" + }, + "unit": "kilogram" + }, + "cigars_grams_per_week": { + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "cigars" + }, + "unit": "kilogram" + }, + "other_tobacco_grams_per_week": { + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "other" + }, + "unit": "kilogram" + } + }, + "draught_shares": { + "beer_draught_share": { + "concept": "hmrc.alcohol_clearances", + "unit": "litre_of_pure_alcohol", + "numerator": [ + { + "alcohol_product": "beer", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "draught_relief_only" + }, + { + "alcohol_product": "beer", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief" + } + ], + "denominator": [ + { + "alcohol_product": "beer", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "all" + } + ] + }, + "cider_draught_share": { + "concept": "hmrc.alcohol_clearances", + "unit": "litre_of_pure_alcohol", + "numerator": [ + { + "alcohol_product": "cider", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "draught_relief_only" + }, + { + "alcohol_product": "cider", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief" + } + ], + "denominator": [ + { + "alcohol_product": "cider", + "abv_band": "all", + "duty_point": "all", + "duty_relief": "all" + } + ] + } + }, + "gambling": { + "receipts": { + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash" + } + }, + "machine_games_liabilities": { + "concept": "hmrc.machine_games_duty_liabilities" + }, + "yield": { + "concept": "gambling_commission.gross_gambling_yield", + "geography_id": "K03000001" + }, + "rates": { + "general_betting": { + "value": 0.15, + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds" + }, + "pool_betting": { + "value": 0.15, + "parameter_path": "gov.hmrc.gambling_duty.pool_betting.rate" + }, + "remote_gaming": { + "value": 0.21, + "parameter_path": "gov.hmrc.gambling_duty.remote_gaming.rate" + }, + "machine_games_lower": { + "value": 0.05, + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.lower" + }, + "machine_games_standard": { + "value": 0.2, + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.standard" + }, + "machine_games_higher": { + "value": 0.25, + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.higher" + }, + "bingo": { + "value": 0.1, + "parameter_path": "gov.hmrc.gambling_duty.bingo.rate" + }, + "lottery": { + "value": 0.12, + "parameter_path": "gov.hmrc.gambling_duty.lottery.rate" + }, + "casino": { + "value": 0.235487, + "parameter_path": "household.consumption.gambling.casino_effective_rate" + } + } + } + }, { "kind": "record_mass_conservation_receipt", "entity": "household", @@ -4750,7 +5065,31 @@ "liquid_fuel_consumption", "solid_fuel_consumption", "has_fuel_consumption", - "uses_energy_prepayment_meter" + "uses_energy_prepayment_meter", + "beer_litres", + "cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", + "beer_draught_share", + "cider_draught_share", + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week", + "remote_gaming_net_losses", + "pool_betting_net_receipts", + "bingo_net_receipts", + "national_lottery_ticket_spending", + "land_based_casino_net_losses", + "machine_games_lower_rate_net_takings", + "machine_games_standard_rate_net_takings", + "machine_games_higher_rate_net_takings", + "land_based_fixed_odds_betting_net_losses", + "remote_uk_horseracing_betting_net_losses", + "remote_other_betting_net_losses", + "betting_exchange_commission", + "horse_and_dog_pool_betting_net_losses" ], "nonnegative_outputs": [ "food_and_non_alcoholic_beverages_consumption", @@ -4774,9 +5113,33 @@ "liquid_fuel_consumption", "solid_fuel_consumption", "has_fuel_consumption", - "uses_energy_prepayment_meter" - ], - "notes": "Ports the incumbent LCFS consumption QRF, including NEED energy raking, with adjudicated weighted fits and an identity-keyed seed-0 fuel flag. The vehicle count is a numeric QRF predictor on both sides (LCFS a124 on the donor, the was_wealth draw of WAS vcarnr8 on the recipient, both clipped to 0-5), which retires the incumbent's WAS-to-LCFS has-fuel bridge (microcosm#890 A). The recipient fuel flag draws each of a household's vehicles as zero-emission at the battery-electric and fuel-cell share of the vendored DfT VEH1103 licensed-car stock (2024, Great Britain; plug-in hybrids count as fuel buyers), replacing the hand-copied NTS share (microcosm#890 E2): a household with vehicles buys fuel unless every one of them is zero-emission, so it is flagged at one minus that share raised to its vehicle count, and a one-vehicle household keeps the draw it had when the whole household was drawn at once (microcosm#1278; before, a household with several vehicles was all one or the other). The frame holds no fuel type, so the draw, keyed on the household identity, is what makes a vehicle-owning household a fuel buyer: it is random with respect to income and every other characteristic. With the redraw of microcosm#1113 every flagged household buys fuel, so this flag alone sets fuel incidence; who holds the zero-emission cars by income is a known residual. The household input uses_energy_prepayment_meter, which policyengine-uk reads for the July 2023 to March 2024 Energy Price Guarantee prepayment discount (PolicyEngine/policyengine-uk#2098, from 2.123.3), is drawn by the declared impute_prepayment_meter step (microcosm#1110): the donor prepays when it last put money on an electricity, gas or combined key or meter (b1751, b1701, b233, which the LCF asks only of prepayment-meter households) or its diary records a slot-meter payment (c45114, c45214), so electricity-only prepayment counts and a household with no meter payment, including one that did not answer, does not; a weighted regime-gated QRF on the chain's predictors fits that flag and each recipient draws it at uniforms keyed on its household id, which moves no other draw. The release exports it: policyengine-uk reads it from 2.123.3 and an older engine, Microcosm's locked one among them, ignores a column it does not know; the incumbent does not carry it until uk-data#539, so it is a reviewed extra column of the export surface. The frame flags about 3.0 million Great Britain households (10.5 %) at prior weights, against the around three million prepayment households the government counted when the discount began in July 2023 (a different reference period, households in both). Energy support clipping is exempt because NEED raking governs those columns. Bus fares are clipped to donor support before the pricing step (María's rulings 2026-09-15 and 2026-09-17), which bounds the region no area prices (Wales keeps the chain's raw draw) while the priced regions move beyond donor support afterwards; for that reason the column carries no committed support bound for the terminal gate. Domestic energy is raked in kWh to the NEED 2024 shape at the DESNZ level and priced at the average prices paid (microcosm#890 F, chronicle#270), where both NEED rakes take their mean-kWh margins from the vendored NEED 2024 tables (England and Wales by income band, tenure, property type and region; Scotland by income band, tenure and property type with the all-dwellings mean as its region margin; Northern Ireland untouched), the declared price_domestic_energy step converts spend to kWh and back at each household's QEP price region through the committed crosswalk using the calendar-2024 average variable unit cost and fixed cost across payment methods, standard metering, including VAT (Northern Ireland gas at the UK average because QEP publishes no Northern Ireland gas row), a gas fixed cost only for connected households, the gas connection imposed on the recipient frame at the published share of each region (DESNZ subnational gas meters over electricity meters, 2024) by disconnecting gas-positive households in an identity-keyed uniform order, skipping a household whose weight would overshoot the published share (Northern Ireland has no subnational row and keeps the positive-gas rule), and, where the draw leaves a region below its share, by the declared connect_rule (microcosm#1164): two weighted fits on the chain's predictors give each zero-gas household the probability that a donor like it pays for gas (a gradient-boosted classifier of the donor's gas payers) and the gas such a donor pays (a regime-gated QRF of the payers' gas spend, at quantiles keyed on the household id), and the region's zero-gas households are connected in an identity-keyed order drawn in proportion to that probability, by the same weight-fitting walk, until the share is met. The labelled energy split leaves about 80 % of donors paying for gas against the about 85 % of homes DESNZ counts gas meters for (the derivation it replaced gave gas to 98 %), so without the connect leg nine of the eleven Great Britain regions fell short of their share, and after the four-margin NEED rake one factor per fuel scales the kWh so the prior-weighted frame total equals the DESNZ Energy Trends domestic consumption at actual temperature summed over the four quarters of calendar 2024; NEED gas means are per gas-metered household, so the gas kWh margins are raked over connected households only while electricity is raked over every household, and the energy_rake gate recomputes every NEED mean, the DESNZ level and the connection shares from the vendored rows. After the level, no household is left above the domestic meter definitions behind the DESNZ total (NEED Annex B: gas meters under 73,200 kWh a year, electricity meters under 50,000 kWh on profile classes 1 and 2; María's ruling of 2026-10-12 on microcosm#1207's extreme energy values): the declared household_kwh_ceiling caps a household there, the households below it in the capped households' own NEED cells are re-raked to those cells' levelled means, and a proportional step restores the DESNZ total (microcosm#1164); the receipt counts the households capped and the share of the total they gave up, and the energy_rake gate checks both. Mobile homes have no NEED property-type row, so the rake takes them to the all-dwellings mean, the incumbent's translation; where every mobile home of a NEED geography draws a spend at or below the standing charge, that cell has no kWh for the rake to scale, and the declared zero_kwh_cells_at_need_mean starts it at its NEED mean before the first sweep (microcosm#1240). The receipt lists the cells it started, and the energy_rake gate fails on a started cell the stage does not declare and on any other cell with a zero mean. Both rakes band households on gross income, NEED's concept: the donor on LCFS p344p, cash income before tax, National Insurance, council tax and pension contributions, and the recipient on the same concept, its HBAI net income with the deductions policyengine-uk takes to reach it added back (council tax and domestic rates, income tax, National Insurance, student loan repayments, employee and personal pension contributions, maintenance and child payments, LVT), which the stage materializes for that band alone (microcosm#1164). Before it the recipient fell back to its HBAI net income, which put households in too low a band; the engine's household_gross_income would put them in too high a one, since it adds capital gains and the in-kind NHS, education and transport spending to cash income. The disconnection walk's seed-0 uniform order makes every group of households (dwelling type, income band, support channel) lose the same expected share of its drawn connected mass, so only the level of the drawn connection moves; the smallest-drawn-gas-first order it replaces piled the disconnections onto low-draw flats once the SPI support households drew gas from their own incomes, and NEED's Scottish property-type means then implied a level 2.6 % above the Scottish all-dwellings mean, a margin conflict the rake could not close. Bus fares are priced from journeys (microcosm#930), where the nts_bus_travel stage imputes each person's annual bus-in-London and other-local-bus trips and their concessionary eligibility, and the declared price_bus_journeys step sets bus_fare_spending as the sum over the household's non-eligible persons of trips times boardings per resident trip (the published BUS01 journeys over the published NTS0705a trips per resident times the ONS population) times the yield per fare-paying boarding (BUS05ai receipts over journeys less concessionary journeys), per area; bus-in-London trips take the London area's price for every resident, other-local-bus trips the price of the residence area (England outside London; Scotland and Northern Ireland from their own receipts and journeys with England's trip rate as the declared proxy); Wales is unpriced and keeps the raw draw. The chain still draws bus_fare_spending so later targets condition on the same raw draw; the emitted column is the priced value. The receipt records every factor, the frame-implied boardings beside the published ones and the frame's eligible trip share beside the publisher's concessionary boarding share, so the prior-weight fit of the bound receipts targets is read as a composition check, never a level the stage set; the #890 incidence draw and fare rake are retired. The 2024-25 diary (UKDS SN 9603, 2nd edition, whose household tab carries the annual weight as cal_weight_annual, the name weighta had; microcosm#1164) is moved to the base year by the declared uprate_donor_columns step (microcosm#890). Consumption columns and bus fares take the engine's CPI index from the April-to-March diary year, placed on the calendar-year index at three quarters of 2024 and one of 2025, back a quarter to calendar 2024 (microcosm#1113; the diary sits a quarter past it, so the factor is below one; the fare factor survives only where no fare cell levels the column, i.e. Wales). Income predictors take a factor of one: the diary year is the FRS 2024-25 year they are matched against. Petrol and diesel take the DESNZ pump-price times HMRC litres per head outturn from the vendored road_fuel_anchors.json, which sets only their donor distribution because the level step follows; the energy columns are exempt because the NEED 2024 shape at the DESNZ level and the QEP average prices paid set their level. The household adult and child counts (LCFS G018 and G019, the survey's age-18 split) predict on both sides; the recipient counts its members by age, not through the engine's is_adult and is_child flags, which policyengine-uk#1896 deprecates (uk-data#486, microcosm#1095). Road fuel incidence and level are set by two declared steps (microcosm#1113). The two-week diary leaves about a third of car-owning donors with no fuel purchase, which the chain reproduces among the households the fuel flag marks as fuel buyers, so the redraw_zero_road_fuel step redraws a flagged household that drew zero from the donor's distribution among households with positive road fuel, on the chain's predictors: a weighted regime-gated QRF draws the total, positive by construction, then the petrol share of it, at quantiles keyed on the household id; positive draws are kept. Then the level_road_fuel step, after the fuel flag has zeroed the households without a fuel car, scales petrol and diesel so their prior-weighted total equals ONS Consumer Trends household spending on COICOP 07.2.2 for calendar 2024 (the year of the DESNZ pump prices the donor uprating uses) less the donor's own other-fuels share of 07.2.2 (c72213), keeping the drawn mix. The diary's 07.2.2 has three lines (c72211 petrol, c72212 diesel and c72213, the other motor fuels and lubricants) and none for vehicle electricity. The LCFS diary records about a quarter less road fuel than ONS, and binding the OBR cars receipts had closed that gap by moving weight onto fuel-buying households; petrol and diesel therefore carry no committed support bound, like the other levelled columns. The totals that contain levelled columns are written back around them by the declared recompose_from_remainder step (microcosm#1113): each keeps its own chain draw less the chain's draws of the parts the stage re-levels, kept before any step touches them and floored at zero where the parts outgrow the total, and adds the levelled parts back, so housing_water_and_electricity_consumption is its draw less the drawn electricity and gas plus the levelled electricity and gas, and transport_consumption its draw less the drawn petrol, diesel and bus fares plus the levelled petrol and diesel and the priced bus fares. The chain draws each part after, and conditional on, its total, so the remainder is the chain's own split; a remainder drawn as a chain target of its own over-drew the vehicle-purchase tail of transport, 10 to 13 percent above the donor in-sample. The chain's domestic-energy target is the electricity and gas the stage derives from the diary's fuel, light and power (p537) by its labelled parts, from the LCF User Guide's derived-variable labels and P537 definition (microcosm#1164): each fuel's last account payment less its rebate (b489 electricity, b490 gas, read as the tab carries them; the stage refuses a donor where b489 equals b175 less b178, or b490 equals b170 less b173, to the penny for under 95 percent of that fuel's account payers, which pins the labels and the rebate's sign), its prepayment key or meter payment (b1751, b1701), its component of a combined utilities bill (b227 electricity, b226 gas) and of a combined key or meter payment (b2332, b2331), and the diary's second-dwelling account and slot-meter lines (c45112 and c45114, c45212 and c45214); what a combined payment leaves unsplit (the combined bill b231 less its rebate b174, and the combined key or meter payment b233, each less its parts) goes by the household's own electricity share where it pays for both fuels, and otherwise by the donor's mean share of the households that do, since a combined payment means the household pays for both; a donor with no such household fails. The diary's other fuels (central-heating oil b017 and c45312, bottled gas b018 and c45222, coal and coke c45411, wood and peat c45412, hot water, steam and ice c45511) are neither, and the donor_energy_split receipt records the split against p537: what reading refunds as zero adds, what the unclipped parts differ from p537 by, the weighted share of donors whose unclipped parts differ from their p537, and the account identity shares. The derivation it replaces read b226 as electricity by direct debit and b489 and b490 as prepayment payments, where the labels make them the gas component of a combined bill and the electricity and gas account payments less rebates. The liquid fuels (central-heating oil and paraffin with bottled gas, LPG with liquid) and the solid fuels (coal, coke, wood and peat) are drawn as liquid_fuel_consumption and solid_fuel_consumption, the inputs policyengine-uk 2.149.0 reads (pe-uk#2572; María's ruling of 2026-10-22), last in the chain so that every earlier draw is the chain's own, uprated to calendar-2024 prices as every diary spend column is; the housing total nets their draws and adds them back unchanged, so it always holds them, and hot water, steam and ice stays in its remainder. The receipt records the published ONS 04.5.3 and 04.5.4 spend beside each fuel's donor total at diary prices and the frame's draw (published_fuels). Before the hold, each COICOP division whose frame total per household stands above its donor's by more than the twelve divisions together do is brought down to that shared ratio, by its draw or, for housing and transport, by its remainder alone, so the levelled parts keep their published levels (María's ruling of 2026-10-23, microcosm#1278); the receipt records each division's ratio and factor (division_levelling) and each recomposed total's levelling_factor. Each total is then held to the donor's realised maximum of that total (maximum_total: donor_support, the support every drawn column is clipped to; microcosm#1164), never below its parts, the excess coming out of its remainder: a remainder near the top of the diary's range plus levelled parts larger than the drawn ones would otherwise leave it. The two totals keep their committed support bounds, which the terminal support gate applies to the emitted frame; the recomposed_totals gate checks the declaration and the receipt, whose rows held at the maximum and weighted mass taken enter its identities. Every household spend column is at calendar-2024 prices as households paid them, the H5's year that policyengine-uk projects from and the calibration uprates to the calendar-2025 window (microcosm#1113): the diary columns by the CPI uprating to 2024, road fuel at ONS 07.2.2 for 2024, energy at DESNZ volume and QEP prices for 2024, and bus fares at each area's fiscal-year yield re-priced to 2024 by its fares index (the DfT local bus fares index by quarter for London and England outside London, Scotland's calendar-year index; Northern Ireland, which publishes no fares index, from its own yields of the two fiscal years 2024 overlaps, weighted three months and nine (microcosm#1207), in place of England's index, which carries the January 2025 rise in the English fare cap Northern Ireland did not have); the consumption_basis gate holds every level-setting step to that year. policyengine-uk applies the fiscal 2024-25 rules to model year 2024 (it samples each parameter at 30 April), so every levelled column sits about a quarter before the midpoint of the policy year it is taxed in; the calibration binds calendar-year facts as published and fiscal-year facts at the calendar window (María's rule of 2026-09-22). The stage receipt also reports, for each of the twelve COICOP divisions, the prior-weighted frame total against ONS Consumer Trends for the same calendar year less the classes a household diary does not record (02.3 narcotics, 04.2 owner-occupiers' imputed rent and 12.6.1 FISIM), on ONS's domestic concept, and the twelve together against the national concept as well; it is report-only (microcosm#1113). The report-only litres audit compares each fuel's frame litres with HMRC's clearances of that fuel scaled by the cars share of its road use, from the vendored DESNZ sub-national road transport fuel consumption by vehicle type and fuel (PolicyEngine/chronicle#322); the OBR cars share of fuel duty receipts, uniform across fuels, stays beside the total." + "uses_energy_prepayment_meter", + "beer_litres", + "cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", + "beer_draught_share", + "cider_draught_share", + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week", + "remote_gaming_net_losses", + "pool_betting_net_receipts", + "bingo_net_receipts", + "national_lottery_ticket_spending", + "land_based_casino_net_losses", + "machine_games_lower_rate_net_takings", + "machine_games_standard_rate_net_takings", + "machine_games_higher_rate_net_takings", + "land_based_fixed_odds_betting_net_losses", + "remote_uk_horseracing_betting_net_losses", + "remote_other_betting_net_losses", + "betting_exchange_commission", + "horse_and_dog_pool_betting_net_losses" + ], + "notes": "Ports the incumbent LCFS consumption QRF, including NEED energy raking, with adjudicated weighted fits and an identity-keyed seed-0 fuel flag. The chain's sign gates are cross-fitted (gate_calibration: cross_fitted): each is the mean of five gates, each fitted on four of five folds of the donors stratified by sign, mapped by one weighted Platt calibration fitted on the folds they left out, so a rare spending is drawn at its donor rate on households the gates were not fitted to. A gate fitted and calibrated on the same donors memorises a rare spending's donors and draws it too rarely everywhere else: on held-out donors it drew solid fuels about a tenth as often as they occur and education under half as often. The vehicle count is a numeric QRF predictor on both sides (LCFS a124 on the donor, the was_wealth draw of WAS vcarnr8 on the recipient, both clipped to 0-5), which retires the incumbent's WAS-to-LCFS has-fuel bridge (microcosm#890 A). The recipient fuel flag draws each of a household's vehicles as zero-emission at the battery-electric and fuel-cell share of the vendored DfT VEH1103 licensed-car stock (2024, Great Britain; plug-in hybrids count as fuel buyers), replacing the hand-copied NTS share (microcosm#890 E2): a household with vehicles buys fuel unless every one of them is zero-emission, so it is flagged at one minus that share raised to its vehicle count, and a one-vehicle household keeps the draw it had when the whole household was drawn at once (microcosm#1278; before, a household with several vehicles was all one or the other). The frame holds no fuel type, so the draw, keyed on the household identity, is what makes a vehicle-owning household a fuel buyer: it is random with respect to income and every other characteristic. With the redraw of microcosm#1113 every flagged household buys fuel, so this flag alone sets fuel incidence; who holds the zero-emission cars by income is a known residual. The household input uses_energy_prepayment_meter, which policyengine-uk reads for the July 2023 to March 2024 Energy Price Guarantee prepayment discount (PolicyEngine/policyengine-uk#2098, from 2.123.3), is drawn by the declared impute_prepayment_meter step (microcosm#1110): the donor prepays when it last put money on an electricity, gas or combined key or meter (b1751, b1701, b233, which the LCF asks only of prepayment-meter households) or its diary records a slot-meter payment (c45114, c45214), so electricity-only prepayment counts and a household with no meter payment, including one that did not answer, does not; a weighted regime-gated QRF on the chain's predictors fits that flag and each recipient draws it at uniforms keyed on its household id, which moves no other draw. The release exports it: policyengine-uk reads it from 2.123.3 and an older engine, Microcosm's locked one among them, ignores a column it does not know; the incumbent does not carry it until uk-data#539, so it is a reviewed extra column of the export surface. The frame flags about 3.0 million Great Britain households (10.5 %) at prior weights, against the around three million prepayment households the government counted when the discount began in July 2023 (a different reference period, households in both). Energy support clipping is exempt because NEED raking governs those columns. Bus fares are clipped to donor support before the pricing step (María's rulings 2026-09-15 and 2026-09-17), which bounds the region no area prices (Wales keeps the chain's raw draw) while the priced regions move beyond donor support afterwards; for that reason the column carries no committed support bound for the terminal gate. Domestic energy is raked in kWh to the NEED 2024 shape at the DESNZ level and priced at the average prices paid (microcosm#890 F, chronicle#270), where both NEED rakes take their mean-kWh margins from the vendored NEED 2024 tables (England and Wales by income band, tenure, property type and region; Scotland by income band, tenure and property type with the all-dwellings mean as its region margin; Northern Ireland untouched), the declared price_domestic_energy step converts spend to kWh and back at each household's QEP price region through the committed crosswalk using the calendar-2024 average variable unit cost and fixed cost across payment methods, standard metering, including VAT (Northern Ireland gas at the UK average because QEP publishes no Northern Ireland gas row), a gas fixed cost only for connected households, the gas connection imposed on the recipient frame at the published share of each region (DESNZ subnational gas meters over electricity meters, 2024) by disconnecting gas-positive households in an identity-keyed uniform order, skipping a household whose weight would overshoot the published share (Northern Ireland has no subnational row and keeps the positive-gas rule), and, where the draw leaves a region below its share, by the declared connect_rule (microcosm#1164): two weighted fits on the chain's predictors give each zero-gas household the probability that a donor like it pays for gas (a gradient-boosted classifier of the donor's gas payers) and the gas such a donor pays (a regime-gated QRF of the payers' gas spend, at quantiles keyed on the household id), and the region's zero-gas households are connected in an identity-keyed order drawn in proportion to that probability, by the same weight-fitting walk, until the share is met. The labelled energy split leaves about 80 % of donors paying for gas against the about 85 % of homes DESNZ counts gas meters for (the derivation it replaced gave gas to 98 %), so without the connect leg nine of the eleven Great Britain regions fell short of their share, and after the four-margin NEED rake one factor per fuel scales the kWh so the prior-weighted frame total equals the DESNZ Energy Trends domestic consumption at actual temperature summed over the four quarters of calendar 2024; NEED gas means are per gas-metered household, so the gas kWh margins are raked over connected households only while electricity is raked over every household, and the energy_rake gate recomputes every NEED mean, the DESNZ level and the connection shares from the vendored rows. After the level, no household is left above the domestic meter definitions behind the DESNZ total (NEED Annex B: gas meters under 73,200 kWh a year, electricity meters under 50,000 kWh on profile classes 1 and 2; María's ruling of 2026-10-12 on microcosm#1207's extreme energy values): the declared household_kwh_ceiling caps a household there, the households below it in the capped households' own NEED cells are re-raked to those cells' levelled means, and a proportional step restores the DESNZ total (microcosm#1164); the receipt counts the households capped and the share of the total they gave up, and the energy_rake gate checks both. Mobile homes have no NEED property-type row, so the rake takes them to the all-dwellings mean, the incumbent's translation; where every mobile home of a NEED geography draws a spend at or below the standing charge, that cell has no kWh for the rake to scale, and the declared zero_kwh_cells_at_need_mean starts it at its NEED mean before the first sweep (microcosm#1240). The receipt lists the cells it started, and the energy_rake gate fails on a started cell the stage does not declare and on any other cell with a zero mean. Both rakes band households on gross income, NEED's concept: the donor on LCFS p344p, cash income before tax, National Insurance, council tax and pension contributions, and the recipient on the same concept, its HBAI net income with the deductions policyengine-uk takes to reach it added back (council tax and domestic rates, income tax, National Insurance, student loan repayments, employee and personal pension contributions, maintenance and child payments, LVT), which the stage materializes for that band alone (microcosm#1164). Before it the recipient fell back to its HBAI net income, which put households in too low a band; the engine's household_gross_income would put them in too high a one, since it adds capital gains and the in-kind NHS, education and transport spending to cash income. The disconnection walk's seed-0 uniform order makes every group of households (dwelling type, income band, support channel) lose the same expected share of its drawn connected mass, so only the level of the drawn connection moves; the smallest-drawn-gas-first order it replaces piled the disconnections onto low-draw flats once the SPI support households drew gas from their own incomes, and NEED's Scottish property-type means then implied a level 2.6 % above the Scottish all-dwellings mean, a margin conflict the rake could not close. Bus fares are priced from journeys (microcosm#930), where the nts_bus_travel stage imputes each person's annual bus-in-London and other-local-bus trips and their concessionary eligibility, and the declared price_bus_journeys step sets bus_fare_spending as the sum over the household's non-eligible persons of trips times boardings per resident trip (the published BUS01 journeys over the published NTS0705a trips per resident times the ONS population) times the yield per fare-paying boarding (BUS05ai receipts over journeys less concessionary journeys), per area; bus-in-London trips take the London area's price for every resident, other-local-bus trips the price of the residence area (England outside London; Scotland and Northern Ireland from their own receipts and journeys with England's trip rate as the declared proxy); Wales is unpriced and keeps the raw draw. The chain still draws bus_fare_spending so later targets condition on the same raw draw; the emitted column is the priced value. The receipt records every factor, the frame-implied boardings beside the published ones and the frame's eligible trip share beside the publisher's concessionary boarding share, so the prior-weight fit of the bound receipts targets is read as a composition check, never a level the stage set; the #890 incidence draw and fare rake are retired. The 2024-25 diary (UKDS SN 9603, 2nd edition, whose household tab carries the annual weight as cal_weight_annual, the name weighta had; microcosm#1164) is moved to the base year by the declared uprate_donor_columns step (microcosm#890). Consumption columns and bus fares take the engine's CPI index from the April-to-March diary year, placed on the calendar-year index at three quarters of 2024 and one of 2025, back a quarter to calendar 2024 (microcosm#1113; the diary sits a quarter past it, so the factor is below one; the fare factor survives only where no fare cell levels the column, i.e. Wales). Income predictors take a factor of one: the diary year is the FRS 2024-25 year they are matched against. Petrol and diesel take the DESNZ pump-price times HMRC litres per head outturn from the vendored road_fuel_anchors.json, which sets only their donor distribution because the level step follows; the energy columns are exempt because the NEED 2024 shape at the DESNZ level and the QEP average prices paid set their level. The household adult and child counts (LCFS G018 and G019, the survey's age-18 split) predict on both sides; the recipient counts its members by age, not through the engine's is_adult and is_child flags, which policyengine-uk#1896 deprecates (uk-data#486, microcosm#1095). Road fuel incidence and level are set by two declared steps (microcosm#1113). The two-week diary leaves about a third of car-owning donors with no fuel purchase, which the chain reproduces among the households the fuel flag marks as fuel buyers, so the redraw_zero_road_fuel step redraws a flagged household that drew zero from the donor's distribution among households with positive road fuel, on the chain's predictors: a weighted regime-gated QRF draws the total, positive by construction, then the petrol share of it, at quantiles keyed on the household id; positive draws are kept. Then the level_road_fuel step, after the fuel flag has zeroed the households without a fuel car, scales petrol and diesel so their prior-weighted total equals ONS Consumer Trends household spending on COICOP 07.2.2 for calendar 2024 (the year of the DESNZ pump prices the donor uprating uses) less the donor's own other-fuels share of 07.2.2 (c72213), keeping the drawn mix. The diary's 07.2.2 has three lines (c72211 petrol, c72212 diesel and c72213, the other motor fuels and lubricants) and none for vehicle electricity. The LCFS diary records about a quarter less road fuel than ONS, and binding the OBR cars receipts had closed that gap by moving weight onto fuel-buying households; petrol and diesel therefore carry no committed support bound, like the other levelled columns. The totals that contain levelled columns are written back around them by the declared recompose_from_remainder step (microcosm#1113): each keeps its own chain draw less the chain's draws of the parts the stage re-levels, kept before any step touches them and floored at zero where the parts outgrow the total, and adds the levelled parts back, so housing_water_and_electricity_consumption is its draw less the drawn electricity and gas plus the levelled electricity and gas, and transport_consumption its draw less the drawn petrol, diesel and bus fares plus the levelled petrol and diesel and the priced bus fares. The chain draws each part after, and conditional on, its total, so the remainder is the chain's own split; a remainder drawn as a chain target of its own over-drew the vehicle-purchase tail of transport, 10 to 13 percent above the donor in-sample. The chain's domestic-energy target is the electricity and gas the stage derives from the diary's fuel, light and power (p537) by its labelled parts, from the LCF User Guide's derived-variable labels and P537 definition (microcosm#1164): each fuel's last account payment less its rebate (b489 electricity, b490 gas, read as the tab carries them; the stage refuses a donor where b489 equals b175 less b178, or b490 equals b170 less b173, to the penny for under 95 percent of that fuel's account payers, which pins the labels and the rebate's sign), its prepayment key or meter payment (b1751, b1701), its component of a combined utilities bill (b227 electricity, b226 gas) and of a combined key or meter payment (b2332, b2331), and the diary's second-dwelling account and slot-meter lines (c45112 and c45114, c45212 and c45214); what a combined payment leaves unsplit (the combined bill b231 less its rebate b174, and the combined key or meter payment b233, each less its parts) goes by the household's own electricity share where it pays for both fuels, and otherwise by the donor's mean share of the households that do, since a combined payment means the household pays for both; a donor with no such household fails. The diary's other fuels (central-heating oil b017 and c45312, bottled gas b018 and c45222, coal and coke c45411, wood and peat c45412, hot water, steam and ice c45511) are neither, and the donor_energy_split receipt records the split against p537: what reading refunds as zero adds, what the unclipped parts differ from p537 by, the weighted share of donors whose unclipped parts differ from their p537, and the account identity shares. The derivation it replaces read b226 as electricity by direct debit and b489 and b490 as prepayment payments, where the labels make them the gas component of a combined bill and the electricity and gas account payments less rebates. The liquid fuels (central-heating oil and paraffin with bottled gas, LPG with liquid) and the solid fuels (coal, coke, wood and peat) are drawn as liquid_fuel_consumption and solid_fuel_consumption, the inputs policyengine-uk 2.149.0 reads (pe-uk#2572; María's ruling of 2026-10-22), after the eighteen spend targets so that every earlier draw is the chain's own, uprated to calendar-2024 prices as every diary spend column is; the housing total nets their draws and adds them back unchanged, so it always holds them, and hot water, steam and ice stays in its remainder. The receipt records the published ONS 04.5.3 and 04.5.4 spend beside each fuel's donor total at diary prices and the frame's draw (published_fuels). Before the hold, each COICOP division whose frame total per household stands above its donor's by more than the twelve divisions together do is brought down to that shared ratio, by its draw or, for housing and transport, by its remainder alone, so the levelled parts keep their published levels (María's ruling of 2026-10-23, microcosm#1278); the receipt records each division's ratio and factor (division_levelling) and each recomposed total's levelling_factor. Each total is then held to the donor's realised maximum of that total (maximum_total: donor_support, the support every drawn column is clipped to; microcosm#1164), never below its parts, the excess coming out of its remainder: a remainder near the top of the diary's range plus levelled parts larger than the drawn ones would otherwise leave it. The two totals keep their committed support bounds, which the terminal support gate applies to the emitted frame; the recomposed_totals gate checks the declaration and the receipt, whose rows held at the maximum and weighted mass taken enter its identities. Every household spend column is at calendar-2024 prices as households paid them, the H5's year that policyengine-uk projects from and the calibration uprates to the calendar-2025 window (microcosm#1113): the diary columns by the CPI uprating to 2024, road fuel at ONS 07.2.2 for 2024, energy at DESNZ volume and QEP prices for 2024, and bus fares at each area's fiscal-year yield re-priced to 2024 by its fares index (the DfT local bus fares index by quarter for London and England outside London, Scotland's calendar-year index; Northern Ireland, which publishes no fares index, from its own yields of the two fiscal years 2024 overlaps, weighted three months and nine (microcosm#1207), in place of England's index, which carries the January 2025 rise in the English fare cap Northern Ireland did not have); the consumption_basis gate holds every level-setting step to that year. policyengine-uk applies the fiscal 2024-25 rules to model year 2024 (it samples each parameter at 30 April), so every levelled column sits about a quarter before the midpoint of the policy year it is taxed in; the calibration binds calendar-year facts as published and fiscal-year facts at the calendar window (María's rule of 2026-09-22). The stage receipt also reports, for each of the twelve COICOP divisions, the prior-weighted frame total against ONS Consumer Trends for the same calendar year less the classes a household diary does not record (02.3 narcotics, 04.2 owner-occupiers' imputed rent and 12.6.1 FISIM), on ONS's domestic concept, and the twelve together against the national concept as well; it is report-only (microcosm#1113). The report-only litres audit compares each fuel's frame litres with HMRC's clearances of that fuel scaled by the cars share of its road use, from the vendored DESNZ sub-national road transport fuel consumption by vehicle type and fuel (PolicyEngine/chronicle#322); the OBR cars share of fuel duty receipts, uniform across fuels, stays beside the total. After its spend targets and the two fuels the chain draws five shares the derive step computes on the donor from the diary lines (microcosm#1359): tobacco's share of the off-trade alcohol and tobacco that make up P602 (c22111, c22121 and c22131 over those three and the seven lines of alcohol brought home, c21111 to c21311; P602 also sums narcotics, c23111, which the end-user tab does not carry), on-trade alcohol's share of restaurants and hotels (the eight lines of drinks away from home, cb111c to cb111j, over P611, clipped at one because the tab stores P611 to one decimal place), gambling stakes' share of recreation (the seven games-of-chance stake lines P609 sums, c94311 to c94316 and c94319: pools, bingo, lotteries, bookmaker and tote betting with gaming machines, and the National Lottery; the winnings lines beside them sit in no total), the National Lottery's share of those stakes (scratchcards and draws, c94316 and c94319, over the seven) and the betting and gaming share of the rest (football pools, bingo, and bookmaker and tote betting with gaming machines, c94311, c94312 and c94314, over the other five; society lotteries, c94313, and the Irish Lottery, c94315, pay no UK gambling duty). A household's tobacco, off-trade alcohol, on-trade alcohol and gambling stakes are its shares of the totals it carries, and its National Lottery and betting and gaming stakes its shares of its stakes, so the parts sum to the totals and no total, the VAT base included, moves; appended after the twenty targets, the shares move none of their draws. The shares and the spending they give are scratch, on no table; the report-only excise_shares receipt records each share on the frame beside the donor. The declared level_excise_quantities step turns that spending into policyengine-uk's excise inputs (microcosm#1359), so alcohol, tobacco and gambling duty stop scoring zero. Each national quantity is a published FY2024-25 figure from the vendored excise_facts.json, and the step gives each household its part in proportion to the spending that buys it, at prior weights (one factor per input, the level_road_fuel scaling), so the frame's weighted total of each input is the published one; a household that buys one product of a kind buys all of that kind in the national mix. Alcohol: each product's litres are HMRC's clearances of beer, cider, wine, spirits and other fermented products (the Alcohol Bulletin, in litres of pure alcohol) over the engine's own strength for the product, which policyengine-uk multiplies back, shared by off- and on-trade alcohol spending together; beer and cider take their draught shares from the clearances under draught relief, alone or with small producer relief, over all of their clearances, and the other products, whose draught clearances HMRC does not publish, keep the engine's zero, as does sparkling cider, which the bulletin counts within cider. A pound buys the same volume in a pub as in a shop under this rule, which leans the volume, and so the duty, towards on-trade drinkers: against a published on-trade volume share of about 27 percent, a pound spent in a pub is given about 1.6 times the volume it buys and a pound spent in a shop about 0.78 times, and about 11 percent of the volume sits with other households on the 2024-25 diary. No on-trade volume share can be archived (MESAS is a NielsenIQ and Circana dashboard with no fixed file), so the spending rule stands, its lean documented (María's ruling of 2026-10-23). Tobacco: cigarettes a week and grams a week of hand-rolling tobacco, cigars and other tobacco are HMRC's clearances (the Tobacco Bulletin) over the engine's 52 weeks, shared by tobacco spending; heated tobacco sits within other tobacco in the bulletin, so it is charged at the other-tobacco rate and its own input keeps the engine's zero. Gambling: each input is its duty's dutiable base, HMRC's cash receipts for the duty (the Betting and Gaming bulletin) or Machine Games Duty's declared liabilities for the band, over the engine's FY2024-25 rate (Gaming Duty over the engine's effective-rate proxy for it), so the engine charges back the published receipts. General Betting Duty's base, its receipts over the fixed-odds rate, is split over the land-based fixed-odds, remote horse-racing, remote other, exchange and horse-and-dog pool inputs by the Gambling Commission's gross gambling yield for Great Britain, remote fixed-odds betting by the horse-racing share of all remote betting yield, since the Commission publishes no betting activity by event; its horse racing is not only UK racing, so the remote UK horse-racing input is overstated and, from April 2027, when the engine charges other remote betting at 25 percent, too much of the base stays at 15 percent and the rise is understated; and its pool betting can hold pools on other events, such as football pools, which pay Pool Betting Duty. Spread betting, which the Commission does not regulate, has no published base and keeps the engine's zero. Lottery Duty's base is shared by the National Lottery stakes and every other gambling base by the betting and gaming stakes, since the diary cannot tell remote from land-based play or one betting product from another; the society and Irish lotteries carry none. Known biases: the quantities are levelled to the published figures while spending and the diary's incidence stay at survey level (María's ruling of 2026-10-23), so a household's duty is one multiple of its own spending, the same for every household that carries it. At prior weights alcohol duty is about 0.45 times alcohol spending, but tobacco duty is about 1.8 times tobacco spending, Lottery Duty about 0.61 times National Lottery stakes (its base, ticket sales, about 5.1 times them) and the other gambling duties about 5.5 times the betting and gaming stakes (their bases about 30 times), since the diary records a fraction of what is bought; VAT on the same goods stays on the survey base. The duty also sits on fewer households than buy: 11.2 percent of households carry tobacco, against 11.9 percent of UK adults who smoked cigarettes in 2023 (ONS), and 10.9 percent the National Lottery and 2.6 percent betting and gaming, against 47 percent of adults in Great Britain who gambled in the past four weeks of 2025 and 27 percent once lottery-draw-only players are left out (Gambling Commission), while the share of households with a smoker or a gambler is above the adult rate; the duty per carrying household is higher by the same factor. The rest of the gap between frame and donor is the chain's own: each share conditions on the chain's earlier draws, not on a donor's spending, which leaves tobacco on more households than its donors (10.3 percent) and betting and gaming on fewer (3.6 percent). Other tobacco (c22131) includes e-cigarette refills, so the tobacco inputs also follow vaping spending and a household that only vapes carries tobacco duty; Vaping Products Duty, from 1 October 2026, needs a key of its own. The draught shares are national constants, so a household that buys alcohol only in shops takes the same draught relief as one that drinks in pubs. The quantities are FY2024-25's, the excise year policyengine-uk charges in model year 2024 (its excise year runs from 6 April), and the engine holds them flat after it (PolicyEngine/policyengine-uk#2596). The step moves no spending column; the excise_quantities gate recomputes every level from the vendored rows." }, { "stage": "etb_vat", 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 929e8104bc..5bb024cb42 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml +++ b/packages/microcosm-build/src/microcosm/build/uk/spec/sources.yaml @@ -3383,6 +3383,10 @@ stages: resource: desnz_road_fuel_by_vehicle.json kind: public_aggregate_reference format: json + - role: excise_facts + resource: excise_facts.json + kind: public_aggregate_reference + format: json operations: - kind: derive lowercase_columns: true @@ -3399,6 +3403,74 @@ stages: - LCFS accommodation 4 and 5 -> FLAT unmapped_codes: refuse floor: 0.0 + shares: + tobacco_share_of_alcohol_and_tobacco: + total: alcohol_and_tobacco_consumption + numerator: + - c22111 + - c22121 + - c22131 + denominator: + - c21111 + - c21211 + - c21212 + - c21213 + - c21214 + - c21221 + - c21311 + - c22111 + - c22121 + - c22131 + on_trade_alcohol_share_of_restaurants_and_hotels: + total: restaurants_and_hotels_consumption + numerator: + - cb111c + - cb111d + - cb111e + - cb111f + - cb111g + - cb111h + - cb111i + - cb111j + denominator: + - p611 + gambling_stakes_share_of_recreation: + total: recreation_consumption + numerator: + - c94311 + - c94312 + - c94313 + - c94314 + - c94315 + - c94316 + - c94319 + denominator: + - p609 + national_lottery_share_of_gambling_stakes: + total: gambling_stakes + numerator: + - c94316 + - c94319 + denominator: + - c94311 + - c94312 + - c94313 + - c94314 + - c94315 + - c94316 + - c94319 + betting_and_gaming_share_of_other_gambling_stakes: + total: other_gambling_stakes + numerator: + - c94311 + - c94312 + - c94314 + denominator: + - c94311 + - c94312 + - c94313 + - c94314 + - c94315 - kind: uprate_donor_columns from_period: 2024 to_period: 2024 @@ -3569,6 +3641,11 @@ stages: - gas_consumption - liquid_fuel_consumption - solid_fuel_consumption + - tobacco_share_of_alcohol_and_tobacco + - on_trade_alcohol_share_of_restaurants_and_hotels + - gambling_stakes_share_of_recreation + - national_lottery_share_of_gambling_stakes + - betting_and_gaming_share_of_other_gambling_stakes categorical_predictors: - region - tenure_type @@ -3576,6 +3653,7 @@ stages: weights: explicit seed: 0 n_estimators: 100 + gate_calibration: cross_fitted - kind: support_clip range: donor_realized exempt: @@ -3872,6 +3950,164 @@ stages: - coicop: 04.5.4 concept: ons.household_expenditure.solid_fuels column: solid_fuel_consumption + - kind: level_excise_quantities + resource: excise_facts.json + period_type: fiscal_year + period_value: 2024 + fiscal_start: '2024-04-01' + geography_id: K02000001 + weeks_per_year: 52 + alcohol_volume_weights: + rule: spending + outputs: + beer_litres: + concept: hmrc.alcohol_clearances + dimensions: + alcohol_product: beer + abv_band: all + duty_point: all + duty_relief: all + unit: litre_of_pure_alcohol + strength: + value: 0.04 + parameter_path: household.consumption.alcohol.beer_abv + cider_litres: + concept: hmrc.alcohol_clearances + dimensions: + alcohol_product: cider + abv_band: all + duty_point: all + duty_relief: all + unit: litre_of_pure_alcohol + strength: + value: 0.045 + parameter_path: household.consumption.alcohol.cider_abv + wine_litres: + concept: hmrc.alcohol_clearances + dimensions: + alcohol_product: wine + abv_band: all + duty_point: all + duty_relief: all + unit: litre_of_pure_alcohol + strength: + value: 0.12 + parameter_path: household.consumption.alcohol.wine_abv + spirits_litres: + concept: hmrc.alcohol_clearances + dimensions: + alcohol_product: spirits + abv_band: all + duty_point: all + duty_relief: all + unit: litre_of_pure_alcohol + strength: + value: 0.4 + parameter_path: household.consumption.alcohol.spirits_abv + other_fermented_litres: + concept: hmrc.alcohol_clearances + dimensions: + alcohol_product: other_fermented_products + abv_band: all + duty_point: all + duty_relief: all + unit: litre_of_pure_alcohol + strength: + value: 0.05 + parameter_path: household.consumption.alcohol.other_fermented_abv + cigarettes_per_week: + concept: hmrc.tobacco_clearances + dimensions: + tobacco_product: cigarettes + unit: stick + hand_rolling_tobacco_grams_per_week: + concept: hmrc.tobacco_clearances + dimensions: + tobacco_product: hand_rolling_tobacco + unit: kilogram + cigars_grams_per_week: + concept: hmrc.tobacco_clearances + dimensions: + tobacco_product: cigars + unit: kilogram + other_tobacco_grams_per_week: + concept: hmrc.tobacco_clearances + dimensions: + tobacco_product: other + unit: kilogram + draught_shares: + beer_draught_share: + concept: hmrc.alcohol_clearances + unit: litre_of_pure_alcohol + numerator: + - alcohol_product: beer + abv_band: all + duty_point: all + duty_relief: draught_relief_only + - alcohol_product: beer + abv_band: all + duty_point: all + duty_relief: draught_and_small_producer_relief + denominator: + - alcohol_product: beer + abv_band: all + duty_point: all + duty_relief: all + cider_draught_share: + concept: hmrc.alcohol_clearances + unit: litre_of_pure_alcohol + numerator: + - alcohol_product: cider + abv_band: all + duty_point: all + duty_relief: draught_relief_only + - alcohol_product: cider + abv_band: all + duty_point: all + duty_relief: draught_and_small_producer_relief + denominator: + - alcohol_product: cider + abv_band: all + duty_point: all + duty_relief: all + gambling: + receipts: + concept: hmrc.betting_and_gaming_duty_receipts + dimensions: + accounting_basis: cash + machine_games_liabilities: + concept: hmrc.machine_games_duty_liabilities + yield: + concept: gambling_commission.gross_gambling_yield + geography_id: K03000001 + rates: + general_betting: + value: 0.15 + parameter_path: gov.hmrc.gambling_duty.general_betting.rates.fixed_odds + pool_betting: + value: 0.15 + parameter_path: gov.hmrc.gambling_duty.pool_betting.rate + remote_gaming: + value: 0.21 + parameter_path: gov.hmrc.gambling_duty.remote_gaming.rate + machine_games_lower: + value: 0.05 + parameter_path: gov.hmrc.gambling_duty.machine_games.rates.lower + machine_games_standard: + value: 0.2 + parameter_path: gov.hmrc.gambling_duty.machine_games.rates.standard + machine_games_higher: + value: 0.25 + parameter_path: gov.hmrc.gambling_duty.machine_games.rates.higher + bingo: + value: 0.1 + parameter_path: gov.hmrc.gambling_duty.bingo.rate + lottery: + value: 0.12 + parameter_path: gov.hmrc.gambling_duty.lottery.rate + casino: + value: 0.235487 + parameter_path: household.consumption.gambling.casino_effective_rate - kind: record_mass_conservation_receipt entity: household reason: 'LCFS consumption imputation on the source spine: household weights pass through unchanged and total household mass is conserved.' @@ -3900,6 +4136,30 @@ stages: - solid_fuel_consumption - has_fuel_consumption - uses_energy_prepayment_meter + - beer_litres + - cider_litres + - wine_litres + - spirits_litres + - other_fermented_litres + - beer_draught_share + - cider_draught_share + - cigarettes_per_week + - hand_rolling_tobacco_grams_per_week + - cigars_grams_per_week + - other_tobacco_grams_per_week + - remote_gaming_net_losses + - pool_betting_net_receipts + - bingo_net_receipts + - national_lottery_ticket_spending + - land_based_casino_net_losses + - machine_games_lower_rate_net_takings + - machine_games_standard_rate_net_takings + - machine_games_higher_rate_net_takings + - land_based_fixed_odds_betting_net_losses + - remote_uk_horseracing_betting_net_losses + - remote_other_betting_net_losses + - betting_exchange_commission + - horse_and_dog_pool_betting_net_losses nonnegative_outputs: - food_and_non_alcoholic_beverages_consumption - alcohol_and_tobacco_consumption @@ -3923,7 +4183,31 @@ stages: - solid_fuel_consumption - has_fuel_consumption - uses_energy_prepayment_meter - notes: 'Ports the incumbent LCFS consumption QRF, including NEED energy raking, with adjudicated weighted fits and an identity-keyed seed-0 fuel flag. The vehicle count is a numeric QRF predictor on both sides (LCFS a124 on the donor, the was_wealth draw of WAS vcarnr8 on the recipient, both clipped to 0-5), which retires the incumbent''s WAS-to-LCFS has-fuel bridge (microcosm#890 A). The recipient fuel flag draws each of a household''s vehicles as zero-emission at the battery-electric and fuel-cell share of the vendored DfT VEH1103 licensed-car stock (2024, Great Britain; plug-in hybrids count as fuel buyers), replacing the hand-copied NTS share (microcosm#890 E2): a household with vehicles buys fuel unless every one of them is zero-emission, so it is flagged at one minus that share raised to its vehicle count, and a one-vehicle household keeps the draw it had when the whole household was drawn at once (microcosm#1278; before, a household with several vehicles was all one or the other). The frame holds no fuel type, so the draw, keyed on the household identity, is what makes a vehicle-owning household a fuel buyer: it is random with respect to income and every other characteristic. With the redraw of microcosm#1113 every flagged household buys fuel, so this flag alone sets fuel incidence; who holds the zero-emission cars by income is a known residual. The household input uses_energy_prepayment_meter, which policyengine-uk reads for the July 2023 to March 2024 Energy Price Guarantee prepayment discount (PolicyEngine/policyengine-uk#2098, from 2.123.3), is drawn by the declared impute_prepayment_meter step (microcosm#1110): the donor prepays when it last put money on an electricity, gas or combined key or meter (b1751, b1701, b233, which the LCF asks only of prepayment-meter households) or its diary records a slot-meter payment (c45114, c45214), so electricity-only prepayment counts and a household with no meter payment, including one that did not answer, does not; a weighted regime-gated QRF on the chain''s predictors fits that flag and each recipient draws it at uniforms keyed on its household id, which moves no other draw. The release exports it: policyengine-uk reads it from 2.123.3 and an older engine, Microcosm''s locked one among them, ignores a column it does not know; the incumbent does not carry it until uk-data#539, so it is a reviewed extra column of the export surface. The frame flags about 3.0 million Great Britain households (10.5 %) at prior weights, against the around three million prepayment households the government counted when the discount began in July 2023 (a different reference period, households in both). Energy support clipping is exempt because NEED raking governs those columns. Bus fares are clipped to donor support before the pricing step (María''s rulings 2026-09-15 and 2026-09-17), which bounds the region no area prices (Wales keeps the chain''s raw draw) while the priced regions move beyond donor support afterwards; for that reason the column carries no committed support bound for the terminal gate. Domestic energy is raked in kWh to the NEED 2024 shape at the DESNZ level and priced at the average prices paid (microcosm#890 F, chronicle#270), where both NEED rakes take their mean-kWh margins from the vendored NEED 2024 tables (England and Wales by income band, tenure, property type and region; Scotland by income band, tenure and property type with the all-dwellings mean as its region margin; Northern Ireland untouched), the declared price_domestic_energy step converts spend to kWh and back at each household''s QEP price region through the committed crosswalk using the calendar-2024 average variable unit cost and fixed cost across payment methods, standard metering, including VAT (Northern Ireland gas at the UK average because QEP publishes no Northern Ireland gas row), a gas fixed cost only for connected households, the gas connection imposed on the recipient frame at the published share of each region (DESNZ subnational gas meters over electricity meters, 2024) by disconnecting gas-positive households in an identity-keyed uniform order, skipping a household whose weight would overshoot the published share (Northern Ireland has no subnational row and keeps the positive-gas rule), and, where the draw leaves a region below its share, by the declared connect_rule (microcosm#1164): two weighted fits on the chain''s predictors give each zero-gas household the probability that a donor like it pays for gas (a gradient-boosted classifier of the donor''s gas payers) and the gas such a donor pays (a regime-gated QRF of the payers'' gas spend, at quantiles keyed on the household id), and the region''s zero-gas households are connected in an identity-keyed order drawn in proportion to that probability, by the same weight-fitting walk, until the share is met. The labelled energy split leaves about 80 % of donors paying for gas against the about 85 % of homes DESNZ counts gas meters for (the derivation it replaced gave gas to 98 %), so without the connect leg nine of the eleven Great Britain regions fell short of their share, and after the four-margin NEED rake one factor per fuel scales the kWh so the prior-weighted frame total equals the DESNZ Energy Trends domestic consumption at actual temperature summed over the four quarters of calendar 2024; NEED gas means are per gas-metered household, so the gas kWh margins are raked over connected households only while electricity is raked over every household, and the energy_rake gate recomputes every NEED mean, the DESNZ level and the connection shares from the vendored rows. After the level, no household is left above the domestic meter definitions behind the DESNZ total (NEED Annex B: gas meters under 73,200 kWh a year, electricity meters under 50,000 kWh on profile classes 1 and 2; María''s ruling of 2026-10-12 on microcosm#1207''s extreme energy values): the declared household_kwh_ceiling caps a household there, the households below it in the capped households'' own NEED cells are re-raked to those cells'' levelled means, and a proportional step restores the DESNZ total (microcosm#1164); the receipt counts the households capped and the share of the total they gave up, and the energy_rake gate checks both. Mobile homes have no NEED property-type row, so the rake takes them to the all-dwellings mean, the incumbent''s translation; where every mobile home of a NEED geography draws a spend at or below the standing charge, that cell has no kWh for the rake to scale, and the declared zero_kwh_cells_at_need_mean starts it at its NEED mean before the first sweep (microcosm#1240). The receipt lists the cells it started, and the energy_rake gate fails on a started cell the stage does not declare and on any other cell with a zero mean. Both rakes band households on gross income, NEED''s concept: the donor on LCFS p344p, cash income before tax, National Insurance, council tax and pension contributions, and the recipient on the same concept, its HBAI net income with the deductions policyengine-uk takes to reach it added back (council tax and domestic rates, income tax, National Insurance, student loan repayments, employee and personal pension contributions, maintenance and child payments, LVT), which the stage materializes for that band alone (microcosm#1164). Before it the recipient fell back to its HBAI net income, which put households in too low a band; the engine''s household_gross_income would put them in too high a one, since it adds capital gains and the in-kind NHS, education and transport spending to cash income. The disconnection walk''s seed-0 uniform order makes every group of households (dwelling type, income band, support channel) lose the same expected share of its drawn connected mass, so only the level of the drawn connection moves; the smallest-drawn-gas-first order it replaces piled the disconnections onto low-draw flats once the SPI support households drew gas from their own incomes, and NEED''s Scottish property-type means then implied a level 2.6 % above the Scottish all-dwellings mean, a margin conflict the rake could not close. Bus fares are priced from journeys (microcosm#930), where the nts_bus_travel stage imputes each person''s annual bus-in-London and other-local-bus trips and their concessionary eligibility, and the declared price_bus_journeys step sets bus_fare_spending as the sum over the household''s non-eligible persons of trips times boardings per resident trip (the published BUS01 journeys over the published NTS0705a trips per resident times the ONS population) times the yield per fare-paying boarding (BUS05ai receipts over journeys less concessionary journeys), per area; bus-in-London trips take the London area''s price for every resident, other-local-bus trips the price of the residence area (England outside London; Scotland and Northern Ireland from their own receipts and journeys with England''s trip rate as the declared proxy); Wales is unpriced and keeps the raw draw. The chain still draws bus_fare_spending so later targets condition on the same raw draw; the emitted column is the priced value. The receipt records every factor, the frame-implied boardings beside the published ones and the frame''s eligible trip share beside the publisher''s concessionary boarding share, so the prior-weight fit of the bound receipts targets is read as a composition check, never a level the stage set; the #890 incidence draw and fare rake are retired. The 2024-25 diary (UKDS SN 9603, 2nd edition, whose household tab carries the annual weight as cal_weight_annual, the name weighta had; microcosm#1164) is moved to the base year by the declared uprate_donor_columns step (microcosm#890). Consumption columns and bus fares take the engine''s CPI index from the April-to-March diary year, placed on the calendar-year index at three quarters of 2024 and one of 2025, back a quarter to calendar 2024 (microcosm#1113; the diary sits a quarter past it, so the factor is below one; the fare factor survives only where no fare cell levels the column, i.e. Wales). Income predictors take a factor of one: the diary year is the FRS 2024-25 year they are matched against. Petrol and diesel take the DESNZ pump-price times HMRC litres per head outturn from the vendored road_fuel_anchors.json, which sets only their donor distribution because the level step follows; the energy columns are exempt because the NEED 2024 shape at the DESNZ level and the QEP average prices paid set their level. The household adult and child counts (LCFS G018 and G019, the survey''s age-18 split) predict on both sides; the recipient counts its members by age, not through the engine''s is_adult and is_child flags, which policyengine-uk#1896 deprecates (uk-data#486, microcosm#1095). Road fuel incidence and level are set by two declared steps (microcosm#1113). The two-week diary leaves about a third of car-owning donors with no fuel purchase, which the chain reproduces among the households the fuel flag marks as fuel buyers, so the redraw_zero_road_fuel step redraws a flagged household that drew zero from the donor''s distribution among households with positive road fuel, on the chain''s predictors: a weighted regime-gated QRF draws the total, positive by construction, then the petrol share of it, at quantiles keyed on the household id; positive draws are kept. Then the level_road_fuel step, after the fuel flag has zeroed the households without a fuel car, scales petrol and diesel so their prior-weighted total equals ONS Consumer Trends household spending on COICOP 07.2.2 for calendar 2024 (the year of the DESNZ pump prices the donor uprating uses) less the donor''s own other-fuels share of 07.2.2 (c72213), keeping the drawn mix. The diary''s 07.2.2 has three lines (c72211 petrol, c72212 diesel and c72213, the other motor fuels and lubricants) and none for vehicle electricity. The LCFS diary records about a quarter less road fuel than ONS, and binding the OBR cars receipts had closed that gap by moving weight onto fuel-buying households; petrol and diesel therefore carry no committed support bound, like the other levelled columns. The totals that contain levelled columns are written back around them by the declared recompose_from_remainder step (microcosm#1113): each keeps its own chain draw less the chain''s draws of the parts the stage re-levels, kept before any step touches them and floored at zero where the parts outgrow the total, and adds the levelled parts back, so housing_water_and_electricity_consumption is its draw less the drawn electricity and gas plus the levelled electricity and gas, and transport_consumption its draw less the drawn petrol, diesel and bus fares plus the levelled petrol and diesel and the priced bus fares. The chain draws each part after, and conditional on, its total, so the remainder is the chain''s own split; a remainder drawn as a chain target of its own over-drew the vehicle-purchase tail of transport, 10 to 13 percent above the donor in-sample. The chain''s domestic-energy target is the electricity and gas the stage derives from the diary''s fuel, light and power (p537) by its labelled parts, from the LCF User Guide''s derived-variable labels and P537 definition (microcosm#1164): each fuel''s last account payment less its rebate (b489 electricity, b490 gas, read as the tab carries them; the stage refuses a donor where b489 equals b175 less b178, or b490 equals b170 less b173, to the penny for under 95 percent of that fuel''s account payers, which pins the labels and the rebate''s sign), its prepayment key or meter payment (b1751, b1701), its component of a combined utilities bill (b227 electricity, b226 gas) and of a combined key or meter payment (b2332, b2331), and the diary''s second-dwelling account and slot-meter lines (c45112 and c45114, c45212 and c45214); what a combined payment leaves unsplit (the combined bill b231 less its rebate b174, and the combined key or meter payment b233, each less its parts) goes by the household''s own electricity share where it pays for both fuels, and otherwise by the donor''s mean share of the households that do, since a combined payment means the household pays for both; a donor with no such household fails. The diary''s other fuels (central-heating oil b017 and c45312, bottled gas b018 and c45222, coal and coke c45411, wood and peat c45412, hot water, steam and ice c45511) are neither, and the donor_energy_split receipt records the split against p537: what reading refunds as zero adds, what the unclipped parts differ from p537 by, the weighted share of donors whose unclipped parts differ from their p537, and the account identity shares. The derivation it replaces read b226 as electricity by direct debit and b489 and b490 as prepayment payments, where the labels make them the gas component of a combined bill and the electricity and gas account payments less rebates. The liquid fuels (central-heating oil and paraffin with bottled gas, LPG with liquid) and the solid fuels (coal, coke, wood and peat) are drawn as liquid_fuel_consumption and solid_fuel_consumption, the inputs policyengine-uk 2.149.0 reads (pe-uk#2572; María''s ruling of 2026-10-22), last in the chain so that every earlier draw is the chain''s own, uprated to calendar-2024 prices as every diary spend column is; the housing total nets their draws and adds them back unchanged, so it always holds them, and hot water, steam and ice stays in its remainder. The receipt records the published ONS 04.5.3 and 04.5.4 spend beside each fuel''s donor total at diary prices and the frame''s draw (published_fuels). Before the hold, each COICOP division whose frame total per household stands above its donor''s by more than the twelve divisions together do is brought down to that shared ratio, by its draw or, for housing and transport, by its remainder alone, so the levelled parts keep their published levels (María''s ruling of 2026-10-23, microcosm#1278); the receipt records each division''s ratio and factor (division_levelling) and each recomposed total''s levelling_factor. Each total is then held to the donor''s realised maximum of that total (maximum_total: donor_support, the support every drawn column is clipped to; microcosm#1164), never below its parts, the excess coming out of its remainder: a remainder near the top of the diary''s range plus levelled parts larger than the drawn ones would otherwise leave it. The two totals keep their committed support bounds, which the terminal support gate applies to the emitted frame; the recomposed_totals gate checks the declaration and the receipt, whose rows held at the maximum and weighted mass taken enter its identities. Every household spend column is at calendar-2024 prices as households paid them, the H5''s year that policyengine-uk projects from and the calibration uprates to the calendar-2025 window (microcosm#1113): the diary columns by the CPI uprating to 2024, road fuel at ONS 07.2.2 for 2024, energy at DESNZ volume and QEP prices for 2024, and bus fares at each area''s fiscal-year yield re-priced to 2024 by its fares index (the DfT local bus fares index by quarter for London and England outside London, Scotland''s calendar-year index; Northern Ireland, which publishes no fares index, from its own yields of the two fiscal years 2024 overlaps, weighted three months and nine (microcosm#1207), in place of England''s index, which carries the January 2025 rise in the English fare cap Northern Ireland did not have); the consumption_basis gate holds every level-setting step to that year. policyengine-uk applies the fiscal 2024-25 rules to model year 2024 (it samples each parameter at 30 April), so every levelled column sits about a quarter before the midpoint of the policy year it is taxed in; the calibration binds calendar-year facts as published and fiscal-year facts at the calendar window (María''s rule of 2026-09-22). The stage receipt also reports, for each of the twelve COICOP divisions, the prior-weighted frame total against ONS Consumer Trends for the same calendar year less the classes a household diary does not record (02.3 narcotics, 04.2 owner-occupiers'' imputed rent and 12.6.1 FISIM), on ONS''s domestic concept, and the twelve together against the national concept as well; it is report-only (microcosm#1113). The report-only litres audit compares each fuel''s frame litres with HMRC''s clearances of that fuel scaled by the cars share of its road use, from the vendored DESNZ sub-national road transport fuel consumption by vehicle type and fuel (PolicyEngine/chronicle#322); the OBR cars share of fuel duty receipts, uniform across fuels, stays beside the total.' + - beer_litres + - cider_litres + - wine_litres + - spirits_litres + - other_fermented_litres + - beer_draught_share + - cider_draught_share + - cigarettes_per_week + - hand_rolling_tobacco_grams_per_week + - cigars_grams_per_week + - other_tobacco_grams_per_week + - remote_gaming_net_losses + - pool_betting_net_receipts + - bingo_net_receipts + - national_lottery_ticket_spending + - land_based_casino_net_losses + - machine_games_lower_rate_net_takings + - machine_games_standard_rate_net_takings + - machine_games_higher_rate_net_takings + - land_based_fixed_odds_betting_net_losses + - remote_uk_horseracing_betting_net_losses + - remote_other_betting_net_losses + - betting_exchange_commission + - horse_and_dog_pool_betting_net_losses + notes: 'Ports the incumbent LCFS consumption QRF, including NEED energy raking, with adjudicated weighted fits and an identity-keyed seed-0 fuel flag. The chain''s sign gates are cross-fitted (gate_calibration: cross_fitted): each is the mean of five gates, each fitted on four of five folds of the donors stratified by sign, mapped by one weighted Platt calibration fitted on the folds they left out, so a rare spending is drawn at its donor rate on households the gates were not fitted to. A gate fitted and calibrated on the same donors memorises a rare spending''s donors and draws it too rarely everywhere else: on held-out donors it drew solid fuels about a tenth as often as they occur and education under half as often. The vehicle count is a numeric QRF predictor on both sides (LCFS a124 on the donor, the was_wealth draw of WAS vcarnr8 on the recipient, both clipped to 0-5), which retires the incumbent''s WAS-to-LCFS has-fuel bridge (microcosm#890 A). The recipient fuel flag draws each of a household''s vehicles as zero-emission at the battery-electric and fuel-cell share of the vendored DfT VEH1103 licensed-car stock (2024, Great Britain; plug-in hybrids count as fuel buyers), replacing the hand-copied NTS share (microcosm#890 E2): a household with vehicles buys fuel unless every one of them is zero-emission, so it is flagged at one minus that share raised to its vehicle count, and a one-vehicle household keeps the draw it had when the whole household was drawn at once (microcosm#1278; before, a household with several vehicles was all one or the other). The frame holds no fuel type, so the draw, keyed on the household identity, is what makes a vehicle-owning household a fuel buyer: it is random with respect to income and every other characteristic. With the redraw of microcosm#1113 every flagged household buys fuel, so this flag alone sets fuel incidence; who holds the zero-emission cars by income is a known residual. The household input uses_energy_prepayment_meter, which policyengine-uk reads for the July 2023 to March 2024 Energy Price Guarantee prepayment discount (PolicyEngine/policyengine-uk#2098, from 2.123.3), is drawn by the declared impute_prepayment_meter step (microcosm#1110): the donor prepays when it last put money on an electricity, gas or combined key or meter (b1751, b1701, b233, which the LCF asks only of prepayment-meter households) or its diary records a slot-meter payment (c45114, c45214), so electricity-only prepayment counts and a household with no meter payment, including one that did not answer, does not; a weighted regime-gated QRF on the chain''s predictors fits that flag and each recipient draws it at uniforms keyed on its household id, which moves no other draw. The release exports it: policyengine-uk reads it from 2.123.3 and an older engine, Microcosm''s locked one among them, ignores a column it does not know; the incumbent does not carry it until uk-data#539, so it is a reviewed extra column of the export surface. The frame flags about 3.0 million Great Britain households (10.5 %) at prior weights, against the around three million prepayment households the government counted when the discount began in July 2023 (a different reference period, households in both). Energy support clipping is exempt because NEED raking governs those columns. Bus fares are clipped to donor support before the pricing step (María''s rulings 2026-09-15 and 2026-09-17), which bounds the region no area prices (Wales keeps the chain''s raw draw) while the priced regions move beyond donor support afterwards; for that reason the column carries no committed support bound for the terminal gate. Domestic energy is raked in kWh to the NEED 2024 shape at the DESNZ level and priced at the average prices paid (microcosm#890 F, chronicle#270), where both NEED rakes take their mean-kWh margins from the vendored NEED 2024 tables (England and Wales by income band, tenure, property type and region; Scotland by income band, tenure and property type with the all-dwellings mean as its region margin; Northern Ireland untouched), the declared price_domestic_energy step converts spend to kWh and back at each household''s QEP price region through the committed crosswalk using the calendar-2024 average variable unit cost and fixed cost across payment methods, standard metering, including VAT (Northern Ireland gas at the UK average because QEP publishes no Northern Ireland gas row), a gas fixed cost only for connected households, the gas connection imposed on the recipient frame at the published share of each region (DESNZ subnational gas meters over electricity meters, 2024) by disconnecting gas-positive households in an identity-keyed uniform order, skipping a household whose weight would overshoot the published share (Northern Ireland has no subnational row and keeps the positive-gas rule), and, where the draw leaves a region below its share, by the declared connect_rule (microcosm#1164): two weighted fits on the chain''s predictors give each zero-gas household the probability that a donor like it pays for gas (a gradient-boosted classifier of the donor''s gas payers) and the gas such a donor pays (a regime-gated QRF of the payers'' gas spend, at quantiles keyed on the household id), and the region''s zero-gas households are connected in an identity-keyed order drawn in proportion to that probability, by the same weight-fitting walk, until the share is met. The labelled energy split leaves about 80 % of donors paying for gas against the about 85 % of homes DESNZ counts gas meters for (the derivation it replaced gave gas to 98 %), so without the connect leg nine of the eleven Great Britain regions fell short of their share, and after the four-margin NEED rake one factor per fuel scales the kWh so the prior-weighted frame total equals the DESNZ Energy Trends domestic consumption at actual temperature summed over the four quarters of calendar 2024; NEED gas means are per gas-metered household, so the gas kWh margins are raked over connected households only while electricity is raked over every household, and the energy_rake gate recomputes every NEED mean, the DESNZ level and the connection shares from the vendored rows. After the level, no household is left above the domestic meter definitions behind the DESNZ total (NEED Annex B: gas meters under 73,200 kWh a year, electricity meters under 50,000 kWh on profile classes 1 and 2; María''s ruling of 2026-10-12 on microcosm#1207''s extreme energy values): the declared household_kwh_ceiling caps a household there, the households below it in the capped households'' own NEED cells are re-raked to those cells'' levelled means, and a proportional step restores the DESNZ total (microcosm#1164); the receipt counts the households capped and the share of the total they gave up, and the energy_rake gate checks both. Mobile homes have no NEED property-type row, so the rake takes them to the all-dwellings mean, the incumbent''s translation; where every mobile home of a NEED geography draws a spend at or below the standing charge, that cell has no kWh for the rake to scale, and the declared zero_kwh_cells_at_need_mean starts it at its NEED mean before the first sweep (microcosm#1240). The receipt lists the cells it started, and the energy_rake gate fails on a started cell the stage does not declare and on any other cell with a zero mean. Both rakes band households on gross income, NEED''s concept: the donor on LCFS p344p, cash income before tax, National Insurance, council tax and pension contributions, and the recipient on the same concept, its HBAI net income with the deductions policyengine-uk takes to reach it added back (council tax and domestic rates, income tax, National Insurance, student loan repayments, employee and personal pension contributions, maintenance and child payments, LVT), which the stage materializes for that band alone (microcosm#1164). Before it the recipient fell back to its HBAI net income, which put households in too low a band; the engine''s household_gross_income would put them in too high a one, since it adds capital gains and the in-kind NHS, education and transport spending to cash income. The disconnection walk''s seed-0 uniform order makes every group of households (dwelling type, income band, support channel) lose the same expected share of its drawn connected mass, so only the level of the drawn connection moves; the smallest-drawn-gas-first order it replaces piled the disconnections onto low-draw flats once the SPI support households drew gas from their own incomes, and NEED''s Scottish property-type means then implied a level 2.6 % above the Scottish all-dwellings mean, a margin conflict the rake could not close. Bus fares are priced from journeys (microcosm#930), where the nts_bus_travel stage imputes each person''s annual bus-in-London and other-local-bus trips and their concessionary eligibility, and the declared price_bus_journeys step sets bus_fare_spending as the sum over the household''s non-eligible persons of trips times boardings per resident trip (the published BUS01 journeys over the published NTS0705a trips per resident times the ONS population) times the yield per fare-paying boarding (BUS05ai receipts over journeys less concessionary journeys), per area; bus-in-London trips take the London area''s price for every resident, other-local-bus trips the price of the residence area (England outside London; Scotland and Northern Ireland from their own receipts and journeys with England''s trip rate as the declared proxy); Wales is unpriced and keeps the raw draw. The chain still draws bus_fare_spending so later targets condition on the same raw draw; the emitted column is the priced value. The receipt records every factor, the frame-implied boardings beside the published ones and the frame''s eligible trip share beside the publisher''s concessionary boarding share, so the prior-weight fit of the bound receipts targets is read as a composition check, never a level the stage set; the #890 incidence draw and fare rake are retired. The 2024-25 diary (UKDS SN 9603, 2nd edition, whose household tab carries the annual weight as cal_weight_annual, the name weighta had; microcosm#1164) is moved to the base year by the declared uprate_donor_columns step (microcosm#890). Consumption columns and bus fares take the engine''s CPI index from the April-to-March diary year, placed on the calendar-year index at three quarters of 2024 and one of 2025, back a quarter to calendar 2024 (microcosm#1113; the diary sits a quarter past it, so the factor is below one; the fare factor survives only where no fare cell levels the column, i.e. Wales). Income predictors take a factor of one: the diary year is the FRS 2024-25 year they are matched against. Petrol and diesel take the DESNZ pump-price times HMRC litres per head outturn from the vendored road_fuel_anchors.json, which sets only their donor distribution because the level step follows; the energy columns are exempt because the NEED 2024 shape at the DESNZ level and the QEP average prices paid set their level. The household adult and child counts (LCFS G018 and G019, the survey''s age-18 split) predict on both sides; the recipient counts its members by age, not through the engine''s is_adult and is_child flags, which policyengine-uk#1896 deprecates (uk-data#486, microcosm#1095). Road fuel incidence and level are set by two declared steps (microcosm#1113). The two-week diary leaves about a third of car-owning donors with no fuel purchase, which the chain reproduces among the households the fuel flag marks as fuel buyers, so the redraw_zero_road_fuel step redraws a flagged household that drew zero from the donor''s distribution among households with positive road fuel, on the chain''s predictors: a weighted regime-gated QRF draws the total, positive by construction, then the petrol share of it, at quantiles keyed on the household id; positive draws are kept. Then the level_road_fuel step, after the fuel flag has zeroed the households without a fuel car, scales petrol and diesel so their prior-weighted total equals ONS Consumer Trends household spending on COICOP 07.2.2 for calendar 2024 (the year of the DESNZ pump prices the donor uprating uses) less the donor''s own other-fuels share of 07.2.2 (c72213), keeping the drawn mix. The diary''s 07.2.2 has three lines (c72211 petrol, c72212 diesel and c72213, the other motor fuels and lubricants) and none for vehicle electricity. The LCFS diary records about a quarter less road fuel than ONS, and binding the OBR cars receipts had closed that gap by moving weight onto fuel-buying households; petrol and diesel therefore carry no committed support bound, like the other levelled columns. The totals that contain levelled columns are written back around them by the declared recompose_from_remainder step (microcosm#1113): each keeps its own chain draw less the chain''s draws of the parts the stage re-levels, kept before any step touches them and floored at zero where the parts outgrow the total, and adds the levelled parts back, so housing_water_and_electricity_consumption is its draw less the drawn electricity and gas plus the levelled electricity and gas, and transport_consumption its draw less the drawn petrol, diesel and bus fares plus the levelled petrol and diesel and the priced bus fares. The chain draws each part after, and conditional on, its total, so the remainder is the chain''s own split; a remainder drawn as a chain target of its own over-drew the vehicle-purchase tail of transport, 10 to 13 percent above the donor in-sample. The chain''s domestic-energy target is the electricity and gas the stage derives from the diary''s fuel, light and power (p537) by its labelled parts, from the LCF User Guide''s derived-variable labels and P537 definition (microcosm#1164): each fuel''s last account payment less its rebate (b489 electricity, b490 gas, read as the tab carries them; the stage refuses a donor where b489 equals b175 less b178, or b490 equals b170 less b173, to the penny for under 95 percent of that fuel''s account payers, which pins the labels and the rebate''s sign), its prepayment key or meter payment (b1751, b1701), its component of a combined utilities bill (b227 electricity, b226 gas) and of a combined key or meter payment (b2332, b2331), and the diary''s second-dwelling account and slot-meter lines (c45112 and c45114, c45212 and c45214); what a combined payment leaves unsplit (the combined bill b231 less its rebate b174, and the combined key or meter payment b233, each less its parts) goes by the household''s own electricity share where it pays for both fuels, and otherwise by the donor''s mean share of the households that do, since a combined payment means the household pays for both; a donor with no such household fails. The diary''s other fuels (central-heating oil b017 and c45312, bottled gas b018 and c45222, coal and coke c45411, wood and peat c45412, hot water, steam and ice c45511) are neither, and the donor_energy_split receipt records the split against p537: what reading refunds as zero adds, what the unclipped parts differ from p537 by, the weighted share of donors whose unclipped parts differ from their p537, and the account identity shares. The derivation it replaces read b226 as electricity by direct debit and b489 and b490 as prepayment payments, where the labels make them the gas component of a combined bill and the electricity and gas account payments less rebates. The liquid fuels (central-heating oil and paraffin with bottled gas, LPG with liquid) and the solid fuels (coal, coke, wood and peat) are drawn as liquid_fuel_consumption and solid_fuel_consumption, the inputs policyengine-uk 2.149.0 reads (pe-uk#2572; María''s ruling of 2026-10-22), after the eighteen spend targets so that every earlier draw is the chain''s own, uprated to calendar-2024 prices as every diary spend column is; the housing total nets their draws and adds them back unchanged, so it always holds them, and hot water, steam and ice stays in its remainder. The receipt records the published ONS 04.5.3 and 04.5.4 spend beside each fuel''s donor total at diary prices and the frame''s draw (published_fuels). Before the hold, each COICOP division whose frame total per household stands above its donor''s by more than the twelve divisions together do is brought down to that shared ratio, by its draw or, for housing and transport, by its remainder alone, so the levelled parts keep their published levels (María''s ruling of 2026-10-23, microcosm#1278); the receipt records each division''s ratio and factor (division_levelling) and each recomposed total''s levelling_factor. Each total is then held to the donor''s realised maximum of that total (maximum_total: donor_support, the support every drawn column is clipped to; microcosm#1164), never below its parts, the excess coming out of its remainder: a remainder near the top of the diary''s range plus levelled parts larger than the drawn ones would otherwise leave it. The two totals keep their committed support bounds, which the terminal support gate applies to the emitted frame; the recomposed_totals gate checks the declaration and the receipt, whose rows held at the maximum and weighted mass taken enter its identities. Every household spend column is at calendar-2024 prices as households paid them, the H5''s year that policyengine-uk projects from and the calibration uprates to the calendar-2025 window (microcosm#1113): the diary columns by the CPI uprating to 2024, road fuel at ONS 07.2.2 for 2024, energy at DESNZ volume and QEP prices for 2024, and bus fares at each area''s fiscal-year yield re-priced to 2024 by its fares index (the DfT local bus fares index by quarter for London and England outside London, Scotland''s calendar-year index; Northern Ireland, which publishes no fares index, from its own yields of the two fiscal years 2024 overlaps, weighted three months and nine (microcosm#1207), in place of England''s index, which carries the January 2025 rise in the English fare cap Northern Ireland did not have); the consumption_basis gate holds every level-setting step to that year. policyengine-uk applies the fiscal 2024-25 rules to model year 2024 (it samples each parameter at 30 April), so every levelled column sits about a quarter before the midpoint of the policy year it is taxed in; the calibration binds calendar-year facts as published and fiscal-year facts at the calendar window (María''s rule of 2026-09-22). The stage receipt also reports, for each of the twelve COICOP divisions, the prior-weighted frame total against ONS Consumer Trends for the same calendar year less the classes a household diary does not record (02.3 narcotics, 04.2 owner-occupiers'' imputed rent and 12.6.1 FISIM), on ONS''s domestic concept, and the twelve together against the national concept as well; it is report-only (microcosm#1113). The report-only litres audit compares each fuel''s frame litres with HMRC''s clearances of that fuel scaled by the cars share of its road use, from the vendored DESNZ sub-national road transport fuel consumption by vehicle type and fuel (PolicyEngine/chronicle#322); the OBR cars share of fuel duty receipts, uniform across fuels, stays beside the total. After its spend targets and the two fuels the chain draws five shares the derive step computes on the donor from the diary lines (microcosm#1359): tobacco''s share of the off-trade alcohol and tobacco that make up P602 (c22111, c22121 and c22131 over those three and the seven lines of alcohol brought home, c21111 to c21311; P602 also sums narcotics, c23111, which the end-user tab does not carry), on-trade alcohol''s share of restaurants and hotels (the eight lines of drinks away from home, cb111c to cb111j, over P611, clipped at one because the tab stores P611 to one decimal place), gambling stakes'' share of recreation (the seven games-of-chance stake lines P609 sums, c94311 to c94316 and c94319: pools, bingo, lotteries, bookmaker and tote betting with gaming machines, and the National Lottery; the winnings lines beside them sit in no total), the National Lottery''s share of those stakes (scratchcards and draws, c94316 and c94319, over the seven) and the betting and gaming share of the rest (football pools, bingo, and bookmaker and tote betting with gaming machines, c94311, c94312 and c94314, over the other five; society lotteries, c94313, and the Irish Lottery, c94315, pay no UK gambling duty). A household''s tobacco, off-trade alcohol, on-trade alcohol and gambling stakes are its shares of the totals it carries, and its National Lottery and betting and gaming stakes its shares of its stakes, so the parts sum to the totals and no total, the VAT base included, moves; appended after the twenty targets, the shares move none of their draws. The shares and the spending they give are scratch, on no table; the report-only excise_shares receipt records each share on the frame beside the donor. The declared level_excise_quantities step turns that spending into policyengine-uk''s excise inputs (microcosm#1359), so alcohol, tobacco and gambling duty stop scoring zero. Each national quantity is a published FY2024-25 figure from the vendored excise_facts.json, and the step gives each household its part in proportion to the spending that buys it, at prior weights (one factor per input, the level_road_fuel scaling), so the frame''s weighted total of each input is the published one; a household that buys one product of a kind buys all of that kind in the national mix. Alcohol: each product''s litres are HMRC''s clearances of beer, cider, wine, spirits and other fermented products (the Alcohol Bulletin, in litres of pure alcohol) over the engine''s own strength for the product, which policyengine-uk multiplies back, shared by off- and on-trade alcohol spending together; beer and cider take their draught shares from the clearances under draught relief, alone or with small producer relief, over all of their clearances, and the other products, whose draught clearances HMRC does not publish, keep the engine''s zero, as does sparkling cider, which the bulletin counts within cider. A pound buys the same volume in a pub as in a shop under this rule, which leans the volume, and so the duty, towards on-trade drinkers: against a published on-trade volume share of about 27 percent, a pound spent in a pub is given about 1.6 times the volume it buys and a pound spent in a shop about 0.78 times, and about 11 percent of the volume sits with other households on the 2024-25 diary. No on-trade volume share can be archived (MESAS is a NielsenIQ and Circana dashboard with no fixed file), so the spending rule stands, its lean documented (María''s ruling of 2026-10-23). Tobacco: cigarettes a week and grams a week of hand-rolling tobacco, cigars and other tobacco are HMRC''s clearances (the Tobacco Bulletin) over the engine''s 52 weeks, shared by tobacco spending; heated tobacco sits within other tobacco in the bulletin, so it is charged at the other-tobacco rate and its own input keeps the engine''s zero. Gambling: each input is its duty''s dutiable base, HMRC''s cash receipts for the duty (the Betting and Gaming bulletin) or Machine Games Duty''s declared liabilities for the band, over the engine''s FY2024-25 rate (Gaming Duty over the engine''s effective-rate proxy for it), so the engine charges back the published receipts. General Betting Duty''s base, its receipts over the fixed-odds rate, is split over the land-based fixed-odds, remote horse-racing, remote other, exchange and horse-and-dog pool inputs by the Gambling Commission''s gross gambling yield for Great Britain, remote fixed-odds betting by the horse-racing share of all remote betting yield, since the Commission publishes no betting activity by event; its horse racing is not only UK racing, so the remote UK horse-racing input is overstated and, from April 2027, when the engine charges other remote betting at 25 percent, too much of the base stays at 15 percent and the rise is understated; and its pool betting can hold pools on other events, such as football pools, which pay Pool Betting Duty. Spread betting, which the Commission does not regulate, has no published base and keeps the engine''s zero. Lottery Duty''s base is shared by the National Lottery stakes and every other gambling base by the betting and gaming stakes, since the diary cannot tell remote from land-based play or one betting product from another; the society and Irish lotteries carry none. Known biases: the quantities are levelled to the published figures while spending and the diary''s incidence stay at survey level (María''s ruling of 2026-10-23), so a household''s duty is one multiple of its own spending, the same for every household that carries it. At prior weights alcohol duty is about 0.45 times alcohol spending, but tobacco duty is about 1.8 times tobacco spending, Lottery Duty about 0.61 times National Lottery stakes (its base, ticket sales, about 5.1 times them) and the other gambling duties about 5.5 times the betting and gaming stakes (their bases about 30 times), since the diary records a fraction of what is bought; VAT on the same goods stays on the survey base. The duty also sits on fewer households than buy: 11.2 percent of households carry tobacco, against 11.9 percent of UK adults who smoked cigarettes in 2023 (ONS), and 10.9 percent the National Lottery and 2.6 percent betting and gaming, against 47 percent of adults in Great Britain who gambled in the past four weeks of 2025 and 27 percent once lottery-draw-only players are left out (Gambling Commission), while the share of households with a smoker or a gambler is above the adult rate; the duty per carrying household is higher by the same factor. The rest of the gap between frame and donor is the chain''s own: each share conditions on the chain''s earlier draws, not on a donor''s spending, which leaves tobacco on more households than its donors (10.3 percent) and betting and gaming on fewer (3.6 percent). Other tobacco (c22131) includes e-cigarette refills, so the tobacco inputs also follow vaping spending and a household that only vapes carries tobacco duty; Vaping Products Duty, from 1 October 2026, needs a key of its own. The draught shares are national constants, so a household that buys alcohol only in shops takes the same draught relief as one that drinks in pubs. The quantities are FY2024-25''s, the excise year policyengine-uk charges in model year 2024 (its excise year runs from 6 April), and the engine holds them flat after it (PolicyEngine/policyengine-uk#2596). The step moves no spending column; the excise_quantities gate recomputes every level from the vendored rows.' - stage: etb_vat survey: Effects of Taxes and Benefits 1977-2024 source: UK Data Service SN 8856 Effects of Taxes and Benefits household tab and cited VAT anchor resource. 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 2b18a26d1d..c05415f83e 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,11 +1,11 @@ { - "source_fact_feed": "chronicle-uk-abf0921-consumer-facts", + "source_fact_feed": "chronicle-uk-200bf6d-consumer-facts", "target_period": 2025, - "candidate_count": 1358, - "contract_target_count": 376, - "active_reference_count": 1336, + "candidate_count": 1363, + "contract_target_count": 381, + "active_reference_count": 1341, "status_counts": { - "active": 1336, + "active": 1341, "no_fact_at_or_before_period": 5, "signed_excluded": 17 }, @@ -2124,6 +2124,26 @@ "geography_level": "country", "geography_id": "K02000001" }, + "obr.beer_and_cider_duties": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.wine_duties": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.spirits_duties": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.tobacco_duties": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.betting_and_gaming_duties": { + "geography_level": "country", + "geography_id": "K02000001" + }, "scotgov.bus.passenger_revenue": { "geography_level": "country", "geography_id": "S92000003" @@ -4478,6 +4498,8 @@ "dfi_ni.bus.passenger_receipts", "dwp.workplace_pension.employer_contributions", "nithc.public_transport_support", + "obr.beer_and_cider_duties", + "obr.wine_duties", "ons.household_road_fuel_expenditure", "ons.population.age_0", "ons.population.age_0_9_by_region@E12000001", @@ -7202,6 +7224,31 @@ "from": "2024", "to": "2025" }, + { + "name": "obr.beer_and_cider_duties", + "from": "2024", + "to": "2025" + }, + { + "name": "obr.wine_duties", + "from": "2024", + "to": "2025" + }, + { + "name": "obr.spirits_duties", + "from": "2024", + "to": "2025" + }, + { + "name": "obr.tobacco_duties", + "from": "2024", + "to": "2025" + }, + { + "name": "obr.betting_and_gaming_duties", + "from": "2024", + "to": "2025" + }, { "name": "scotgov.bus.passenger_revenue", "from": "2024", @@ -19941,9 +19988,9 @@ "matched_fact_count_overall": 6, "matched_fact_count_at_or_before_period": 6, "resolved_period": 2025, - "resolved_value": 26522000000.0, + "resolved_value": 28840000000.0, "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_643fd0413421fbcff9ea2bb5" + "resolved_fact_key": "ledger_aggregate_fact_v2_f3cf2a0e3e5ab3e4771086f2" } ] }, @@ -19956,9 +20003,9 @@ "matched_fact_count_overall": 6, "matched_fact_count_at_or_before_period": 6, "resolved_period": 2025, - "resolved_value": 15339000000.0, + "resolved_value": 18958000000.0, "resolved_fact_period": "2025", - "resolved_fact_key": "ledger_aggregate_fact_v2_03c5f13d5fbab023177a1aea" + "resolved_fact_key": "ledger_aggregate_fact_v2_9bf03b93645200761324e994" } ] }, @@ -19971,9 +20018,84 @@ "matched_fact_count_overall": 1, "matched_fact_count_at_or_before_period": 1, "resolved_period": 2025, - "resolved_value": 37025000000.0, + "resolved_value": 35460000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_e29f3ad312cbfa894a9c965b" + } + ] + }, + "obr.beer_and_cider_duties": { + "status": "active", + "candidates": [ + { + "name": "obr.beer_and_cider_duties", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3746000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_2b1263596a9b42f4b005a8d0" + } + ] + }, + "obr.wine_duties": { + "status": "active", + "candidates": [ + { + "name": "obr.wine_duties", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4686000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_67c9f0d563a51c2d2eeab120" + } + ] + }, + "obr.spirits_duties": { + "status": "active", + "candidates": [ + { + "name": "obr.spirits_duties", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4113000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_c565bfe8e68552c52db1955b" + } + ] + }, + "obr.tobacco_duties": { + "status": "active", + "candidates": [ + { + "name": "obr.tobacco_duties", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 7927000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_68c2ea5b72b4e6e8e6e467fd" + } + ] + }, + "obr.betting_and_gaming_duties": { + "status": "active", + "candidates": [ + { + "name": "obr.betting_and_gaming_duties", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3616000000.0, "resolved_fact_period": "2024", - "resolved_fact_key": "ledger_aggregate_fact_v2_d5c11a14d2062955b622275a" + "resolved_fact_key": "ledger_aggregate_fact_v2_9d811dc85cfdf4ee96cef49a" } ] }, 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 2eee451261..848f1dc3eb 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_references.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_references.json @@ -473,6 +473,8 @@ "nithc.public_transport_support": "nithc.public_transport_finances", "nrs.households.scotland": "ons.household_composition", "obr.attendance_allowance": "obr.efo_expenditure", + "obr.beer_and_cider_duties": "obr.efo_receipts", + "obr.betting_and_gaming_duties": "obr.efo_receipts", "obr.carers_allowance": "obr.efo_expenditure", "obr.child_benefit": "obr.efo_expenditure", "obr.council_tax": "obr.efo_expenditure", @@ -487,10 +489,13 @@ "obr.pension_credit": "obr.efo_expenditure", "obr.pip": "obr.efo_expenditure", "obr.sdlt": "obr.efo_receipts", + "obr.spirits_duties": "obr.efo_receipts", "obr.statutory_maternity_pay": "obr.efo_expenditure", + "obr.tobacco_duties": "obr.efo_receipts", "obr.tv_licence_fee": "obr.efo_expenditure", "obr.universal_credit": "obr.efo_expenditure", "obr.vat": "obr.efo_receipts", + "obr.wine_duties": "obr.efo_receipts", "obr.winter_fuel_allowance": "obr.efo_expenditure", "ons.household_composition.couple_3_plus_children_households": "ons.household_composition", "ons.household_composition.couple_no_children_households": "ons.household_composition", @@ -839,6 +844,8 @@ "nithc.public_transport_support": "Bus and rail support", "nrs.households.scotland": "Households, Scotland (NRS)", "obr.attendance_allowance": "Attendance allowance", + "obr.beer_and_cider_duties": "Beer and cider duties (accrued)", + "obr.betting_and_gaming_duties": "Betting and gaming duties", "obr.carers_allowance": "Carers allowance", "obr.child_benefit": "Child benefit", "obr.council_tax": "Council tax", @@ -853,10 +860,13 @@ "obr.pension_credit": "Pension credit", "obr.pip": "Personal Independence Payment", "obr.sdlt": "Stamp Duty Land Tax", + "obr.spirits_duties": "Spirits duties (accrued)", "obr.statutory_maternity_pay": "Statutory maternity pay", + "obr.tobacco_duties": "Tobacco duties", "obr.tv_licence_fee": "TV licence fee", "obr.universal_credit": "Universal Credit expenditure", "obr.vat": "VAT", + "obr.wine_duties": "Wine duties (accrued)", "obr.winter_fuel_allowance": "Winter fuel allowance", "ons.household_composition.couple_3_plus_children_households": "Couple 3 plus children households", "ons.household_composition.couple_no_children_households": "Couple no children households", @@ -24802,6 +24812,148 @@ "uprating_from_period": "2024", "uprating_to_period": 2025 }, + { + "name": "obr.beer_and_cider_duties", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.beer_and_cider_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "accrual" + }, + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/beer_and_cider_duties", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.beer_and_cider_duties", + "measure_kind": "prepared_column", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "assertion_policy": "allow_source_projection", + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "obr.wine_duties", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.wine_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "accrual" + }, + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/wine_duties", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.wine_duties", + "measure_kind": "prepared_column", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "assertion_policy": "allow_source_projection", + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "obr.spirits_duties", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.spirits_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "accrual" + }, + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/spirits_duties", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.spirits_duties", + "measure_kind": "prepared_column", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "assertion_policy": "allow_source_projection", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "obr.tobacco_duties", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.tobacco_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "cash" + }, + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/tobacco_duties", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.tobacco_duties", + "measure_kind": "prepared_column", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "assertion_policy": "allow_source_projection", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "obr.betting_and_gaming_duties", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.betting_and_gaming_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "cash" + }, + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/betting_and_gaming_duties", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.betting_and_gaming_duties", + "measure_kind": "prepared_column", + "measurement_period": "2024", + "source_period_policy": "exact_observation" + }, + "assertion_policy": "allow_source_projection", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, { "name": "scotgov.bus.passenger_revenue", "ledger_selector": { 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 65892116a7..ffcb076c86 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 @@ -703,11 +703,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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.", @@ -726,11 +726,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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.", @@ -749,11 +749,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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.", @@ -773,11 +773,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries the compiled household cells.", @@ -797,11 +797,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries the compiled household cells; the source specification defines HouseholdCount as occupied households.", @@ -821,11 +821,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned Ledger fact feed carries the compiled household cells.", @@ -845,11 +845,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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.", @@ -868,11 +868,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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.", @@ -900,11 +900,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "source_repo": "PolicyEngine/chronicle" }, "notes": "Chronicle registers the three inputs raw-only (PolicyEngine/chronicle#343); every count is Microcosm's computation and none is a Chronicle fact. The feed supplies the census tenure shares, the OBR costing note's non-owner-occupied share and the ONS HPSSA parity series.", @@ -924,11 +924,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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.", @@ -948,11 +948,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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, 316 bind for the 2025 compile and 45 remain signed deferred: two English cells are not published, 11 Northern Ireland cells have a country mean only, and 32 Scottish cells are represented at BRMA grain, where the 18 BRMA cells bind with each BRMA's private renters derived from the councils' through Census 2022 (microcosm#1090, #1262).", @@ -973,11 +973,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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.", @@ -996,11 +996,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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 compile, band I included, and bind unless a signed small-cell rule defers them (uk/local_small_cell_rule.json).", @@ -1019,11 +1019,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "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 compile and bind unless a signed small-cell rule defers them (uk/local_small_cell_rule.json), 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.", @@ -1042,11 +1042,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned feed record set desnz.subnational.electricity.cy2024 supplies the 350 Great Britain authorities on the NSPL of the 2025 publication (publication_2025_nspl): the roster's boundaries, with Barnsley and Sheffield under their April 2025 codes through the crosswalk's aliases. Non-half-hourly meters are read from 31 January to 30 January and half-hourly meters over the calendar year; both are counted, as reported. Each cell binds the authority's consumption times one Great Britain factor (desnz.energy_trends.gb_domestic_level), so the cells keep DESNZ's split at the stage's level. Northern Ireland is published separately (desnz_subnational_electricity_ni); its row enters the factor only.", @@ -1065,11 +1065,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned feed record set desnz.subnational.gas.cy2024 supplies 347 authorities: the Isles of Scilly, Orkney and Shetland have no mains gas network and no row. The gas year runs from mid-May to mid-May and is weather-corrected. Each kWh cell binds the authority's consumption times one Great Britain factor; the authority's gas meters over its electricity meters (2024) give the share of its census households bound as gas-connected (desnz.subnational.gas_meter_share). Orkney and Shetland are signed deferrals, the Isles of Scilly sits under the support floor.", @@ -1088,11 +1088,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned feed record set desnz.subnational.northern_ireland.electricity.domestic.y2024 supplies Northern Ireland's row (N92000002) on the financial year from April 2024, as reported. No cell binds it: it enters Great Britain's share of the UK sub-national total, which sets the kWh cells' factor (desnz.energy_trends.gb_domestic_level). DESNZ calls Northern Ireland's figures not directly comparable with Great Britain's.", @@ -1111,11 +1111,11 @@ "ledger_fact_pin": { "artifact": ".codex-work/consumer_facts_uk.jsonl", "build": "build-bundle --suite uk -> build-consumer-artifact", - "fact_row_count": 1499301, - "facts_sha256": "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b", + "fact_row_count": 1502291, + "facts_sha256": "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460", + "source_commit": "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1", "source_repo": "PolicyEngine/chronicle" }, "notes": "The pinned feed record set desnz.subnational.northern_ireland.gas.domestic.y2024 supplies Northern Ireland's row (N92000002) on DESNZ's Northern Ireland gas year labelled 2024. No cell binds it: it enters Great Britain's share of the UK sub-national total, which sets the kWh cells' factor. DESNZ calls Northern Ireland's figures not directly comparable with Great Britain's.", 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 32f1aff25f..16768a289c 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 @@ -877,7 +877,12 @@ "dfe.funded_childcare.working_parent_children_age_2": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): bind every DfE funded-childcare count the model can carry, even on few records, and sign out only those with a real reason. The working parent registrations at 9 to 11 months and by single year of age (1, 2 and 3) and the universal registrations in nursery at age 3, from the DfE January census, England, measured at the spring term (María's ruling of 2026-10-22); the age-4 cells are signed out, as the bound rows fix them (accounting note dfe_funded_childcare_single_ages). No incumbent row has this row's definition.", "dfe.funded_childcare.working_parent_children_age_3": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): bind every DfE funded-childcare count the model can carry, even on few records, and sign out only those with a real reason. The working parent registrations at 9 to 11 months and by single year of age (1, 2 and 3) and the universal registrations in nursery at age 3, from the DfE January census, England, measured at the spring term (María's ruling of 2026-10-22); the age-4 cells are signed out, as the bound rows fix them (accounting note dfe_funded_childcare_single_ages). No incumbent row has this row's definition.", "dfe.funded_childcare.universal_nursery_children_age_3": "Requested by María on 2026-10-21 for the £100k childcare costing fixes (microcosm#1278, #1095): bind every DfE funded-childcare count the model can carry, even on few records, and sign out only those with a real reason. The working parent registrations at 9 to 11 months and by single year of age (1, 2 and 3) and the universal registrations in nursery at age 3, from the DfE January census, England, measured at the spring term (María's ruling of 2026-10-22); the age-4 cells are signed out, as the bound rows fix them (accounting note dfe_funded_childcare_single_ages). No incumbent row has this row's definition.", - "mhclg.council_tax_stock.single_adult_discount": "No incumbent target: uk-data binds no council-tax discount; microcosm#953 binds MHCLG Council Taxbase line 8 now that policyengine-uk applies the single adult discount (pe-uk#1864)." + "mhclg.council_tax_stock.single_adult_discount": "No incumbent target: uk-data binds no council-tax discount; microcosm#953 binds MHCLG Council Taxbase line 8 now that policyengine-uk applies the single adult discount (pe-uk#1864).", + "obr.beer_and_cider_duties": "No incumbent target: uk-data never measured excise duty, which scored zero on its data; microcosm#1359 writes the excise inputs and measures this OBR FY2024-25 line as a held-out diagnostic.", + "obr.wine_duties": "No incumbent target: uk-data never measured excise duty, which scored zero on its data; microcosm#1359 writes the excise inputs and measures this OBR FY2024-25 line as a held-out diagnostic.", + "obr.spirits_duties": "No incumbent target: uk-data never measured excise duty, which scored zero on its data; microcosm#1359 writes the excise inputs and measures this OBR FY2024-25 line as a held-out diagnostic.", + "obr.tobacco_duties": "No incumbent target: uk-data never measured excise duty, which scored zero on its data; microcosm#1359 writes the excise inputs and measures this OBR FY2024-25 line as a held-out diagnostic.", + "obr.betting_and_gaming_duties": "No incumbent target: uk-data never measured excise duty, which scored zero on its data; microcosm#1359 writes the excise inputs and measures this OBR FY2024-25 line as a held-out diagnostic." }, "suppressed_ancestors": { "hmrc/salary_sacrifice_it_relief_basic_rate": { @@ -1160,6 +1165,11 @@ "ons.household_electricity_expenditure", "ons.household_gas_expenditure", "ons.household_road_fuel_expenditure", + "obr.beer_and_cider_duties", + "obr.wine_duties", + "obr.spirits_duties", + "obr.tobacco_duties", + "obr.betting_and_gaming_duties", "scotgov.bus.passenger_revenue", "scotgov.bus.government_support", "welshgov.bus.public_support", @@ -17432,7 +17442,7 @@ "policyengine": { "metric_name": "ons/household_road_fuel_expenditure", "value_expression": "petrol_spending + diesel_spending", - "notes": "ONS Consumer Trends COICOP 07.2.2 fuels and lubricants for personal transport equipment, current prices, calendar year, bound on the frame's petrol plus diesel spend (microcosm#1113). The publisher class also carries other motor fuels and lubricants, about 0.46 percent of it on the LCFS 2024-25 diary (c72213), which the measure does not. The lcfs_consumption stage levels petrol plus diesel to the calendar-2024 row less that share, so this row reads about 0.5 percent low from scope alone: a known offset, left in place and not scaled into the target (María's ruling of 2026-10-10). ONS publishes the class on the domestic concept (spending on UK territory; PolicyEngine/chronicle#322): it includes non-residents' fuel bought in the UK, which the residents-only frame does not hold, and leaves out residents' fuel bought abroad. Consumer Trends publishes those two flows for total spending only (for 2024, GBP 64.7bn by non-residents in the UK, 3.8 percent of the domestic total, and GBP 78.9bn by residents abroad) and splits them by no class, so no national bridge is applied and their size for road fuel is not known. The row binds ONS's calendar-2024 figure (GBP 37.025bn) on the frame's own 2024 petrol and diesel columns, declared as the frame's period (measurement_period 2024, require_matching_fact_period; microcosm#1324). The fact and the stored columns are then the same year, so the binding does not depend on the engine's 2024-to-2025 fuel projection. Before #1324 the row was compared, as a stored read at 2024, with the calendar-2025 figure (GBP 35.099bn), so its reported fit measured neither year; measuring the 2025 figure through the engine instead would put the engine's fuel projection, which falls faster than ONS's own move, into the weights. Household-scope road fuel replaces the OBR cars receipts as the bound fuel row: those are a fiscal-year duty total that includes business use of cars, which the frame reaches only through the engine's conversion of spend to litres, so they stay measured as a diagnostic (calibration_measure_exclusions.json).", + "notes": "ONS Consumer Trends COICOP 07.2.2 fuels and lubricants for personal transport equipment, current prices, calendar year, bound on the frame's petrol plus diesel spend (microcosm#1113). The publisher class also carries other motor fuels and lubricants, about 0.46 percent of it on the LCFS 2024-25 diary (c72213), which the measure does not. The lcfs_consumption stage levels petrol plus diesel to the calendar-2024 row less that share, so this row reads about 0.5 percent low from scope alone: a known offset, left in place and not scaled into the target (María's ruling of 2026-10-10). ONS publishes the class on the domestic concept (spending on UK territory; PolicyEngine/chronicle#322): it includes non-residents' fuel bought in the UK, which the residents-only frame does not hold, and leaves out residents' fuel bought abroad. Consumer Trends publishes those two flows for total spending only (for 2024, GBP 64.7bn by non-residents in the UK, 3.8 percent of the domestic total, and GBP 78.9bn by residents abroad) and splits them by no class, so no national bridge is applied and their size for road fuel is not known. The row binds ONS's calendar-2024 figure (GBP 35.460bn in the September 2026 Consumer Trends edition the feed carries since microcosm#1359; GBP 37.025bn in the June edition before it) on the frame's own 2024 petrol and diesel columns, declared as the frame's period (measurement_period 2024, require_matching_fact_period; microcosm#1324). The fact and the stored columns are then the same year, so the binding does not depend on the engine's 2024-to-2025 fuel projection. Before #1324 the row was compared, as a stored read at 2024, with the calendar-2025 figure (GBP 35.099bn in the June edition), so its reported fit measured neither year; measuring the 2025 figure through the engine instead would put the engine's fuel projection, which falls faster than ONS's own move, into the weights. Household-scope road fuel replaces the OBR cars receipts as the bound fuel row: those are a fiscal-year duty total that includes business use of cars, which the frame reaches only through the engine's conversion of spend to litres, so they stay measured as a diagnostic (calibration_measure_exclusions.json).", "measurement_period": 2024, "require_matching_fact_period": true }, @@ -17459,6 +17469,196 @@ "category_id": "ons.consumer_trends", "label": "Fuels and lubricants for personal transport (COICOP 07.2.2)" }, + { + "target_id": "obr.beer_and_cider_duties", + "family": "obr", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "household", + "concept": "uk.tax.alcohol_duty.beer_and_cider.amount" + }, + "bindings": { + "policyengine": { + "metric_name": "obr/beer_and_cider_duties", + "value_expression": "beer_duty + cider_duty + sparkling_cider_duty", + "notes": "OBR's FY2024-25 accrued beer and cider duty receipts (EFO March 2026 detailed forecast tables, sheet 3.12), measured as the engine's 2024 beer, cider and sparkling cider duty on the frame's stored beer and cider litres and draught shares (measurement_period 2024, require_matching_fact_period): policyengine-uk charges model year 2024 at the FY2024-25 rates and holds the excise inputs flat after it (PolicyEngine/policyengine-uk#2596), so a later year would read the engine's projection, not the data (María's ruling of 2026-10-23, microcosm#1359). The lcfs_consumption stage levels beer and cider litres to HMRC's FY2024-25 clearances at the engine's strengths and takes their draught shares from the draught-relief clearances, so the row reads the duty those clearances imply under the engine's rates and reliefs against the receipts HMRC accrued: the gap is the spread of strengths about the engine's one strength per product, the small producer relief the engine does not model and sparkling cider, which the clearances count within cider, not the weights. Held out of the objective as a measured diagnostic (calibration_measure_exclusions.json) and measured with tools/diagnose_uk_consumption_taxes.py.", + "measurement_period": 2024, + "require_matching_fact_period": true + }, + "axiom": { + "metric_name": "obr/beer_and_cider_duties", + "status": "pending", + "value_rule": "uk.tax.alcohol_duty.beer_and_cider.amount" + } + }, + "assertion_policy": "allow_source_projection", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.beer_and_cider_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "accrual" + } + }, + "category_id": "obr.efo_receipts", + "label": "Beer and cider duties (accrued)" + }, + { + "target_id": "obr.wine_duties", + "family": "obr", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "household", + "concept": "uk.tax.alcohol_duty.wine.amount" + }, + "bindings": { + "policyengine": { + "metric_name": "obr/wine_duties", + "value_expression": "wine_duty + other_fermented_duty", + "notes": "OBR's FY2024-25 accrued wine duty receipts, which include other fermented products (EFO March 2026 detailed forecast tables, sheet 3.12), measured as the engine's 2024 wine and other fermented product duty on the frame's stored wine and other fermented litres (measurement_period 2024, require_matching_fact_period): policyengine-uk charges model year 2024 at the FY2024-25 rates and holds the excise inputs flat after it (PolicyEngine/policyengine-uk#2596), so a later year would read the engine's projection, not the data (María's ruling of 2026-10-23, microcosm#1359). The lcfs_consumption stage levels wine and other fermented litres to HMRC's FY2024-25 clearances at the engine's strengths, so the row reads the duty those clearances imply under the engine's rates against the receipts HMRC accrued: the gap is the spread of strengths about the engine's one strength per product and the draught relief the engine leaves at zero for these products, not the weights. Held out of the objective as a measured diagnostic (calibration_measure_exclusions.json) and measured with tools/diagnose_uk_consumption_taxes.py.", + "measurement_period": 2024, + "require_matching_fact_period": true + }, + "axiom": { + "metric_name": "obr/wine_duties", + "status": "pending", + "value_rule": "uk.tax.alcohol_duty.wine.amount" + } + }, + "assertion_policy": "allow_source_projection", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.wine_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "accrual" + } + }, + "category_id": "obr.efo_receipts", + "label": "Wine duties (accrued)" + }, + { + "target_id": "obr.spirits_duties", + "family": "obr", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "household", + "concept": "uk.tax.alcohol_duty.spirits.amount" + }, + "bindings": { + "policyengine": { + "metric_name": "obr/spirits_duties", + "value_variable": "spirits_duty", + "notes": "OBR's FY2024-25 accrued spirits duty receipts (EFO March 2026 detailed forecast tables, sheet 3.12), measured as the engine's 2024 spirits duty on the frame's stored spirits litres (measurement_period 2024, require_matching_fact_period): policyengine-uk charges model year 2024 at the FY2024-25 rates and holds the excise inputs flat after it (PolicyEngine/policyengine-uk#2596), so a later year would read the engine's projection, not the data (María's ruling of 2026-10-23, microcosm#1359). The lcfs_consumption stage levels spirits litres to HMRC's FY2024-25 clearances at the engine's strength, so the row reads the duty those clearances imply under the engine's rates against the receipts HMRC accrued: the gap is the spread of strengths about the engine's one strength, not the weights, not the weights. Held out of the objective as a measured diagnostic (calibration_measure_exclusions.json) and measured with tools/diagnose_uk_consumption_taxes.py.", + "measurement_period": 2024, + "require_matching_fact_period": true + }, + "axiom": { + "metric_name": "obr/spirits_duties", + "status": "pending", + "value_rule": "uk.tax.alcohol_duty.spirits.amount" + } + }, + "assertion_policy": "allow_source_projection", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.spirits_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "accrual" + } + }, + "category_id": "obr.efo_receipts", + "label": "Spirits duties (accrued)" + }, + { + "target_id": "obr.tobacco_duties", + "family": "obr", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "household", + "concept": "uk.tax.tobacco_duty.amount" + }, + "bindings": { + "policyengine": { + "metric_name": "obr/tobacco_duties", + "value_variable": "tobacco_duty", + "notes": "OBR's FY2024-25 tobacco duty cash receipts (EFO March 2026 detailed forecast tables, sheet 3.8; OBR publishes tobacco on a cash basis only), measured as the engine's 2024 tobacco duty on the frame's stored cigarettes and grams of tobacco a week (measurement_period 2024, require_matching_fact_period): policyengine-uk charges model year 2024 at the FY2024-25 rates and holds the excise inputs flat after it (PolicyEngine/policyengine-uk#2596), so a later year would read the engine's projection, not the data (María's ruling of 2026-10-23, microcosm#1359). The lcfs_consumption stage levels cigarettes and hand-rolling, cigar and other tobacco to HMRC's FY2024-25 clearances, so the row reads the duty those clearances imply under the engine's specific and ad valorem rates against the cash HMRC received: the gap is the engine's price for the ad valorem element, heated tobacco charged at the other-tobacco rate and the timing of cash against clearances, not the weights. Held out of the objective as a measured diagnostic (calibration_measure_exclusions.json) and measured with tools/diagnose_uk_consumption_taxes.py.", + "measurement_period": 2024, + "require_matching_fact_period": true + }, + "axiom": { + "metric_name": "obr/tobacco_duties", + "status": "pending", + "value_rule": "uk.tax.tobacco_duty.amount" + } + }, + "assertion_policy": "allow_source_projection", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.tobacco_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "cash" + } + }, + "category_id": "obr.efo_receipts", + "label": "Tobacco duties" + }, + { + "target_id": "obr.betting_and_gaming_duties", + "family": "obr", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "household", + "concept": "uk.tax.gambling_duty.amount" + }, + "bindings": { + "policyengine": { + "metric_name": "obr/betting_and_gaming_duties", + "value_variable": "gambling_duty", + "notes": "OBR's FY2024-25 betting and gaming duty cash receipts (EFO March 2026 detailed forecast tables, sheet 3.8), measured as the engine's 2024 gambling duty on the frame's stored gambling duty bases (policyengine-uk 2.151.0) (measurement_period 2024, require_matching_fact_period): policyengine-uk charges model year 2024 at the FY2024-25 rates and holds the excise inputs flat after it (PolicyEngine/policyengine-uk#2596), so a later year would read the engine's projection, not the data (María's ruling of 2026-10-23, microcosm#1359). The lcfs_consumption stage levels each gambling duty base to HMRC's FY2024-25 receipts for the duty, or Machine Games Duty's liabilities for the band, over the engine's rate, so the row reads the HMRC receipts back by construction, against OBR's total: the gap is spread betting, which has no published base, and the difference between HMRC's receipts series and OBR's, not the weights. Held out of the objective as a measured diagnostic (calibration_measure_exclusions.json) and measured with tools/diagnose_uk_consumption_taxes.py.", + "measurement_period": 2024, + "require_matching_fact_period": true + }, + "axiom": { + "metric_name": "obr/betting_and_gaming_duties", + "status": "pending", + "value_rule": "uk.tax.gambling_duty.amount" + } + }, + "assertion_policy": "allow_source_projection", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.betting_and_gaming_duties", + "entity_name": "person", + "period_type": "fiscal_year", + "period_value": 2024, + "dimension_values": { + "accounting_basis": "cash" + } + }, + "category_id": "obr.efo_receipts", + "label": "Betting and gaming duties" + }, { "target_id": "scotgov.bus.passenger_revenue", "family": "dft_local_bus", diff --git a/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json b/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json index 4a385e2e02..79a93b009a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uprating_holds.json @@ -184,6 +184,23 @@ "status": "approved", "expires_on": "2026-12-11" }, + { + "scope": "national", + "kind": "matched_period", + "target_ids": [ + "obr.beer_and_cider_duties", + "obr.wine_duties", + "obr.spirits_duties", + "obr.tobacco_duties", + "obr.betting_and_gaming_duties" + ], + "reason": "OBR's FY2024-25 alcohol, tobacco and betting and gaming receipts, measured on the engine's 2024 duty from the frame's stored FY2024-25 quantities and bases (measurement_period 2024, require_matching_fact_period). policyengine-uk charges model year 2024 at the FY2024-25 rates and holds the excise inputs flat after it (PolicyEngine/policyengine-uk#2596), so measuring a later year would read the engine's projection, not the data (microcosm#1359).", + "tracking": "microcosm#1359", + "approved_by": "juaristi22", + "approved_on": "2026-10-23", + "status": "approved", + "expires_on": "2026-12-11" + }, { "scope": "national", "kind": "reviewed_no_index", 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 2e91e21ab9..1e3969ba8c 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 @@ -2231,6 +2231,11 @@ def _ledger_compile_parity_required_artifacts( # #1113 road_fuel_level check: the ceiling on the LCFS donor # share of other personal-transport fuels netted off 07.2.2. "maximum_other_fuels_share", + # #1359 excise_quantities check: the ceiling on the donor + # share whose published total sits beside its diary lines, and + # the support band each excise share must rest on. + "maximum_parent_residual_share", + "required_support_band", # #1113 road_fuel_incidence check: the ceiling on the chain's # zero share among flagged fuel-car households. "maximum_flagged_zero_share", 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 2a67f83cea..c9f1dc28ce 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 @@ -110,6 +110,7 @@ "uk_stage_lcfs_consumption_road_fuel_incidence", "uk_stage_lcfs_consumption_road_fuel_level", "uk_stage_lcfs_consumption_recomposed_totals", + "uk_stage_lcfs_consumption_excise_quantities", "uk_stage_lcfs_consumption_basis", "uk_stage_etb_vat_support", "uk_stage_etb_services_support", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py index e90266b10c..f45cace362 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py @@ -705,7 +705,10 @@ def uk_consumption_drift( (microcosm#1207: no bound row holds the VAT base, so this is where its drift shows). Where it carries the household's region, they also hold the electricity and gas kWh the stage raked, read back from the spend at - the stage's declared prices (microcosm#1207). + the stage's declared prices (microcosm#1207). Where it carries the excise + step's inputs, they also hold each alcohol and tobacco quantity and + gambling base as stored (the tobacco inputs a week), which the stage + levels at design weights (microcosm#1359). """ from microcosm.build.uk_runtime.domestic_energy_targets import ( @@ -715,6 +718,8 @@ def uk_consumption_drift( from microcosm.build.uk_runtime.etb_vat import UK_ETB_VAT_OUTPUT_COLUMNS from microcosm.build.uk_runtime.lcfs_consumption import ( UK_LCFS_COICOP_DIVISION_COLUMNS, + UK_LCFS_EXCISE_DRAUGHT_OUTPUTS, + UK_LCFS_EXCISE_OUTPUT_COLUMNS, ) needed = { @@ -758,6 +763,9 @@ def column(name: str) -> np.ndarray: ) for name, values in kwh.items(): totals[name] = _drift_value(design @ values, final @ values) + for name in UK_LCFS_EXCISE_OUTPUT_COLUMNS: + if name in household.columns and name not in UK_LCFS_EXCISE_DRAUGHT_OUTPUTS: + totals[name] = _drift_value(design @ column(name), final @ column(name)) road_fuel = column("petrol_spending") + column("diesel_spending") flagged = household["has_fuel_consumption"].to_numpy(dtype=bool) 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 0cb9404f3f..04b3a44d71 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/graph.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/graph.py @@ -927,6 +927,36 @@ def _cells( ), _Cell("household", "has_fuel_consumption", "bool"), _Cell("household", "uses_energy_prepayment_meter", "bool"), + # The excise step's policyengine-uk inputs (microcosm#1359). + *_cells( + "household", + ( + "beer_litres", + "cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", + "beer_draught_share", + "cider_draught_share", + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week", + "remote_gaming_net_losses", + "pool_betting_net_receipts", + "bingo_net_receipts", + "national_lottery_ticket_spending", + "land_based_casino_net_losses", + "machine_games_lower_rate_net_takings", + "machine_games_standard_rate_net_takings", + "machine_games_higher_rate_net_takings", + "land_based_fixed_odds_betting_net_losses", + "remote_uk_horseracing_betting_net_losses", + "remote_other_betting_net_losses", + "betting_exchange_commission", + "horse_and_dog_pool_betting_net_losses", + ), + ), ), "etb_vat": (_Cell("household", "full_rate_vat_expenditure_rate", "float64"),), "etb_services": ( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/lcfs_consumption.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/lcfs_consumption.py index b78918cb8a..5de24fe562 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/lcfs_consumption.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/lcfs_consumption.py @@ -77,6 +77,7 @@ floored_share, rounded_count, small_cell_share, + support_band, ) from microcosm.build.uk_runtime.support_clip import ( UKSupportClipReceipt, @@ -168,6 +169,68 @@ CONSUMPTION_VARIABLE_RENAMES[f"p6{division:02d}"] for division in range(1, 13) ) BUS_FARE_LCFS_CODES = ("c73212", "c73213", "c73214") +#: The diary lines of the excise goods inside two COICOP totals the chain +#: draws (microcosm#1359), in the adult forms those totals sum, from the LCF +#: 2024-25 User Guide Volume F (SN 9603, +#: ``9603_volume_f_derived_variables_2024_25.xlsx``), sheet "Part 2". Alcohol +#: brought home, COICOP 02.1 (rows 855-885): spirits and liqueurs, wine, +#: fortified wine, cider and perry, alcopops, champagne and sparkling wine, +#: beer and lager. +UK_LCFS_OFF_TRADE_ALCOHOL_CODES = ( + "c21111", + "c21211", + "c21212", + "c21213", + "c21214", + "c21221", + "c21311", +) +#: Tobacco, COICOP 02.2 (rows 890-900): cigarettes, cigars and other tobacco, +#: whose Volume D products are hand-rolling, pipe and chewing tobacco and +#: e-cigarette refills. P602 sums these ten lines and narcotics (c23111; sheet +#: "Part 3", row 1099), which the end-user tab does not carry. +UK_LCFS_TOBACCO_CODES = ("c22111", "c22121", "c22131") +#: The same drinks away from home, and rounds of drinks: COICOP-plus +#: 11.1.1.1.12 to 11.1.1.1.19 (rows 1749-1770), eight of the lines P611 sums +#: (sheet "Part 3", row 1180). +UK_LCFS_ON_TRADE_ALCOHOL_CODES = ( + "cb111c", + "cb111d", + "cb111e", + "cb111f", + "cb111g", + "cb111h", + "cb111i", + "cb111j", +) +#: Gambling stakes, COICOP 09.4.3 games of chance (rows 1631-1649): football +#: pools, bingo, lotteries other than the National and Irish ones, bookmaker +#: and tote betting (with gaming machines, which Volume D files there), the +#: Irish Lottery, and National Lottery scratchcards and draws; seven of the +#: lines P609 sums (sheet "Part 3", row 1162). The winnings lines beside +#: them sit in no total. +UK_LCFS_GAMBLING_STAKE_CODES = ( + "c94311", + "c94312", + "c94313", + "c94314", + "c94315", + "c94316", + "c94319", +) +#: The National Lottery's stake lines, scratchcards (row 1646) and draws (row +#: 1649), which Lottery Duty is charged on, and the stake lines beside them. +UK_LCFS_NATIONAL_LOTTERY_STAKE_CODES = ("c94316", "c94319") +UK_LCFS_OTHER_GAMBLING_STAKE_CODES = tuple( + code + for code in UK_LCFS_GAMBLING_STAKE_CODES + if code not in UK_LCFS_NATIONAL_LOTTERY_STAKE_CODES +) +#: Of those, the lines that carry the other duties: football pools (Pool +#: Betting Duty), bingo, and bookmaker, tote and other betting with the gaming +#: machines Volume D files there (rows 1631, 1634 and 1640). Society lotteries +#: (c94313) and the Irish Lottery (c94315) pay no UK gambling duty. +UK_LCFS_BETTING_AND_GAMING_STAKE_CODES = ("c94311", "c94312", "c94314") #: LCFS fuel, light and power (p537) by fuel, from the LCF 2024-25 User Guide #: Volume F (SN 9603, ``9603_volume_f_derived_variables_2024_25.xlsx``): #: the variable labels on sheet "Part 2" (rows cited below) and the P537 @@ -288,6 +351,9 @@ #: DESNZ sub-national road transport fuel consumption by vehicle and fuel (ktoe), #: the litres audit's per-fuel cars share. UK_LCFS_ROAD_FUEL_BY_VEHICLE_RESOURCE = "desnz_road_fuel_by_vehicle.json" +#: The excise clearances the ``level_excise_quantities`` step levels to +#: (microcosm#1359; PolicyEngine/chronicle#381). +UK_LCFS_EXCISE_FACTS_RESOURCE = "excise_facts.json" UK_LCFS_VENDORED_RESOURCES = ( UK_LCFS_ROAD_FUEL_RESOURCE, UK_LCFS_LICENSED_CARS_RESOURCE, @@ -299,6 +365,7 @@ UK_QEP_ENERGY_PRICES_RESOURCE, UK_LCFS_ROAD_FUEL_LEVEL_RESOURCE, UK_LCFS_ROAD_FUEL_BY_VEHICLE_RESOURCE, + UK_LCFS_EXCISE_FACTS_RESOURCE, ) #: The household road-fuel columns the ``level_road_fuel`` step scales. UK_LCFS_ROAD_FUEL_COLUMNS = ("petrol_spending", "diesel_spending") @@ -316,6 +383,175 @@ } ) LEVEL_ROAD_FUEL_KIND = "level_road_fuel" +LEVEL_EXCISE_QUANTITIES_KIND = "level_excise_quantities" +#: policyengine-uk annualises its weekly tobacco inputs over policyengine-core's +#: 52 weeks (``WEEKS_IN_YEAR``), not the diary's 365.25 / 7. +UK_PE_UK_WEEKS_IN_YEAR = 52 +#: The policyengine-uk household inputs the excise step can write +#: (policyengine-uk 2.145.0, ``variables/input/consumption/alcohol`` and +#: ``tobacco``): litres a year of each alcohol product, cigarettes a week and +#: grams a week of the other tobacco products (microcosm#1359). +UK_LCFS_EXCISE_ALCOHOL_OUTPUTS = ( + "beer_litres", + "cider_litres", + "sparkling_cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", +) +UK_LCFS_EXCISE_TOBACCO_OUTPUTS = ( + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week", + "heated_tobacco_grams_per_week", +) +#: policyengine-uk's share of each alcohol product that qualifies for draught +#: relief; HMRC publishes draught clearances for beer and cider only, so the +#: others stay at the engine's zero. +UK_LCFS_EXCISE_DRAUGHT_OUTPUTS = ( + "beer_draught_share", + "cider_draught_share", +) +#: The gambling duty rates the step divides receipts and liabilities by, each +#: the base year's value of the engine parameter the declaration names +#: (policyengine-uk 2.151.0, PolicyEngine/policyengine-uk#2590). The casino +#: rate is the engine's own effective-rate proxy for Gaming Duty. +UK_LCFS_GAMBLING_RATES = ( + "general_betting", + "pool_betting", + "remote_gaming", + "machine_games_lower", + "machine_games_standard", + "machine_games_higher", + "bingo", + "lottery", + "casino", +) +#: The gambling inputs each with a duty of its own: the published series its +#: national base comes from, the series' dimension value and the rate that +#: turns that series into the base. HMRC's receipts by duty divided by the +#: rate give the dutiable base the duty was charged on; Machine Games Duty's +#: declared liabilities by rate band divided by the band's rate give each +#: band's net takings; Gaming Duty's receipts divided by the engine's +#: effective-rate proxy give the casino gaming yield that proxy was taken from. +UK_LCFS_GAMBLING_BASES: Mapping[str, tuple[str, str, str]] = { + "remote_gaming_net_losses": ("receipts", "remote_gaming_duty", "remote_gaming"), + "pool_betting_net_receipts": ("receipts", "pool_betting_duty", "pool_betting"), + "bingo_net_receipts": ("receipts", "bingo_duty", "bingo"), + "national_lottery_ticket_spending": ("receipts", "lottery_duty", "lottery"), + "land_based_casino_net_losses": ("receipts", "gaming_duty", "casino"), + "machine_games_lower_rate_net_takings": ( + "machine_games_liabilities", + "lower_rate", + "machine_games_lower", + ), + "machine_games_standard_rate_net_takings": ( + "machine_games_liabilities", + "standard_rate", + "machine_games_standard", + ), + "machine_games_higher_rate_net_takings": ( + "machine_games_liabilities", + "higher_rate", + "machine_games_higher", + ), +} +#: The stakes each gambling base is shared out by: Lottery Duty's base by the +#: National Lottery's stakes, every other base by the betting and gaming +#: stakes (football pools, bingo, bookmakers and machines), so neither follows +#: the other's players and the society and Irish lotteries carry no base. +UK_LCFS_NATIONAL_LOTTERY_INPUT = "national_lottery_ticket_spending" +UK_LCFS_NATIONAL_LOTTERY_KEY = "national_lottery" +UK_LCFS_BETTING_AND_GAMING_KEY = "betting_and_gaming" +#: General Betting Duty's base (its receipts over the fixed-odds rate, the +#: rate of every part it is split into in the base year) is split by the +#: Gambling Commission's gross gambling yield for Great Britain: (sector, +#: activity, betting event) cells. Remote fixed-odds betting is split +#: between horse racing and the rest by the horse-racing share of all remote +#: betting yield, since the Commission publishes no activity by event; its +#: horse racing is not only UK racing, which is the part the 2027 remote rate +#: leaves out, and its pool betting can hold pools on other events, which pay +#: Pool Betting Duty. On-course bets are not dutiable, and spread betting, +#: which the Commission does not regulate, has no published base, so both +#: inputs stay at the engine's zero. +UK_LCFS_GENERAL_BETTING_YIELD_CELLS: Mapping[str, tuple[str, str, str]] = { + "over_the_counter": ("betting_non_remote", "off_course_over_the_counter", "all"), + "remote_fixed_odds": ("betting_remote", "betting", "all"), + "exchange": ("betting_remote", "betting_exchange", "all"), + "pools_non_remote": ("betting_non_remote", "pool_betting", "all"), + "pools_remote": ("betting_remote", "pool_betting", "all"), + "remote_horses": ("betting_remote", "all", "horses"), + "remote_all_events": ("betting_remote", "all", "all"), +} +UK_LCFS_GENERAL_BETTING_OUTPUTS = ( + "land_based_fixed_odds_betting_net_losses", + "remote_uk_horseracing_betting_net_losses", + "remote_other_betting_net_losses", + "betting_exchange_commission", + "horse_and_dog_pool_betting_net_losses", +) +UK_LCFS_EXCISE_GAMBLING_OUTPUTS = ( + *UK_LCFS_GAMBLING_BASES, + *UK_LCFS_GENERAL_BETTING_OUTPUTS, +) +UK_LCFS_EXCISE_OUTPUT_COLUMNS = ( + *UK_LCFS_EXCISE_ALCOHOL_OUTPUTS, + *UK_LCFS_EXCISE_TOBACCO_OUTPUTS, + *UK_LCFS_EXCISE_DRAUGHT_OUTPUTS, + *UK_LCFS_EXCISE_GAMBLING_OUTPUTS, +) +#: The units Chronicle stores the clearances in (it applies the publisher's +#: scale, so OBR's thousand hectolitres of alcohol arrive as litres and keep +#: the published unit only as a dimension; PolicyEngine/chronicle#381), as +#: engine units per stored unit: litres (of pure alcohol, which the declared +#: strength turns into litres of the product, or of the product itself), +#: cigarettes, grams. Each row's own unit must be the declared one. +UK_LCFS_EXCISE_ALCOHOL_UNIT = "litre_of_pure_alcohol" +UK_LCFS_EXCISE_UNITS: Mapping[str, float] = { + UK_LCFS_EXCISE_ALCOHOL_UNIT: 1.0, + "litre": 1.0, + "stick": 1.0, + "kilogram": 1.0e3, +} +#: The unit of the gambling series: pounds a year, the engine's own. +UK_LCFS_EXCISE_GAMBLING_UNIT = "gbp" +#: The units each engine input may be declared in. +UK_LCFS_EXCISE_OUTPUT_UNITS: Mapping[str, tuple[str, ...]] = { + **{ + column: (UK_LCFS_EXCISE_ALCOHOL_UNIT, "litre") + for column in UK_LCFS_EXCISE_ALCOHOL_OUTPUTS + }, + "cigarettes_per_week": ("stick",), + **{ + column: ("kilogram",) + for column in UK_LCFS_EXCISE_TOBACCO_OUTPUTS + if column != "cigarettes_per_week" + }, +} +#: How alcohol's off- and on-trade spending become each household's part of +#: the national volume: in proportion to the two together, as if a pound +#: bought as much alcohol in a pub as in a shop, or each channel's published +#: share of the volume to that channel's spenders. +#: +#: The stage declares spending (María's ruling of 2026-10-23, microcosm#1359). +#: No on-trade share of volume can be archived: MESAS, which publishes one, is +#: a dashboard of NielsenIQ and Circana data with no fixed file. The rule moves +#: no total, since the clearances set each level, but it leans towards +#: drinkers in pubs, where a unit of alcohol costs about three times what it +#: does in a shop. On the LCFS 2024-25 diary the on-trade is about 43 % of +#: alcohol spending, against roughly a quarter of the pure alcohol MESAS +#: counts as sold in England and Wales in 2024. Measured against giving that +#: quarter of the volume to on-trade spenders and the rest to off-trade +#: spenders, a pound spent in a pub carries about 1.6 times its volume and a +#: pound spent in a shop about 0.8 times. About a tenth of the volume, and of +#: the duty, sits with other households; the bottom three income deciles bear +#: about 7 % too little of it and the top decile about 7 % too much, because +#: the on-trade's part of alcohol spending rises with income. +UK_LCFS_ALCOHOL_VOLUME_BY_SPENDING = "spending" +UK_LCFS_ALCOHOL_VOLUME_BY_CHANNEL = "published_on_trade_share" +#: The excise step's receipt key in the stage evidence. +UK_LCFS_EXCISE_QUANTITIES_RECEIPT = "excise_quantities" #: The LCFS diary lines inside COICOP 07.2.2 beside petrol (c72211) and diesel #: (c72212): other motor fuels and oils, which ONS's 07.2.2 also carries. UK_LCFS_OTHER_ROAD_FUEL_CODES = ("c72213",) @@ -418,6 +654,67 @@ "liquid_fuel_consumption", "solid_fuel_consumption", ) +#: The shares the chain draws after its spend targets (microcosm#1359). Each +#: splits a COICOP total the chain has drawn, so its parts sum to the drawn +#: total and every total, the VAT base with them, keeps its draw; appended +#: after the spend targets, they move none of those draws either. Tobacco is +#: a share of the off-trade alcohol and tobacco that make up P602, so +#: off-trade alcohol is the rest of that total. On-trade alcohol is a share of +#: restaurants and hotels (P611), whose published total the 2024-25 tab stores +#: to one decimal place, so its lines can pass it by pennies and the share is +#: clipped at one. Gambling stakes are a share of recreation (P609), stored +#: the same way, and are split in turn: the National Lottery's share of the +#: stakes, then the betting and gaming share of the rest, which leaves the +#: society and Irish lotteries no duty base. Each maps to the total it splits +#: (a drawn total, or the stakes an earlier share gives), the diary lines over +#: it and the diary lines (or published total) under it. +UK_LCFS_TOBACCO_SHARE = "tobacco_share_of_alcohol_and_tobacco" +UK_LCFS_ON_TRADE_ALCOHOL_SHARE = "on_trade_alcohol_share_of_restaurants_and_hotels" +UK_LCFS_GAMBLING_SHARE = "gambling_stakes_share_of_recreation" +UK_LCFS_NATIONAL_LOTTERY_SHARE = "national_lottery_share_of_gambling_stakes" +UK_LCFS_BETTING_AND_GAMING_SHARE = "betting_and_gaming_share_of_other_gambling_stakes" +#: The spending the shares give, scratch columns no table carries. +UK_LCFS_TOBACCO_SPENDING = "tobacco_spending" +UK_LCFS_OFF_TRADE_ALCOHOL_SPENDING = "off_trade_alcohol_spending" +UK_LCFS_ON_TRADE_ALCOHOL_SPENDING = "on_trade_alcohol_spending" +UK_LCFS_GAMBLING_SPENDING = "gambling_stakes" +UK_LCFS_NATIONAL_LOTTERY_SPENDING = "national_lottery_stakes" +UK_LCFS_OTHER_GAMBLING_SPENDING = "other_gambling_stakes" +UK_LCFS_BETTING_AND_GAMING_SPENDING = "betting_and_gaming_stakes" +#: The stakes a share can split: scratch, so the donor has no published total +#: of them and the share's denominator is its diary lines. +UK_LCFS_EXCISE_SPENDING_TOTALS = frozenset( + {UK_LCFS_GAMBLING_SPENDING, UK_LCFS_OTHER_GAMBLING_SPENDING} +) +UK_LCFS_EXCISE_SHARES: Mapping[str, tuple[str, tuple[str, ...], tuple[str, ...]]] = { + UK_LCFS_TOBACCO_SHARE: ( + "alcohol_and_tobacco_consumption", + UK_LCFS_TOBACCO_CODES, + (*UK_LCFS_OFF_TRADE_ALCOHOL_CODES, *UK_LCFS_TOBACCO_CODES), + ), + UK_LCFS_ON_TRADE_ALCOHOL_SHARE: ( + "restaurants_and_hotels_consumption", + UK_LCFS_ON_TRADE_ALCOHOL_CODES, + ("p611",), + ), + UK_LCFS_GAMBLING_SHARE: ( + "recreation_consumption", + UK_LCFS_GAMBLING_STAKE_CODES, + ("p609",), + ), + UK_LCFS_NATIONAL_LOTTERY_SHARE: ( + UK_LCFS_GAMBLING_SPENDING, + UK_LCFS_NATIONAL_LOTTERY_STAKE_CODES, + UK_LCFS_GAMBLING_STAKE_CODES, + ), + UK_LCFS_BETTING_AND_GAMING_SHARE: ( + UK_LCFS_OTHER_GAMBLING_SPENDING, + UK_LCFS_BETTING_AND_GAMING_STAKE_CODES, + UK_LCFS_OTHER_GAMBLING_STAKE_CODES, + ), +} +#: ``UKLCFSConsumptionResult`` evidence key of the shares' report-only receipt. +UK_LCFS_EXCISE_SHARES_RECEIPT = "excise_shares" RECOMPOSE_FROM_REMAINDER_KIND = "recompose_from_remainder" #: The COICOP totals that contain columns the stage levels (microcosm#1113): #: each maps to the chain draws subtracted from its own draw to leave its @@ -464,10 +761,29 @@ for column in subtracted ) ) +#: The excise inputs the stage's declared ``level_excise_quantities`` step +#: writes (microcosm#1359): litres of the five alcohol products HMRC publishes +#: clearances of, the beer and cider draught shares, the four tobacco products +#: and every gambling base. Sparkling cider, heated tobacco and spread betting +#: have no published quantity of their own and keep the engine's zero. +UK_LCFS_EXCISE_DECLARED_OUTPUTS = ( + "beer_litres", + "cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", + *UK_LCFS_EXCISE_DRAUGHT_OUTPUTS, + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week", + *UK_LCFS_EXCISE_GAMBLING_OUTPUTS, +) UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS = ( *UK_LCFS_CONSUMPTION_TARGET_COLUMNS, "has_fuel_consumption", UK_LCFS_PREPAYMENT_METER_COLUMN, + *UK_LCFS_EXCISE_DECLARED_OUTPUTS, ) UK_LCFS_CONSUMPTION_NONNEGATIVE_OUTPUT_COLUMNS = UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS UK_LCFS_CONSUMPTION_FIT_NAME = "uk_lcfs_2024_25_consumption" @@ -493,6 +809,8 @@ class UKLCFSConsumptionResult: road_fuel_level: Mapping[str, Any] | None = None recomposed_totals: Mapping[str, Any] | None = None division_capture: Mapping[str, Any] | None = None + excise_shares: Mapping[str, Any] | None = None + excise_quantities: Mapping[str, Any] | None = None def evidence(self) -> dict[str, object]: evidence: dict[str, object] = { @@ -525,6 +843,10 @@ def evidence(self) -> dict[str, object]: evidence["recomposed_totals"] = dict(self.recomposed_totals) if self.division_capture is not None: evidence["division_capture"] = dict(self.division_capture) + if self.excise_shares is not None: + evidence[UK_LCFS_EXCISE_SHARES_RECEIPT] = dict(self.excise_shares) + if self.excise_quantities is not None: + evidence[UK_LCFS_EXCISE_QUANTITIES_RECEIPT] = dict(self.excise_quantities) return evidence @@ -577,12 +899,14 @@ def __call__(self, frame: Frame) -> Frame: ) uprating_factors, uprating_receipt = lcfs_donor_uprating(self.stage) energy = lcfs_energy_pricing(self.stage) + shares = lcfs_donor_shares(self.stage) donor = clean_lcfs_consumption_table( lcfs_person, lcfs_household, uprating=uprating_factors, energy=energy, donor_rake_iterations=_donor_energy_rake_iterations(self.stage), + shares=shares, ) require_refused_unmapped_codes(self.stage) donor, donor_floor_receipt = floor_negative_donor_consumption( @@ -612,11 +936,15 @@ def __call__(self, frame: Frame) -> Frame: seed=_operation_seed(self.stage, "fit_weighted_qrf_chain"), n_estimators=_qrf_n_estimators(self.stage), record_ids=frame.table("household")["household_id"].to_numpy(), + targets=lcfs_chain_targets(self.stage, shares), + gate_calibration=_qrf_gate_calibration(self.stage), ) clip_result = support_clip_to_donor( imputation.draws, donor, exempt=support_clip_exempt(self.stage) ) - household_draws = clip_result.clipped + household_draws, shares_outside = clip_excise_shares( + clip_result.clipped, shares + ) prepayment = lcfs_prepayment_meter( self.stage, donor=donor, @@ -706,6 +1034,20 @@ def __call__(self, frame: Frame) -> Frame: litres_audit = fuel_litres_audit( household_draws, weights=weights, stage=self.stage ) + excise_shares = ( + excise_shares_receipt( + household_draws, + shares=shares, + weights=weights, + donor_receipt=donor.attrs[UK_LCFS_EXCISE_SHARES_RECEIPT], + outside=shares_outside, + ) + if shares + else None + ) + quantities, excise_quantities = lcfs_excise_quantities( + self.stage, household_draws, weights=weights, shares=shares + ) household = frame.table("household").copy() for column in UK_LCFS_CONSUMPTION_TARGET_COLUMNS: household[column] = household_draws[column].to_numpy() @@ -714,6 +1056,13 @@ def __call__(self, frame: Frame) -> Frame: ) if prepayment is not None: household[UK_LCFS_PREPAYMENT_METER_COLUMN] = prepayment.flags + if quantities is not None: + # In the declared output order, which the stage's outputs and the + # graph's typed cells follow; an undeclared input fails here. + for column in sorted( + quantities.columns, key=UK_LCFS_EXCISE_DECLARED_OUTPUTS.index + ): + household[column] = quantities[column].to_numpy(dtype=float) result = uk_national_frame( person=frame.table("person").copy(), benunit=frame.table("benunit").copy(), @@ -751,6 +1100,8 @@ def __call__(self, frame: Frame) -> Frame: road_fuel_level=road_fuel_level_receipt, recomposed_totals=recomposed_totals_receipt, division_capture=capture, + excise_shares=excise_shares, + excise_quantities=excise_quantities, ) return result @@ -1779,12 +2130,11 @@ def level_road_fuel( columns = list(UK_LCFS_ROAD_FUEL_COLUMNS) weight_values = np.asarray(weights, dtype=float) spend = household_draws[columns].to_numpy(dtype=float) - before = float(np.dot(weight_values, spend.sum(axis=1))) - if not np.isfinite(before) or before <= 0: - raise ValueError("the frame draws no road-fuel spend to level.") - factor = level.level / before + scaled, before, factor = _scale_to_level( + spend, weight_values, level.level, what="road-fuel spend" + ) result = household_draws.copy() - result[columns] = spend * factor + result[columns] = scaled after = result[columns].to_numpy(dtype=float) petrol = float(np.dot(weight_values, after[:, 0])) receipt = { @@ -1815,6 +2165,626 @@ def lcfs_road_fuel_level( return level_road_fuel(household_draws, level=level, weights=weights) +def _scale_to_level( + values: np.ndarray, weights: np.ndarray, level: float, *, what: str +) -> tuple[np.ndarray, float, float]: + """Scale ``values`` by the one factor that takes their weighted total to ``level``. + + ``values`` is one column, or several scaled together by the same factor + so their mix is kept. Returns the scaled values, the weighted total before + and the factor; a frame with nothing to scale is refused. + """ + + before = float(np.dot(weights, values if values.ndim == 1 else values.sum(axis=1))) + if not np.isfinite(before) or before <= 0: + raise ValueError(f"the frame draws no {what} to level.") + factor = level / before + return values * factor, before, factor + + +@dataclass(frozen=True) +class ExciseQuantityLevel: + """One engine input's national quantity a year, from its published rows. + + ``annual`` is in the engine's units a year: litres of the product, or + cigarettes, or grams, or pounds; the step divides the weekly tobacco + inputs by ``UK_PE_UK_WEEKS_IN_YEAR`` after levelling. ``key`` is the + household spending the quantity is shared out by: alcohol, tobacco, the + National Lottery's stakes or the betting and gaming stakes. + """ + + column: str + annual: float + key: str + receipt: Mapping[str, Any] + + +@dataclass(frozen=True) +class AlcoholVolumeWeights: + """How off- and on-trade alcohol spending share the national volume.""" + + rule: str + on_trade_share: float | None + receipt: Mapping[str, Any] + + +@dataclass(frozen=True) +class ExciseLevels: + """Everything the step levels to: quantities, draught shares, the volume rule.""" + + quantities: Mapping[str, ExciseQuantityLevel] + draught: Mapping[str, Mapping[str, Any]] + volume: AlcoholVolumeWeights + + +def excise_quantities_operation(stage: SourceStageSpec) -> Mapping[str, Any] | None: + """The stage's declared ``level_excise_quantities`` parameters, if any.""" + + for operation in stage.operations: + if operation.kind == LEVEL_EXCISE_QUANTITIES_KIND: + return {"kind": operation.kind, **operation.parameters} + return None + + +def _one_vendored_value( + resource: str, + parameters: Mapping[str, Any], + declared: Mapping[str, Any], + *, + what: str, + unit: str | None = None, +) -> tuple[float, dict[str, Any]]: + """The one published value a declaration names, for the step's fiscal year. + + With ``unit``, the row must be stored in it: a value read in another unit + would be off by the publisher's scale. A declaration may name its own + ``geography_id`` in place of the step's. + """ + + concept = str(declared.get("concept") or "") + dimensions = declared.get("dimensions") or {} + if not concept or not isinstance(dimensions, Mapping): + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {what} must name a concept and " + "its dimensions." + ) + geography = str(declared.get("geography_id") or parameters["geography_id"]) + rows = vendored_rows( + resource, + fiscal_start=str(parameters["fiscal_start"]), + concept=concept, + period_type="fiscal_year", + period_value=int(parameters["period_value"]), + geography_id=geography, + dimensions=dict(dimensions), + ) + if len(rows) != 1: + raise ValueError( + f"{resource}: expected one {concept} row {dict(dimensions)} for fiscal " + f"{parameters['period_value']} in {geography}, found {len(rows)}." + ) + if unit is not None and rows[0].get("unit") != unit: + raise ValueError( + f"{resource}: {what}'s row is stored in {rows[0].get('unit')!r}, not the " + f"declared {unit!r}." + ) + value = float(rows[0]["value"]) + if not np.isfinite(value) or value < 0: + raise ValueError(f"{resource}: {what}'s published value must be nonnegative.") + receipt = { + "concept": concept, + "dimensions": dict(dimensions), + "geography_id": geography, + "source_record_id": str(rows[0].get("source_record_id", "")), + "published": value, + } + return value, receipt + + +def _declared_rate(declared: object, *, what: str) -> tuple[float, dict[str, Any]]: + """A declared divisor: its value in (0, 1] and the engine parameter it mirrors.""" + + if not isinstance(declared, Mapping) or not declared.get("parameter_path"): + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {what} must give its value and the " + "engine parameter it mirrors." + ) + value = float(declared.get("value")) + if not 0.0 < value <= 1.0: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {what} {value} is outside (0, 1]." + ) + return value, dict(declared) + + +def excise_levels(parameters: Mapping[str, Any]) -> ExciseLevels: + """Resolve everything the declared step levels to from the vendored rows. + + ``outputs`` are the alcohol and tobacco inputs. Each names its published + row (concept and dimensions, for the declared fiscal year and geography), + the unit the row is stored in, the share of the row it takes and, for + litres of pure alcohol, the strength that turns them into litres of the + product: the declared value, with the engine parameter it mirrors, which + policyengine-uk multiplies back. Outputs that share a row must take all + of it between them. ``draught_shares`` are published ratios the step + writes as they are; ``gambling`` declares the series and rates the + gambling bases come from (``gambling_levels``); ``alcohol_volume_weights`` + declares how off- and on-trade spending share the alcohol volume. + """ + + resource = str(parameters.get("resource") or "") + if resource != UK_LCFS_EXCISE_FACTS_RESOURCE: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND} must read " + f"{UK_LCFS_EXCISE_FACTS_RESOURCE!r}, not {resource!r}." + ) + if str(parameters.get("period_type")) != "fiscal_year": + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND} levels to fiscal-year clearances, the " + "year policyengine-uk charges excise over." + ) + if parameters.get("weeks_per_year") != UK_PE_UK_WEEKS_IN_YEAR: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND} must declare weeks_per_year: " + f"{UK_PE_UK_WEEKS_IN_YEAR}, policyengine-uk's own." + ) + for key in ("period_value", "fiscal_start", "geography_id"): + if parameters.get(key) in (None, ""): + raise ValueError(f"{LEVEL_EXCISE_QUANTITIES_KIND} must declare {key}.") + outputs = parameters.get("outputs") + if not isinstance(outputs, Mapping) or not outputs: + raise ValueError(f"{LEVEL_EXCISE_QUANTITIES_KIND} declares no outputs.") + levels: dict[str, ExciseQuantityLevel] = {} + taken: dict[str, float] = {} + for column, declared in outputs.items(): + if column not in UK_LCFS_EXCISE_OUTPUT_UNITS: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND} cannot write {column!r} as a " + "quantity; its quantities are the policyengine-uk inputs " + f"{tuple(UK_LCFS_EXCISE_OUTPUT_UNITS)}." + ) + if not isinstance(declared, Mapping): + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {column} is not a mapping." + ) + unit = str(declared.get("unit") or "") + if unit not in UK_LCFS_EXCISE_OUTPUT_UNITS[column]: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {column} is declared in {unit!r}, " + f"not one of {UK_LCFS_EXCISE_OUTPUT_UNITS[column]}." + ) + share = float(declared.get("share", 1.0)) + if not 0.0 < share <= 1.0: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {column} takes a share {share} " + "outside (0, 1]." + ) + strength = declared.get("strength") + if (unit == UK_LCFS_EXCISE_ALCOHOL_UNIT) != (strength is not None): + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {column} needs a strength exactly " + "when it is declared in litres of pure alcohol." + ) + divisor = 1.0 + if strength is not None: + divisor, _ = _declared_rate(strength, what=f"{column}'s strength") + published, receipt = _one_vendored_value( + resource, parameters, declared, what=column, unit=unit + ) + if published <= 0: + raise ValueError( + f"{resource}: {column}'s published quantity must be positive." + ) + row = receipt["source_record_id"] + taken[row] = taken.get(row, 0.0) + share + annual = published * UK_LCFS_EXCISE_UNITS[unit] * share / divisor + levels[column] = ExciseQuantityLevel( + column, + annual, + "alcohol" if column in UK_LCFS_EXCISE_ALCOHOL_OUTPUTS else "tobacco", + { + **receipt, + "unit": unit, + "share": share, + "strength": None if strength is None else dict(strength), + "annual_level": annual, + }, + ) + partial = {row: total for row, total in taken.items() if abs(total - 1.0) > 1e-9} + if partial: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: the outputs take {partial} of their " + "published rows, not all of each." + ) + if "gambling" in parameters: + levels.update(gambling_levels(resource, parameters)) + return ExciseLevels( + quantities=levels, + draught=draught_shares(resource, parameters), + volume=alcohol_volume_weights(resource, parameters), + ) + + +def _summed_rows( + resource: str, + parameters: Mapping[str, Any], + entry: Mapping[str, Any], + *, + side: str, + what: str, + unit: str, +) -> tuple[float, list[dict[str, Any]]]: + """The sum of the published rows a ratio's ``side`` names, and their receipts.""" + + cells = entry.get(side) + if not isinstance(cells, list | tuple) or not cells: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {what} declares no {side} rows." + ) + read = [ + _one_vendored_value( + resource, + parameters, + {"concept": entry.get("concept"), "dimensions": cell}, + what=f"{what} {side}", + unit=unit, + ) + for cell in cells + ] + return sum(value for value, _ in read), [receipt for _, receipt in read] + + +def draught_shares( + resource: str, parameters: Mapping[str, Any] +) -> dict[str, dict[str, Any]]: + """Each declared draught share: its published numerator rows over its total. + + HMRC splits beer and cider clearances by the relief they took; the + share is the clearances under draught relief, alone or with small + producer relief, over all of that product's clearances, in litres of + pure alcohol. policyengine-uk applies it to the household's litres, so + the strength the litres were divided by cancels out of it. + """ + + declared = parameters.get("draught_shares") or {} + if not isinstance(declared, Mapping): + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: draught_shares is not a mapping." + ) + shares: dict[str, dict[str, Any]] = {} + for column, entry in declared.items(): + if column not in UK_LCFS_EXCISE_DRAUGHT_OUTPUTS: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND} cannot write {column!r} as a draught " + f"share; it writes {UK_LCFS_EXCISE_DRAUGHT_OUTPUTS}." + ) + if not isinstance(entry, Mapping): + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {column} is not a mapping." + ) + unit = str(entry.get("unit") or "") + if unit != UK_LCFS_EXCISE_ALCOHOL_UNIT: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: {column} must be declared in " + f"{UK_LCFS_EXCISE_ALCOHOL_UNIT!r}, not {unit!r}." + ) + + numerator, numerator_rows = _summed_rows( + resource, parameters, entry, side="numerator", what=column, unit=unit + ) + denominator, denominator_rows = _summed_rows( + resource, parameters, entry, side="denominator", what=column, unit=unit + ) + if denominator <= 0 or not 0.0 <= numerator <= denominator: + raise ValueError( + f"{resource}: {column}'s published rows do not give a share in [0, 1]." + ) + shares[column] = { + "share": numerator / denominator, + "numerator": numerator_rows, + "denominator": denominator_rows, + } + return shares + + +def gambling_levels( + resource: str, parameters: Mapping[str, Any] +) -> dict[str, ExciseQuantityLevel]: + """Each gambling input's national base a year, in pounds (microcosm#1359). + + The declaration names the published series (HMRC's betting and gaming + receipts by duty, Machine Games Duty liabilities by rate band and the + Gambling Commission's gross gambling yield, with its own geography) and + the rates, each the base year's value of the engine parameter it names. + ``UK_LCFS_GAMBLING_BASES`` turns a series into each single-duty input's + base; General Betting Duty's base is split over its inputs by the yield + cells of ``UK_LCFS_GENERAL_BETTING_YIELD_CELLS``. Charged at the engine's + rates, the bases give back the published receipts and liabilities, as + the clearances give back alcohol and tobacco duty. + """ + + declared = parameters.get("gambling") + if not isinstance(declared, Mapping) or set(declared) != { + "receipts", + "machine_games_liabilities", + "yield", + "rates", + }: + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: gambling must declare receipts, " + "machine_games_liabilities, yield and rates." + ) + rates_declared = declared["rates"] + if not isinstance(rates_declared, Mapping) or set(rates_declared) != set( + UK_LCFS_GAMBLING_RATES + ): + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: gambling rates must be " + f"{UK_LCFS_GAMBLING_RATES}." + ) + rates = { + name: _declared_rate(rates_declared[name], what=f"the {name} rate") + for name in UK_LCFS_GAMBLING_RATES + } + for name in ("receipts", "machine_games_liabilities", "yield"): + if not isinstance(declared[name], Mapping): + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND}: gambling {name} is not a mapping." + ) + dimension = {"receipts": "gambling_duty", "machine_games_liabilities": "mgd_rate"} + + def cell(name: str, dimensions: Mapping[str, str]) -> dict[str, Any]: + # A series may pin dimensions of its own, such as the accounting basis. + source = declared[name] + pinned = dict(source.get("dimensions") or {}) + return {**dict(source), "dimensions": {**pinned, **dimensions}} + + def series(name: str, value: str) -> tuple[float, dict[str, Any]]: + return _one_vendored_value( + resource, + parameters, + cell(name, {dimension[name]: value}), + what=f"{name} {value}", + unit=UK_LCFS_EXCISE_GAMBLING_UNIT, + ) + + levels: dict[str, ExciseQuantityLevel] = {} + for column, (source, value, rate_name) in UK_LCFS_GAMBLING_BASES.items(): + published, receipt = series(source, value) + rate, rate_receipt = rates[rate_name] + annual = published / rate + levels[column] = ExciseQuantityLevel( + column, + annual, + UK_LCFS_NATIONAL_LOTTERY_KEY + if column == UK_LCFS_NATIONAL_LOTTERY_INPUT + else UK_LCFS_BETTING_AND_GAMING_KEY, + { + **receipt, + "unit": UK_LCFS_EXCISE_GAMBLING_UNIT, + "rate": rate_receipt, + "share": 1.0, + "annual_level": annual, + }, + ) + receipts, receipt = series("receipts", "general_betting_duty") + rate, rate_receipt = rates["general_betting"] + base = receipts / rate + cells: dict[str, tuple[float, dict[str, Any]]] = {} + for name, (sector, activity, event) in UK_LCFS_GENERAL_BETTING_YIELD_CELLS.items(): + cells[name] = _one_vendored_value( + resource, + parameters, + cell( + "yield", + { + "gambling_sector": sector, + "gambling_activity": activity, + "betting_event": event, + }, + ), + what=f"the {name} yield", + unit=UK_LCFS_EXCISE_GAMBLING_UNIT, + ) + value = {name: cell[0] for name, cell in cells.items()} + if value["remote_all_events"] <= 0: + raise ValueError(f"{resource}: remote betting has no published yield.") + horses = value["remote_horses"] / value["remote_all_events"] + parts = { + "land_based_fixed_odds_betting_net_losses": value["over_the_counter"], + "remote_uk_horseracing_betting_net_losses": value["remote_fixed_odds"] * horses, + "remote_other_betting_net_losses": value["remote_fixed_odds"] * (1.0 - horses), + "betting_exchange_commission": value["exchange"], + "horse_and_dog_pool_betting_net_losses": value["pools_non_remote"] + + value["pools_remote"], + } + whole = sum(parts.values()) + if whole <= 0: + raise ValueError(f"{resource}: betting has no published yield to split.") + yield_rows = {name: cell[1] for name, cell in cells.items()} + for column in UK_LCFS_GENERAL_BETTING_OUTPUTS: + share = parts[column] / whole + annual = base * share + levels[column] = ExciseQuantityLevel( + column, + annual, + UK_LCFS_BETTING_AND_GAMING_KEY, + { + **receipt, + "unit": UK_LCFS_EXCISE_GAMBLING_UNIT, + "rate": rate_receipt, + "share": share, + "split_by": yield_rows, + "remote_horse_racing_share": horses, + "annual_level": annual, + }, + ) + return levels + + +def alcohol_volume_weights( + resource: str, parameters: Mapping[str, Any] +) -> AlcoholVolumeWeights: + """The declared rule that shares alcohol volume between the two channels.""" + + declared = parameters.get("alcohol_volume_weights") + if not isinstance(declared, Mapping): + raise ValueError( + f"{LEVEL_EXCISE_QUANTITIES_KIND} must declare alcohol_volume_weights." + ) + rule = str(declared.get("rule") or "") + if rule == UK_LCFS_ALCOHOL_VOLUME_BY_SPENDING: + return AlcoholVolumeWeights(rule, None, {"rule": rule}) + if rule != UK_LCFS_ALCOHOL_VOLUME_BY_CHANNEL: + raise ValueError( + f"unsupported {LEVEL_EXCISE_QUANTITIES_KIND} alcohol_volume_weights " + f"rule {rule!r}." + ) + share, receipt = _one_vendored_value( + resource, parameters, declared, what="the on-trade share" + ) + if not 0.0 < share < 1.0: + raise ValueError(f"{resource}: the on-trade share {share} is outside (0, 1).") + return AlcoholVolumeWeights(rule, share, {"rule": rule, **receipt}) + + +def level_excise_quantities( + household_draws: pd.DataFrame, + *, + levels: ExciseLevels, + weights: Sequence[float], +) -> tuple[pd.DataFrame, dict[str, Any]]: + """Give each household its part of each national quantity, by its spending. + + Each household's alcohol inputs are the national volumes in proportion to + its alcohol spending, its tobacco inputs the national clearances in + proportion to its tobacco spending, its National Lottery ticket spending + the national base in proportion to its National Lottery stakes and its + other gambling inputs the national bases in proportion to its betting and + gaming stakes, all at prior weights: one factor per input, the + ``level_road_fuel`` scaling, so the frame's weighted total is the + published quantity. Under the published on-trade share each channel's + volume goes to that channel's spenders; by spending, a pound buys the same + volume in either, which leans the alcohol inputs towards drinkers in pubs + (``UK_LCFS_ALCOHOL_VOLUME_BY_SPENDING`` records by how much). The betting + and gaming bases all follow the same stakes, since the diary cannot tell + remote from land-based play. Weekly inputs are the annual quantity over + the engine's 52 weeks; a draught share is written as published. The + spending is the drawn shares of the drawn totals, so no total moves + (microcosm#1359). + """ + + weight_values = np.asarray(weights, dtype=float) + mass = float(weight_values.sum()) + spending = excise_spending(household_draws) + off_trade = spending[UK_LCFS_OFF_TRADE_ALCOHOL_SPENDING].to_numpy(dtype=float) + on_trade = spending[UK_LCFS_ON_TRADE_ALCOHOL_SPENDING].to_numpy(dtype=float) + tobacco = spending[UK_LCFS_TOBACCO_SPENDING].to_numpy(dtype=float) + stakes = spending[UK_LCFS_GAMBLING_SPENDING].to_numpy(dtype=float) + lottery = spending[UK_LCFS_NATIONAL_LOTTERY_SPENDING].to_numpy(dtype=float) + other_stakes = spending[UK_LCFS_OTHER_GAMBLING_SPENDING].to_numpy(dtype=float) + betting = spending[UK_LCFS_BETTING_AND_GAMING_SPENDING].to_numpy(dtype=float) + volume = levels.volume + if volume.rule == UK_LCFS_ALCOHOL_VOLUME_BY_SPENDING: + alcohol = off_trade + on_trade + else: + totals = (float(weight_values @ off_trade), float(weight_values @ on_trade)) + if min(totals) <= 0: + raise ValueError("the frame draws no alcohol in one of the two channels.") + share = float(volume.on_trade_share) + alcohol = (1.0 - share) * off_trade / totals[0] + share * on_trade / totals[1] + keys = { + "alcohol": alcohol, + "tobacco": tobacco, + UK_LCFS_NATIONAL_LOTTERY_KEY: lottery, + UK_LCFS_BETTING_AND_GAMING_KEY: betting, + } + quantities = pd.DataFrame(index=household_draws.index) + outputs: dict[str, Any] = {} + for column, level in levels.quantities.items(): + annual, before, factor = _scale_to_level( + keys[level.key], weight_values, level.annual, what=f"{level.key} spending" + ) + weekly = column in UK_LCFS_EXCISE_TOBACCO_OUTPUTS + quantities[column] = annual / UK_PE_UK_WEEKS_IN_YEAR if weekly else annual + stored = quantities[column].to_numpy(dtype=float) + outputs[column] = { + **dict(level.receipt), + "key": level.key, + "key_total": before, + "factor": float(factor), + "stored_per": "week" if weekly else "year", + "frame_annual_total": float(weight_values @ stored) + * (UK_PE_UK_WEEKS_IN_YEAR if weekly else 1.0), + "positive_share": float(weight_values[stored > 0].sum() / mass), + } + for column, draught in levels.draught.items(): + quantities[column] = float(draught["share"]) + components = { + name: { + "weighted_total": float(weight_values @ values), + "positive_share": float(weight_values[values > 0].sum() / mass), + } + for name, values in ( + (UK_LCFS_TOBACCO_SPENDING, tobacco), + (UK_LCFS_OFF_TRADE_ALCOHOL_SPENDING, off_trade), + (UK_LCFS_ON_TRADE_ALCOHOL_SPENDING, on_trade), + (UK_LCFS_GAMBLING_SPENDING, stakes), + (UK_LCFS_NATIONAL_LOTTERY_SPENDING, lottery), + (UK_LCFS_OTHER_GAMBLING_SPENDING, other_stakes), + (UK_LCFS_BETTING_AND_GAMING_SPENDING, betting), + ) + } + receipt = { + "operation": LEVEL_EXCISE_QUANTITIES_KIND, + "keys": { + key: {"positive_share": float(weight_values[values > 0].sum() / mass)} + for key, values in keys.items() + }, + "components": components, + "alcohol_volume_weights": dict(volume.receipt), + "outputs": outputs, + "draught_shares": { + column: dict(draught) for column, draught in levels.draught.items() + }, + } + return quantities, receipt + + +def lcfs_excise_quantities( + stage: SourceStageSpec, + household_draws: pd.DataFrame, + *, + weights: Sequence[float], + shares: Mapping[str, object], +) -> tuple[pd.DataFrame | None, dict[str, Any] | None]: + """Apply the declared ``level_excise_quantities`` step (none if undeclared).""" + + parameters = excise_quantities_operation(stage) + if parameters is None: + return None, None + if set(shares) != set(UK_LCFS_EXCISE_SHARES): + raise ValueError( + f"{stage.stage}: {LEVEL_EXCISE_QUANTITIES_KIND} needs the derive step's " + f"excise shares {tuple(UK_LCFS_EXCISE_SHARES)}." + ) + levels = excise_levels(parameters) + quantities, receipt = level_excise_quantities( + household_draws, levels=levels, weights=weights + ) + receipt = { + "operation": LEVEL_EXCISE_QUANTITIES_KIND, + "resource": str(parameters["resource"]), + "period_type": "fiscal_year", + "period_value": int(parameters["period_value"]), + "fiscal_start": str(parameters["fiscal_start"]), + "geography_id": str(parameters["geography_id"]), + "weeks_per_year": UK_PE_UK_WEEKS_IN_YEAR, + **receipt, + } + return quantities, receipt + + def recompose_from_remainder_operation( stage: SourceStageSpec, ) -> Mapping[str, Any] | None: @@ -2842,6 +3812,245 @@ def _weighted_share(mask: np.ndarray, weights: np.ndarray) -> float: return float(np.sum(weights[np.asarray(mask, dtype=bool)]) / total) +#: How far a published LCFS total stored to one decimal place can sit from the +#: lines it sums by rounding alone, pounds a week. +UK_LCFS_TOTAL_ROUNDING = 0.05 + + +def lcfs_donor_shares( + stage: SourceStageSpec, +) -> dict[str, tuple[str, tuple[str, ...], tuple[str, ...]]]: + """The excise shares the derive step declares, held to the module's. + + No declaration draws no share and leaves the chain its spend targets. A + declaration that differs from ``UK_LCFS_EXCISE_SHARES`` in a share, its + total or a diary line is refused: the code computes these. The loaded + spec does not keep a mapping's order, so the chain's declared targets + (``lcfs_chain_targets``) fix the order the shares are drawn in. + """ + + declared = _operation_parameters(stage, "derive").get("shares") + if declared is None: + return {} + actual = ( + { + name: ( + entry.get("total"), + tuple(entry.get("numerator", ())), + tuple(entry.get("denominator", ())), + ) + for name, entry in declared.items() + if isinstance(entry, Mapping) + } + if isinstance(declared, Mapping) + else None + ) + if actual != dict(UK_LCFS_EXCISE_SHARES): + raise ValueError( + f"{stage.stage}: the derive operation declares shares {declared!r}, " + f"not the shares the stage draws: {dict(UK_LCFS_EXCISE_SHARES)!r}." + ) + return dict(UK_LCFS_EXCISE_SHARES) + + +def lcfs_chain_targets( + stage: SourceStageSpec, shares: Mapping[str, object] +) -> tuple[str, ...]: + """The chain's declared targets, held to the spend targets then the shares.""" + + declared = tuple( + _operation_parameters(stage, "fit_weighted_qrf_chain").get("targets", ()) + ) + expected = (*UK_LCFS_CONSUMPTION_TARGET_COLUMNS, *shares) + if declared != expected: + raise ValueError( + f"{stage.stage}: fit_weighted_qrf_chain declares targets {declared}, " + f"not the spend targets followed by the declared shares: {expected}." + ) + return expected + + +def donor_excise_shares( + household: pd.DataFrame, + shares: Mapping[str, tuple[str, tuple[str, ...], tuple[str, ...]]], +) -> tuple[pd.DataFrame, dict[str, Any]]: + """Each declared share on the donor, from its weekly diary lines, and a receipt. + + Lines are read with refunds as zero, as the donor floor reads its totals, + and a share is its lines over its denominator, zero where that is not + positive and at most one. A ratio carries no price, so the uprating that + moves the spend columns leaves it alone. ``household`` is the donor tab + before the totals are renamed, annualised or uprated. The receipt gives, + per share, the weighted share of the denominator its lines hold, the + weighted share of donors with a positive line, the support of those + donors as a band, how many donors the clip at one held, and, where the + denominator is lines under a published total, the weighted share of + donors whose published total sits beside those lines by more than its + rounding ("<10" when one to nine donors do): a donor stage receipt is + UKDS output (CD171 §5.2.1), so it gives no donor value and no small + count. A share of the stakes an earlier share gives has no published + total; its denominator is the stake lines it splits. + """ + + weights = _numeric(household["household_weight"]).to_numpy(dtype=float) + mass = float(weights.sum()) + columns: dict[str, np.ndarray] = {} + receipt: dict[str, Any] = {} + for name, (total, numerator, denominator) in shares.items(): + source_total = ( + None + if total in UK_LCFS_EXCISE_SPENDING_TOTALS + else next( + code + for code, column in CONSUMPTION_VARIABLE_RENAMES.items() + if column == total + ) + ) + for code in ( + *numerator, + *denominator, + *([source_total] if source_total else []), + ): + if code not in household: + raise ValueError(f"LCFS household donor is missing {code!r}.") + + def lines(codes: tuple[str, ...]) -> np.ndarray: + return sum( + _numeric(household[code]).clip(lower=0.0).to_numpy(dtype=float) + for code in codes + ) + + top = lines(numerator) + bottom = lines(denominator) + ratio = np.divide(top, bottom, out=np.zeros(len(household)), where=bottom > 0) + clipped = int((ratio > 1.0).sum()) + columns[name] = np.clip(ratio, 0.0, 1.0) + positive = top > 0 + entry: dict[str, Any] = { + "total": total, + "numerator": list(numerator), + "denominator": list(denominator), + "share_of_denominator": float(weights @ top / (weights @ bottom)) + if weights @ bottom > 0 + else None, + "positive_share": float(weights[positive].sum() / mass) if mass else None, + "positive_support": support_band(int(positive.sum())), + "clipped_at_one": extreme_count(clipped), + } + if source_total is not None and source_total not in denominator: + published = _numeric(household[source_total]).to_numpy(dtype=float) + beside = np.abs(published - bottom) > UK_LCFS_TOTAL_ROUNDING + 1e-9 + entry["total_beside_lines"] = small_cell_share( + float(weights[beside].sum() / mass) if mass else 0.0, + int(beside.sum()), + ) + receipt[name] = entry + return pd.DataFrame(columns, index=household.index), receipt + + +def excise_spending(draws: pd.DataFrame) -> pd.DataFrame: + """The excise spending the drawn shares give: scratch, on no table. + + Tobacco and off-trade alcohol split the drawn alcohol and tobacco total + between them, so together they are that total; on-trade alcohol is its + share of restaurants and hotels, and gambling stakes theirs of recreation. + The National Lottery's stakes are their share of the stakes, and the + betting and gaming stakes theirs of the rest. + """ + + tobacco = draws[UK_LCFS_TOBACCO_SHARE].to_numpy(dtype=float) + alcohol_and_tobacco = draws["alcohol_and_tobacco_consumption"].to_numpy(dtype=float) + on_trade = draws[UK_LCFS_ON_TRADE_ALCOHOL_SHARE].to_numpy(dtype=float) + stakes = draws[UK_LCFS_GAMBLING_SHARE].to_numpy(dtype=float) * draws[ + "recreation_consumption" + ].to_numpy(dtype=float) + lottery = draws[UK_LCFS_NATIONAL_LOTTERY_SHARE].to_numpy(dtype=float) + other_stakes = (1.0 - lottery) * stakes + return pd.DataFrame( + { + UK_LCFS_TOBACCO_SPENDING: tobacco * alcohol_and_tobacco, + UK_LCFS_OFF_TRADE_ALCOHOL_SPENDING: (1.0 - tobacco) * alcohol_and_tobacco, + UK_LCFS_ON_TRADE_ALCOHOL_SPENDING: on_trade + * draws["restaurants_and_hotels_consumption"].to_numpy(dtype=float), + UK_LCFS_GAMBLING_SPENDING: stakes, + UK_LCFS_NATIONAL_LOTTERY_SPENDING: lottery * stakes, + UK_LCFS_OTHER_GAMBLING_SPENDING: other_stakes, + UK_LCFS_BETTING_AND_GAMING_SPENDING: draws[ + UK_LCFS_BETTING_AND_GAMING_SHARE + ].to_numpy(dtype=float) + * other_stakes, + }, + index=draws.index, + ) + + +def clip_excise_shares( + draws: pd.DataFrame, + shares: Mapping[str, tuple[str, tuple[str, ...], tuple[str, ...]]], +) -> tuple[pd.DataFrame, dict[str, int | str]]: + """Hold each drawn share to [0, 1], counting the draws held. + + The chain draws a share from donor values, which lie in the interval, so + the count is zero unless the chain stops doing so. + """ + + held = draws.copy() + outside: dict[str, int | str] = {} + for name in shares: + values = held[name].to_numpy(dtype=float) + outside[name] = extreme_count(int(((values < 0.0) | (values > 1.0)).sum())) + held[name] = np.clip(values, 0.0, 1.0) + return held, outside + + +def excise_shares_receipt( + draws: pd.DataFrame, + *, + shares: Mapping[str, tuple[str, tuple[str, ...], tuple[str, ...]]], + weights: np.ndarray, + donor_receipt: Mapping[str, Any], + outside: Mapping[str, int | str], +) -> dict[str, Any]: + """The shares on the frame beside the donor's: report-only (microcosm#1359). + + Per share, at prior weights: the weighted share of its total the frame's + part holds and the weighted share of households with a positive part, + beside the donor's ``donor_excise_shares`` receipt and the draws the clip + held. + """ + + weights = np.asarray(weights, dtype=float) + mass = float(weights.sum()) + spending = excise_spending(draws) + parts = { + UK_LCFS_TOBACCO_SHARE: spending[UK_LCFS_TOBACCO_SPENDING], + UK_LCFS_ON_TRADE_ALCOHOL_SHARE: spending[UK_LCFS_ON_TRADE_ALCOHOL_SPENDING], + UK_LCFS_GAMBLING_SHARE: spending[UK_LCFS_GAMBLING_SPENDING], + UK_LCFS_NATIONAL_LOTTERY_SHARE: spending[UK_LCFS_NATIONAL_LOTTERY_SPENDING], + UK_LCFS_BETTING_AND_GAMING_SHARE: spending[UK_LCFS_BETTING_AND_GAMING_SPENDING], + } + receipt: dict[str, Any] = {} + for name, (total, _numerator, _denominator) in shares.items(): + part = parts[name].to_numpy(dtype=float) + whole = (spending if total in UK_LCFS_EXCISE_SPENDING_TOTALS else draws)[ + total + ].to_numpy(dtype=float) + receipt[name] = { + "total": total, + "frame": { + "share_of_total": float(weights @ part / (weights @ whole)) + if weights @ whole > 0 + else None, + "positive_share": float(weights[part > 0].sum() / mass) + if mass + else None, + "draws_outside_unit_interval": outside[name], + }, + "donor": dict(donor_receipt[name]), + } + return receipt + + def clean_lcfs_consumption_table( lcfs_person: pd.DataFrame, lcfs_household: pd.DataFrame, @@ -2849,6 +4058,7 @@ def clean_lcfs_consumption_table( uprating: Mapping[str, float] | None = None, energy: LCFSEnergyPricing | None = None, donor_rake_iterations: int = 1, + shares: Mapping[str, tuple[str, tuple[str, ...], tuple[str, ...]]] | None = None, ) -> pd.DataFrame: """Return the LCFS donor table with annualized consumption variables. @@ -2862,6 +4072,9 @@ def clean_lcfs_consumption_table( energy spend to kWh at the calendar-2024 regional average prices paid, rakes the income margin to the NEED means (shape only, no level) and prices back; without it the energy columns are the raw diary spend. + ``shares`` (the derive step's declared excise shares, microcosm#1359) adds + each share as a donor column for the chain, from the diary lines before + any of this, and its receipt under ``donor.attrs``. """ person = _lowercase(lcfs_person).rename(columns=PERSON_LCFS_RENAMES) @@ -2881,6 +4094,10 @@ def clean_lcfs_consumption_table( household = derive_energy_from_lcfs(household) energy_split = donor_energy_split_receipt(household) household[UK_LCFS_PREPAYMENT_METER_COLUMN] = prepayment_meter_from_lcfs(household) + shares = dict(shares or {}) + share_columns, share_receipt = donor_excise_shares(household, shares) + for name in shares: + household[name] = share_columns[name] household = household.rename(columns=CONSUMPTION_VARIABLE_RENAMES) for code in BUS_FARE_LCFS_CODES: if code not in household: @@ -2925,6 +4142,7 @@ def clean_lcfs_consumption_table( [ *UK_LCFS_CONSUMPTION_PREDICTORS, *UK_LCFS_CONSUMPTION_TARGET_COLUMNS, + *shares, UK_LCFS_PREPAYMENT_METER_COLUMN, "household_gross_income", "household_weight", @@ -2936,6 +4154,8 @@ def clean_lcfs_consumption_table( if missing: raise ValueError(f"LCFS donor has missing values in {missing}.") donor.attrs[UK_LCFS_ENERGY_SPLIT_RECEIPT] = energy_split + if shares: + donor.attrs[UK_LCFS_EXCISE_SHARES_RECEIPT] = share_receipt return donor @@ -3313,6 +4533,8 @@ def impute_lcfs_consumption( seed: int, n_estimators: int, record_ids: Sequence[object] | np.ndarray, + targets: Sequence[str] = UK_LCFS_CONSUMPTION_TARGET_COLUMNS, + gate_calibration: str = "in_sample", ) -> UKLCFSConsumptionImputationResult: """Chain-draw the targets in the declared order. @@ -3323,8 +4545,23 @@ def impute_lcfs_consumption( Each draw reads uniforms keyed on the household's own id (``record_ids``, in recipient row order) and the target, never a positional stream, so a household's consumption moves only when its own predictors do. + ``targets`` is the spend targets, optionally followed by the declared + excise shares (microcosm#1359): a target appended after them leaves every + earlier draw as it was. ``gate_calibration`` is the chain's declared + :class:`~microcosm.fit.GateCalibration`: cross-fitted gates draw a rare + spending at the donor's rate on households they were not fitted to, and + move no forest and no uniform. """ + targets = tuple(targets) + if targets[: len(UK_LCFS_CONSUMPTION_TARGET_COLUMNS)] != ( + UK_LCFS_CONSUMPTION_TARGET_COLUMNS + ): + raise ValueError( + "The LCFS chain draws its spend targets first, in their declared " + f"order, then any excise shares; got {targets}." + ) + from microcosm.fit import RegimeGatedQRF donor_encoded, recipient_encoded, predictors = _encode_consumption_predictors( @@ -3335,17 +4572,19 @@ def impute_lcfs_consumption( raise ValueError( "LCFS record_ids must name every recipient once, in recipient row order." ) - model = RegimeGatedQRF(n_estimators=n_estimators, seed=seed) + model = RegimeGatedQRF( + n_estimators=n_estimators, seed=seed, gate_calibration=gate_calibration + ) state = model.start_chain( donor_encoded, list(predictors), - list(UK_LCFS_CONSUMPTION_TARGET_COLUMNS), + list(targets), weights="household_weight", ) raw = pd.DataFrame(index=recipient_encoded.index) draws = pd.DataFrame(index=recipient_encoded.index) fit_records: list[FitWeightRecord] = [] - for target in UK_LCFS_CONSUMPTION_TARGET_COLUMNS: + for target in targets: features = recipient_encoded.loc[:, list(predictors)] salt = f"{UK_LCFS_CONSUMPTION_FIT_NAME}:{target}" result = model.fit_draw_next( @@ -3523,6 +4762,14 @@ def _qrf_n_estimators(stage: SourceStageSpec) -> int: return 100 +def _qrf_gate_calibration(stage: SourceStageSpec) -> str: + """The chain's declared gate calibration; the in-sample gate when undeclared.""" + for operation in stage.operations: + if operation.kind == "fit_weighted_qrf_chain": + return str(operation.parameters.get("gate_calibration", "in_sample")) + return "in_sample" + + def _require_path(path: str | Path | None) -> Path: if path is None: raise ValueError("LCFS consumption stage requires caller-supplied donor paths.") 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 eebffa03ed..a963cbb587 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 @@ -91,6 +91,8 @@ def uk_stage_health_gate( return _road_fuel_incidence_gate(stage, evidence, parameters) if check == "road_fuel_level": return _road_fuel_level_gate(stage, evidence, parameters) + if check == "excise_quantities": + return _excise_quantities_gate(stage, evidence, parameters) if check == "bus_support_pricing": return _bus_support_pricing_gate(stage, evidence, parameters) if check == "property_components": @@ -3484,6 +3486,186 @@ def _close(observed: object, value: float) -> bool: ) +def _excise_quantities_gate( + stage: str, + evidence: Mapping[str, object], + parameters: Mapping[str, object], +) -> GateResult: + """The excise step gave the frame the published quantities (microcosm#1359). + + Fact checks on the ``excise_quantities`` and ``excise_shares`` receipts: + each engine input's published quantity (alcohol and tobacco clearances, + gambling bases) is recomputed here from the vendored rows through the + stage's own declaration (never taken from the receipt) and must equal the + receipt's, its frame total at prior weights must equal it and the factor + must reproduce it from the household spending, to + ``maximum_relative_deviation``; an input is positive exactly where its + spending is; each draught share written is the published ratio; the basis + is the declared fiscal year over the engine's 52 weeks. The shares the + spending comes from must have stayed in [0, 1] on the frame, each must + rest on ``required_support_band`` donors, and the donor share whose + published total sits beside its diary lines must be at most + ``maximum_parent_residual_share`` (a share withheld for resting on under + ten donors is under it). + """ + + from microcosm.build.country_spec import load_country_spec + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_EXCISE_SHARES, + UK_PE_UK_WEEKS_IN_YEAR, + excise_levels, + excise_quantities_operation, + ) + + check = "excise_quantities" + receipt = _mapping( + evidence.get("excise_quantities"), label=f"{stage}.excise_quantities" + ) + shares = _mapping(evidence.get("excise_shares"), label=f"{stage}.excise_shares") + tolerance = _finite_number( + parameters.get("maximum_relative_deviation"), + label=f"{stage}.maximum_relative_deviation", + ) + maximum_residual = _finite_number( + parameters.get("maximum_parent_residual_share"), + label=f"{stage}.maximum_parent_residual_share", + ) + required_support = parameters.get("required_support_band") + declared = excise_quantities_operation( + load_country_spec("uk").sources.stage_map()[stage] + ) + if declared is None: + raise ValueError(f"{stage}: declares no level_excise_quantities operation.") + resolved = excise_levels(declared) + levels, volume = resolved.quantities, resolved.volume + + def _close(observed: object, value: float) -> bool: + return isinstance(observed, int | float) and abs(float(observed) - value) <= ( + tolerance * max(1.0, abs(value)) + ) + + failures: list[str] = [] + for key, value in ( + ("period_type", "fiscal_year"), + ("period_value", int(declared["period_value"])), + ("weeks_per_year", UK_PE_UK_WEEKS_IN_YEAR), + ): + if receipt.get(key) != value: + failures.append( + f"{stage}: the excise receipt's {key} {receipt.get(key)!r} is not " + f"{value!r}." + ) + if receipt.get("alcohol_volume_weights") != dict(volume.receipt): + failures.append( + f"{stage}: the alcohol volume weights {receipt.get('alcohol_volume_weights')!r} " + f"are not the declared {dict(volume.receipt)!r}." + ) + outputs = _mapping( + receipt.get("outputs"), label=f"{stage}.excise_quantities.outputs" + ) + if set(outputs) != set(levels): + failures.append( + f"{stage}: the excise receipt levels {sorted(outputs)}, not the declared " + f"{sorted(levels)}." + ) + keys = _mapping(receipt.get("keys"), label=f"{stage}.excise_quantities.keys") + for column, level in levels.items(): + entry = outputs.get(column) + if not isinstance(entry, Mapping): + continue + for key, value in ( + ("published", float(level.receipt["published"])), + ("annual_level", level.annual), + ): + if not _close(entry.get(key), value): + failures.append( + f"{stage}: {column} {key} {entry.get(key)!r} is not the vendored " + f"{value}." + ) + if entry.get("source_record_id") != level.receipt["source_record_id"]: + failures.append( + f"{stage}: {column} names {entry.get('source_record_id')!r}, not the " + f"declared row {level.receipt['source_record_id']!r}." + ) + if not _close(entry.get("frame_annual_total"), level.annual): + failures.append( + f"{stage}: the frame's {column} {entry.get('frame_annual_total')!r} is " + f"not the level {level.annual}." + ) + before, factor = entry.get("key_total"), entry.get("factor") + if not ( + isinstance(before, int | float) + and isinstance(factor, int | float) + and _close(float(before) * float(factor), level.annual) + ): + failures.append( + f"{stage}: {column}'s factor {factor!r} times its spending {before!r} " + f"does not reproduce the level {level.annual}." + ) + spenders = keys.get(str(entry.get("key"))) + if not ( + isinstance(spenders, Mapping) + and entry.get("positive_share") == spenders.get("positive_share") + ): + failures.append( + f"{stage}: {column} is positive on a share {entry.get('positive_share')!r} " + "of households, not exactly where its spending is." + ) + draught = receipt.get("draught_shares") + if not isinstance(draught, Mapping) or set(draught) != set(resolved.draught): + failures.append( + f"{stage}: the excise receipt writes draught shares " + f"{sorted(draught) if isinstance(draught, Mapping) else draught!r}, not " + f"the declared {sorted(resolved.draught)}." + ) + else: + for column, published in resolved.draught.items(): + written = ( + draught[column].get("share") + if isinstance(draught[column], Mapping) + else None + ) + if not _close(written, float(published["share"])): + failures.append( + f"{stage}: {column} {written!r} is not the vendored " + f"{published['share']}." + ) + if set(shares) != set(UK_LCFS_EXCISE_SHARES): + failures.append( + f"{stage}: the excise_shares receipt names {sorted(shares)}, not " + f"{sorted(UK_LCFS_EXCISE_SHARES)}." + ) + for name in UK_LCFS_EXCISE_SHARES: + entry = shares.get(name) + if not isinstance(entry, Mapping): + continue + frame = entry.get("frame") or {} + donor = entry.get("donor") or {} + if frame.get("draws_outside_unit_interval") != 0: + failures.append(f"{stage}: some {name} draws left [0, 1].") + if donor.get("positive_support") != required_support: + failures.append( + f"{stage}: {name} rests on {donor.get('positive_support')!r} donors, " + f"not {required_support!r}." + ) + residual = donor.get("total_beside_lines") + if isinstance(residual, int | float) and residual > maximum_residual: + failures.append( + f"{stage}: a weighted {residual} of donors carry a published total " + f"beside {name}'s lines, above {maximum_residual}." + ) + details = { + "maximum_relative_deviation": tolerance, + "levels": {column: level.annual for column, level in levels.items()}, + "alcohol_volume_weights": dict(volume.receipt), + } + return ( + _fail(stage, check, failures, details) + if failures + else _pass(stage, check, details) + ) + + def _bus_support_pricing_gate( stage: str, evidence: Mapping[str, object], 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 210617b8d1..c95ff2a86b 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 @@ -220,6 +220,34 @@ def __post_init__(self) -> None: # older engine ignores the column; the incumbent does not carry it yet # (uk-data#539). "household.uses_energy_prepayment_meter", + # microcosm#1359: the LCFS excise step's policyengine-uk inputs (the + # alcohol and tobacco ones from 2.145.0, the gambling duty bases from + # 2.151.0); an older engine ignores a column it does not know, and the + # incumbent carries none of them. + "household.beer_litres", + "household.cider_litres", + "household.wine_litres", + "household.spirits_litres", + "household.other_fermented_litres", + "household.beer_draught_share", + "household.cider_draught_share", + "household.cigarettes_per_week", + "household.hand_rolling_tobacco_grams_per_week", + "household.cigars_grams_per_week", + "household.other_tobacco_grams_per_week", + "household.remote_gaming_net_losses", + "household.pool_betting_net_receipts", + "household.bingo_net_receipts", + "household.national_lottery_ticket_spending", + "household.land_based_casino_net_losses", + "household.machine_games_lower_rate_net_takings", + "household.machine_games_standard_rate_net_takings", + "household.machine_games_higher_rate_net_takings", + "household.land_based_fixed_odds_betting_net_losses", + "household.remote_uk_horseracing_betting_net_losses", + "household.remote_other_betting_net_losses", + "household.betting_exchange_commission", + "household.horse_and_dog_pool_betting_net_losses", "household.household_is_capital_gains_clone", "household.household_is_cgt_support_copy", "household.household_is_spi_income_band_donor", diff --git a/packages/microcosm-build/tests/engine/uk/test_uk_excise_quantity_inputs.py b/packages/microcosm-build/tests/engine/uk/test_uk_excise_quantity_inputs.py new file mode 100644 index 0000000000..10bb1e9a39 --- /dev/null +++ b/packages/microcosm-build/tests/engine/uk/test_uk_excise_quantity_inputs.py @@ -0,0 +1,240 @@ +"""policyengine-uk charges excise on the inputs the LCFS stage writes (microcosm#1359). + +The ``level_excise_quantities`` step writes policyengine-uk's household +excise inputs: litres a year of each alcohol product and the beer and cider +draught shares, cigarettes a week and grams a week of the other tobacco +products, which alcohol and tobacco duty read (PolicyEngine/policyengine-uk#1876), +and the annual gambling duty bases (PolicyEngine/policyengine-uk#2590, from +policyengine-uk 2.151.0). The export-surface gate checks a column only +against the enhanced-FRS reference, so these checks hold the step to the +engine it is locked with: every column it can write is a household input +there, the engine's week is the step's, the strengths and rates a +declaration divides by are the ones the engine multiplies back, the +duties the engine charges on the inputs are linear in them and reach +household tax and net income, and on the committed declaration's national +levels they sit at the gaps from OBR's receipts the measure exclusions state. +""" + +from __future__ import annotations + +import importlib +import importlib.resources +import json + +import pytest + +from microcosm.build.country_spec import load_country_spec +from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_EXCISE_OUTPUT_COLUMNS, + UK_LCFS_EXCISE_TOBACCO_OUTPUTS, + UK_PE_UK_WEEKS_IN_YEAR, + excise_levels, + excise_quantities_operation, +) +from microcosm.build.uk_runtime.national_frame import ( + UK_RELEASE_EXPORT_DROPPED_COLUMNS, +) +from test_support.microcosm_build.uk_excise_facts import EXCISE_DECLARATION + +#: A household's quantities for each kind of alcohol and tobacco input. +QUANTITIES = { + "beer_litres": 100.0, + "wine_litres": 50.0, + "spirits_litres": 10.0, + "cigarettes_per_week": 20.0, + "hand_rolling_tobacco_grams_per_week": 10.0, + "other_tobacco_grams_per_week": 5.0, +} +#: A household's gambling bases, pounds a year. +GAMBLING_BASES = { + "remote_gaming_net_losses": 200.0, + "land_based_fixed_odds_betting_net_losses": 150.0, + "remote_other_betting_net_losses": 100.0, + "machine_games_standard_rate_net_takings": 80.0, + "national_lottery_ticket_spending": 120.0, + "land_based_casino_net_losses": 50.0, +} + + +def test_every_excise_output_is_an_engine_household_input() -> None: + from policyengine_uk import CountryTaxBenefitSystem + + variables = CountryTaxBenefitSystem().variables + for column in UK_LCFS_EXCISE_OUTPUT_COLUMNS: + variable = variables[column] + assert variable.entity.key == "household", column + assert variable.definition_period == "year", column + assert variable.value_type is float, column + assert not variable.formulas, column + assert column not in UK_RELEASE_EXPORT_DROPPED_COLUMNS["household"], column + + +def test_the_engines_week_is_the_steps() -> None: + from policyengine_core.commons.formulas import WEEKS_IN_YEAR + + assert WEEKS_IN_YEAR == UK_PE_UK_WEEKS_IN_YEAR + + +def _declared_divisors(declaration) -> dict[str, dict]: + """Every strength and gambling rate a declaration divides by.""" + + divisors = { + column: output["strength"] + for column, output in declaration["outputs"].items() + if output.get("strength") is not None + } + divisors.update( + { + f"gambling.{name}": rate + for name, rate in declaration.get("gambling", {}).get("rates", {}).items() + } + ) + return divisors + + +def test_declared_strengths_and_rates_are_the_engines() -> None: + """A strength or rate the step divides by is the one the engine applies.""" + + parameters = importlib.import_module("policyengine_uk.system").system.parameters + committed = excise_quantities_operation( + load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + ) + declarations = [EXCISE_DECLARATION, *([] if committed is None else [committed])] + checked = 0 + for declaration in declarations: + instant = f"{declaration['period_value']}-04-30" + for name, divisor in _declared_divisors(declaration).items(): + node = parameters + for part in divisor["parameter_path"].split("."): + node = getattr(node, part) + assert float(node(instant)) == pytest.approx(divisor["value"]), name + checked += 1 + assert checked >= 12 + + +def _simulate(year: int, inputs: dict[str, float], variables: tuple[str, ...]): + from policyengine_uk import Simulation + + household = {column: {year: value} for column, value in inputs.items()} + simulation = Simulation( + situation={ + "people": {"adult": {"age": {year: 40}}}, + "benunits": {"benunit": {"members": ["adult"]}}, + "households": {"household": {"members": ["adult"], **household}}, + } + ) + return tuple(float(simulation.calculate(name, year)[0]) for name in variables) + + +@pytest.mark.parametrize("year", [2024, 2025, 2026]) +def test_the_engine_charges_duty_in_proportion_to_the_quantities(year: int) -> None: + names = ("alcohol_duty", "tobacco_duty", "household_tax", "household_net_income") + none, one, two = ( + _simulate(year, {k: v * scale for k, v in QUANTITIES.items()}, names) + for scale in (0.0, 1.0, 2.0) + ) + + assert none[:2] == (0.0, 0.0) + assert one[0] > 0 and one[1] > 0 + assert two[0] == pytest.approx(2 * one[0]) + assert two[1] == pytest.approx(2 * one[1]) + # Household tax carries both duties, and net income loses them (to the + # penny: the engine stores net income in single precision). + assert one[2] - none[2] == pytest.approx(one[0] + one[1]) + assert none[3] - one[3] == pytest.approx(one[0] + one[1], abs=0.01) + + +@pytest.mark.parametrize("year", [2024, 2025, 2026]) +def test_the_engine_charges_gambling_duty_in_proportion_to_the_bases( + year: int, +) -> None: + names = ("gambling_duty", "household_tax", "household_net_income") + none, one, two = ( + _simulate(year, {k: v * scale for k, v in GAMBLING_BASES.items()}, names) + for scale in (0.0, 1.0, 2.0) + ) + + assert none[0] == 0.0 + assert one[0] > 0 + assert two[0] == pytest.approx(2 * one[0]) + assert one[1] - none[1] == pytest.approx(one[0]) + assert none[2] - one[2] == pytest.approx(one[0], abs=0.01) + + +#: Each OBR row the excise inputs are measured against, with the gap its +#: measure exclusion states between the engine's duty on the committed +#: declaration's national levels and OBR's FY2024-25 receipts (microcosm#1359): +#: alcohol and tobacco above the receipts by the strengths, reliefs and +#: products the engine leaves out, betting and gaming at them by construction +#: but for Machine Games Duty's liabilities over its cash receipts. +OBR_DUTY_GAPS = { + "obr.beer_and_cider_duties": 0.081, + "obr.wine_duties": 0.026, + "obr.spirits_duties": 0.022, + "obr.tobacco_duties": 0.030, + "obr.betting_and_gaming_duties": 0.001, +} + + +def _uk_resource(name: str) -> dict: + return json.loads( + importlib.resources.files("microcosm.build.uk").joinpath(name).read_text() + ) + + +def test_the_national_levels_sit_at_the_stated_gaps_from_obr() -> None: + """The engine's duty on the national levels, against OBR's receipts. + + One household holds every national level the committed declaration + resolves to. Every duty is linear in its inputs, so this is the frame's + duty at prior weights however the levels are shared out. A rate, + strength or relief that moves in the engine, or a level that moves in the + vendored rows, moves a gap the exclusion reasons state, and fails here. + OBR's values are the pinned feed's, as the national compile-parity + receipt records them; each row's variables are its own binding's. + """ + + committed = excise_quantities_operation( + load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + ) + assert committed is not None + resolved = excise_levels(committed) + year = int(committed["period_value"]) + inputs = { + column: level.annual / UK_PE_UK_WEEKS_IN_YEAR + if column in UK_LCFS_EXCISE_TOBACCO_OUTPUTS + else level.annual + for column, level in resolved.quantities.items() + } + inputs.update( + { + column: float(draught["share"]) + for column, draught in resolved.draught.items() + } + ) + targets = { + target["target_id"]: target["bindings"]["policyengine"] + for target in _uk_resource("uk_population_targets.json")["targets"] + } + published = { + row["name"]: row["ledger_value"] + for row in _uk_resource( + "ledger_compile_parity_incumbent_2025_signed_differences.json" + )["differences"] + if row["name"] in OBR_DUTY_GAPS + } + variables = {} + for name in OBR_DUTY_GAPS: + binding = targets[name] + assert binding["measurement_period"] == year, name + variables[name] = ( + tuple(binding["value_expression"].split(" + ")) + if "value_expression" in binding + else (binding["value_variable"],) + ) + names = tuple(dict.fromkeys(v for row in variables.values() for v in row)) + duty = dict(zip(names, _simulate(year, inputs, names), strict=True)) + + for name, gap in OBR_DUTY_GAPS.items(): + engine = sum(duty[variable] for variable in variables[name]) + assert engine / published[name] - 1.0 == pytest.approx(gap, abs=0.005), name diff --git a/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py b/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py index 87d09f0449..ea47c8e650 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_country_spec.py @@ -1012,6 +1012,7 @@ def test_spi_spine_adds_no_country_package_resources(self) -> None: "orr_rail_facts.json", "ons_household_expenditure_facts.json", "desnz_road_fuel_by_vehicle.json", + "excise_facts.json", "dft_bus_journeys.json", "nts_trip_rates.json", "nts_car_availability.json", @@ -1166,6 +1167,7 @@ def test_uk_package_loads(self) -> None: "orr_rail_facts.json", "ons_household_expenditure_facts.json", "desnz_road_fuel_by_vehicle.json", + "excise_facts.json", "dft_bus_journeys.json", "nts_trip_rates.json", "nts_car_availability.json", @@ -1182,8 +1184,8 @@ def test_uk_target_references_accept_regenerated_contract_fields(self) -> None: references = {reference.name: reference for reference in spec.target_references} assert ( - len(references) == 1336 - ) # microcosm#953: + 1, England's single adult council tax discount; microcosm#1095 (the next policyengine-uk bump): - 3, the OBR welfare-cap split and the England postgraduate repayments retire; childcare costing fixes: + 5, DfE funded childcare by single age (working parent 9-11 months and 1-3, universal nursery 3; the age-4 cells are signed out); item 6: + 11, the UK's ONS single years 3 to 6 and England's 0 to 6; microcosm#1278: + 3, the ONS single years 0, 1 and 2 for all persons; microcosm#1095: + 4, the two national 15_19 sex bands split into ages 15, 16-17 and 18-19; microcosm#1106: + 13 SPI property amounts; microcosm#1113: + 1 ONS 07.2.2 household road fuel; PolicyEngine/chronicle#280 lane: 705 + 33 HMRC liabilities rows (Table 2.5, three + len(references) == 1341 + ) # microcosm#1359: + 5 OBR excise receipts rows, measured at FY2024-25; microcosm#953: + 1, England's single adult council tax discount; microcosm#1095 (the next policyengine-uk bump): - 3, the OBR welfare-cap split and the England postgraduate repayments retire; childcare costing fixes: + 5, DfE funded childcare by single age (working parent 9-11 months and 1-3, universal nursery 3; the age-4 cells are signed out); item 6: + 11, the UK's ONS single years 3 to 6 and England's 0 to 6; microcosm#1278: + 3, the ONS single years 0, 1 and 2 for all persons; microcosm#1095: + 4, the two national 15_19 sex bands split into ages 15, 16-17 and 18-19; microcosm#1106: + 13 SPI property amounts; microcosm#1113: + 1 ONS 07.2.2 household road fuel; PolicyEngine/chronicle#280 lane: 705 + 33 HMRC liabilities rows (Table 2.5, three # measures by eleven bands) + 26 SPI savings-interest rows (two measures by # thirteen bands) + 360 SPI Table 3.11 region-tier rows (three measures by # ten regional bands over twelve areas); microcosm#905: 424 - 18 country @@ -1460,6 +1462,7 @@ def test_declares_the_full_june_battery(self, manifest) -> None: "uk_stage_lcfs_consumption_road_fuel_incidence", "uk_stage_lcfs_consumption_road_fuel_level", "uk_stage_lcfs_consumption_recomposed_totals", + "uk_stage_lcfs_consumption_excise_quantities", "uk_stage_lcfs_consumption_basis", "uk_stage_etb_vat_support", "uk_stage_etb_services_support", @@ -1588,6 +1591,7 @@ def test_strict_absent_evidence_entries_are_declared(self, manifest) -> None: "uk_stage_lcfs_consumption_road_fuel_incidence", "uk_stage_lcfs_consumption_road_fuel_level", "uk_stage_lcfs_consumption_recomposed_totals", + "uk_stage_lcfs_consumption_excise_quantities", "uk_stage_lcfs_consumption_basis", "uk_stage_etb_vat_support", "uk_stage_etb_services_support", diff --git a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_loader.py b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_loader.py index 2d4a494760..c9024b5165 100644 --- a/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_loader.py +++ b/packages/microcosm-build/tests/engine_free/shared/test_spec_engine_loader.py @@ -14,9 +14,10 @@ def test_semantic_hash_has_golden_vector_and_surface_separation(tmp_path) -> Non # protocol inside it attests microcosm.calibrate.solve's bytes, so # microcosm#1124's opt-in retain_best_objective and microcosm#1301's # budget_search_bracket move it, and the fit kernels' bytes, so the QRF - # chain step's caller-owned uniforms move it too. + # chain step's caller-owned uniforms move it too, as does the opt-in + # cross-fitted gate calibration. assert first.spec_sha256 == ( - "4f71334334c67cc17d1aab5b02a838def57bcc54ac4413b89b70b8ae3086d9ee" + "ab809638cb84ddce8b26d493342dac81fe2234187c3d6568f2a233bb95fa1fe7" ) second_root = _rich_minimal(tmp_path / "xy", note="second", store="local:b") diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_chronicle_feed.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_chronicle_feed.py index f3ba479729..23ee562b1e 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_chronicle_feed.py +++ b/packages/microcosm-build/tests/engine_free/uk/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 == "abf0921b896d29ee0745ed2aefde8d6337ed7164" + assert pin.source_commit == "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1" assert pin.source_repo == "PolicyEngine/chronicle" - assert pin.fact_row_count == 1499301 + assert pin.fact_row_count == 1502291 assert pin.facts_sha256 == ( - "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b" + "b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc" ) assert pin.manifest_sha256 == ( - "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460" ) assert pin.artifact_schema_version == "policyengine_ledger.consumer_artifact.v2" assert pin.consumer_fact_schema_versions == ("chronicle.consumer_fact.v4",) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_consumption_tax_diagnostics.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_consumption_tax_diagnostics.py index e856d4a120..3c32f4225b 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_consumption_tax_diagnostics.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_consumption_tax_diagnostics.py @@ -112,3 +112,20 @@ def test_tool_rows_are_committed_reference_names() -> None: assert set(_tool.ROWS) <= committed, sorted(set(_tool.ROWS) - committed) for name, variables in _tool.ROWS.items(): assert variables and all(isinstance(v, str) for v in variables), name + + +def test_excise_rows_are_measured_at_their_own_period() -> None: + """The OBR excise rows read the FY2024-25 quantities as stored (#1359).""" + + payload = json.loads( + files("microcosm.build.uk").joinpath("uk_population_targets.json").read_text() + ) + periods = { + target["target_id"]: target["bindings"]["policyengine"].get( + "measurement_period" + ) + for target in payload["targets"] + } + assert set(_tool.ROW_YEARS) <= set(_tool.ROWS) + for name, year in _tool.ROW_YEARS.items(): + assert periods[name] == year, name diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_diagnostics.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_diagnostics.py index 696f781da2..73367ff769 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_diagnostics.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_diagnostics.py @@ -800,6 +800,35 @@ def test_consumption_drift_carries_the_stage_s_kwh() -> None: assert "electricity_kwh" not in without_region["totals"] +def test_consumption_drift_carries_the_excise_quantities() -> None: + """Each excise quantity and base as stored, at both weights (#1359).""" + + from microcosm.build.uk_runtime.diagnostics import uk_consumption_drift + + household = pd.DataFrame(_consumption_columns(4)) + household["beer_litres"] = [100.0, 0.0, 50.0, 10.0] + household["cigarettes_per_week"] = [20.0, 0.0, 0.0, 40.0] + household["remote_gaming_net_losses"] = [0.0, 30.0, 0.0, 0.0] + household["beer_draught_share"] = 0.4 + design = np.array([1.0, 1.0, 1.0, 1.0]) + final = np.array([2.0, 0.0, 1.0, 1.0]) + + totals = uk_consumption_drift(household, design, final)["totals"] + + assert totals["beer_litres"]["design"] == pytest.approx(160.0) + assert totals["beer_litres"]["final"] == pytest.approx(260.0) + assert totals["cigarettes_per_week"]["final"] == pytest.approx(80.0) + assert totals["remote_gaming_net_losses"]["relative_change"] == -1.0 + # A draught share is a ratio, not a quantity, and no other input is on + # the frame. + assert "beer_draught_share" not in totals + assert "wine_litres" not in totals + plain = uk_consumption_drift(pd.DataFrame(_consumption_columns(4)), design, final)[ + "totals" + ] + assert "beer_litres" not in plain + + def test_payload_carries_the_consumption_drift_when_the_frame_has_it() -> None: result, frame, registry, geography = _diagnostics_case(with_consumption=True) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_full_targets.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_full_targets.py index cd8b2cc8cb..c6fc3092a4 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_full_targets.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_full_targets.py @@ -206,8 +206,12 @@ def test_wrong_fact_count_refuses_before_either_compiler(prepared): def test_current_national_and_local_pins_share_one_reviewed_identity(): # main (#904) reads one committed pin, ``uk/chronicle_feed.json``, for the # national feed and the local census; the full build checks they agree. - # The identity is the abf0921 feed re-pinned by microcosm#1300 - # (PolicyEngine/chronicle#359: UC by payment indicator, OBR table 4.9 + # The identity is the 200bf6d feed re-pinned by microcosm#1359 + # (PolicyEngine/chronicle#384: HMRC alcohol and tobacco clearances, + # betting and gaming receipts and Machine Games Duty liabilities, the + # Gambling Commission's industry statistics and OBR's excise lines, with + # the September Consumer Trends edition in place of June's), on top of the + # abf0921 feed of microcosm#1300 (UC by payment indicator, OBR table 4.9 # geography, DESNZ gas years and Northern Ireland energy, UV404 by output # area). It holds the 735820c HVCTS inputs microcosm#1240 pinned, every # 942a1fa row of microcosm#1123 and the 1ee7dfe rows of microcosm#1113. @@ -216,19 +220,19 @@ def test_current_national_and_local_pins_share_one_reviewed_identity(): assert ( national.facts_sha256 == local["facts_sha256"] - == ("2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b") + == ("b6e69c90ef0d65674d8c9ce6285113aa5ce36e6d25f6f662d106bdd5c2c27dbc") ) assert ( national.manifest_sha256 == local["manifest_sha256"] - == ("b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21") + == ("7d9c75fdcf9b638848979fa51eff5e51d4caabbef263ed6c2a8a0b9a3305b460") ) assert ( national.source_commit == local["source_commit"] - == "abf0921b896d29ee0745ed2aefde8d6337ed7164" + == "200bf6d559cf85bc9c2c5ee4df8c50ba0f5d09d1" ) - assert national.fact_row_count == local["fact_row_count"] == 1499301 + assert national.fact_row_count == local["fact_row_count"] == 1502291 def test_chronicle_source_codec_validates_directory_manifest(tmp_path): diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py index d0b65438d9..a25cfb399f 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_lcfs_consumption.py @@ -188,6 +188,374 @@ def test_stage_declares_the_unmapped_code_refusal() -> None: ) +TOBACCO_SHARE = "tobacco_share_of_alcohol_and_tobacco" +ON_TRADE_SHARE = "on_trade_alcohol_share_of_restaurants_and_hotels" +GAMBLING_SHARE = "gambling_stakes_share_of_recreation" +LOTTERY_SHARE = "national_lottery_share_of_gambling_stakes" +BETTING_SHARE = "betting_and_gaming_share_of_other_gambling_stakes" + + +def _excise_household() -> pd.DataFrame: + """The four-donor tab with alcohol and tobacco lines (microcosm#1359). + + P602 and P611 are 1, 2, 3 and 4 a week. The first donor splits P602 a + quarter tobacco and has half its P611 in drinks; the second's tobacco is a + refund and its drinks pass P611 by three pence; the third has no lines + under its P602; the fourth's P602 is all tobacco. The first stakes three + quarters on the National Lottery and the rest on bingo, the second + bets two thirds of its stakes and puts the rest on a society lottery, the + third stakes nothing and the fourth only on the Irish Lottery. + """ + + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_GAMBLING_STAKE_CODES, + UK_LCFS_OFF_TRADE_ALCOHOL_CODES, + UK_LCFS_ON_TRADE_ALCOHOL_CODES, + UK_LCFS_TOBACCO_CODES, + ) + + household = _household() + for code in ( + *UK_LCFS_OFF_TRADE_ALCOHOL_CODES, + *UK_LCFS_TOBACCO_CODES, + *UK_LCFS_ON_TRADE_ALCOHOL_CODES, + ): + household[code] = 0.0 + household["c22111"] = [0.25, -1.0, 0.0, 0.0] + household["c22131"] = [0.0, 0.0, 0.0, 4.0] + household["c21311"] = [0.75, 0.0, 0.0, 0.0] + household["c21211"] = [0.0, 2.0, 0.0, 0.0] + household["cb111i"] = [0.5, 0.0, 0.0, 0.0] + household["cb111d"] = [0.0, 2.03, 0.0, 0.0] + for code in UK_LCFS_GAMBLING_STAKE_CODES: + household[code] = 0.0 + household["c94319"] = [0.5, 0.0, 0.0, 0.0] + household["c94316"] = [0.25, 0.0, 0.0, 0.0] + household["c94312"] = [0.25, 0.0, 0.0, 0.0] + household["c94314"] = [0.0, 1.0, 0.0, 0.0] + household["c94313"] = [0.0, 0.5, 0.0, 0.0] + household["c94315"] = [0.0, 0.0, 0.0, 1.0] + return household + + +def test_donor_excise_shares_read_the_diary_lines() -> None: + from microcosm.build.uk_runtime.lcfs_consumption import UK_LCFS_EXCISE_SHARES + + donor = clean_lcfs_consumption_table( + _person(), _excise_household(), shares=UK_LCFS_EXCISE_SHARES + ) + + # Refunds read as zero, a donor with no lines has no share, and the + # drinks past P611's rounding are held at one. + assert donor[TOBACCO_SHARE].tolist() == [0.25, 0.0, 0.0, 1.0] + assert donor[ON_TRADE_SHARE].tolist() == [0.5, 1.0, 0.0, 0.0] + # The stakes split by their own lines: the National Lottery's share of all + # seven, then the betting and gaming share of the other five, which the + # Irish-Lottery-only donor holds none of. + assert donor[GAMBLING_SHARE].tolist() == [1.0, 0.75, 0.0, 0.25] + assert donor[LOTTERY_SHARE].tolist() == [0.75, 0.0, 0.0, 0.0] + assert donor[BETTING_SHARE].tolist() == pytest.approx([1.0, 2.0 / 3.0, 0.0, 0.0]) + # A ratio carries no price: uprating the totals leaves the shares alone. + uprated = clean_lcfs_consumption_table( + _person(), + _excise_household(), + shares=UK_LCFS_EXCISE_SHARES, + uprating={ + "alcohol_and_tobacco_consumption": 1.5, + "restaurants_and_hotels_consumption": 0.5, + }, + ) + shares = list(UK_LCFS_EXCISE_SHARES) + pd.testing.assert_frame_equal(uprated[shares], donor[shares]) + receipt = donor.attrs["excise_shares"] + tobacco = receipt[TOBACCO_SHARE] + weights = np.array([1.5, 2.0, 2.5, 3.0]) + assert tobacco["share_of_denominator"] == pytest.approx( + weights @ [0.25, 0.0, 0.0, 4.0] / (weights @ [1.0, 2.0, 0.0, 4.0]) + ) + assert tobacco["positive_share"] == pytest.approx((1.5 + 3.0) / weights.sum()) + # Two donors carry tobacco and one P602 sits beside its lines: bands, and + # the withheld share, never the counts. + assert tobacco["positive_support"] == "<10" + assert tobacco["clipped_at_one"] == 0 + assert tobacco["total_beside_lines"] == "<10" + on_trade = receipt[ON_TRADE_SHARE] + assert on_trade["clipped_at_one"] == "<10" + assert "total_beside_lines" not in on_trade + # A share of the stakes has no published total to sit beside. + lottery = receipt[LOTTERY_SHARE] + assert lottery["total"] == "gambling_stakes" + assert lottery["positive_support"] == "<10" + assert "total_beside_lines" not in lottery + assert receipt[BETTING_SHARE]["share_of_denominator"] == pytest.approx( + (1.5 * 0.25 + 2.0 * 1.0) / (1.5 * 0.25 + 2.0 * 1.5 + 3.0 * 1.0) + ) + # Undeclared, the donor carries no share and no receipt. + plain = clean_lcfs_consumption_table(_person(), _excise_household()) + assert not set(UK_LCFS_EXCISE_SHARES) & set(plain.columns) + assert "excise_shares" not in plain.attrs + + +def test_stage_draws_the_declared_excise_shares_after_its_spend_targets() -> None: + from microcosm.build.country_spec import load_country_spec + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_EXCISE_SHARES, + lcfs_chain_targets, + lcfs_donor_shares, + ) + + stage = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + shares = lcfs_donor_shares(stage) + + assert shares == dict(UK_LCFS_EXCISE_SHARES) + assert lcfs_chain_targets(stage, shares) == ( + *UK_LCFS_CONSUMPTION_TARGET_COLUMNS, + TOBACCO_SHARE, + ON_TRADE_SHARE, + GAMBLING_SHARE, + LOTTERY_SHARE, + BETTING_SHARE, + ) + + +def _with_operation(stage, kind: str, **changes): + import dataclasses + + return dataclasses.replace( + stage, + operations=tuple( + dataclasses.replace( + operation, parameters={**operation.parameters, **changes} + ) + if operation.kind == kind + else operation + for operation in stage.operations + ), + ) + + +@pytest.mark.parametrize( + "change", ["drop_share", "extra_share", "numerator", "denominator", "total"] +) +def test_excise_share_declaration_is_held_to_the_module(change) -> None: + from microcosm.build.country_spec import load_country_spec + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_EXCISE_SHARES, + UK_LCFS_ON_TRADE_ALCOHOL_CODES, + lcfs_donor_shares, + ) + + stage = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + declared = { + name: { + "total": total, + "numerator": list(numerator), + "denominator": list(denominator), + } + for name, (total, numerator, denominator) in UK_LCFS_EXCISE_SHARES.items() + } + if change == "drop_share": + declared.pop(ON_TRADE_SHARE) + elif change == "extra_share": + declared["gambling_share_of_recreation"] = { + "total": "recreation_consumption", + "numerator": ["c94311"], + "denominator": ["p609"], + } + elif change == "numerator": + declared[TOBACCO_SHARE]["numerator"] = ["c22111"] + elif change == "denominator": + declared[ON_TRADE_SHARE]["denominator"] = list(UK_LCFS_ON_TRADE_ALCOHOL_CODES) + else: + declared[TOBACCO_SHARE]["total"] = "recreation_consumption" + + with pytest.raises(ValueError, match="declares shares"): + lcfs_donor_shares(_with_operation(stage, "derive", shares=declared)) + + +def test_chain_draws_the_spend_targets_before_the_shares() -> None: + from microcosm.build.country_spec import load_country_spec + from microcosm.build.uk_runtime.lcfs_consumption import ( + lcfs_chain_targets, + lcfs_donor_shares, + ) + + stage = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + shares = lcfs_donor_shares(stage) + reordered = _with_operation( + stage, + "fit_weighted_qrf_chain", + targets=[*UK_LCFS_CONSUMPTION_TARGET_COLUMNS, ON_TRADE_SHARE, TOBACCO_SHARE], + ) + with pytest.raises(ValueError, match="followed by the declared shares"): + lcfs_chain_targets(reordered, shares) + with pytest.raises(ValueError, match="spend targets first"): + impute_lcfs_consumption( + pd.DataFrame(), + pd.DataFrame(), + seed=0, + n_estimators=2, + record_ids=[], + targets=(TOBACCO_SHARE, *UK_LCFS_CONSUMPTION_TARGET_COLUMNS), + ) + + +def test_appending_the_excise_shares_moves_no_spend_draw() -> None: + """The chain with the shares draws the spend targets the chain without them did.""" + + from microcosm.build.uk_runtime.lcfs_consumption import UK_LCFS_EXCISE_SHARES + + person, household = _synthetic_lcfs_donor() + plain = clean_lcfs_consumption_table(person, household) + donor = clean_lcfs_consumption_table( + person, household, shares=UK_LCFS_EXCISE_SHARES + ) + recipient = plain.iloc[:40].loc[:, list(UK_LCFS_CONSUMPTION_PREDICTORS)] + ids = np.arange(1, 41) + + before = impute_lcfs_consumption( + plain, recipient, seed=0, n_estimators=5, record_ids=ids + ) + after = impute_lcfs_consumption( + donor, + recipient, + seed=0, + n_estimators=5, + record_ids=ids, + targets=(*UK_LCFS_CONSUMPTION_TARGET_COLUMNS, *UK_LCFS_EXCISE_SHARES), + ) + + pd.testing.assert_frame_equal( + after.draws[list(UK_LCFS_CONSUMPTION_TARGET_COLUMNS)], before.draws + ) + assert ( + after.fit_weight_records[: len(UK_LCFS_CONSUMPTION_TARGET_COLUMNS)] + == before.fit_weight_records + ) + shares = after.draws[list(UK_LCFS_EXCISE_SHARES)].to_numpy() + assert ((shares >= 0.0) & (shares <= 1.0)).all() + + +def test_the_chain_fits_the_gate_calibration_it_declares(monkeypatch) -> None: + """The committed chain cross-fits its gates; an undeclared one stays in sample.""" + + import dataclasses + + import microcosm.fit + from microcosm.build.country_spec import load_country_spec + from microcosm.build.uk_runtime.lcfs_consumption import _qrf_gate_calibration + + stage = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + assert _qrf_gate_calibration(stage) == "cross_fitted" + undeclared = { + key: value + for key, value in next( + operation.parameters + for operation in stage.operations + if operation.kind == "fit_weighted_qrf_chain" + ).items() + if key != "gate_calibration" + } + plain = dataclasses.replace( + stage, + operations=tuple( + dataclasses.replace(operation, parameters=undeclared) + if operation.kind == "fit_weighted_qrf_chain" + else operation + for operation in stage.operations + ), + ) + assert _qrf_gate_calibration(plain) == "in_sample" + + built = [] + real = microcosm.fit.RegimeGatedQRF + + def recording(**kwargs): + built.append(kwargs.get("gate_calibration")) + return real(**kwargs) + + monkeypatch.setattr(microcosm.fit, "RegimeGatedQRF", recording) + person, household = _synthetic_lcfs_donor() + donor = clean_lcfs_consumption_table(person, household) + recipient = donor.iloc[:20].loc[:, list(UK_LCFS_CONSUMPTION_PREDICTORS)] + impute_lcfs_consumption( + donor, + recipient, + seed=0, + n_estimators=2, + record_ids=np.arange(1, 21), + gate_calibration=_qrf_gate_calibration(stage), + ) + assert built == ["cross_fitted"] + + +def test_excise_spending_splits_each_drawn_total() -> None: + from microcosm.build.uk_runtime.lcfs_consumption import excise_spending + + draws = pd.DataFrame( + { + "alcohol_and_tobacco_consumption": [100.0, 50.0, 0.0], + "restaurants_and_hotels_consumption": [200.0, 0.0, 30.0], + "recreation_consumption": [400.0, 80.0, 0.0], + TOBACCO_SHARE: [0.25, 1.0, 0.4], + ON_TRADE_SHARE: [0.1, 0.5, 1.0], + GAMBLING_SHARE: [0.05, 0.0, 0.3], + LOTTERY_SHARE: [0.25, 1.0, 0.5], + BETTING_SHARE: [0.6, 0.2, 1.0], + } + ) + + spending = excise_spending(draws) + + assert spending["tobacco_spending"].tolist() == [25.0, 50.0, 0.0] + assert spending["off_trade_alcohol_spending"].tolist() == [75.0, 0.0, 0.0] + assert spending["on_trade_alcohol_spending"].tolist() == [20.0, 0.0, 30.0] + assert spending["gambling_stakes"].tolist() == [20.0, 0.0, 0.0] + # The stakes split in turn: the National Lottery's share, then the betting + # and gaming share of the rest, which leaves the society and Irish + # lotteries the remainder. + assert spending["national_lottery_stakes"].tolist() == [5.0, 0.0, 0.0] + assert spending["other_gambling_stakes"].tolist() == [15.0, 0.0, 0.0] + assert spending["betting_and_gaming_stakes"].tolist() == [9.0, 0.0, 0.0] + np.testing.assert_allclose( + spending["tobacco_spending"] + spending["off_trade_alcohol_spending"], + draws["alcohol_and_tobacco_consumption"], + ) + np.testing.assert_allclose( + spending["national_lottery_stakes"] + spending["other_gambling_stakes"], + spending["gambling_stakes"], + ) + + +def test_clip_holds_drawn_shares_to_the_unit_interval() -> None: + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_EXCISE_SHARES, + clip_excise_shares, + ) + + draws = pd.DataFrame( + { + TOBACCO_SHARE: [0.2, 1.2, -0.1], + ON_TRADE_SHARE: [0.5] * 3, + GAMBLING_SHARE: [0.1] * 3, + LOTTERY_SHARE: [0.4] * 3, + BETTING_SHARE: [1.0] * 3, + } + ) + + held, outside = clip_excise_shares(draws, UK_LCFS_EXCISE_SHARES) + + assert held[TOBACCO_SHARE].tolist() == [0.2, 1.0, 0.0] + assert held[ON_TRADE_SHARE].tolist() == [0.5] * 3 + assert outside == { + TOBACCO_SHARE: "<10", + ON_TRADE_SHARE: 0, + GAMBLING_SHARE: 0, + LOTTERY_SHARE: 0, + BETTING_SHARE: 0, + } + + def test_energy_split_sums_each_fuels_labelled_parts() -> None: # microcosm#1164: b226 is the gas component of a combined bill and b227 the # electricity one; b489 is the electricity account less its rebate (b175 @@ -1076,6 +1444,58 @@ def wmean_kwh(spend, fuel, mask): assert receipt["gas_connected_rows"] == int((gas > 0).sum()) +def _excise_lines( + rows: np.ndarray, p602: np.ndarray, p611: np.ndarray, p609: np.ndarray +) -> dict[str, np.ndarray]: + """The excise diary lines inside P602, P611 and P609 (microcosm#1359). + + Deterministic, so a donor's random draws keep their stream: tobacco on one + donor in four, all of P602 on one in twelve, the rest alcohol brought + home; drinks away from home on one donor in three, a few pennies past + P611 on one in thirty-seven, as the tab's rounding of P611 allows; and + gambling stakes, a twentieth of P609, on one donor in five. + """ + + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_GAMBLING_STAKE_CODES, + UK_LCFS_OFF_TRADE_ALCOHOL_CODES, + UK_LCFS_ON_TRADE_ALCOHOL_CODES, + ) + + p602 = np.asarray(p602, dtype=float) + p611 = np.asarray(p611, dtype=float) + tobacco = np.where(rows % 12 == 0, p602, np.where(rows % 4 == 0, 0.3 * p602, 0.0)) + lines = { + "c22111": 0.7 * tobacco, + "c22121": np.zeros(len(rows)), + "c22131": 0.3 * tobacco, + } + mix = (0.2, 0.3, 0.05, 0.1, 0.05, 0.1, 0.2) + lines.update( + { + code: share * (p602 - tobacco) + for code, share in zip(UK_LCFS_OFF_TRADE_ALCOHOL_CODES, mix, strict=True) + } + ) + on_trade = np.where( + rows % 37 == 5, p611 + 0.03, np.where(rows % 3 == 0, 0.25 * p611, 0.0) + ) + lines.update( + { + code: on_trade / len(UK_LCFS_ON_TRADE_ALCOHOL_CODES) + for code in UK_LCFS_ON_TRADE_ALCOHOL_CODES + } + ) + stakes = np.where(rows % 5 == 0, 0.05 * np.asarray(p609, dtype=float), 0.0) + lines.update( + { + code: stakes / len(UK_LCFS_GAMBLING_STAKE_CODES) + for code in UK_LCFS_GAMBLING_STAKE_CODES + } + ) + return lines + + def _synthetic_lcfs_donor( n: int = 240, seed: int = 4 ) -> tuple[pd.DataFrame, pd.DataFrame]: @@ -1136,6 +1556,9 @@ def _synthetic_lcfs_donor( b017=np.where(rows % 20 == 3, 5.0, 0.0), ) ) + household.update( + _excise_lines(rows, household["p602"], household["p611"], household["p609"]) + ) person = pd.DataFrame( { "case": rows + 1, @@ -1147,11 +1570,12 @@ def _synthetic_lcfs_donor( return person, pd.DataFrame(household) -def _synthetic_lcfs_stage(household_columns=None): +def _synthetic_lcfs_stage(household_columns=None, *, excise=True): """The committed lcfs_consumption stage on synthetic inputs, minus the engine. The uprating step needs the installed engine and is dropped; the QRF is - shrunk to four trees. ``household_columns(n)`` adds frame columns. + shrunk to four trees. ``household_columns(n)`` adds frame columns; with + ``excise=False`` the excise step is dropped too. """ import dataclasses @@ -1165,6 +1589,8 @@ def _synthetic_lcfs_stage(household_columns=None): for operation in committed.operations: if operation.kind == "uprate_donor_columns": continue + if not excise and operation.kind == "level_excise_quantities": + continue if operation.kind == "fit_weighted_qrf_chain": operation = SourceOperationSpec( kind=operation.kind, @@ -1289,11 +1715,24 @@ def test_stage_transform_prices_bus_fares_from_journeys() -> None: out = result.table("household") assert set(UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS) <= set(out.columns) - # The 20 chain targets (the heating fuels last, pe-uk#2572), the road-fuel + # The 20 chain targets (the heating fuels after the spend targets, + # pe-uk#2572) and the five excise shares (microcosm#1359), the road-fuel # redraw's total and petrol share, the prepayment-meter flag # (microcosm#1110), then the gas-payer classifier and amount model the # connection walk reads (microcosm#1164). - assert len(transform.fit_weight_records) == 25 + assert len(transform.fit_weight_records) == 30 + assert [ + record.fit_name.rsplit(":", 1)[1] + for record in transform.fit_weight_records[18:25] + ] == [ + "liquid_fuel_consumption", + "solid_fuel_consumption", + "tobacco_share_of_alcohol_and_tobacco", + "on_trade_alcohol_share_of_restaurants_and_hotels", + "gambling_stakes_share_of_recreation", + "national_lottery_share_of_gambling_stakes", + "betting_and_gaming_share_of_other_gambling_stakes", + ] assert transform.fit_weight_records[-4].fit_name.endswith( ":petrol_share_of_road_fuel" ) @@ -1328,6 +1767,41 @@ def test_stage_transform_prices_bus_fares_from_journeys() -> None: "energy_pricing", "energy_rake", } <= set(evidence) + # The excise shares are scratch: neither they nor the spending they give + # reach the frame (microcosm#1359), and the receipt sets the frame's part + # of each total beside the donor's. + from microcosm.build.uk_runtime.lcfs_consumption import UK_LCFS_EXCISE_SHARES + + scratch = { + *UK_LCFS_EXCISE_SHARES, + "tobacco_spending", + "off_trade_alcohol_spending", + "on_trade_alcohol_spending", + "gambling_stakes", + } + assert not scratch & set(out.columns) + assert not scratch & set(evidence["support_clip"]["columns"]) + shares = evidence["excise_shares"] + assert set(shares) == set(UK_LCFS_EXCISE_SHARES) + tobacco = shares["tobacco_share_of_alcohol_and_tobacco"] + assert tobacco["total"] == "alcohol_and_tobacco_consumption" + assert tobacco["frame"]["draws_outside_unit_interval"] == 0 + assert 0.0 < tobacco["frame"]["share_of_total"] < 1.0 + assert 0.0 < tobacco["frame"]["positive_share"] < 1.0 + assert tobacco["donor"]["positive_support"] == "30+" + assert tobacco["donor"]["clipped_at_one"] == 0 + # The synthetic P602 is its ten lines, so no donor's total sits beside them. + assert tobacco["donor"]["total_beside_lines"] == 0.0 + on_trade = shares["on_trade_alcohol_share_of_restaurants_and_hotels"] + assert on_trade["total"] == "restaurants_and_hotels_consumption" + assert on_trade["frame"]["draws_outside_unit_interval"] == 0 + # Seven donors' drinks pass P611 by pennies and are held at one. + assert on_trade["donor"]["clipped_at_one"] == "<10" + assert "total_beside_lines" not in on_trade["donor"] + gambling = shares["gambling_stakes_share_of_recreation"] + assert gambling["total"] == "recreation_consumption" + assert gambling["frame"]["draws_outside_unit_interval"] == 0 + assert gambling["donor"]["positive_support"] == "30+" assert evidence["energy_pricing"]["payment_method"] == "all" assert evidence["energy_pricing"]["vat_treatment"] == "including_vat" assert evidence["energy_pricing"]["gas_connection"]["rule"] == ( @@ -3125,3 +3599,476 @@ def draw(rows: pd.DataFrame, ids: np.ndarray) -> pd.DataFrame: perturbed_column="hbai_household_net_income", perturbed_value=777.0, ) + + +def test_excise_share_draws_move_only_for_the_households_whose_inputs_move() -> None: + """The shares are keyed on household ids too (microcosm#1359).""" + + from microcosm.build.uk_runtime.lcfs_consumption import UK_LCFS_EXCISE_SHARES + from test_support.microcosm_build.uk_keyed_draws import ( + assert_draws_are_keyed_on_ids, + ) + + donor = clean_lcfs_consumption_table( + *_synthetic_lcfs_donor(), shares=UK_LCFS_EXCISE_SHARES + ) + recipient = donor.iloc[:10].loc[:, list(UK_LCFS_CONSUMPTION_PREDICTORS)] + + def draw(rows: pd.DataFrame, ids: np.ndarray) -> pd.DataFrame: + return impute_lcfs_consumption( + donor, + rows, + seed=0, + n_estimators=5, + record_ids=ids, + targets=(*UK_LCFS_CONSUMPTION_TARGET_COLUMNS, *UK_LCFS_EXCISE_SHARES), + ).draws.reset_index(drop=True) + + assert_draws_are_keyed_on_ids( + draw, + recipient, + np.arange(1, len(recipient) + 1), + perturbed_column="hbai_household_net_income", + perturbed_value=777.0, + ) + + +def _excise_draws() -> tuple[pd.DataFrame, np.ndarray]: + """Drawn totals and excise shares of four households (microcosm#1359). + + Tobacco spending is 250, 500, 0 and 0; off-trade alcohol 750, 0, 0 and + 800; on-trade alcohol 200, 0, 300 and 0; gambling stakes 60, 0, 0 and + 100, of which the National Lottery's are 30, 0, 0 and 0 and the betting + and gaming stakes 0, 0, 0 and 75 (the first household's other 30 are + society lotteries). + """ + + draws = pd.DataFrame( + { + "alcohol_and_tobacco_consumption": [1000.0, 500.0, 0.0, 800.0], + "restaurants_and_hotels_consumption": [2000.0, 0.0, 600.0, 400.0], + "recreation_consumption": [3000.0, 1000.0, 0.0, 2000.0], + TOBACCO_SHARE: [0.25, 1.0, 0.0, 0.0], + ON_TRADE_SHARE: [0.1, 0.0, 0.5, 0.0], + GAMBLING_SHARE: [0.02, 0.0, 0.0, 0.05], + LOTTERY_SHARE: [0.5, 0.0, 0.0, 0.0], + BETTING_SHARE: [0.0, 0.0, 0.0, 0.75], + } + ) + return draws, np.array([1.0e3, 2.0e3, 3.0e3, 4.0e3]) + + +def test_excise_levels_turn_published_rows_into_engine_units(monkeypatch) -> None: + from microcosm.build.uk_runtime.lcfs_consumption import excise_levels + from test_support.microcosm_build.uk_excise_facts import ( + excise_declaration, + patch_excise_facts, + ) + + patch_excise_facts(monkeypatch) + resolved = excise_levels(excise_declaration()) + levels, volume = resolved.quantities, resolved.volume + + # Litres of pure alcohol over the strength are litres of the product; + # sticks are cigarettes and kilograms a thousand grams each. + assert levels["beer_litres"].annual == pytest.approx(2.0e5 / 0.04) + assert levels["spirits_litres"].annual == pytest.approx(0.5e5 / 0.40) + assert levels["cigarettes_per_week"].annual == pytest.approx(100.0e6) + assert levels["hand_rolling_tobacco_grams_per_week"].annual == pytest.approx(0.5e6) + assert levels["beer_litres"].receipt["source_record_id"] == ( + "synthetic.alcohol_clearances.beer_and_cider.fy2024" + ) + assert volume.rule == "spending" and volume.on_trade_share is None + # Two inputs may split one row between them, if they take all of it. + split = excise_declaration() + beer = split["outputs"]["beer_litres"] + split["outputs"]["cider_litres"] = { + **beer, + "share": 0.2, + "strength": { + "value": 0.045, + "parameter_path": "household.consumption.alcohol.cider_abv", + }, + } + beer["share"] = 0.8 + levels = excise_levels(split).quantities + assert levels["beer_litres"].annual == pytest.approx(0.8 * 2.0e5 / 0.04) + assert levels["cider_litres"].annual == pytest.approx(0.2 * 2.0e5 / 0.045) + + +@pytest.mark.parametrize( + ("change", "match"), + [ + (lambda d: d.update(resource="other.json"), "must read"), + (lambda d: d.update(period_type="calendar_year"), "fiscal-year"), + (lambda d: d.update(weeks_per_year=52.18), "weeks_per_year"), + (lambda d: d.update(fiscal_start=None), "fiscal_start"), + ( + lambda d: d["outputs"].update(vape_litres=d["outputs"]["beer_litres"]), + "cannot write", + ), + ( + lambda d: d["outputs"]["cigarettes_per_week"].update(unit="kilogram"), + "declared in", + ), + # A row stored in another unit than the declared one is refused: read + # as litres of the product, litres of pure alcohol would skip the + # strength. + ( + lambda d: ( + d["outputs"]["wine_litres"].update(unit="litre"), + d["outputs"]["wine_litres"].pop("strength"), + ), + "is stored in", + ), + (lambda d: d["outputs"]["wine_litres"].pop("strength"), "needs a strength"), + ( + lambda d: d["outputs"]["cigarettes_per_week"].update( + strength={"value": 1.0, "parameter_path": "x"} + ), + "needs a strength", + ), + ( + lambda d: d["outputs"]["wine_litres"]["strength"].pop("parameter_path"), + "engine parameter", + ), + ( + lambda d: d["outputs"]["wine_litres"]["strength"].update(value=12.0), + r"outside \(0, 1\]", + ), + (lambda d: d["outputs"]["beer_litres"].update(share=0.5), "not all of each"), + ( + lambda d: d["outputs"]["beer_litres"]["dimensions"].update(product="lager"), + "expected one", + ), + (lambda d: d.update(alcohol_volume_weights={"rule": "price"}), "unsupported"), + ], +) +def test_excise_levels_refuse_a_declaration_they_cannot_apply( + monkeypatch, change, match +) -> None: + from microcosm.build.uk_runtime.lcfs_consumption import excise_levels + from test_support.microcosm_build.uk_excise_facts import ( + excise_declaration, + patch_excise_facts, + ) + + patch_excise_facts(monkeypatch) + declaration = excise_declaration() + change(declaration) + + with pytest.raises(ValueError, match=match): + excise_levels(declaration) + + +def test_level_excise_quantities_gives_each_household_its_part(monkeypatch) -> None: + from microcosm.build.uk_runtime.lcfs_consumption import ( + excise_levels, + level_excise_quantities, + ) + from test_support.microcosm_build.uk_excise_facts import ( + excise_declaration, + patch_excise_facts, + ) + + patch_excise_facts(monkeypatch) + resolved = excise_levels(excise_declaration()) + levels = resolved.quantities + draws, weights = _excise_draws() + + quantities, receipt = level_excise_quantities( + draws, levels=resolved, weights=weights + ) + + alcohol = np.array([950.0, 0.0, 300.0, 800.0]) + tobacco = np.array([250.0, 500.0, 0.0, 0.0]) + np.testing.assert_allclose( + quantities["beer_litres"], + levels["beer_litres"].annual * alcohol / (weights @ alcohol), + ) + # The weekly inputs are the annual quantity over the engine's 52 weeks. + np.testing.assert_allclose( + quantities["cigarettes_per_week"] * 52, + levels["cigarettes_per_week"].annual * tobacco / (weights @ tobacco), + ) + for column, level in levels.items(): + entry = receipt["outputs"][column] + assert entry["frame_annual_total"] == pytest.approx(level.annual) + assert entry["factor"] * entry["key_total"] == pytest.approx(level.annual) + assert ( + entry["positive_share"] == receipt["keys"][entry["key"]]["positive_share"] + ) + assert receipt["outputs"]["cigarettes_per_week"]["stored_per"] == "week" + assert receipt["outputs"]["wine_litres"]["stored_per"] == "year" + assert receipt["keys"]["tobacco"]["positive_share"] == pytest.approx(0.3) + assert receipt["components"]["off_trade_alcohol_spending"]["weighted_total"] == ( + pytest.approx(weights @ np.array([750.0, 0.0, 0.0, 800.0])) + ) + # The step writes only the engine's inputs: no spending, no total. + assert list(quantities.columns) == [*levels, *resolved.draught] + # Lottery Duty's base follows the National Lottery's stakes and every other + # gambling base the betting and gaming stakes, so the household whose + # other stakes are society lotteries carries none of them; the draught + # share is the published one. + lottery = np.array([30.0, 0.0, 0.0, 0.0]) + betting = np.array([0.0, 0.0, 0.0, 75.0]) + np.testing.assert_allclose( + quantities["national_lottery_ticket_spending"], + levels["national_lottery_ticket_spending"].annual + * lottery + / (weights @ lottery), + ) + for column in ( + "remote_gaming_net_losses", + "land_based_fixed_odds_betting_net_losses", + ): + np.testing.assert_allclose( + quantities[column], levels[column].annual * betting / (weights @ betting) + ) + assert receipt["keys"]["national_lottery"]["positive_share"] == pytest.approx(0.1) + assert receipt["keys"]["betting_and_gaming"]["positive_share"] == pytest.approx(0.4) + assert receipt["components"]["gambling_stakes"]["weighted_total"] == ( + pytest.approx(weights @ np.array([60.0, 0.0, 0.0, 100.0])) + ) + assert (quantities["beer_draught_share"] == 0.25).all() + assert receipt["draught_shares"]["beer_draught_share"]["share"] == 0.25 + + +def test_published_on_trade_share_gives_each_channel_its_volume(monkeypatch) -> None: + from microcosm.build.uk_runtime.lcfs_consumption import ( + excise_levels, + level_excise_quantities, + ) + from test_support.microcosm_build.uk_excise_facts import ( + ON_TRADE_VOLUME_WEIGHTS, + excise_declaration, + patch_excise_facts, + ) + + patch_excise_facts(monkeypatch) + resolved = excise_levels( + excise_declaration(alcohol_volume_weights=ON_TRADE_VOLUME_WEIGHTS) + ) + levels, volume = resolved.quantities, resolved.volume + draws, weights = _excise_draws() + + quantities, receipt = level_excise_quantities( + draws, levels=resolved, weights=weights + ) + + assert volume.on_trade_share == 0.25 + off = np.array([750.0, 0.0, 0.0, 800.0]) + on = np.array([200.0, 0.0, 300.0, 0.0]) + np.testing.assert_allclose( + quantities["wine_litres"], + levels["wine_litres"].annual + * (0.75 * off / (weights @ off) + 0.25 * on / (weights @ on)), + ) + assert receipt["alcohol_volume_weights"]["source_record_id"] == ( + "synthetic.alcohol_on_trade_share.all_alcohol.fy2024" + ) + + +def test_excise_quantities_step_is_a_no_op_when_undeclared() -> None: + import dataclasses + + from microcosm.build.country_spec import load_country_spec + from microcosm.build.uk_runtime.lcfs_consumption import lcfs_excise_quantities + + committed = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + stage = dataclasses.replace( + committed, + operations=tuple( + operation + for operation in committed.operations + if operation.kind != "level_excise_quantities" + ), + ) + + assert lcfs_excise_quantities(stage, pd.DataFrame(), weights=[], shares={}) == ( + None, + None, + ) + + +def test_excise_quantities_step_needs_the_excise_shares(monkeypatch) -> None: + from microcosm.build.country_spec import load_country_spec + from microcosm.build.uk_runtime.lcfs_consumption import lcfs_excise_quantities + from test_support.microcosm_build.uk_excise_facts import ( + excise_declaration, + patch_excise_facts, + ) + + patch_excise_facts(monkeypatch, excise_declaration()) + stage = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + + with pytest.raises(ValueError, match="excise shares"): + lcfs_excise_quantities(stage, pd.DataFrame(), weights=[], shares={}) + + +def test_stage_writes_the_engines_excise_inputs_when_declared(monkeypatch) -> None: + """End to end: the step adds the engine's inputs and moves nothing else.""" + + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS, + UK_LCFS_EXCISE_DECLARED_OUTPUTS, + UK_LCFS_EXCISE_GAMBLING_OUTPUTS, + ) + from microcosm.build.uk_runtime.stage_health import uk_stage_health_gate + from test_support.microcosm_build.uk_excise_facts import ( + EXCISE_DECLARATION, + excise_declaration, + patch_excise_facts, + ) + + plain = _synthetic_lcfs_stage(excise=False) + before = plain.transform(plain.frame).table("household") + assert not set(UK_LCFS_EXCISE_DECLARED_OUTPUTS) & set(before.columns) + patch_excise_facts(monkeypatch, excise_declaration()) + synthetic = _synthetic_lcfs_stage() + result = synthetic.transform(synthetic.frame) + + out = result.table("household") + weights = result.weights_for("household").values + columns = [ + column + for column in UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS + if column not in UK_LCFS_EXCISE_DECLARED_OUTPUTS + ] + pd.testing.assert_frame_equal(out[columns], before[columns]) + evidence = synthetic.transform.checkpoint_metadata()["evidence"] + receipt = evidence["excise_quantities"] + assert set(receipt["outputs"]) == { + *EXCISE_DECLARATION["outputs"], + *UK_LCFS_EXCISE_GAMBLING_OUTPUTS, + } + assert (out["beer_draught_share"] == 0.25).all() + for column, entry in receipt["outputs"].items(): + per = 52 if entry["stored_per"] == "week" else 1 + assert weights @ out[column].to_numpy() * per == pytest.approx( + entry["annual_level"] + ) + assert receipt["period_type"] == "fiscal_year" + assert receipt["weeks_per_year"] == 52 + gate = uk_stage_health_gate( + evidence=evidence, + stage="lcfs_consumption", + check="excise_quantities", + parameters={ + "stage": "lcfs_consumption", + "check": "excise_quantities", + "maximum_relative_deviation": 1e-9, + "maximum_parent_residual_share": 0.01, + "required_support_band": "30+", + }, + ) + assert gate.passed, gate.failures + + +def test_gambling_bases_are_receipts_over_rates_with_betting_split_by_yield( + monkeypatch, +) -> None: + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_EXCISE_GAMBLING_OUTPUTS, + UK_LCFS_GENERAL_BETTING_OUTPUTS, + excise_levels, + ) + from test_support.microcosm_build.uk_excise_facts import ( + excise_declaration, + patch_excise_facts, + ) + + patch_excise_facts(monkeypatch) + resolved = excise_levels(excise_declaration()) + levels = resolved.quantities + + # A single-duty base is the duty's receipts over its rate; Machine Games + # Duty's bands come from their liabilities; Gaming Duty's from the + # engine's effective-rate proxy. + assert levels["remote_gaming_net_losses"].annual == pytest.approx(2.1e6 / 0.21) + assert levels["national_lottery_ticket_spending"].annual == pytest.approx( + 1.2e6 / 0.12 + ) + assert levels["machine_games_standard_rate_net_takings"].annual == pytest.approx( + 6.0e5 / 0.20 + ) + assert levels["land_based_casino_net_losses"].annual == pytest.approx( + 2.0e5 / 0.235487 + ) + # General Betting Duty's base, its receipts over the fixed-odds rate, is + # split by yield: over the counter 4, remote fixed odds 4 (a quarter of + # remote betting yield is horse racing), exchange 1 and pools 0.6 + 0.4. + base = 1.5e6 / 0.15 + assert [levels[column].annual for column in UK_LCFS_GENERAL_BETTING_OUTPUTS] == ( + pytest.approx([0.4 * base, 0.1 * base, 0.3 * base, 0.1 * base, 0.1 * base]) + ) + horse = levels["remote_uk_horseracing_betting_net_losses"].receipt + assert horse["remote_horse_racing_share"] == pytest.approx(0.25) + assert horse["split_by"]["remote_horses"]["geography_id"] == "K03000001" + # Lottery Duty's base is shared by the National Lottery's stakes, every + # other base by the betting and gaming stakes. + assert { + column: levels[column].key + for column in UK_LCFS_EXCISE_GAMBLING_OUTPUTS + if levels[column].key != "betting_and_gaming" + } == {"national_lottery_ticket_spending": "national_lottery"} + # Spread betting has no published base and stays at the engine's zero. + assert "financial_spread_betting_net_losses" not in levels + assert "other_spread_betting_net_losses" not in levels + # Draught relief: the draught-only and the draught-and-small-producer rows + # over all of the product's clearances. + assert resolved.draught["beer_draught_share"]["share"] == pytest.approx(0.25) + + +@pytest.mark.parametrize( + ("change", "match"), + [ + (lambda d: d["gambling"]["rates"].pop("casino"), "gambling rates must be"), + (lambda d: d["gambling"].pop("yield"), "gambling must declare"), + (lambda d: d["gambling"].update(receipts=["x"]), "receipts is not a mapping"), + # A series' own dimensions narrow its rows: there is no accrued series. + ( + lambda d: d["gambling"]["receipts"].update( + dimensions={"accounting_basis": "accrual"} + ), + "expected one", + ), + ( + lambda d: d["gambling"]["rates"]["lottery"].update(value=12.0), + r"outside \(0, 1\]", + ), + ( + lambda d: d["gambling"]["rates"]["bingo"].pop("parameter_path"), + "engine parameter", + ), + ( + lambda d: d["draught_shares"].update( + wine_draught_share=d["draught_shares"]["beer_draught_share"] + ), + "cannot write", + ), + ( + lambda d: d["draught_shares"]["beer_draught_share"].update(unit="litre"), + "must be declared in", + ), + ( + lambda d: d["draught_shares"]["beer_draught_share"].update(numerator=[]), + "declares no numerator", + ), + ], +) +def test_gambling_and_draught_declarations_are_held_to_the_step( + monkeypatch, change, match +) -> None: + from microcosm.build.uk_runtime.lcfs_consumption import excise_levels + from test_support.microcosm_build.uk_excise_facts import ( + excise_declaration, + patch_excise_facts, + ) + + patch_excise_facts(monkeypatch) + declaration = excise_declaration() + change(declaration) + + with pytest.raises(ValueError, match=match): + excise_levels(declaration) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_measure_simulation.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_measure_simulation.py index 8bf8849fe4..74106c2d05 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_measure_simulation.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_measure_simulation.py @@ -670,6 +670,14 @@ def test_exclusion_applier_warns_within_week_of_expiry(): # versus 7271 basis ruling is open (microcosm#890 G), held out after the # national hold-out arm. "orr.": 1, + # microcosm#1359 (2026-10-23): OBR's FY2024-25 excise receipts, whose + # level the stage sets from published clearances and bases at the + # engine's rates, measured with tools/diagnose_uk_consumption_taxes.py. + "obr.beer_and_cider_duties": 1, + "obr.wine_duties": 1, + "obr.spirits_duties": 1, + "obr.tobacco_duties": 1, + "obr.betting_and_gaming_duties": 1, } # The carer and childcare rows were retired on 2026-09-16 with the repairs @@ -706,7 +714,8 @@ def test_packaged_exclusions_load(): # with it (ruling D3). The ten HMRC £1m-and-over cells it bound on arm 1 # are held again on that arm's measured distortion. Arm 2 binds four of # the twelve UC payment bands, which it fits unbound (microcosm#1344). - assert len(names) == len(set(names)) == 33 + # microcosm#1359 adds the five OBR excise rows, measured at FY2024-25. + assert len(names) == len(set(names)) == 38 rehold = [entry for entry in exclusions if "_1_000_000_to_inf" in entry["name"]] assert {(e["approved_on"], e["expires_on"], e["tracking"]) for e in rehold} == { ("2026-10-23", "2027-01-23", "microcosm#1095") diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_national_calibration.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_national_calibration.py index a64bb5041b..dbebfa0eb7 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_national_calibration.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_national_calibration.py @@ -62,8 +62,9 @@ # months and ages 1-3, universal nursery 3; the age-4 cells are signed out); # the next policyengine-uk bump retires the OBR welfare-cap split and the # England postgraduate repayments (microcosm#1095), and England's single adult -# council tax discount binds (microcosm#953). -ACTIVE_REFERENCE_COUNT = 1336 +# council tax discount binds (microcosm#953); microcosm#1359 adds five OBR +# excise receipts rows, measured at FY2024-25. +ACTIVE_REFERENCE_COUNT = 1341 def _uc_reference(**overrides) -> LedgerTargetReference: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py index 23d429dde4..819e7bf37c 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_population_targets.py @@ -246,8 +246,9 @@ def test_uk_population_targets_shape_order_and_registry_accounting() -> None: # nursery age 3; the age-4 cells are signed out, as the bound rows fix # them). The next policyengine-uk bump retires the OBR welfare-cap split # and the England postgraduate repayments to registry_parity.excluded - # (microcosm#1095). - assert len(resource["targets"]) == 435 + # (microcosm#1095); microcosm#1359 adds five OBR excise receipts rows, + # measured at FY2024-25 and held out of the objective. + assert len(resource["targets"]) == 440 providers = resource["hierarchy"]["providers"] categories = resource["hierarchy"]["categories"] @@ -261,10 +262,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) == 376 + assert len(registry_scope) == 381 assert len(profile_scope) == 59 - assert target_ids[:376] == registry_scope - assert target_ids[376:] == profile_scope + assert target_ids[:381] == registry_scope + assert target_ids[381:] == profile_scope parity = resource["registry_parity"] assert parity["pinned_ref"] == "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3" @@ -286,9 +287,11 @@ def test_uk_population_targets_shape_order_and_registry_accounting() -> None: # the childcare costing fixes add (UK 3 to 6, England 0 to 6), nor the # five DfE funded-childcare single-age rows. The next policyengine-uk bump # retires the OBR welfare-cap split and the England postgraduate - # repayments to the excluded rows (microcosm#1095). + # repayments to the excluded rows (microcosm#1095). microcosm#1359's five + # OBR excise rows have no uk-data metric (uk-data never measured excise + # duty). assert len(mapped_target_ids) == 183 - assert len(unmapped_declarations) == 193 + assert len(unmapped_declarations) == 198 suppressed_ancestors = parity["suppressed_ancestors"] assert len(suppressed_ancestors) == 5 assert set(suppressed_ancestors).isdisjoint(parity["mapped"]) @@ -795,7 +798,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) == 435 + assert len(target_ids) == 440 assert len(target_ids) == len(set(target_ids)) @@ -1298,7 +1301,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) == 435 + assert len(targets) == 440 assert not any( f.get("variable") == "uc_calibration_child_entitlement" for target in targets diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_source_stages.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_source_stages.py index 1e3c1241ac..ad9eed5a83 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_source_stages.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_source_stages.py @@ -680,6 +680,7 @@ def test_e3_operation_kinds_are_declared_in_order(self) -> None: "redraw_zero_road_fuel", "level_road_fuel", "recompose_from_remainder", + "level_excise_quantities", "record_mass_conservation_receipt", ] assert [op.kind for op in stages["etb_vat"].operations] == [ @@ -817,6 +818,9 @@ def test_engine_predictor_and_rewrite_constants_match_manifest(self) -> None: UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS, UK_LCFS_CONSUMPTION_PREDICTORS, UK_LCFS_CONSUMPTION_TARGET_COLUMNS, + UK_LCFS_EXCISE_DECLARED_OUTPUTS, + UK_LCFS_EXCISE_GAMBLING_OUTPUTS, + UK_LCFS_EXCISE_SHARES, ) from microcosm.build.uk_runtime.uc_reporter_redraw import ( UC_REPORTER_AGGREGATES, @@ -887,15 +891,27 @@ def test_engine_predictor_and_rewrite_constants_match_manifest(self) -> None: tuple(lcfs_ops["fit_weighted_qrf_chain"].parameters["predictors"]) == UK_LCFS_CONSUMPTION_PREDICTORS ) - assert ( - tuple(lcfs_ops["fit_weighted_qrf_chain"].parameters["targets"]) - == UK_LCFS_CONSUMPTION_TARGET_COLUMNS + # The spend targets, then the excise shares, which are scratch and no + # output (microcosm#1359). + assert tuple(lcfs_ops["fit_weighted_qrf_chain"].parameters["targets"]) == ( + *UK_LCFS_CONSUMPTION_TARGET_COLUMNS, + *UK_LCFS_EXCISE_SHARES, ) + assert not set(UK_LCFS_EXCISE_SHARES) & set(UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS) assert UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS == ( *UK_LCFS_CONSUMPTION_TARGET_COLUMNS, "has_fuel_consumption", "uses_energy_prepayment_meter", + *UK_LCFS_EXCISE_DECLARED_OUTPUTS, ) + # The declared excise step writes exactly those inputs: its quantity + # outputs, its draught shares and every gambling base. + excise = lcfs_ops["level_excise_quantities"].parameters + assert { + *excise["outputs"], + *excise["draught_shares"], + *UK_LCFS_EXCISE_GAMBLING_OUTPUTS, + } == set(UK_LCFS_EXCISE_DECLARED_OUTPUTS) assert ( tuple(stages["etb_vat"].operations[2].parameters["predictors"]) == UK_ETB_VAT_ENGINE_PREDICTORS diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py index addd05917f..6b0c15d055 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_stage_health.py @@ -2865,3 +2865,163 @@ def test_the_1308_fact_gates_record_without_blocking_a_synthetic_smoke_build() - assert gates[gate_id]["population_fact_check"] is True contract = gates["uk_stage_uc_legacy_closure_take_up_contract"] assert contract.get("population_fact_check", False) is False + + +def test_excise_quantities_gate_recomputes_every_level_from_the_vendored_rows( + monkeypatch, +) -> None: + """The lcfs excise_quantities receipt is fact-checked at stage time (#1359).""" + + import copy + + import pandas as pd + + from microcosm.build.uk_runtime.lcfs_consumption import ( + excise_levels, + level_excise_quantities, + ) + from test_support.microcosm_build.uk_excise_facts import ( + excise_declaration, + patch_excise_facts, + ) + + declaration = excise_declaration() + patch_excise_facts(monkeypatch, declaration) + resolved = excise_levels(declaration) + tobacco, on_trade, gambling, lottery_share, betting_share = ( + "tobacco_share_of_alcohol_and_tobacco", + "on_trade_alcohol_share_of_restaurants_and_hotels", + "gambling_stakes_share_of_recreation", + "national_lottery_share_of_gambling_stakes", + "betting_and_gaming_share_of_other_gambling_stakes", + ) + draws = pd.DataFrame( + { + "alcohol_and_tobacco_consumption": [1000.0, 500.0, 0.0, 800.0], + "restaurants_and_hotels_consumption": [2000.0, 0.0, 600.0, 400.0], + "recreation_consumption": [3000.0, 1000.0, 0.0, 2000.0], + tobacco: [0.25, 1.0, 0.0, 0.0], + on_trade: [0.1, 0.0, 0.5, 0.0], + gambling: [0.02, 0.0, 0.0, 0.05], + lottery_share: [0.5, 0.0, 0.0, 0.0], + betting_share: [0.0, 0.0, 0.0, 0.75], + } + ) + _, quantities = level_excise_quantities( + draws, + levels=resolved, + weights=np.array([1.0e3, 2.0e3, 3.0e3, 4.0e3]), + ) + receipt = { + "period_type": "fiscal_year", + "period_value": 2024, + "weeks_per_year": 52, + **quantities, + } + shares = { + name: { + "frame": {"draws_outside_unit_interval": 0}, + "donor": {"positive_support": "30+", "total_beside_lines": residual}, + } + for name, residual in ( + (tobacco, 0.004), + (on_trade, None), + (gambling, None), + (lottery_share, None), + (betting_share, None), + ) + } + parameters = { + "stage": "lcfs_consumption", + "check": "excise_quantities", + "maximum_relative_deviation": 1e-9, + "maximum_parent_residual_share": 0.01, + "required_support_band": "30+", + } + + def run(excise, excise_shares=shares): + return uk_stage_health_gate( + evidence={ + "stage": "lcfs_consumption", + "excise_quantities": excise, + "excise_shares": excise_shares, + }, + stage="lcfs_consumption", + check="excise_quantities", + parameters=parameters, + ) + + def failing(change, fragment: str) -> None: + excise, excise_shares = copy.deepcopy(receipt), copy.deepcopy(shares) + change(excise, excise_shares) + result = run(excise, excise_shares) + assert not result.passed and any(fragment in f for f in result.failures), ( + fragment, + result.failures, + ) + + passed = run(receipt) + assert passed.passed, passed.failures + assert passed.details["levels"]["beer_litres"] == pytest.approx(2.0e5 / 0.04) + beer = lambda e, s: e["outputs"]["beer_litres"] # noqa: E731 + failing(lambda e, s: beer(e, s).update(published=2.1), "published") + failing(lambda e, s: beer(e, s).update(annual_level=1.0), "annual_level") + failing(lambda e, s: beer(e, s).update(source_record_id="x"), "declared row") + failing( + lambda e, s: beer(e, s).update( + frame_annual_total=beer(e, s)["frame_annual_total"] * 0.99 + ), + "is not the level", + ) + failing( + lambda e, s: beer(e, s).update(factor=beer(e, s)["factor"] * 1.01), + "does not reproduce", + ) + failing( + lambda e, s: beer(e, s).update(positive_share=0.99), "where its spending is" + ) + # A betting and gaming base positive where the National Lottery's stakes + # are, not where its own are. + failing( + lambda e, s: e["outputs"]["remote_gaming_net_losses"].update( + positive_share=e["keys"]["national_lottery"]["positive_share"] + ), + "where its spending is", + ) + failing(lambda e, s: e["outputs"].pop("wine_litres"), "not the declared") + failing(lambda e, s: e.update(weeks_per_year=52.18), "weeks_per_year") + failing( + lambda e, s: e["draught_shares"]["beer_draught_share"].update(share=0.3), + "beer_draught_share", + ) + failing(lambda e, s: e["draught_shares"].clear(), "draught shares") + lottery = lambda e, s: e["outputs"]["national_lottery_ticket_spending"] # noqa: E731 + failing( + lambda e, s: lottery(e, s).update( + frame_annual_total=lottery(e, s)["frame_annual_total"] * 1.01 + ), + "national_lottery_ticket_spending", + ) + failing(lambda e, s: e.update(period_value=2025), "period_value") + failing( + lambda e, s: e.update(alcohol_volume_weights={"rule": "other"}), + "volume weights", + ) + failing( + lambda e, s: s[tobacco]["frame"].update(draws_outside_unit_interval="<10"), + "left [0, 1]", + ) + failing( + lambda e, s: s[on_trade]["donor"].update(positive_support="10-29"), + "rests on", + ) + failing( + lambda e, s: s[tobacco]["donor"].update(total_beside_lines=0.02), + "beside", + ) + # A residual withheld for resting on under ten donors is under the ceiling. + withheld = copy.deepcopy(shares) + withheld[tobacco]["donor"]["total_beside_lines"] = "<10" + assert run(receipt, withheld).passed + with pytest.raises(ValueError, match="excise_quantities must be an object"): + run(None) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py index 60c8f904d5..a84e34c720 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_target_references.py @@ -73,8 +73,9 @@ _TEST_PATHS = paths_for("microcosm-build") # The next policyengine-uk bump retires three rows (microcosm#1095) and binds -# England's single adult council tax discount (microcosm#953). -ACTIVE_REFERENCE_COUNT = 1336 +# England's single adult council tax discount (microcosm#953); microcosm#1359 +# adds five OBR excise receipts rows, measured at FY2024-25. +ACTIVE_REFERENCE_COUNT = 1341 REGION_TIER_LEVEL = {code: level for level, code in UK_REGION_TIER} diff --git a/packages/microcosm-build/tests/engine_workflow/us/test_us_multispine_pool_tool.py b/packages/microcosm-build/tests/engine_workflow/us/test_us_multispine_pool_tool.py index ed52466467..c40e41c0f9 100644 --- a/packages/microcosm-build/tests/engine_workflow/us/test_us_multispine_pool_tool.py +++ b/packages/microcosm-build/tests/engine_workflow/us/test_us_multispine_pool_tool.py @@ -342,8 +342,9 @@ def capture_equality(expected: object, actual: object) -> None: # bytes (its seed protocol); microcosm#1124's opt-in # retain_best_objective and microcosm#1301's budget_search_bracket # move it. It covers microcosm.fit.qrf's attested bytes too, so - # fit_draw_next's caller-owned uniforms (microcosm#1332) move it. - "spec_sha256": "19460fc168a6f9ed44e580d0e36777cce78bb33cb52b75630ee86203fa795684", + # fit_draw_next's caller-owned uniforms (microcosm#1332) and the + # opt-in cross-fitted gate calibration move it. + "spec_sha256": "08fbb11e05114797f0b8977fd0cfd1f7afb5196f51c9dc4ad4941b8f0aa2154e", }, } diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index a680a81949..2520ab7afc 100644 --- a/packages/microcosm-data/src/microcosm/data/contract.py +++ b/packages/microcosm-data/src/microcosm/data/contract.py @@ -451,13 +451,13 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: # fingerprint derives from the manifest digest. Editing the spec moves all # three here in the same reviewed change. _UK_GATE_BATTERY_POLICY_SHA256 = ( - "ebf48e9a2b64a1518923e7795f771da069ec2c0cc1608c764013e1ff9c83dec0" + "c30b12f7115baf419e136e2d39f736740e622f29522f9126979eb73999f72bb4" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "2437ef6c1e3ee2cd6a844c7d8dbca72c8ec7163199e03979295fc6ce0f486623" + "dd6da072774d699ef0f2e192f8552be28ed92010c3d5541cbfed2e354cb8408c" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "9b478f778c03838adc2aa2b769d8a3fbf21e6f8d776d318ff37d8db10c759e24" + "e6b6c711d2398413bf26ee75b57866e163245cda36b940c801112a712a2d8afc" ) #: Spec entry id -> the legacy gate name whose observable detail checks #: apply unchanged (the battery re-keys the report by entry id; the gate @@ -512,6 +512,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_stage_lcfs_consumption_road_fuel_incidence": ("stage_health", "transferred"), "uk_stage_lcfs_consumption_road_fuel_level": ("stage_health", "transferred"), "uk_stage_lcfs_consumption_recomposed_totals": ("stage_health", "transferred"), + "uk_stage_lcfs_consumption_excise_quantities": ("stage_health", "transferred"), "uk_stage_lcfs_consumption_basis": ("stage_health", "transferred"), "uk_stage_etb_vat_support": ("stage_health", "transferred"), "uk_stage_etb_services_support": ("stage_health", "transferred"), @@ -633,6 +634,7 @@ def compatibility_claim_declarer_error(declared_by: object) -> str | None: "uk_stage_lcfs_consumption_road_fuel_incidence", "uk_stage_lcfs_consumption_road_fuel_level", "uk_stage_lcfs_consumption_recomposed_totals", + "uk_stage_lcfs_consumption_excise_quantities", "uk_stage_lcfs_consumption_basis", "uk_stage_etb_vat_support", "uk_stage_etb_services_support", @@ -886,6 +888,7 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: "uk_stage_lcfs_consumption_basis", "uk_stage_lcfs_consumption_bus_pricing", "uk_stage_lcfs_consumption_energy_rake", + "uk_stage_lcfs_consumption_excise_quantities", "uk_stage_lcfs_consumption_recomposed_totals", "uk_stage_lcfs_consumption_road_fuel_incidence", "uk_stage_lcfs_consumption_road_fuel_level", @@ -946,10 +949,10 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: _UK_CERTIFICATION_PART_DIGESTS: Mapping[str, Mapping[str, str]] = { "spine": { "gates_manifest_sha256": ( - "a5ecd8de5f98a40fb8ad7b00cca2236f22c82ea24653da2f3270b3de67f24fd6" + "84290ce4f003830e26c88721ee380adb695c8c5215607476f9f3fab4b57171fd" ), "policy_sha256": ( - "00d01f3534e1c9c3effb1316f6b70c102854bcf0f991ebb5667bb0f1647c3485" + "428807f1035b02ce35e672f1ed1e6f1f76d20ca340be06aa103bd68b62848f52" ), }, "calibration_seam": { @@ -962,10 +965,10 @@ def _uk_line_cut_tag_re(release_id: str) -> re.Pattern[str] | None: }, "release_cut": { "gates_manifest_sha256": ( - "c3faf15d083ab7e0bae430280e7b14619b3465c56c0b147e9da2932e04f409fa" + "a7b17431dd71284bf93b5337036bc1b9b64a17eab0b161f78549ed72ab0ca61c" ), "policy_sha256": ( - "57bebe91df53951c0b4e8403cab0b4e07aaea40e7eb828a121354b2812bd7a6c" + "ab5f2a1c14ffe72cbc5d65c7658827b81b9470a56278e6f961f3b6dfa12ca2d7" ), }, } diff --git a/packages/microcosm-data/tests/engine_free/shared/test_contract.py b/packages/microcosm-data/tests/engine_free/shared/test_contract.py index b5ce5e927a..1e5274ff32 100644 --- a/packages/microcosm-data/tests/engine_free/shared/test_contract.py +++ b/packages/microcosm-data/tests/engine_free/shared/test_contract.py @@ -213,13 +213,13 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: UK_GATE_BATTERY_PRODUCER = "microcosm.build.gate_battery" UK_GATE_BATTERY_SIGNING_KEY_ENV = "MICROCOSM_UK_TERMINAL_GATE_SIGNING_KEY" UK_GATE_BATTERY_POLICY_SHA256 = ( - "ebf48e9a2b64a1518923e7795f771da069ec2c0cc1608c764013e1ff9c83dec0" + "c30b12f7115baf419e136e2d39f736740e622f29522f9126979eb73999f72bb4" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "2437ef6c1e3ee2cd6a844c7d8dbca72c8ec7163199e03979295fc6ce0f486623" + "dd6da072774d699ef0f2e192f8552be28ed92010c3d5541cbfed2e354cb8408c" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "9b478f778c03838adc2aa2b769d8a3fbf21e6f8d776d318ff37d8db10c759e24" + "e6b6c711d2398413bf26ee75b57866e163245cda36b940c801112a712a2d8afc" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "6a179222c6b6058ad9caacfd347f7bdb8cb98a62237b50d1fc1136df09337251" @@ -267,6 +267,11 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: "transferred", None, ), + "uk_stage_lcfs_consumption_excise_quantities": ( + "stage_health", + "transferred", + None, + ), "uk_stage_lcfs_consumption_basis": ("stage_health", "transferred", None), "uk_stage_nts_bus_travel_support": ("stage_health", "transferred", None), "uk_stage_nts_bus_travel_facts": ("stage_health", "transferred", None), @@ -1386,6 +1391,7 @@ def _gate_battery_payload( "uk_stage_lcfs_consumption_road_fuel_incidence": "lcfs_consumption", "uk_stage_lcfs_consumption_road_fuel_level": "lcfs_consumption", "uk_stage_lcfs_consumption_recomposed_totals": "lcfs_consumption", + "uk_stage_lcfs_consumption_excise_quantities": "lcfs_consumption", "uk_stage_lcfs_consumption_basis": "lcfs_consumption", "uk_stage_nts_bus_travel_support": "nts_bus_travel", "uk_stage_nts_bus_travel_facts": "nts_bus_travel", diff --git a/packages/microcosm-fit/src/microcosm/fit/__init__.py b/packages/microcosm-fit/src/microcosm/fit/__init__.py index 63521225da..57695eba17 100644 --- a/packages/microcosm-fit/src/microcosm/fit/__init__.py +++ b/packages/microcosm-fit/src/microcosm/fit/__init__.py @@ -87,6 +87,7 @@ def _assert_frame_compatible(version: str, required: tuple[int, int]) -> None: DEFAULT_ZERO_ATOL, ConditionalUniforms, FittedRegimeGatedQRF, + GateCalibration, QRFChainState, QRFChainStepResult, Regime, @@ -149,6 +150,7 @@ def fit( "QRFChainState", "QRFChainStepResult", "Regime", + "GateCalibration", "QRFCacheKey", "cache_path", "load_fitted_qrf_cache", diff --git a/packages/microcosm-fit/src/microcosm/fit/qrf.py b/packages/microcosm-fit/src/microcosm/fit/qrf.py index 01446085e6..4ee463e96b 100644 --- a/packages/microcosm-fit/src/microcosm/fit/qrf.py +++ b/packages/microcosm-fit/src/microcosm/fit/qrf.py @@ -27,6 +27,10 @@ resample would delete a vanishingly rare sign class outright (a positive row at weight 1 among thousands of zeros at weight 50 is drawn with probability ~4e-5), collapsing the gate to a single class that can never draw the missing sign. +A gate is calibrated on its own training rows only, unless the model is built +with ``gate_calibration="cross_fitted"`` (:class:`GateCalibration`): then it is +a gate per fold, mapped by a calibration fitted on their out-of-fold scores, so +a rare class is drawn at its rate on rows the gate was not fitted to. **Chaining.** Targets are imputed sequentially; each conditions on the predictors plus the targets already drawn, so the joint structure across @@ -77,6 +81,7 @@ "QRFChainState", "QRFChainStepResult", "Regime", + "GateCalibration", "DEFAULT_N_ESTIMATORS", "DEFAULT_ZERO_ATOL", ] @@ -90,6 +95,43 @@ DEFAULT_ZERO_ATOL = 1e-6 +class GateCalibration: + """How a sign gate's class probabilities are calibrated. + + A row's sign class is drawn by placing its uniform on the gate's class + probabilities, so the share of rows drawn into a class is the gate's mean + probability of that class over those rows. Exposed as constants, like + :class:`Regime`, so a caller names its choice. + """ + + #: The gate as fitted: one boosted classifier, calibrated only on its own + #: training rows. Unregularised boosting memorises a rare class's training + #: rows, so on rows it was not fitted to (every recipient) its mean + #: probability of the rare class falls short of the class's weighted rate. + IN_SAMPLE = "in_sample" + #: Calibrated out of fold: the training rows are cut into folds stratified + #: by class, and a gate fitted the same way on all but one fold scores the + #: fold it left out. One weighted fit of a slope and a per-class offset on + #: those out-of-fold scores (Platt scaling, for two classes) maps every fold + #: gate's log-probabilities, and a row's probability is the mean of the + #: mapped fold gates. Each fold gate is mapped where it is calibrated, on + #: rows it was not fitted to, and the mapped out-of-fold probabilities' + #: weighted mean equals each class's weighted rate. A target whose rarest + #: class has fewer rows than folds keeps the in-sample gate. + CROSS_FITTED = "cross_fitted" + + +_GATE_CALIBRATIONS = frozenset( + {GateCalibration.IN_SAMPLE, GateCalibration.CROSS_FITTED} +) + +#: Folds of a cross-fitted gate calibration. +_GATE_CROSS_FIT_FOLDS = 5 + +#: The smallest positive float, so a class probability of zero has a finite log. +_TINY = np.finfo(np.float64).tiny + + class Regime: """Sign-support regime labels for a numeric target. @@ -229,6 +271,189 @@ def _make_gate(seed: int) -> HistGradientBoostingClassifier: return HistGradientBoostingClassifier(random_state=seed) +def _log_proba(proba: np.ndarray) -> np.ndarray: + """Log class probabilities, a zero probability held at the smallest float.""" + return np.log(np.maximum(proba, _TINY)) + + +def _calibrated_proba( + log_proba: np.ndarray, slope: float, offsets: np.ndarray +) -> np.ndarray: + """Class probabilities proportional to ``exp(slope * log_proba + offsets)``.""" + logits = slope * log_proba + offsets + logits -= logits.max(axis=1, keepdims=True) + scaled = np.exp(logits) + return scaled / scaled.sum(axis=1, keepdims=True) + + +class _CrossFittedGate: + """Fold gates mapped by one out-of-fold calibration, their probabilities averaged. + + Exposes the two members the draws read from a gate, ``classes_`` and + ``predict_proba``, so every draw path takes it in place of the classifier. + """ + + def __init__( + self, + folds: Sequence[HistGradientBoostingClassifier], + slope: float, + offsets: np.ndarray, + ) -> None: + self.folds = tuple(folds) + self.slope = float(slope) + self.offsets = np.asarray(offsets, dtype=np.float64) + + @property + def classes_(self) -> np.ndarray: + return self.folds[0].classes_ + + def predict_proba(self, x: np.ndarray) -> np.ndarray: + total = np.zeros((len(x), len(self.offsets))) + for gate in self.folds: + total += _calibrated_proba( + _log_proba(gate.predict_proba(x)), self.slope, self.offsets + ) + return total / len(self.folds) + + +def _stratified_folds( + labels: np.ndarray, folds: int, rng: np.random.Generator +) -> np.ndarray: + """A fold per row: each class's rows, in random order, dealt round the folds.""" + assignment = np.empty(len(labels), dtype=np.int64) + for value in np.unique(labels): + rows = rng.permutation(np.flatnonzero(labels == value)) + assignment[rows] = np.arange(len(rows)) % folds + return assignment + + +def _fit_gate_calibration( + log_proba: np.ndarray, label_index: np.ndarray, weights: np.ndarray +) -> tuple[float, np.ndarray]: + """Fit ``p_c ∝ exp(slope * log_proba_c + offset_c)`` by weighted likelihood. + + One slope shared by the classes and an offset per class (the first fixed + at zero): Platt scaling of the gate's logit for two classes. At the + optimum each offset's score equation makes the weighted mean of the + calibrated probabilities equal its class's weighted rate. Newton steps, + halved until the loss does not rise; the likelihood is concave, so they + converge from the identity map. A negative slope (an out-of-fold ranking + worse than none) falls back to the class rates alone. + + Args: + log_proba: Out-of-fold log class probabilities, one column per class. + label_index: Each row's class, as a column index of ``log_proba``. + weights: Per-row weights. + + Returns: + ``(slope, offsets)`` with ``offsets[0] == 0``. + """ + n, k = log_proba.shape + w = np.asarray(weights, dtype=np.float64) / float(np.mean(weights)) + onehot = np.zeros((n, k)) + onehot[np.arange(n), label_index] = 1.0 + rows = np.arange(n) + + def unpack(theta: np.ndarray) -> tuple[float, np.ndarray]: + return float(theta[0]), np.concatenate([[0.0], theta[1:]]) + + def loss(theta: np.ndarray) -> float: + slope, offsets = unpack(theta) + logits = slope * log_proba + offsets + top = logits.max(axis=1) + log_total = top + np.log(np.exp(logits - top[:, None]).sum(axis=1)) + return float(w @ (log_total - logits[rows, label_index])) + + theta = np.zeros(k) + theta[0] = 1.0 + current = loss(theta) + for _ in range(100): + slope, offsets = unpack(theta) + proba = _calibrated_proba(log_proba, slope, offsets) + residual = proba - onehot + centred = log_proba - (proba * log_proba).sum(axis=1, keepdims=True) + gradient = np.concatenate( + [[w @ (residual * log_proba).sum(axis=1)], (w @ residual)[1:]] + ) + hessian = np.empty((k, k)) + hessian[0, 0] = w @ (proba * centred**2).sum(axis=1) + for c in range(1, k): + hessian[0, c] = hessian[c, 0] = w @ (proba[:, c] * centred[:, c]) + for d in range(1, k): + hessian[c, d] = w @ (proba[:, c] * (float(c == d) - proba[:, d])) + step = np.linalg.solve(hessian + 1e-12 * np.eye(k), gradient) + scale = 1.0 + trial_theta = theta - step + trial = loss(trial_theta) + while trial > current and scale > 1e-10: + scale /= 2.0 + trial_theta = theta - scale * step + trial = loss(trial_theta) + if trial > current: + break + theta, previous, current = trial_theta, current, trial + if previous - current <= 1e-13 * max(1.0, abs(current)): + break + slope, offsets = unpack(theta) + if slope < 0.0: + rate = np.maximum(w @ onehot / w.sum(), _TINY) + return 0.0, np.log(rate) - np.log(rate[0]) + return slope, offsets + + +def _can_cross_fit(labels: np.ndarray) -> bool: + """Whether every class has a row in every fold of a cross-fitted gate.""" + return int(np.unique(labels, return_counts=True)[1].min()) >= _GATE_CROSS_FIT_FOLDS + + +def _cross_fit_gate( + features: np.ndarray, + labels: np.ndarray, + weights: np.ndarray | None, + seed: int, +) -> _CrossFittedGate: + """Fit a gate per fold and calibrate them on their out-of-fold probabilities. + + Each of :data:`_GATE_CROSS_FIT_FOLDS` folds (stratified by class) is scored + by a gate fitted the same way on the other folds, and the calibration + fitted on those scores maps every fold gate. The fold assignment and the + fold gates' seeds derive from ``seed``, the one the in-sample gate would + take, so nothing else in the fit's RNG stream moves. Every class must have + a row in every fold (:func:`_can_cross_fit`). + """ + classes = np.unique(labels) + fold_stream, gate_stream = np.random.SeedSequence(seed).spawn(2) + folds = _stratified_folds( + labels, _GATE_CROSS_FIT_FOLDS, np.random.default_rng(fold_stream) + ) + gate_seeds = np.random.default_rng(gate_stream).integers( + 0, 2**31 - 1, size=_GATE_CROSS_FIT_FOLDS + ) + log_proba = np.empty((len(labels), len(classes))) + gates = [] + for fold in range(_GATE_CROSS_FIT_FOLDS): + held = folds == fold + gate = _make_gate(int(gate_seeds[fold])) + gate.fit( + features[~held], + labels[~held], + sample_weight=None if weights is None else weights[~held], + ) + if not np.array_equal(np.asarray(gate.classes_), classes): + raise ValueError( + "A cross-fitted fold gate lost a sign class although every " + "class has a row in every fold; refusing an inconsistent gate." + ) + log_proba[held] = _log_proba(gate.predict_proba(features[held])) + gates.append(gate) + slope, offsets = _fit_gate_calibration( + log_proba, + np.searchsorted(classes, labels), + np.ones(len(labels)) if weights is None else weights, + ) + return _CrossFittedGate(gates, slope, offsets) + + def _interp_rows( quantiles: np.ndarray, grid: np.ndarray, predictions: np.ndarray ) -> np.ndarray: @@ -698,14 +923,16 @@ class _TargetModel: regime: The detected :class:`Regime` label. columns: The predictor columns this target was fit on (predictors plus the targets chained before it). - gate: The sign-gate classifier, or ``None`` for ungated regimes. + gate: The sign-gate classifier (cross-fitted when the model's + :class:`GateCalibration` asks for it), or ``None`` for ungated + regimes. positive: The positive-magnitude forest, or ``None``. negative: The negative-magnitude forest, or ``None``. """ regime: str columns: tuple[str, ...] - gate: HistGradientBoostingClassifier | None + gate: HistGradientBoostingClassifier | _CrossFittedGate | None positive: _Forest | None negative: _Forest | None @@ -831,6 +1058,10 @@ class QRFChainState: targets from the donor input. Recipient priors are likewise external and must be supplied to :meth:`RegimeGatedQRF.fit_draw_next` as the exact raw draw prefix, allowing a build to checkpoint them losslessly. + + The gate calibration is written into the model configuration only when it + is not :attr:`GateCalibration.IN_SAMPLE`, so the state of an in-sample + chain, and any state written before the option existed, reads the same. """ predictors: tuple[str, ...] @@ -850,6 +1081,7 @@ class QRFChainState: fit_rng_state_json: str draw_rng_state_json: str schema_version: int = _CHAIN_STATE_SCHEMA_VERSION + gate_calibration: str = GateCalibration.IN_SAMPLE def __post_init__(self) -> None: """Reject malformed or internally inconsistent checkpoint state.""" @@ -889,6 +1121,11 @@ def __post_init__(self) -> None: "QRF chain max_samples_leaf kind/value mismatch: " f"{self.max_samples_leaf_kind!r} vs {self.max_samples_leaf!r}." ) + if self.gate_calibration not in _GATE_CALIBRATIONS: + raise ValueError( + f"QRF chain gate_calibration {self.gate_calibration!r} is not one " + f"of {sorted(_GATE_CALIBRATIONS)}." + ) _rng_from_state_json(self.fit_rng_state_json, stream="fit") _rng_from_state_json(self.draw_rng_state_json, stream="draw") @@ -906,6 +1143,16 @@ def is_complete(self) -> bool: def to_dict(self) -> dict[str, object]: """Return a JSON-roundtrippable checkpoint mapping.""" + model_config: dict[str, object] = { + "n_estimators": self.n_estimators, + "zero_atol": self.zero_atol, + "max_samples_leaf": self.max_samples_leaf, + "max_samples_leaf_kind": self.max_samples_leaf_kind, + "seed": self.seed, + "fit_n_jobs": self.fit_n_jobs, + } + if self.gate_calibration != GateCalibration.IN_SAMPLE: + model_config["gate_calibration"] = self.gate_calibration return { "schema_version": self.schema_version, "predictors": list(self.predictors), @@ -914,14 +1161,7 @@ def to_dict(self) -> dict[str, object]: "entity": self.entity, "weight_kind": self.weight_kind, "weight_sha256": self.weight_sha256, - "model_config": { - "n_estimators": self.n_estimators, - "zero_atol": self.zero_atol, - "max_samples_leaf": self.max_samples_leaf, - "max_samples_leaf_kind": self.max_samples_leaf_kind, - "seed": self.seed, - "fit_n_jobs": self.fit_n_jobs, - }, + "model_config": model_config, "donor_index": self.donor_index.to_dict(), "recipient_index": ( None if self.recipient_index is None else self.recipient_index.to_dict() @@ -970,11 +1210,15 @@ def names(key: str) -> tuple[str, ...]: "seed", "fit_n_jobs", } - if set(config) != config_keys: + if set(config) not in (config_keys, config_keys | {"gate_calibration"}): raise ValueError( "QRF chain model_config keys must be exactly " - f"{sorted(config_keys)}, got {sorted(config)}." + f"{sorted(config_keys)}, optionally with 'gate_calibration', " + f"got {sorted(config)}." ) + gate_calibration = config.get("gate_calibration", GateCalibration.IN_SAMPLE) + if not isinstance(gate_calibration, str): + raise ValueError("QRF chain gate_calibration must be a string.") donor_index = value["donor_index"] recipient_index = value["recipient_index"] if not isinstance(donor_index, Mapping): @@ -1047,6 +1291,7 @@ def names(key: str) -> tuple[str, ...]: ), fit_rng_state_json=fit_rng_state, draw_rng_state_json=draw_rng_state, + gate_calibration=gate_calibration, ) @@ -1151,7 +1396,7 @@ def _validate_uniform_mapping( def _gate_draw_with_rng( - gate: HistGradientBoostingClassifier, + gate: HistGradientBoostingClassifier | _CrossFittedGate, features: pd.DataFrame, columns: tuple[str, ...], rng: np.random.Generator, @@ -1296,6 +1541,16 @@ class RegimeGatedQRF: seed: Base random seed. Controls the weighted-bootstrap resample, the forest randomness, and the per-row draw quantiles, so a fixed seed makes a freshly fitted model's first draw reproducible. + gate_calibration: How each sign gate's probabilities are calibrated, a + :class:`GateCalibration` name. ``"in_sample"`` (the default) is + the gate as fitted; ``"cross_fitted"`` fits a gate per fold and + maps them by a calibration fitted on their out-of-fold scores, so a + rare class is drawn at its rate on rows the gate was not fitted to. + The forests and every draw uniform are the same either way; only + the gates' probabilities move. + + Raises: + ValueError: If ``gate_calibration`` names no :class:`GateCalibration`. """ def __init__( @@ -1305,11 +1560,18 @@ def __init__( zero_atol: float = DEFAULT_ZERO_ATOL, max_samples_leaf: int | float | None = None, seed: int = 0, + gate_calibration: str = GateCalibration.IN_SAMPLE, ) -> None: + if gate_calibration not in _GATE_CALIBRATIONS: + raise ValueError( + f"gate_calibration {gate_calibration!r} is not one of " + f"{sorted(_GATE_CALIBRATIONS)}." + ) self.n_estimators = int(n_estimators) self.zero_atol = float(zero_atol) self.max_samples_leaf = max_samples_leaf self.seed = int(seed) + self.gate_calibration = gate_calibration def fit( self, @@ -1414,6 +1676,7 @@ def start_chain( recipient_index=None, fit_rng_state_json=_rng_state_json(fit_rng), draw_rng_state_json=_rng_state_json(draw_rng), + gate_calibration=self.gate_calibration, ) def fit_draw_next( @@ -1548,6 +1811,7 @@ def _validate_chain_config(self, state: QRFChainState) -> None: _max_samples_leaf_kind(self.max_samples_leaf), self.seed, _fit_n_jobs(), + self.gate_calibration, ) expected = ( state.n_estimators, @@ -1556,6 +1820,7 @@ def _validate_chain_config(self, state: QRFChainState) -> None: state.max_samples_leaf_kind, state.seed, state.fit_n_jobs, + state.gate_calibration, ) if actual != expected or actual[3] != expected[3]: raise ValueError( @@ -1701,7 +1966,7 @@ def _fit_gate( labels: np.ndarray, weights: np.ndarray | None, rng: np.random.Generator, - ) -> HistGradientBoostingClassifier: + ) -> HistGradientBoostingClassifier | _CrossFittedGate: """Fit the sign-gate classifier, weighting it directly by sample_weight. Unlike the forests, the gate is *not* weighted by bootstrap. @@ -1720,6 +1985,13 @@ def _fit_gate( ``classes_``. If sklearn ever dropped a class, drawing it at probability zero would silently lose that sign, so we raise instead. + Under :attr:`GateCalibration.CROSS_FITTED` the gate is instead a gate + per fold, calibrated on their out-of-fold probabilities + (:func:`_cross_fit_gate`), unless a class is too thin to have a row in + every fold. The fold gates' seeds derive from the one seed drawn here, + so the fit RNG advances by that single draw either way and every forest + after the gate is unchanged. + Args: features: The chained predictor matrix for this target's rows. labels: Per-row sign codes (``-1`` / ``0`` / ``1``). @@ -1728,14 +2000,20 @@ def _fit_gate( for fit reproducibility even though no resample is drawn). Returns: - The fitted sign-gate classifier. + The fitted sign-gate classifier, cross-fitted when configured. Raises: ValueError: If a sign class present in ``labels`` is absent from the fitted gate's ``classes_`` (internal inconsistency). """ - gate = _make_gate(int(rng.integers(0, 2**31 - 1))) - gate.fit(features, labels, sample_weight=weights) + seed = int(rng.integers(0, 2**31 - 1)) + if self.gate_calibration == GateCalibration.CROSS_FITTED and _can_cross_fit( + labels + ): + gate = _cross_fit_gate(features, labels, weights, seed) + else: + gate = _make_gate(seed) + gate.fit(features, labels, sample_weight=weights) training_classes = set(np.unique(labels).tolist()) fitted_classes = set(np.asarray(gate.classes_).tolist()) missing = sorted(training_classes - fitted_classes) @@ -2145,7 +2423,7 @@ def _draw_target(self, features: pd.DataFrame, model: _TargetModel) -> np.ndarra def _gate_draw( self, - gate: HistGradientBoostingClassifier, + gate: HistGradientBoostingClassifier | _CrossFittedGate, features: pd.DataFrame, columns: tuple[str, ...], ) -> np.ndarray: diff --git a/packages/microcosm-fit/tests/engine_free/shared/test_qrf_gate_calibration.py b/packages/microcosm-fit/tests/engine_free/shared/test_qrf_gate_calibration.py new file mode 100644 index 0000000000..4750440e3a --- /dev/null +++ b/packages/microcosm-fit/tests/engine_free/shared/test_qrf_gate_calibration.py @@ -0,0 +1,307 @@ +"""Cross-fitted sign gates: a rare class drawn at its rate off the training rows. + +The in-sample gate is one boosted classifier calibrated only on its own rows. +On rows it was not fitted to, its mean probability of a rare class falls short +of the class's rate, so recipients draw the class too rarely. These tests pin +the opt-in :attr:`GateCalibration.CROSS_FITTED`: it restores the rate off +sample, leaves the forests and every draw uniform where they were, keeps a +class too thin to cross-fit on the in-sample gate, calibrates three-sign gates, +and checkpoints its choice only when it is made. +""" + +from __future__ import annotations + +import copy +import json + +import numpy as np +import pandas as pd +import pytest +from sklearn.ensemble import HistGradientBoostingClassifier + +from microcosm.fit import GateCalibration, QRFChainState, Regime, RegimeGatedQRF, fit +from microcosm.fit.qrf import _fit_gate_calibration + +IN_SAMPLE = GateCalibration.IN_SAMPLE +CROSS_FITTED = GateCalibration.CROSS_FITTED + + +def _rare_positive_table( + seed: int = 3, n: int = 4000 +) -> tuple[pd.DataFrame, list[str]]: + """A positive class on about 7% of the weight: a weak signal among noise.""" + rng = np.random.default_rng(seed) + x = rng.normal(size=(n, 12)) + logit = -3.0 + 0.9 * x[:, 0] + 0.5 * x[:, 1] + positive = rng.random(n) < 1.0 / (1.0 + np.exp(-logit)) + columns = [f"x{i}" for i in range(12)] + table = pd.DataFrame(x, columns=columns) + table["target"] = np.where(positive, rng.lognormal(3.0, 0.5, n), 0.0) + table["second"] = np.where(positive, 2.0 * table["target"], 0.0) + np.where( + rng.random(n) < 0.3, rng.lognormal(1.0, 0.5, n), 0.0 + ) + table["weight"] = rng.uniform(1.0, 9.0, n) + return table, columns + + +def _fit(table, columns, calibration, targets=("target",)): + model = RegimeGatedQRF(n_estimators=4, seed=5, gate_calibration=calibration) + return model.fit(table, columns, list(targets), weights="weight") + + +def _positive_probability(fitted, table, columns) -> np.ndarray: + gate = fitted._target_models["target"].gate + proba = gate.predict_proba(table.loc[:, columns].to_numpy(dtype=np.float64)) + return proba[:, list(gate.classes_).index(1)] + + +def _softmax(logits: np.ndarray) -> np.ndarray: + scaled = np.exp(logits - logits.max(axis=1, keepdims=True)) + return scaled / scaled.sum(axis=1, keepdims=True) + + +def test_in_sample_is_the_default_gate() -> None: + table, columns = _rare_positive_table(n=600) + default = RegimeGatedQRF(n_estimators=4, seed=5).fit( + table, columns, ["target"], weights="weight" + ) + named = _fit(table, columns, IN_SAMPLE) + assert isinstance( + default._target_models["target"].gate, HistGradientBoostingClassifier + ) + uniforms = { + "quantiles": {"target": np.linspace(0.0, 0.99, len(table))}, + "sign_uniforms": {"target": np.random.default_rng(1).random(len(table))}, + } + pd.testing.assert_frame_equal( + default.predict_from_uniforms(table, **uniforms), + named.predict_from_uniforms(table, **uniforms), + ) + + +def test_an_unknown_gate_calibration_is_refused() -> None: + with pytest.raises(ValueError, match="gate_calibration 'platt' is not one of"): + RegimeGatedQRF(gate_calibration="platt") + + +def test_cross_fitted_gate_draws_a_rare_class_at_its_held_out_rate() -> None: + """Off the training rows the in-sample gate under-predicts; cross-fitting does not.""" + table, columns = _rare_positive_table() + train, held_out = table.iloc[:2000], table.iloc[2000:] + weights = held_out["weight"].to_numpy() + rate = float(weights @ (held_out["target"] > 0) / weights.sum()) + means = { + calibration: float( + weights + @ _positive_probability( + _fit(train, columns, calibration), held_out, columns + ) + / weights.sum() + ) + for calibration in (IN_SAMPLE, CROSS_FITTED) + } + assert means[IN_SAMPLE] < 0.6 * rate + assert means[CROSS_FITTED] == pytest.approx(rate, rel=0.25) + + +def test_cross_fitting_moves_only_the_gate() -> None: + """The forests and the uniforms are the same; only who is positive moves.""" + table, columns = _rare_positive_table(n=1200) + fits = { + calibration: _fit(table, columns, calibration) + for calibration in (IN_SAMPLE, CROSS_FITTED) + } + quantiles = {"target": np.linspace(0.0, 0.99, len(table))} + pd.testing.assert_frame_equal( + fits[IN_SAMPLE].predict_positive_from_uniforms(table, quantiles=quantiles), + fits[CROSS_FITTED].predict_positive_from_uniforms(table, quantiles=quantiles), + ) + signs = {"target": np.random.default_rng(2).random(len(table))} + drawn = { + calibration: fitted.predict_from_uniforms( + table, quantiles=quantiles, sign_uniforms=signs + )["target"].to_numpy() + for calibration, fitted in fits.items() + } + both = (drawn[IN_SAMPLE] > 0) & (drawn[CROSS_FITTED] > 0) + assert both.any() + np.testing.assert_array_equal(drawn[IN_SAMPLE][both], drawn[CROSS_FITTED][both]) + + +def test_calibration_matches_each_class_weighted_rate() -> None: + """The fitted map's weighted mean is each class's rate; two classes are Platt.""" + rng = np.random.default_rng(0) + n = 3000 + logits = np.column_stack( + [ + np.zeros(n), + 0.8 * rng.normal(size=n) - 1.5, + 0.5 * rng.normal(size=n) + 0.3, + ] + ) + labels = (rng.random(n)[:, None] > np.cumsum(_softmax(logits), axis=1)).sum(axis=1) + weights = rng.uniform(500.0, 9000.0, n) + overconfident = np.log(_softmax(2.0 * logits)) + slope, offsets = _fit_gate_calibration(overconfident, labels, weights) + calibrated = _softmax(slope * overconfident + offsets) + onehot = np.eye(3)[labels] + np.testing.assert_allclose( + weights @ calibrated / weights.sum(), + weights @ onehot / weights.sum(), + rtol=1e-9, + ) + assert offsets[0] == 0.0 + assert 0.3 < slope < 0.7 + + # Two classes: a logistic regression of the label on the gate's logit, so + # at the optimum both of Platt's score equations hold. + positive = (labels == 2).astype(int) + two = np.log(_softmax(np.column_stack([np.zeros(n), 2.0 * logits[:, 2]]))) + slope, offsets = _fit_gate_calibration(two, positive, weights) + score = two[:, 1] - two[:, 0] + residual = 1.0 / (1.0 + np.exp(-(slope * score + offsets[1]))) - positive + assert abs(weights @ residual) / weights.sum() < 1e-9 + assert abs(weights @ (residual * score)) / weights.sum() < 1e-9 + assert 0.3 < slope < 0.7 + + +def test_a_class_too_thin_to_cross_fit_keeps_the_in_sample_gate( + rare_positive_frame, +) -> None: + frame, _, _ = rare_positive_frame(seed=0, n=1000, n_positive=4) + gates = {} + for calibration in (IN_SAMPLE, CROSS_FITTED): + fitted = fit( + frame, + ["signal", "noise"], + ["target"], + n_estimators=4, + seed=0, + gate_calibration=calibration, + ) + gates[calibration] = fitted._target_models["target"].gate + assert isinstance(gates[CROSS_FITTED], HistGradientBoostingClassifier) + x = frame.table("person").loc[:, ["signal", "noise"]].to_numpy(dtype=np.float64) + np.testing.assert_array_equal( + gates[IN_SAMPLE].predict_proba(x), gates[CROSS_FITTED].predict_proba(x) + ) + + +def test_three_sign_gate_cross_fits_every_class(zero_inflated_frame) -> None: + frame, _ = zero_inflated_frame(seed=0, n=1500) + fitted = fit( + frame, ["x"], ["target"], n_estimators=4, seed=0, gate_calibration=CROSS_FITTED + ) + assert fitted.regimes()["target"] == Regime.THREE_SIGN + assert fitted.sign_classes("target") == (-1, 0, 1) + gate = fitted._target_models["target"].gate + assert not isinstance(gate, HistGradientBoostingClassifier) + proba = gate.predict_proba(frame.table("person").loc[:, ["x"]].to_numpy()) + np.testing.assert_allclose(proba.sum(axis=1), 1.0) + draws = fitted.predict(frame)["target"].to_numpy() + assert (draws > 0).any() and (draws < 0).any() and (draws == 0).any() + + +def test_conditional_uniforms_round_trip_under_a_cross_fitted_gate() -> None: + """Locating observed targets and drawing at those uniforms gives them back.""" + x = np.tile(np.arange(30, dtype=float), 6) + observed = pd.DataFrame( + { + "x": x, + "mixed": np.tile([-2.0, 0.0, 3.0], len(x) // 3), + "inflated": np.tile([0.0, 4.0], len(x) // 2), + } + ) + fitted = fit( + observed, + ["x"], + ["mixed", "inflated"], + weights="none", + n_estimators=4, + seed=7, + gate_calibration=CROSS_FITTED, + ) + rng = np.random.default_rng(1) + before = copy.deepcopy(fitted._rng.bit_generator.state) + located = fitted.conditional_uniforms( + observed, + sign_placement={t: rng.random(len(x)) for t in fitted.targets}, + quantile_placement={t: rng.random(len(x)) for t in fitted.targets}, + ) + assert fitted._rng.bit_generator.state == before + drawn = fitted.predict_from_uniforms( + observed[["x"]], + quantiles=located.quantiles, + sign_uniforms=located.sign_uniforms, + ) + pd.testing.assert_frame_equal( + drawn, observed[fitted.targets], check_exact=False, rtol=1e-9 + ) + + +def test_targetwise_cross_fitted_chain_is_bit_identical_to_the_monolith( + monkeypatch, +) -> None: + monkeypatch.setenv("POPULACE_FIT_N_JOBS", "1") + monkeypatch.setenv("POPULACE_FIT_PREDICT_WORKERS", "1") + table, columns = _rare_positive_table(n=800) + recipient = table.iloc[::2].loc[:, columns].copy() + model = RegimeGatedQRF(n_estimators=4, seed=5, gate_calibration=CROSS_FITTED) + targets = ["target", "second"] + uniforms = { + "quantiles": {t: np.linspace(0.0, 0.99, len(recipient)) for t in targets}, + "sign_uniforms": { + t: np.random.default_rng(i).random(len(recipient)) + for i, t in enumerate(targets) + }, + } + monolith = model.fit( + table, columns, targets, weights="weight" + ).predict_from_uniforms(recipient, **uniforms) + state = model.start_chain(table, columns, targets, weights="weight") + raw = pd.DataFrame(index=recipient.index) + for target in targets: + state = QRFChainState.from_dict(json.loads(json.dumps(state.to_dict()))) + step = model.fit_draw_next( + table, + recipient, + raw, + state=state, + weights="weight", + quantiles=uniforms["quantiles"][target], + sign_uniforms=uniforms["sign_uniforms"][target], + ) + np.testing.assert_array_equal(step.raw_draw, monolith[target].to_numpy()) + raw[target] = step.raw_draw + state = step.state + + +def test_chain_state_names_the_calibration_only_when_cross_fitted( + correlated_targets_frame, +) -> None: + frame, _ = correlated_targets_frame(seed=4, n=120) + states = { + calibration: RegimeGatedQRF( + n_estimators=4, seed=23, gate_calibration=calibration + ).start_chain(frame, ["x"], ["first", "second"]) + for calibration in (IN_SAMPLE, CROSS_FITTED) + } + assert "gate_calibration" not in states[IN_SAMPLE].to_dict()["model_config"] + assert states[CROSS_FITTED].to_dict()["model_config"]["gate_calibration"] == ( + CROSS_FITTED + ) + for state in states.values(): + assert QRFChainState.from_dict(json.loads(json.dumps(state.to_dict()))) == state + + recipient = frame.table("person").iloc[:50].loc[:, ["x"]].copy() + with pytest.raises(ValueError, match="model configuration changed"): + RegimeGatedQRF(n_estimators=4, seed=23).fit_draw_next( + frame, + recipient, + pd.DataFrame(index=recipient.index), + state=states[CROSS_FITTED], + ) + payload = states[CROSS_FITTED].to_dict() + payload["model_config"]["gate_calibration"] = "platt" + with pytest.raises(ValueError, match="gate_calibration 'platt'"): + QRFChainState.from_dict(payload) diff --git a/packages/microcosm-graph/tests/fixtures/parity/kernels/fit.qrf/pins.json b/packages/microcosm-graph/tests/fixtures/parity/kernels/fit.qrf/pins.json index 43f777a08a..0039557c8b 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/kernels/fit.qrf/pins.json +++ b/packages/microcosm-graph/tests/fixtures/parity/kernels/fit.qrf/pins.json @@ -1 +1 @@ -{"dependencies":{"numpy":"2.4.6","pandas":"3.0.3","quantile-forest":"1.4.2","scikit-learn":"1.8.0"},"implementation_hash":"5eb07d7c48a24c7b11426d67879b6dcca0af8e4de2835228a4eab9b5f9ba2f72","kernel":"fit.qrf@1","node":"fit_qrf","node_key":"e5383f06ebd1ee0573233c4573ab4fd463030b012674e6ddc8b46bc759b5df00","numeric":"platform_bitwise","platform":"arm64/darwin/py3.14","platforms":{"arm64/darwin/py3.14":{"direct":"direct.csv","node_key":"e5383f06ebd1ee0573233c4573ab4fd463030b012674e6ddc8b46bc759b5df00"},"x86_64/linux/py3.13":{"direct":"platforms/x86_64-linux-py3_13/direct.csv","node_key":"c56ada7dc523c155af5ae3cbc8b9619a79356b27632ab0d338e07023877c771f"},"x86_64/linux/py3.14":{"direct":"platforms/x86_64-linux-py3_14/direct.csv","node_key":"2c78582881c8a45d9112cc72899c41d7d1254a46e834f4f1edc2a67c8e1d086f"}},"seed":947} +{"dependencies":{"numpy":"2.4.6","pandas":"3.0.3","quantile-forest":"1.4.2","scikit-learn":"1.8.0"},"implementation_hash":"68d446c86952937fb0b9f2f6c01fd58fc1eb21fceb21130d7159f3c383cf01c6","kernel":"fit.qrf@1","node":"fit_qrf","node_key":"41ea8329f459f59985de13cb1f142795d05993e4de796b6ba4262a999d52f406","numeric":"platform_bitwise","platform":"arm64/darwin/py3.14","platforms":{"arm64/darwin/py3.14":{"direct":"direct.csv","node_key":"41ea8329f459f59985de13cb1f142795d05993e4de796b6ba4262a999d52f406"},"x86_64/linux/py3.13":{"direct":"platforms/x86_64-linux-py3_13/direct.csv","node_key":"950d93bda15e8df2a7e4c7a3acc42d33230f427be914593ea3a46c7648a27541"},"x86_64/linux/py3.14":{"direct":"platforms/x86_64-linux-py3_14/direct.csv","node_key":"804d85d71709488193c6373b47dd961971d3de9f625a44f8205524219dd43a1b"}},"seed":947} 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 91910f92f0..d1a97a4831 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 @@ -3940,6 +3940,12 @@ "kind": "public_aggregate_reference", "resource": "desnz_road_fuel_by_vehicle.json", "role": "desnz_road_fuel_by_vehicle" + }, + { + "format": "json", + "kind": "public_aggregate_reference", + "resource": "excise_facts.json", + "role": "excise_facts" } ], "grain": "household", @@ -3965,9 +3971,33 @@ "liquid_fuel_consumption", "solid_fuel_consumption", "has_fuel_consumption", - "uses_energy_prepayment_meter" - ], - "notes": "Ports the incumbent LCFS consumption QRF, including NEED energy raking, with adjudicated weighted fits and an identity-keyed seed-0 fuel flag. The vehicle count is a numeric QRF predictor on both sides (LCFS a124 on the donor, the was_wealth draw of WAS vcarnr8 on the recipient, both clipped to 0-5), which retires the incumbent's WAS-to-LCFS has-fuel bridge (microcosm#890 A). The recipient fuel flag draws each of a household's vehicles as zero-emission at the battery-electric and fuel-cell share of the vendored DfT VEH1103 licensed-car stock (2024, Great Britain; plug-in hybrids count as fuel buyers), replacing the hand-copied NTS share (microcosm#890 E2): a household with vehicles buys fuel unless every one of them is zero-emission, so it is flagged at one minus that share raised to its vehicle count, and a one-vehicle household keeps the draw it had when the whole household was drawn at once (microcosm#1278; before, a household with several vehicles was all one or the other). The frame holds no fuel type, so the draw, keyed on the household identity, is what makes a vehicle-owning household a fuel buyer: it is random with respect to income and every other characteristic. With the redraw of microcosm#1113 every flagged household buys fuel, so this flag alone sets fuel incidence; who holds the zero-emission cars by income is a known residual. The household input uses_energy_prepayment_meter, which policyengine-uk reads for the July 2023 to March 2024 Energy Price Guarantee prepayment discount (PolicyEngine/policyengine-uk#2098, from 2.123.3), is drawn by the declared impute_prepayment_meter step (microcosm#1110): the donor prepays when it last put money on an electricity, gas or combined key or meter (b1751, b1701, b233, which the LCF asks only of prepayment-meter households) or its diary records a slot-meter payment (c45114, c45214), so electricity-only prepayment counts and a household with no meter payment, including one that did not answer, does not; a weighted regime-gated QRF on the chain's predictors fits that flag and each recipient draws it at uniforms keyed on its household id, which moves no other draw. The release exports it: policyengine-uk reads it from 2.123.3 and an older engine, Microcosm's locked one among them, ignores a column it does not know; the incumbent does not carry it until uk-data#539, so it is a reviewed extra column of the export surface. The frame flags about 3.0 million Great Britain households (10.5 %) at prior weights, against the around three million prepayment households the government counted when the discount began in July 2023 (a different reference period, households in both). Energy support clipping is exempt because NEED raking governs those columns. Bus fares are clipped to donor support before the pricing step (Mar\u00eda's rulings 2026-09-15 and 2026-09-17), which bounds the region no area prices (Wales keeps the chain's raw draw) while the priced regions move beyond donor support afterwards; for that reason the column carries no committed support bound for the terminal gate. Domestic energy is raked in kWh to the NEED 2024 shape at the DESNZ level and priced at the average prices paid (microcosm#890 F, chronicle#270), where both NEED rakes take their mean-kWh margins from the vendored NEED 2024 tables (England and Wales by income band, tenure, property type and region; Scotland by income band, tenure and property type with the all-dwellings mean as its region margin; Northern Ireland untouched), the declared price_domestic_energy step converts spend to kWh and back at each household's QEP price region through the committed crosswalk using the calendar-2024 average variable unit cost and fixed cost across payment methods, standard metering, including VAT (Northern Ireland gas at the UK average because QEP publishes no Northern Ireland gas row), a gas fixed cost only for connected households, the gas connection imposed on the recipient frame at the published share of each region (DESNZ subnational gas meters over electricity meters, 2024) by disconnecting gas-positive households in an identity-keyed uniform order, skipping a household whose weight would overshoot the published share (Northern Ireland has no subnational row and keeps the positive-gas rule), and, where the draw leaves a region below its share, by the declared connect_rule (microcosm#1164): two weighted fits on the chain's predictors give each zero-gas household the probability that a donor like it pays for gas (a gradient-boosted classifier of the donor's gas payers) and the gas such a donor pays (a regime-gated QRF of the payers' gas spend, at quantiles keyed on the household id), and the region's zero-gas households are connected in an identity-keyed order drawn in proportion to that probability, by the same weight-fitting walk, until the share is met. The labelled energy split leaves about 80 % of donors paying for gas against the about 85 % of homes DESNZ counts gas meters for (the derivation it replaced gave gas to 98 %), so without the connect leg nine of the eleven Great Britain regions fell short of their share, and after the four-margin NEED rake one factor per fuel scales the kWh so the prior-weighted frame total equals the DESNZ Energy Trends domestic consumption at actual temperature summed over the four quarters of calendar 2024; NEED gas means are per gas-metered household, so the gas kWh margins are raked over connected households only while electricity is raked over every household, and the energy_rake gate recomputes every NEED mean, the DESNZ level and the connection shares from the vendored rows. After the level, no household is left above the domestic meter definitions behind the DESNZ total (NEED Annex B: gas meters under 73,200 kWh a year, electricity meters under 50,000 kWh on profile classes 1 and 2; Mar\u00eda's ruling of 2026-10-12 on microcosm#1207's extreme energy values): the declared household_kwh_ceiling caps a household there, the households below it in the capped households' own NEED cells are re-raked to those cells' levelled means, and a proportional step restores the DESNZ total (microcosm#1164); the receipt counts the households capped and the share of the total they gave up, and the energy_rake gate checks both. Mobile homes have no NEED property-type row, so the rake takes them to the all-dwellings mean, the incumbent's translation; where every mobile home of a NEED geography draws a spend at or below the standing charge, that cell has no kWh for the rake to scale, and the declared zero_kwh_cells_at_need_mean starts it at its NEED mean before the first sweep (microcosm#1240). The receipt lists the cells it started, and the energy_rake gate fails on a started cell the stage does not declare and on any other cell with a zero mean. Both rakes band households on gross income, NEED's concept: the donor on LCFS p344p, cash income before tax, National Insurance, council tax and pension contributions, and the recipient on the same concept, its HBAI net income with the deductions policyengine-uk takes to reach it added back (council tax and domestic rates, income tax, National Insurance, student loan repayments, employee and personal pension contributions, maintenance and child payments, LVT), which the stage materializes for that band alone (microcosm#1164). Before it the recipient fell back to its HBAI net income, which put households in too low a band; the engine's household_gross_income would put them in too high a one, since it adds capital gains and the in-kind NHS, education and transport spending to cash income. The disconnection walk's seed-0 uniform order makes every group of households (dwelling type, income band, support channel) lose the same expected share of its drawn connected mass, so only the level of the drawn connection moves; the smallest-drawn-gas-first order it replaces piled the disconnections onto low-draw flats once the SPI support households drew gas from their own incomes, and NEED's Scottish property-type means then implied a level 2.6 % above the Scottish all-dwellings mean, a margin conflict the rake could not close. Bus fares are priced from journeys (microcosm#930), where the nts_bus_travel stage imputes each person's annual bus-in-London and other-local-bus trips and their concessionary eligibility, and the declared price_bus_journeys step sets bus_fare_spending as the sum over the household's non-eligible persons of trips times boardings per resident trip (the published BUS01 journeys over the published NTS0705a trips per resident times the ONS population) times the yield per fare-paying boarding (BUS05ai receipts over journeys less concessionary journeys), per area; bus-in-London trips take the London area's price for every resident, other-local-bus trips the price of the residence area (England outside London; Scotland and Northern Ireland from their own receipts and journeys with England's trip rate as the declared proxy); Wales is unpriced and keeps the raw draw. The chain still draws bus_fare_spending so later targets condition on the same raw draw; the emitted column is the priced value. The receipt records every factor, the frame-implied boardings beside the published ones and the frame's eligible trip share beside the publisher's concessionary boarding share, so the prior-weight fit of the bound receipts targets is read as a composition check, never a level the stage set; the #890 incidence draw and fare rake are retired. The 2024-25 diary (UKDS SN 9603, 2nd edition, whose household tab carries the annual weight as cal_weight_annual, the name weighta had; microcosm#1164) is moved to the base year by the declared uprate_donor_columns step (microcosm#890). Consumption columns and bus fares take the engine's CPI index from the April-to-March diary year, placed on the calendar-year index at three quarters of 2024 and one of 2025, back a quarter to calendar 2024 (microcosm#1113; the diary sits a quarter past it, so the factor is below one; the fare factor survives only where no fare cell levels the column, i.e. Wales). Income predictors take a factor of one: the diary year is the FRS 2024-25 year they are matched against. Petrol and diesel take the DESNZ pump-price times HMRC litres per head outturn from the vendored road_fuel_anchors.json, which sets only their donor distribution because the level step follows; the energy columns are exempt because the NEED 2024 shape at the DESNZ level and the QEP average prices paid set their level. The household adult and child counts (LCFS G018 and G019, the survey's age-18 split) predict on both sides; the recipient counts its members by age, not through the engine's is_adult and is_child flags, which policyengine-uk#1896 deprecates (uk-data#486, microcosm#1095). Road fuel incidence and level are set by two declared steps (microcosm#1113). The two-week diary leaves about a third of car-owning donors with no fuel purchase, which the chain reproduces among the households the fuel flag marks as fuel buyers, so the redraw_zero_road_fuel step redraws a flagged household that drew zero from the donor's distribution among households with positive road fuel, on the chain's predictors: a weighted regime-gated QRF draws the total, positive by construction, then the petrol share of it, at quantiles keyed on the household id; positive draws are kept. Then the level_road_fuel step, after the fuel flag has zeroed the households without a fuel car, scales petrol and diesel so their prior-weighted total equals ONS Consumer Trends household spending on COICOP 07.2.2 for calendar 2024 (the year of the DESNZ pump prices the donor uprating uses) less the donor's own other-fuels share of 07.2.2 (c72213), keeping the drawn mix. The diary's 07.2.2 has three lines (c72211 petrol, c72212 diesel and c72213, the other motor fuels and lubricants) and none for vehicle electricity. The LCFS diary records about a quarter less road fuel than ONS, and binding the OBR cars receipts had closed that gap by moving weight onto fuel-buying households; petrol and diesel therefore carry no committed support bound, like the other levelled columns. The totals that contain levelled columns are written back around them by the declared recompose_from_remainder step (microcosm#1113): each keeps its own chain draw less the chain's draws of the parts the stage re-levels, kept before any step touches them and floored at zero where the parts outgrow the total, and adds the levelled parts back, so housing_water_and_electricity_consumption is its draw less the drawn electricity and gas plus the levelled electricity and gas, and transport_consumption its draw less the drawn petrol, diesel and bus fares plus the levelled petrol and diesel and the priced bus fares. The chain draws each part after, and conditional on, its total, so the remainder is the chain's own split; a remainder drawn as a chain target of its own over-drew the vehicle-purchase tail of transport, 10 to 13 percent above the donor in-sample. The chain's domestic-energy target is the electricity and gas the stage derives from the diary's fuel, light and power (p537) by its labelled parts, from the LCF User Guide's derived-variable labels and P537 definition (microcosm#1164): each fuel's last account payment less its rebate (b489 electricity, b490 gas, read as the tab carries them; the stage refuses a donor where b489 equals b175 less b178, or b490 equals b170 less b173, to the penny for under 95 percent of that fuel's account payers, which pins the labels and the rebate's sign), its prepayment key or meter payment (b1751, b1701), its component of a combined utilities bill (b227 electricity, b226 gas) and of a combined key or meter payment (b2332, b2331), and the diary's second-dwelling account and slot-meter lines (c45112 and c45114, c45212 and c45214); what a combined payment leaves unsplit (the combined bill b231 less its rebate b174, and the combined key or meter payment b233, each less its parts) goes by the household's own electricity share where it pays for both fuels, and otherwise by the donor's mean share of the households that do, since a combined payment means the household pays for both; a donor with no such household fails. The diary's other fuels (central-heating oil b017 and c45312, bottled gas b018 and c45222, coal and coke c45411, wood and peat c45412, hot water, steam and ice c45511) are neither, and the donor_energy_split receipt records the split against p537: what reading refunds as zero adds, what the unclipped parts differ from p537 by, the weighted share of donors whose unclipped parts differ from their p537, and the account identity shares. The derivation it replaces read b226 as electricity by direct debit and b489 and b490 as prepayment payments, where the labels make them the gas component of a combined bill and the electricity and gas account payments less rebates. The liquid fuels (central-heating oil and paraffin with bottled gas, LPG with liquid) and the solid fuels (coal, coke, wood and peat) are drawn as liquid_fuel_consumption and solid_fuel_consumption, the inputs policyengine-uk 2.149.0 reads (pe-uk#2572; Mar\u00eda's ruling of 2026-10-22), last in the chain so that every earlier draw is the chain's own, uprated to calendar-2024 prices as every diary spend column is; the housing total nets their draws and adds them back unchanged, so it always holds them, and hot water, steam and ice stays in its remainder. The receipt records the published ONS 04.5.3 and 04.5.4 spend beside each fuel's donor total at diary prices and the frame's draw (published_fuels). Before the hold, each COICOP division whose frame total per household stands above its donor's by more than the twelve divisions together do is brought down to that shared ratio, by its draw or, for housing and transport, by its remainder alone, so the levelled parts keep their published levels (Mar\u00eda's ruling of 2026-10-23, microcosm#1278); the receipt records each division's ratio and factor (division_levelling) and each recomposed total's levelling_factor. Each total is then held to the donor's realised maximum of that total (maximum_total: donor_support, the support every drawn column is clipped to; microcosm#1164), never below its parts, the excess coming out of its remainder: a remainder near the top of the diary's range plus levelled parts larger than the drawn ones would otherwise leave it. The two totals keep their committed support bounds, which the terminal support gate applies to the emitted frame; the recomposed_totals gate checks the declaration and the receipt, whose rows held at the maximum and weighted mass taken enter its identities. Every household spend column is at calendar-2024 prices as households paid them, the H5's year that policyengine-uk projects from and the calibration uprates to the calendar-2025 window (microcosm#1113): the diary columns by the CPI uprating to 2024, road fuel at ONS 07.2.2 for 2024, energy at DESNZ volume and QEP prices for 2024, and bus fares at each area's fiscal-year yield re-priced to 2024 by its fares index (the DfT local bus fares index by quarter for London and England outside London, Scotland's calendar-year index; Northern Ireland, which publishes no fares index, from its own yields of the two fiscal years 2024 overlaps, weighted three months and nine (microcosm#1207), in place of England's index, which carries the January 2025 rise in the English fare cap Northern Ireland did not have); the consumption_basis gate holds every level-setting step to that year. policyengine-uk applies the fiscal 2024-25 rules to model year 2024 (it samples each parameter at 30 April), so every levelled column sits about a quarter before the midpoint of the policy year it is taxed in; the calibration binds calendar-year facts as published and fiscal-year facts at the calendar window (Mar\u00eda's rule of 2026-09-22). The stage receipt also reports, for each of the twelve COICOP divisions, the prior-weighted frame total against ONS Consumer Trends for the same calendar year less the classes a household diary does not record (02.3 narcotics, 04.2 owner-occupiers' imputed rent and 12.6.1 FISIM), on ONS's domestic concept, and the twelve together against the national concept as well; it is report-only (microcosm#1113). The report-only litres audit compares each fuel's frame litres with HMRC's clearances of that fuel scaled by the cars share of its road use, from the vendored DESNZ sub-national road transport fuel consumption by vehicle type and fuel (PolicyEngine/chronicle#322); the OBR cars share of fuel duty receipts, uniform across fuels, stays beside the total.", + "uses_energy_prepayment_meter", + "beer_litres", + "cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", + "beer_draught_share", + "cider_draught_share", + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week", + "remote_gaming_net_losses", + "pool_betting_net_receipts", + "bingo_net_receipts", + "national_lottery_ticket_spending", + "land_based_casino_net_losses", + "machine_games_lower_rate_net_takings", + "machine_games_standard_rate_net_takings", + "machine_games_higher_rate_net_takings", + "land_based_fixed_odds_betting_net_losses", + "remote_uk_horseracing_betting_net_losses", + "remote_other_betting_net_losses", + "betting_exchange_commission", + "horse_and_dog_pool_betting_net_losses" + ], + "notes": "Ports the incumbent LCFS consumption QRF, including NEED energy raking, with adjudicated weighted fits and an identity-keyed seed-0 fuel flag. The chain's sign gates are cross-fitted (gate_calibration: cross_fitted): each is the mean of five gates, each fitted on four of five folds of the donors stratified by sign, mapped by one weighted Platt calibration fitted on the folds they left out, so a rare spending is drawn at its donor rate on households the gates were not fitted to. A gate fitted and calibrated on the same donors memorises a rare spending's donors and draws it too rarely everywhere else: on held-out donors it drew solid fuels about a tenth as often as they occur and education under half as often. The vehicle count is a numeric QRF predictor on both sides (LCFS a124 on the donor, the was_wealth draw of WAS vcarnr8 on the recipient, both clipped to 0-5), which retires the incumbent's WAS-to-LCFS has-fuel bridge (microcosm#890 A). The recipient fuel flag draws each of a household's vehicles as zero-emission at the battery-electric and fuel-cell share of the vendored DfT VEH1103 licensed-car stock (2024, Great Britain; plug-in hybrids count as fuel buyers), replacing the hand-copied NTS share (microcosm#890 E2): a household with vehicles buys fuel unless every one of them is zero-emission, so it is flagged at one minus that share raised to its vehicle count, and a one-vehicle household keeps the draw it had when the whole household was drawn at once (microcosm#1278; before, a household with several vehicles was all one or the other). The frame holds no fuel type, so the draw, keyed on the household identity, is what makes a vehicle-owning household a fuel buyer: it is random with respect to income and every other characteristic. With the redraw of microcosm#1113 every flagged household buys fuel, so this flag alone sets fuel incidence; who holds the zero-emission cars by income is a known residual. The household input uses_energy_prepayment_meter, which policyengine-uk reads for the July 2023 to March 2024 Energy Price Guarantee prepayment discount (PolicyEngine/policyengine-uk#2098, from 2.123.3), is drawn by the declared impute_prepayment_meter step (microcosm#1110): the donor prepays when it last put money on an electricity, gas or combined key or meter (b1751, b1701, b233, which the LCF asks only of prepayment-meter households) or its diary records a slot-meter payment (c45114, c45214), so electricity-only prepayment counts and a household with no meter payment, including one that did not answer, does not; a weighted regime-gated QRF on the chain's predictors fits that flag and each recipient draws it at uniforms keyed on its household id, which moves no other draw. The release exports it: policyengine-uk reads it from 2.123.3 and an older engine, Microcosm's locked one among them, ignores a column it does not know; the incumbent does not carry it until uk-data#539, so it is a reviewed extra column of the export surface. The frame flags about 3.0 million Great Britain households (10.5 %) at prior weights, against the around three million prepayment households the government counted when the discount began in July 2023 (a different reference period, households in both). Energy support clipping is exempt because NEED raking governs those columns. Bus fares are clipped to donor support before the pricing step (Mar\u00eda's rulings 2026-09-15 and 2026-09-17), which bounds the region no area prices (Wales keeps the chain's raw draw) while the priced regions move beyond donor support afterwards; for that reason the column carries no committed support bound for the terminal gate. Domestic energy is raked in kWh to the NEED 2024 shape at the DESNZ level and priced at the average prices paid (microcosm#890 F, chronicle#270), where both NEED rakes take their mean-kWh margins from the vendored NEED 2024 tables (England and Wales by income band, tenure, property type and region; Scotland by income band, tenure and property type with the all-dwellings mean as its region margin; Northern Ireland untouched), the declared price_domestic_energy step converts spend to kWh and back at each household's QEP price region through the committed crosswalk using the calendar-2024 average variable unit cost and fixed cost across payment methods, standard metering, including VAT (Northern Ireland gas at the UK average because QEP publishes no Northern Ireland gas row), a gas fixed cost only for connected households, the gas connection imposed on the recipient frame at the published share of each region (DESNZ subnational gas meters over electricity meters, 2024) by disconnecting gas-positive households in an identity-keyed uniform order, skipping a household whose weight would overshoot the published share (Northern Ireland has no subnational row and keeps the positive-gas rule), and, where the draw leaves a region below its share, by the declared connect_rule (microcosm#1164): two weighted fits on the chain's predictors give each zero-gas household the probability that a donor like it pays for gas (a gradient-boosted classifier of the donor's gas payers) and the gas such a donor pays (a regime-gated QRF of the payers' gas spend, at quantiles keyed on the household id), and the region's zero-gas households are connected in an identity-keyed order drawn in proportion to that probability, by the same weight-fitting walk, until the share is met. The labelled energy split leaves about 80 % of donors paying for gas against the about 85 % of homes DESNZ counts gas meters for (the derivation it replaced gave gas to 98 %), so without the connect leg nine of the eleven Great Britain regions fell short of their share, and after the four-margin NEED rake one factor per fuel scales the kWh so the prior-weighted frame total equals the DESNZ Energy Trends domestic consumption at actual temperature summed over the four quarters of calendar 2024; NEED gas means are per gas-metered household, so the gas kWh margins are raked over connected households only while electricity is raked over every household, and the energy_rake gate recomputes every NEED mean, the DESNZ level and the connection shares from the vendored rows. After the level, no household is left above the domestic meter definitions behind the DESNZ total (NEED Annex B: gas meters under 73,200 kWh a year, electricity meters under 50,000 kWh on profile classes 1 and 2; Mar\u00eda's ruling of 2026-10-12 on microcosm#1207's extreme energy values): the declared household_kwh_ceiling caps a household there, the households below it in the capped households' own NEED cells are re-raked to those cells' levelled means, and a proportional step restores the DESNZ total (microcosm#1164); the receipt counts the households capped and the share of the total they gave up, and the energy_rake gate checks both. Mobile homes have no NEED property-type row, so the rake takes them to the all-dwellings mean, the incumbent's translation; where every mobile home of a NEED geography draws a spend at or below the standing charge, that cell has no kWh for the rake to scale, and the declared zero_kwh_cells_at_need_mean starts it at its NEED mean before the first sweep (microcosm#1240). The receipt lists the cells it started, and the energy_rake gate fails on a started cell the stage does not declare and on any other cell with a zero mean. Both rakes band households on gross income, NEED's concept: the donor on LCFS p344p, cash income before tax, National Insurance, council tax and pension contributions, and the recipient on the same concept, its HBAI net income with the deductions policyengine-uk takes to reach it added back (council tax and domestic rates, income tax, National Insurance, student loan repayments, employee and personal pension contributions, maintenance and child payments, LVT), which the stage materializes for that band alone (microcosm#1164). Before it the recipient fell back to its HBAI net income, which put households in too low a band; the engine's household_gross_income would put them in too high a one, since it adds capital gains and the in-kind NHS, education and transport spending to cash income. The disconnection walk's seed-0 uniform order makes every group of households (dwelling type, income band, support channel) lose the same expected share of its drawn connected mass, so only the level of the drawn connection moves; the smallest-drawn-gas-first order it replaces piled the disconnections onto low-draw flats once the SPI support households drew gas from their own incomes, and NEED's Scottish property-type means then implied a level 2.6 % above the Scottish all-dwellings mean, a margin conflict the rake could not close. Bus fares are priced from journeys (microcosm#930), where the nts_bus_travel stage imputes each person's annual bus-in-London and other-local-bus trips and their concessionary eligibility, and the declared price_bus_journeys step sets bus_fare_spending as the sum over the household's non-eligible persons of trips times boardings per resident trip (the published BUS01 journeys over the published NTS0705a trips per resident times the ONS population) times the yield per fare-paying boarding (BUS05ai receipts over journeys less concessionary journeys), per area; bus-in-London trips take the London area's price for every resident, other-local-bus trips the price of the residence area (England outside London; Scotland and Northern Ireland from their own receipts and journeys with England's trip rate as the declared proxy); Wales is unpriced and keeps the raw draw. The chain still draws bus_fare_spending so later targets condition on the same raw draw; the emitted column is the priced value. The receipt records every factor, the frame-implied boardings beside the published ones and the frame's eligible trip share beside the publisher's concessionary boarding share, so the prior-weight fit of the bound receipts targets is read as a composition check, never a level the stage set; the #890 incidence draw and fare rake are retired. The 2024-25 diary (UKDS SN 9603, 2nd edition, whose household tab carries the annual weight as cal_weight_annual, the name weighta had; microcosm#1164) is moved to the base year by the declared uprate_donor_columns step (microcosm#890). Consumption columns and bus fares take the engine's CPI index from the April-to-March diary year, placed on the calendar-year index at three quarters of 2024 and one of 2025, back a quarter to calendar 2024 (microcosm#1113; the diary sits a quarter past it, so the factor is below one; the fare factor survives only where no fare cell levels the column, i.e. Wales). Income predictors take a factor of one: the diary year is the FRS 2024-25 year they are matched against. Petrol and diesel take the DESNZ pump-price times HMRC litres per head outturn from the vendored road_fuel_anchors.json, which sets only their donor distribution because the level step follows; the energy columns are exempt because the NEED 2024 shape at the DESNZ level and the QEP average prices paid set their level. The household adult and child counts (LCFS G018 and G019, the survey's age-18 split) predict on both sides; the recipient counts its members by age, not through the engine's is_adult and is_child flags, which policyengine-uk#1896 deprecates (uk-data#486, microcosm#1095). Road fuel incidence and level are set by two declared steps (microcosm#1113). The two-week diary leaves about a third of car-owning donors with no fuel purchase, which the chain reproduces among the households the fuel flag marks as fuel buyers, so the redraw_zero_road_fuel step redraws a flagged household that drew zero from the donor's distribution among households with positive road fuel, on the chain's predictors: a weighted regime-gated QRF draws the total, positive by construction, then the petrol share of it, at quantiles keyed on the household id; positive draws are kept. Then the level_road_fuel step, after the fuel flag has zeroed the households without a fuel car, scales petrol and diesel so their prior-weighted total equals ONS Consumer Trends household spending on COICOP 07.2.2 for calendar 2024 (the year of the DESNZ pump prices the donor uprating uses) less the donor's own other-fuels share of 07.2.2 (c72213), keeping the drawn mix. The diary's 07.2.2 has three lines (c72211 petrol, c72212 diesel and c72213, the other motor fuels and lubricants) and none for vehicle electricity. The LCFS diary records about a quarter less road fuel than ONS, and binding the OBR cars receipts had closed that gap by moving weight onto fuel-buying households; petrol and diesel therefore carry no committed support bound, like the other levelled columns. The totals that contain levelled columns are written back around them by the declared recompose_from_remainder step (microcosm#1113): each keeps its own chain draw less the chain's draws of the parts the stage re-levels, kept before any step touches them and floored at zero where the parts outgrow the total, and adds the levelled parts back, so housing_water_and_electricity_consumption is its draw less the drawn electricity and gas plus the levelled electricity and gas, and transport_consumption its draw less the drawn petrol, diesel and bus fares plus the levelled petrol and diesel and the priced bus fares. The chain draws each part after, and conditional on, its total, so the remainder is the chain's own split; a remainder drawn as a chain target of its own over-drew the vehicle-purchase tail of transport, 10 to 13 percent above the donor in-sample. The chain's domestic-energy target is the electricity and gas the stage derives from the diary's fuel, light and power (p537) by its labelled parts, from the LCF User Guide's derived-variable labels and P537 definition (microcosm#1164): each fuel's last account payment less its rebate (b489 electricity, b490 gas, read as the tab carries them; the stage refuses a donor where b489 equals b175 less b178, or b490 equals b170 less b173, to the penny for under 95 percent of that fuel's account payers, which pins the labels and the rebate's sign), its prepayment key or meter payment (b1751, b1701), its component of a combined utilities bill (b227 electricity, b226 gas) and of a combined key or meter payment (b2332, b2331), and the diary's second-dwelling account and slot-meter lines (c45112 and c45114, c45212 and c45214); what a combined payment leaves unsplit (the combined bill b231 less its rebate b174, and the combined key or meter payment b233, each less its parts) goes by the household's own electricity share where it pays for both fuels, and otherwise by the donor's mean share of the households that do, since a combined payment means the household pays for both; a donor with no such household fails. The diary's other fuels (central-heating oil b017 and c45312, bottled gas b018 and c45222, coal and coke c45411, wood and peat c45412, hot water, steam and ice c45511) are neither, and the donor_energy_split receipt records the split against p537: what reading refunds as zero adds, what the unclipped parts differ from p537 by, the weighted share of donors whose unclipped parts differ from their p537, and the account identity shares. The derivation it replaces read b226 as electricity by direct debit and b489 and b490 as prepayment payments, where the labels make them the gas component of a combined bill and the electricity and gas account payments less rebates. The liquid fuels (central-heating oil and paraffin with bottled gas, LPG with liquid) and the solid fuels (coal, coke, wood and peat) are drawn as liquid_fuel_consumption and solid_fuel_consumption, the inputs policyengine-uk 2.149.0 reads (pe-uk#2572; Mar\u00eda's ruling of 2026-10-22), after the eighteen spend targets so that every earlier draw is the chain's own, uprated to calendar-2024 prices as every diary spend column is; the housing total nets their draws and adds them back unchanged, so it always holds them, and hot water, steam and ice stays in its remainder. The receipt records the published ONS 04.5.3 and 04.5.4 spend beside each fuel's donor total at diary prices and the frame's draw (published_fuels). Before the hold, each COICOP division whose frame total per household stands above its donor's by more than the twelve divisions together do is brought down to that shared ratio, by its draw or, for housing and transport, by its remainder alone, so the levelled parts keep their published levels (Mar\u00eda's ruling of 2026-10-23, microcosm#1278); the receipt records each division's ratio and factor (division_levelling) and each recomposed total's levelling_factor. Each total is then held to the donor's realised maximum of that total (maximum_total: donor_support, the support every drawn column is clipped to; microcosm#1164), never below its parts, the excess coming out of its remainder: a remainder near the top of the diary's range plus levelled parts larger than the drawn ones would otherwise leave it. The two totals keep their committed support bounds, which the terminal support gate applies to the emitted frame; the recomposed_totals gate checks the declaration and the receipt, whose rows held at the maximum and weighted mass taken enter its identities. Every household spend column is at calendar-2024 prices as households paid them, the H5's year that policyengine-uk projects from and the calibration uprates to the calendar-2025 window (microcosm#1113): the diary columns by the CPI uprating to 2024, road fuel at ONS 07.2.2 for 2024, energy at DESNZ volume and QEP prices for 2024, and bus fares at each area's fiscal-year yield re-priced to 2024 by its fares index (the DfT local bus fares index by quarter for London and England outside London, Scotland's calendar-year index; Northern Ireland, which publishes no fares index, from its own yields of the two fiscal years 2024 overlaps, weighted three months and nine (microcosm#1207), in place of England's index, which carries the January 2025 rise in the English fare cap Northern Ireland did not have); the consumption_basis gate holds every level-setting step to that year. policyengine-uk applies the fiscal 2024-25 rules to model year 2024 (it samples each parameter at 30 April), so every levelled column sits about a quarter before the midpoint of the policy year it is taxed in; the calibration binds calendar-year facts as published and fiscal-year facts at the calendar window (Mar\u00eda's rule of 2026-09-22). The stage receipt also reports, for each of the twelve COICOP divisions, the prior-weighted frame total against ONS Consumer Trends for the same calendar year less the classes a household diary does not record (02.3 narcotics, 04.2 owner-occupiers' imputed rent and 12.6.1 FISIM), on ONS's domestic concept, and the twelve together against the national concept as well; it is report-only (microcosm#1113). The report-only litres audit compares each fuel's frame litres with HMRC's clearances of that fuel scaled by the cars share of its road use, from the vendored DESNZ sub-national road transport fuel consumption by vehicle type and fuel (PolicyEngine/chronicle#322); the OBR cars share of fuel duty receipts, uniform across fuels, stays beside the total. After its spend targets and the two fuels the chain draws five shares the derive step computes on the donor from the diary lines (microcosm#1359): tobacco's share of the off-trade alcohol and tobacco that make up P602 (c22111, c22121 and c22131 over those three and the seven lines of alcohol brought home, c21111 to c21311; P602 also sums narcotics, c23111, which the end-user tab does not carry), on-trade alcohol's share of restaurants and hotels (the eight lines of drinks away from home, cb111c to cb111j, over P611, clipped at one because the tab stores P611 to one decimal place), gambling stakes' share of recreation (the seven games-of-chance stake lines P609 sums, c94311 to c94316 and c94319: pools, bingo, lotteries, bookmaker and tote betting with gaming machines, and the National Lottery; the winnings lines beside them sit in no total), the National Lottery's share of those stakes (scratchcards and draws, c94316 and c94319, over the seven) and the betting and gaming share of the rest (football pools, bingo, and bookmaker and tote betting with gaming machines, c94311, c94312 and c94314, over the other five; society lotteries, c94313, and the Irish Lottery, c94315, pay no UK gambling duty). A household's tobacco, off-trade alcohol, on-trade alcohol and gambling stakes are its shares of the totals it carries, and its National Lottery and betting and gaming stakes its shares of its stakes, so the parts sum to the totals and no total, the VAT base included, moves; appended after the twenty targets, the shares move none of their draws. The shares and the spending they give are scratch, on no table; the report-only excise_shares receipt records each share on the frame beside the donor. The declared level_excise_quantities step turns that spending into policyengine-uk's excise inputs (microcosm#1359), so alcohol, tobacco and gambling duty stop scoring zero. Each national quantity is a published FY2024-25 figure from the vendored excise_facts.json, and the step gives each household its part in proportion to the spending that buys it, at prior weights (one factor per input, the level_road_fuel scaling), so the frame's weighted total of each input is the published one; a household that buys one product of a kind buys all of that kind in the national mix. Alcohol: each product's litres are HMRC's clearances of beer, cider, wine, spirits and other fermented products (the Alcohol Bulletin, in litres of pure alcohol) over the engine's own strength for the product, which policyengine-uk multiplies back, shared by off- and on-trade alcohol spending together; beer and cider take their draught shares from the clearances under draught relief, alone or with small producer relief, over all of their clearances, and the other products, whose draught clearances HMRC does not publish, keep the engine's zero, as does sparkling cider, which the bulletin counts within cider. A pound buys the same volume in a pub as in a shop under this rule, which leans the volume, and so the duty, towards on-trade drinkers: against a published on-trade volume share of about 27 percent, a pound spent in a pub is given about 1.6 times the volume it buys and a pound spent in a shop about 0.78 times, and about 11 percent of the volume sits with other households on the 2024-25 diary. No on-trade volume share can be archived (MESAS is a NielsenIQ and Circana dashboard with no fixed file), so the spending rule stands, its lean documented (Mar\u00eda's ruling of 2026-10-23). Tobacco: cigarettes a week and grams a week of hand-rolling tobacco, cigars and other tobacco are HMRC's clearances (the Tobacco Bulletin) over the engine's 52 weeks, shared by tobacco spending; heated tobacco sits within other tobacco in the bulletin, so it is charged at the other-tobacco rate and its own input keeps the engine's zero. Gambling: each input is its duty's dutiable base, HMRC's cash receipts for the duty (the Betting and Gaming bulletin) or Machine Games Duty's declared liabilities for the band, over the engine's FY2024-25 rate (Gaming Duty over the engine's effective-rate proxy for it), so the engine charges back the published receipts. General Betting Duty's base, its receipts over the fixed-odds rate, is split over the land-based fixed-odds, remote horse-racing, remote other, exchange and horse-and-dog pool inputs by the Gambling Commission's gross gambling yield for Great Britain, remote fixed-odds betting by the horse-racing share of all remote betting yield, since the Commission publishes no betting activity by event; its horse racing is not only UK racing, so the remote UK horse-racing input is overstated and, from April 2027, when the engine charges other remote betting at 25 percent, too much of the base stays at 15 percent and the rise is understated; and its pool betting can hold pools on other events, such as football pools, which pay Pool Betting Duty. Spread betting, which the Commission does not regulate, has no published base and keeps the engine's zero. Lottery Duty's base is shared by the National Lottery stakes and every other gambling base by the betting and gaming stakes, since the diary cannot tell remote from land-based play or one betting product from another; the society and Irish lotteries carry none. Known biases: the quantities are levelled to the published figures while spending and the diary's incidence stay at survey level (Mar\u00eda's ruling of 2026-10-23), so a household's duty is one multiple of its own spending, the same for every household that carries it. At prior weights alcohol duty is about 0.45 times alcohol spending, but tobacco duty is about 1.8 times tobacco spending, Lottery Duty about 0.61 times National Lottery stakes (its base, ticket sales, about 5.1 times them) and the other gambling duties about 5.5 times the betting and gaming stakes (their bases about 30 times), since the diary records a fraction of what is bought; VAT on the same goods stays on the survey base. The duty also sits on fewer households than buy: 11.2 percent of households carry tobacco, against 11.9 percent of UK adults who smoked cigarettes in 2023 (ONS), and 10.9 percent the National Lottery and 2.6 percent betting and gaming, against 47 percent of adults in Great Britain who gambled in the past four weeks of 2025 and 27 percent once lottery-draw-only players are left out (Gambling Commission), while the share of households with a smoker or a gambler is above the adult rate; the duty per carrying household is higher by the same factor. The rest of the gap between frame and donor is the chain's own: each share conditions on the chain's earlier draws, not on a donor's spending, which leaves tobacco on more households than its donors (10.3 percent) and betting and gaming on fewer (3.6 percent). Other tobacco (c22131) includes e-cigarette refills, so the tobacco inputs also follow vaping spending and a household that only vapes carries tobacco duty; Vaping Products Duty, from 1 October 2026, needs a key of its own. The draught shares are national constants, so a household that buys alcohol only in shops takes the same draught relief as one that drinks in pubs. The quantities are FY2024-25's, the excise year policyengine-uk charges in model year 2024 (its excise year runs from 6 April), and the engine holds them flat after it (PolicyEngine/policyengine-uk#2596). The step moves no spending column; the excise_quantities gate recomputes every level from the vendored rows.", "operations": [ { "annualization_weeks": 52.17857142857143, @@ -3988,6 +4018,90 @@ "mappings": { "num_vehicles": "a124" }, + "shares": { + "betting_and_gaming_share_of_other_gambling_stakes": { + "denominator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315" + ], + "numerator": [ + "c94311", + "c94312", + "c94314" + ], + "total": "other_gambling_stakes" + }, + "gambling_stakes_share_of_recreation": { + "denominator": [ + "p609" + ], + "numerator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315", + "c94316", + "c94319" + ], + "total": "recreation_consumption" + }, + "national_lottery_share_of_gambling_stakes": { + "denominator": [ + "c94311", + "c94312", + "c94313", + "c94314", + "c94315", + "c94316", + "c94319" + ], + "numerator": [ + "c94316", + "c94319" + ], + "total": "gambling_stakes" + }, + "on_trade_alcohol_share_of_restaurants_and_hotels": { + "denominator": [ + "p611" + ], + "numerator": [ + "cb111c", + "cb111d", + "cb111e", + "cb111f", + "cb111g", + "cb111h", + "cb111i", + "cb111j" + ], + "total": "restaurants_and_hotels_consumption" + }, + "tobacco_share_of_alcohol_and_tobacco": { + "denominator": [ + "c21111", + "c21211", + "c21212", + "c21213", + "c21214", + "c21221", + "c21311", + "c22111", + "c22121", + "c22131" + ], + "numerator": [ + "c22111", + "c22121", + "c22131" + ], + "total": "alcohol_and_tobacco_consumption" + } + }, "unmapped_codes": "refuse" }, { @@ -4170,6 +4284,7 @@ "tenure_type", "accommodation_type" ], + "gate_calibration": "cross_fitted", "kind": "fit_weighted_qrf_chain", "n_estimators": 4, "predictors": [ @@ -4205,7 +4320,12 @@ "electricity_consumption", "gas_consumption", "liquid_fuel_consumption", - "solid_fuel_consumption" + "solid_fuel_consumption", + "tobacco_share_of_alcohol_and_tobacco", + "on_trade_alcohol_share_of_restaurants_and_hotels", + "gambling_stakes_share_of_recreation", + "national_lottery_share_of_gambling_stakes", + "betting_and_gaming_share_of_other_gambling_stakes" ], "weights": "explicit" }, @@ -4597,6 +4717,225 @@ "resource": "ons_household_expenditure_facts.json" } }, + { + "alcohol_volume_weights": { + "rule": "spending" + }, + "draught_shares": { + "beer_draught_share": { + "concept": "hmrc.alcohol_clearances", + "denominator": [ + { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all" + } + ], + "numerator": [ + { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "draught_relief_only" + }, + { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief" + } + ], + "unit": "litre_of_pure_alcohol" + }, + "cider_draught_share": { + "concept": "hmrc.alcohol_clearances", + "denominator": [ + { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "all" + } + ], + "numerator": [ + { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "draught_relief_only" + }, + { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "draught_and_small_producer_relief" + } + ], + "unit": "litre_of_pure_alcohol" + } + }, + "fiscal_start": "2024-04-01", + "gambling": { + "machine_games_liabilities": { + "concept": "hmrc.machine_games_duty_liabilities" + }, + "rates": { + "bingo": { + "parameter_path": "gov.hmrc.gambling_duty.bingo.rate", + "value": 0.1 + }, + "casino": { + "parameter_path": "household.consumption.gambling.casino_effective_rate", + "value": 0.235487 + }, + "general_betting": { + "parameter_path": "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds", + "value": 0.15 + }, + "lottery": { + "parameter_path": "gov.hmrc.gambling_duty.lottery.rate", + "value": 0.12 + }, + "machine_games_higher": { + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.higher", + "value": 0.25 + }, + "machine_games_lower": { + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.lower", + "value": 0.05 + }, + "machine_games_standard": { + "parameter_path": "gov.hmrc.gambling_duty.machine_games.rates.standard", + "value": 0.2 + }, + "pool_betting": { + "parameter_path": "gov.hmrc.gambling_duty.pool_betting.rate", + "value": 0.15 + }, + "remote_gaming": { + "parameter_path": "gov.hmrc.gambling_duty.remote_gaming.rate", + "value": 0.21 + } + }, + "receipts": { + "concept": "hmrc.betting_and_gaming_duty_receipts", + "dimensions": { + "accounting_basis": "cash" + } + }, + "yield": { + "concept": "gambling_commission.gross_gambling_yield", + "geography_id": "K03000001" + } + }, + "geography_id": "K02000001", + "kind": "level_excise_quantities", + "outputs": { + "beer_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "beer", + "duty_point": "all", + "duty_relief": "all" + }, + "strength": { + "parameter_path": "household.consumption.alcohol.beer_abv", + "value": 0.04 + }, + "unit": "litre_of_pure_alcohol" + }, + "cider_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "cider", + "duty_point": "all", + "duty_relief": "all" + }, + "strength": { + "parameter_path": "household.consumption.alcohol.cider_abv", + "value": 0.045 + }, + "unit": "litre_of_pure_alcohol" + }, + "cigarettes_per_week": { + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "cigarettes" + }, + "unit": "stick" + }, + "cigars_grams_per_week": { + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "cigars" + }, + "unit": "kilogram" + }, + "hand_rolling_tobacco_grams_per_week": { + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "hand_rolling_tobacco" + }, + "unit": "kilogram" + }, + "other_fermented_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "other_fermented_products", + "duty_point": "all", + "duty_relief": "all" + }, + "strength": { + "parameter_path": "household.consumption.alcohol.other_fermented_abv", + "value": 0.05 + }, + "unit": "litre_of_pure_alcohol" + }, + "other_tobacco_grams_per_week": { + "concept": "hmrc.tobacco_clearances", + "dimensions": { + "tobacco_product": "other" + }, + "unit": "kilogram" + }, + "spirits_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "spirits", + "duty_point": "all", + "duty_relief": "all" + }, + "strength": { + "parameter_path": "household.consumption.alcohol.spirits_abv", + "value": 0.4 + }, + "unit": "litre_of_pure_alcohol" + }, + "wine_litres": { + "concept": "hmrc.alcohol_clearances", + "dimensions": { + "abv_band": "all", + "alcohol_product": "wine", + "duty_point": "all", + "duty_relief": "all" + }, + "strength": { + "parameter_path": "household.consumption.alcohol.wine_abv", + "value": 0.12 + }, + "unit": "litre_of_pure_alcohol" + } + }, + "period_type": "fiscal_year", + "period_value": 2024, + "resource": "excise_facts.json", + "weeks_per_year": 52 + }, { "declared_factor": 1, "entity": "household", @@ -4627,7 +4966,31 @@ "liquid_fuel_consumption", "solid_fuel_consumption", "has_fuel_consumption", - "uses_energy_prepayment_meter" + "uses_energy_prepayment_meter", + "beer_litres", + "cider_litres", + "wine_litres", + "spirits_litres", + "other_fermented_litres", + "beer_draught_share", + "cider_draught_share", + "cigarettes_per_week", + "hand_rolling_tobacco_grams_per_week", + "cigars_grams_per_week", + "other_tobacco_grams_per_week", + "remote_gaming_net_losses", + "pool_betting_net_receipts", + "bingo_net_receipts", + "national_lottery_ticket_spending", + "land_based_casino_net_losses", + "machine_games_lower_rate_net_takings", + "machine_games_standard_rate_net_takings", + "machine_games_higher_rate_net_takings", + "land_based_fixed_odds_betting_net_losses", + "remote_uk_horseracing_betting_net_losses", + "remote_other_betting_net_losses", + "betting_exchange_commission", + "horse_and_dog_pool_betting_net_losses" ], "rewrites": [], "source": "UK Data Service SN 9603 Living Costs and Food Survey 2024-25 (2nd edition) household/person tabs and the vendored Chronicle facts for NEED 2024 mean kWh, DESNZ Energy Trends and QEP average prices paid for calendar 2024, road-fuel outturn (DESNZ, HMRC, ONS Consumer Trends) and road fuel by vehicle type (DESNZ), ONS Consumer Trends household spending by COICOP division, the DfT VEH1103 licensed-car stock, NTS bus use, and the DfT and devolved bus finance tables and fares indices.", diff --git a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/lcfs_household.csv b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/lcfs_household.csv index d64eb0a763..0765279599 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/lcfs_household.csv +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/lcfs_household.csv @@ -1,65 +1,65 @@ -case,g018,g019,gorx,a124,p389p,p344p,cal_weight_annual,a122,a121,p537,b489,b175,b178,b490,b170,b173,b1751,b227,b2332,c45112,c45114,b1701,b226,b2331,c45212,c45214,b231,b174,b233,b017,b018,c45222,c45312,c45411,c45412,c45511,p601,p602,p603,p604,p605,p606,p607,p608,p609,p610,p611,p612,c72211,c72212,c73212,c73213,c73214,c72213 -1,1,0,1,0,100,150,1,1,1,10,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,0,0,0.5 -2,2,1,2,1,110,160,1.1000000000000001,2,2,11,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.1000000000000001,2.1000000000000001,3.1000000000000001,4.0999999999999996,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,0 -3,3,2,3,2,120,170,1.2,3,3,12,10,10,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.2,2.2000000000000002,3.2000000000000002,4.2000000000000002,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,0 -4,1,0,4,3,130,180,1.3,4,4,13,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,1.3,2.2999999999999998,3.2999999999999998,4.2999999999999998,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,0,0,0,0 -5,2,1,5,0,140,190,1.3999999999999999,5,5,14,12,12,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.3999999999999999,2.3999999999999999,3.3999999999999999,4.4000000000000004,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,0 -6,3,2,6,1,150,200,1.5,6,6,15,8,8,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,0.5 -7,1,0,7,2,160,210,1.6000000000000001,7,7,16,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,1.6000000000000001,2.6000000000000001,3.6000000000000001,4.5999999999999996,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,0,0,0,0 -8,2,1,8,3,170,220,1,8,8,17,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,2.5,0,0,0,0,0,0,1.7,2.7000000000000002,3.7000000000000002,4.7000000000000002,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,0 -9,3,2,9,0,180,230,1.1000000000000001,1,1,18,11,11,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.8,2.7999999999999998,3.7999999999999998,4.7999999999999998,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,0 -10,1,0,10,1,190,240,1.2,2,2,19,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,1.8999999999999999,2.8999999999999999,3.8999999999999999,4.9000000000000004,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,0,0,0,0 -11,2,1,11,2,200,250,1.3,3,3,20,8,8,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,0.5 -12,3,2,12,3,210,260,1.3999999999999999,4,4,21,9,9,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.1000000000000001,3.1000000000000001,4.0999999999999996,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,0 -13,1,0,1,0,220,270,1.5,5,5,22,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,2.2000000000000002,3.2000000000000002,4.2000000000000002,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,0,0,0,0 -14,2,1,2,1,230,280,1.6000000000000001,6,6,23,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.2999999999999998,3.2999999999999998,4.2999999999999998,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,0 -15,3,2,3,2,240,290,1,7,7,24,12,12,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.3999999999999999,3.3999999999999999,4.4000000000000004,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,18.399999999999999,0 -16,1,0,4,3,250,300,1.1000000000000001,8,8,25,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,0,0,0,0.5 -17,2,1,5,0,260,310,1.2,1,1,26,9,9,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.6000000000000001,3.6000000000000001,4.5999999999999996,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,18.600000000000001,0 -18,3,2,6,1,270,320,1.3,2,2,27,10,10,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.5,0,0,0,0,0,0,2.7000000000000002,3.7000000000000002,4.7000000000000002,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,18.699999999999999,0 -19,1,0,7,2,280,330,1.3999999999999999,3,3,28,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,2.7999999999999998,3.7999999999999998,4.7999999999999998,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,0,0,0,0 -20,2,1,8,3,290,340,1.5,4,4,29,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.8999999999999999,3.8999999999999999,4.9000000000000004,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,18.899999999999999,0 -21,3,2,9,0,300,350,1.6000000000000001,5,5,30,8,8,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,0.5 -22,1,0,10,1,310,360,1,6,6,31,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,3.1000000000000001,4.0999999999999996,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,0,0,0,0 -23,2,1,11,2,320,370,1.1000000000000001,7,7,32,10,10,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.2000000000000002,4.2000000000000002,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,19.199999999999999,0 -24,3,2,12,3,330,380,1.2,8,8,33,11,11,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.2999999999999998,4.2999999999999998,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,19.300000000000001,0 -25,1,0,1,0,340,390,1.3,1,1,34,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,3.3999999999999999,4.4000000000000004,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,0,0,0,0 -26,2,1,2,1,350,400,1.3999999999999999,2,2,35,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5,0.5 -27,3,2,3,2,360,410,1.5,3,3,36,9,9,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.6000000000000001,4.5999999999999996,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,18.600000000000001,19.600000000000001,0 -28,1,0,4,3,370,420,1.6000000000000001,4,4,37,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,2.5,0,0,0,0,0,0,3.7000000000000002,4.7000000000000002,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,0,0,0,0 -29,2,1,5,0,380,430,1,5,5,38,11,11,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.7999999999999998,4.7999999999999998,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,18.800000000000001,19.800000000000001,0 -30,3,2,6,1,390,440,1.1000000000000001,6,6,39,12,12,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.8999999999999999,4.9000000000000004,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,18.899999999999999,19.899999999999999,0 -31,1,0,7,2,400,450,1.2,7,7,40,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,0,0,0,0.5 -32,2,1,8,3,410,460,1.3,8,8,41,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.0999999999999996,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,19.100000000000001,20.100000000000001,0 -33,3,2,9,0,420,470,1.3999999999999999,1,1,42,10,10,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.2000000000000002,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,19.199999999999999,20.199999999999999,0 -34,1,0,10,1,430,480,1.5,2,2,43,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,4.2999999999999998,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,0,0,0,0 -35,2,1,11,2,440,490,1.6000000000000001,3,3,44,12,12,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.4000000000000004,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,18.399999999999999,19.399999999999999,20.399999999999999,0 -36,3,2,12,3,450,500,1,4,4,45,8,8,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5,20.5,0.5 -37,1,0,1,0,460,510,1.1000000000000001,5,5,46,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,4.5999999999999996,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,0,0,0,0 -38,2,1,2,1,470,520,1.2,6,6,47,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,2.5,0,0,0,0,0,0,4.7000000000000002,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,18.699999999999999,19.699999999999999,20.699999999999999,0 -39,3,2,3,2,480,530,1.3,7,7,48,11,11,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.7999999999999998,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,18.800000000000001,19.800000000000001,20.800000000000001,0 -40,1,0,4,3,490,540,1.3999999999999999,8,8,49,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,4.9000000000000004,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,0,0,0,0 -41,2,1,5,0,500,550,1.5,1,1,50,8,8,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,0.5 -42,3,2,6,1,510,560,1.6000000000000001,2,2,51,9,9,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,19.100000000000001,20.100000000000001,21.100000000000001,0 -43,1,0,7,2,520,570,1,3,3,52,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,0,0,0,0 -44,2,1,8,3,530,580,1.1000000000000001,4,4,53,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,19.300000000000001,20.300000000000001,21.300000000000001,0 -45,3,2,9,0,540,590,1.2,5,5,54,12,12,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,18.399999999999999,19.399999999999999,20.399999999999999,21.399999999999999,0 -46,1,0,10,1,550,600,1.3,6,6,55,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,0,0,0,0.5 -47,2,1,11,2,560,610,1.3999999999999999,7,7,56,9,9,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,18.600000000000001,19.600000000000001,20.600000000000001,21.600000000000001,0 -48,3,2,12,3,570,620,1.5,8,8,57,10,10,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.5,0,0,0,0,0,0,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,18.699999999999999,19.699999999999999,20.699999999999999,21.699999999999999,0 -49,1,0,1,0,580,630,1.6000000000000001,1,1,58,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,18.800000000000001,0,0,0,0 -50,2,1,2,1,590,640,1,2,2,59,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,18.899999999999999,19.899999999999999,20.899999999999999,21.899999999999999,0 -51,3,2,3,2,600,650,1.1000000000000001,3,3,60,8,8,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,0.5 -52,1,0,4,3,610,660,1.2,4,4,61,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,19.100000000000001,0,0,0,0 -53,2,1,5,0,620,670,1.3,5,5,62,10,10,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,19.199999999999999,20.199999999999999,21.199999999999999,22.199999999999999,0 -54,3,2,6,1,630,680,1.3999999999999999,6,6,63,11,11,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,19.300000000000001,20.300000000000001,21.300000000000001,22.300000000000001,0 -55,1,0,7,2,640,690,1.5,7,7,64,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,18.399999999999999,19.399999999999999,0,0,0,0 -56,2,1,8,3,650,700,1.6000000000000001,8,8,65,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5,20.5,21.5,22.5,0.5 -57,3,2,9,0,660,710,1,1,1,66,9,9,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,18.600000000000001,19.600000000000001,20.600000000000001,21.600000000000001,22.600000000000001,0 -58,1,0,10,1,670,720,1.1000000000000001,2,2,67,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,2.5,0,0,0,0,0,0,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,18.699999999999999,19.699999999999999,0,0,0,0 -59,2,1,11,2,680,730,1.2,3,3,68,11,11,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,18.800000000000001,19.800000000000001,20.800000000000001,21.800000000000001,22.800000000000001,0 -60,3,2,12,3,690,740,1.3,4,4,69,12,12,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,18.899999999999999,19.899999999999999,20.899999999999999,21.899999999999999,22.899999999999999,0 -61,1,0,1,0,700,750,1.3999999999999999,5,5,70,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,7,8,9,10,11,12,13,14,15,16,17,18,19,20,0,0,0,0.5 -62,2,1,2,1,710,760,1.5,6,6,71,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,19.100000000000001,20.100000000000001,21.100000000000001,22.100000000000001,23.100000000000001,0 -63,3,2,3,2,720,770,1.6000000000000001,7,7,72,10,10,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,19.199999999999999,20.199999999999999,21.199999999999999,22.199999999999999,23.199999999999999,0 -64,1,0,4,3,730,780,1,8,8,73,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,19.300000000000001,20.300000000000001,0,0,0,0 +case,g018,g019,gorx,a124,p389p,p344p,cal_weight_annual,a122,a121,p537,b489,b175,b178,b490,b170,b173,b1751,b227,b2332,c45112,c45114,b1701,b226,b2331,c45212,c45214,b231,b174,b233,b017,b018,c45222,c45312,c45411,c45412,c45511,p601,p602,p603,p604,p605,p606,p607,p608,p609,p610,p611,p612,c72211,c72212,c73212,c73213,c73214,c72213,c22111,c22121,c22131,c21111,c21211,c21212,c21213,c21214,c21221,c21311,cb111c,cb111d,cb111e,cb111f,cb111g,cb111h,cb111i,cb111j,c94311,c94312,c94313,c94314,c94315,c94316,c94319 +1,1,0,1,0,100,150,1,1,1,10,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,0,0,0.5,1.3999999999999999,0,0.59999999999999998,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +2,2,1,2,1,110,160,1.1000000000000001,2,2,11,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.1000000000000001,2.1000000000000001,3.1000000000000001,4.0999999999999996,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,0,0,0,0,0.29999999999999999,0.29999999999999999,0.29999999999999999,0.29999999999999999,0.29999999999999999,0.29999999999999999,0.29999999999999999,0.34687499999999999,0.34687499999999999,0.34687499999999999,0.34687499999999999,0.34687499999999999,0.34687499999999999,0.34687499999999999,0.34687499999999999,0,0,0,0,0,0,0 +3,3,2,3,2,120,170,1.2,3,3,12,10,10,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.2,2.2000000000000002,3.2000000000000002,4.2000000000000002,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,0,0,0,0,0.31428571428571433,0.31428571428571433,0.31428571428571433,0.31428571428571433,0.31428571428571433,0.31428571428571433,0.31428571428571433,0,0,0,0,0,0,0,0,0.065714285714285711,0.065714285714285711,0.065714285714285711,0.065714285714285711,0.065714285714285711,0.065714285714285711,0.065714285714285711 +4,1,0,4,3,130,180,1.3,4,4,13,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,1.3,2.2999999999999998,3.2999999999999998,4.2999999999999998,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,0,0,0,0,0,0,0,0.32857142857142857,0.32857142857142857,0.32857142857142857,0.32857142857142857,0.32857142857142857,0.32857142857142857,0.32857142857142857,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +5,2,1,5,0,140,190,1.3999999999999999,5,5,14,12,12,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.3999999999999999,2.3999999999999999,3.3999999999999999,4.4000000000000004,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,0,0.504,0,0.216,0.23999999999999999,0.23999999999999999,0.23999999999999999,0.23999999999999999,0.23999999999999999,0.23999999999999999,0.23999999999999999,0.35625000000000001,0.35625000000000001,0.35625000000000001,0.35625000000000001,0.35625000000000001,0.35625000000000001,0.35625000000000001,0.35625000000000001,0,0,0,0,0,0,0 +6,3,2,6,1,150,200,1.5,6,6,15,8,8,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,0.5,0,0,0,0.35714285714285715,0.35714285714285715,0.35714285714285715,0.35714285714285715,0.35714285714285715,0.35714285714285715,0.35714285714285715,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +7,1,0,7,2,160,210,1.6000000000000001,7,7,16,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,1.6000000000000001,2.6000000000000001,3.6000000000000001,4.5999999999999996,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,0,0,0,0,0,0,0,0.37142857142857144,0.37142857142857144,0.37142857142857144,0.37142857142857144,0.37142857142857144,0.37142857142857144,0.37142857142857144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +8,2,1,8,3,170,220,1,8,8,17,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,2.5,0,0,0,0,0,0,1.7,2.7000000000000002,3.7000000000000002,4.7000000000000002,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,0,0,0,0,0.38571428571428573,0.38571428571428573,0.38571428571428573,0.38571428571428573,0.38571428571428573,0.38571428571428573,0.38571428571428573,0.36562499999999998,0.36562499999999998,0.36562499999999998,0.36562499999999998,0.36562499999999998,0.36562499999999998,0.36562499999999998,0.36562499999999998,0.069285714285714284,0.069285714285714284,0.069285714285714284,0.069285714285714284,0.069285714285714284,0.069285714285714284,0.069285714285714284 +9,3,2,9,0,180,230,1.1000000000000001,1,1,18,11,11,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.8,2.7999999999999998,3.7999999999999998,4.7999999999999998,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,0,0.58799999999999997,0,0.252,0.27999999999999997,0.27999999999999997,0.27999999999999997,0.27999999999999997,0.27999999999999997,0.27999999999999997,0.27999999999999997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +10,1,0,10,1,190,240,1.2,2,2,19,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,1.8999999999999999,2.8999999999999999,3.8999999999999999,4.9000000000000004,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,0,0,0,0,0,0,0,0.41428571428571426,0.41428571428571426,0.41428571428571426,0.41428571428571426,0.41428571428571426,0.41428571428571426,0.41428571428571426,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +11,2,1,11,2,200,250,1.3,3,3,20,8,8,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,0.5,0,0,0,0.42857142857142855,0.42857142857142855,0.42857142857142855,0.42857142857142855,0.42857142857142855,0.42857142857142855,0.42857142857142855,0.375,0.375,0.375,0.375,0.375,0.375,0.375,0.375,0,0,0,0,0,0,0 +12,3,2,12,3,210,260,1.3999999999999999,4,4,21,9,9,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.1000000000000001,3.1000000000000001,4.0999999999999996,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,0,0,0,0,0.44285714285714289,0.44285714285714289,0.44285714285714289,0.44285714285714289,0.44285714285714289,0.44285714285714289,0.44285714285714289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +13,1,0,1,0,220,270,1.5,5,5,22,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,2.2000000000000002,3.2000000000000002,4.2000000000000002,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,0,0,0,0,2.2399999999999998,0,0.95999999999999996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.072857142857142856,0.072857142857142856,0.072857142857142856,0.072857142857142856,0.072857142857142856,0.072857142857142856,0.072857142857142856 +14,2,1,2,1,230,280,1.6000000000000001,6,6,23,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.2999999999999998,3.2999999999999998,4.2999999999999998,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,0,0,0,0,0.47142857142857142,0.47142857142857142,0.47142857142857142,0.47142857142857142,0.47142857142857142,0.47142857142857142,0.47142857142857142,0.38437500000000002,0.38437500000000002,0.38437500000000002,0.38437500000000002,0.38437500000000002,0.38437500000000002,0.38437500000000002,0.38437500000000002,0,0,0,0,0,0,0 +15,3,2,3,2,240,290,1,7,7,24,12,12,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.3999999999999999,3.3999999999999999,4.4000000000000004,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,18.399999999999999,0,0,0,0,0.48571428571428571,0.48571428571428571,0.48571428571428571,0.48571428571428571,0.48571428571428571,0.48571428571428571,0.48571428571428571,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +16,1,0,4,3,250,300,1.1000000000000001,8,8,25,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,0,0,0,0.5,0,0,0,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +17,2,1,5,0,260,310,1.2,1,1,26,9,9,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.6000000000000001,3.6000000000000001,4.5999999999999996,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,18.600000000000001,0,0.75600000000000001,0,0.32400000000000001,0.35999999999999999,0.35999999999999999,0.35999999999999999,0.35999999999999999,0.35999999999999999,0.35999999999999999,0.35999999999999999,0.39374999999999999,0.39374999999999999,0.39374999999999999,0.39374999999999999,0.39374999999999999,0.39374999999999999,0.39374999999999999,0.39374999999999999,0,0,0,0,0,0,0 +18,3,2,6,1,270,320,1.3,2,2,27,10,10,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.5,0,0,0,0,0,0,2.7000000000000002,3.7000000000000002,4.7000000000000002,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,18.699999999999999,0,0,0,0,0.52857142857142858,0.52857142857142858,0.52857142857142858,0.52857142857142858,0.52857142857142858,0.52857142857142858,0.52857142857142858,0,0,0,0,0,0,0,0,0.076428571428571429,0.076428571428571429,0.076428571428571429,0.076428571428571429,0.076428571428571429,0.076428571428571429,0.076428571428571429 +19,1,0,7,2,280,330,1.3999999999999999,3,3,28,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,2.7999999999999998,3.7999999999999998,4.7999999999999998,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,0,0,0,0,0,0,0,0.54285714285714282,0.54285714285714282,0.54285714285714282,0.54285714285714282,0.54285714285714282,0.54285714285714282,0.54285714285714282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +20,2,1,8,3,290,340,1.5,4,4,29,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.8999999999999999,3.8999999999999999,4.9000000000000004,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,18.899999999999999,0,0,0,0,0.55714285714285716,0.55714285714285716,0.55714285714285716,0.55714285714285716,0.55714285714285716,0.55714285714285716,0.55714285714285716,0.40312500000000001,0.40312500000000001,0.40312500000000001,0.40312500000000001,0.40312500000000001,0.40312500000000001,0.40312500000000001,0.40312500000000001,0,0,0,0,0,0,0 +21,3,2,9,0,300,350,1.6000000000000001,5,5,30,8,8,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,0.5,0.83999999999999997,0,0.35999999999999999,0.39999999999999997,0.39999999999999997,0.39999999999999997,0.39999999999999997,0.39999999999999997,0.39999999999999997,0.39999999999999997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +22,1,0,10,1,310,360,1,6,6,31,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,3.1000000000000001,4.0999999999999996,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,0,0,0,0,0,0,0,0.58571428571428563,0.58571428571428563,0.58571428571428563,0.58571428571428563,0.58571428571428563,0.58571428571428563,0.58571428571428563,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +23,2,1,11,2,320,370,1.1000000000000001,7,7,32,10,10,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.2000000000000002,4.2000000000000002,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,19.199999999999999,0,0,0,0,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.41249999999999998,0.41249999999999998,0.41249999999999998,0.41249999999999998,0.41249999999999998,0.41249999999999998,0.41249999999999998,0.41249999999999998,0.079999999999999988,0.079999999999999988,0.079999999999999988,0.079999999999999988,0.079999999999999988,0.079999999999999988,0.079999999999999988 +24,3,2,12,3,330,380,1.2,8,8,33,11,11,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.2999999999999998,4.2999999999999998,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,19.300000000000001,0,0,0,0,0.61428571428571421,0.61428571428571421,0.61428571428571421,0.61428571428571421,0.61428571428571421,0.61428571428571421,0.61428571428571421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +25,1,0,1,0,340,390,1.3,1,1,34,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,3.3999999999999999,4.4000000000000004,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,0,0,0,0,3.0800000000000001,0,1.3200000000000001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +26,2,1,2,1,350,400,1.3999999999999999,2,2,35,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5,0.5,0,0,0,0.6428571428571429,0.6428571428571429,0.6428571428571429,0.6428571428571429,0.6428571428571429,0.6428571428571429,0.6428571428571429,0.421875,0.421875,0.421875,0.421875,0.421875,0.421875,0.421875,0.421875,0,0,0,0,0,0,0 +27,3,2,3,2,360,410,1.5,3,3,36,9,9,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.6000000000000001,4.5999999999999996,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,18.600000000000001,19.600000000000001,0,0,0,0,0.65714285714285714,0.65714285714285714,0.65714285714285714,0.65714285714285714,0.65714285714285714,0.65714285714285714,0.65714285714285714,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +28,1,0,4,3,370,420,1.6000000000000001,4,4,37,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,2.5,0,0,0,0,0,0,3.7000000000000002,4.7000000000000002,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,0,0,0,0,0,0,0,0.67142857142857149,0.67142857142857149,0.67142857142857149,0.67142857142857149,0.67142857142857149,0.67142857142857149,0.67142857142857149,0,0,0,0,0,0,0,0,0.08357142857142856,0.08357142857142856,0.08357142857142856,0.08357142857142856,0.08357142857142856,0.08357142857142856,0.08357142857142856 +29,2,1,5,0,380,430,1,5,5,38,11,11,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.7999999999999998,4.7999999999999998,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,18.800000000000001,19.800000000000001,0,1.008,0,0.432,0.47999999999999998,0.47999999999999998,0.47999999999999998,0.47999999999999998,0.47999999999999998,0.47999999999999998,0.47999999999999998,0.43125000000000002,0.43125000000000002,0.43125000000000002,0.43125000000000002,0.43125000000000002,0.43125000000000002,0.43125000000000002,0.43125000000000002,0,0,0,0,0,0,0 +30,3,2,6,1,390,440,1.1000000000000001,6,6,39,12,12,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.8999999999999999,4.9000000000000004,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,18.899999999999999,19.899999999999999,0,0,0,0,0.70000000000000007,0.70000000000000007,0.70000000000000007,0.70000000000000007,0.70000000000000007,0.70000000000000007,0.70000000000000007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +31,1,0,7,2,400,450,1.2,7,7,40,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,0,0,0,0.5,0,0,0,0.7142857142857143,0.7142857142857143,0.7142857142857143,0.7142857142857143,0.7142857142857143,0.7142857142857143,0.7142857142857143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +32,2,1,8,3,410,460,1.3,8,8,41,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.0999999999999996,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,19.100000000000001,20.100000000000001,0,0,0,0,0.72857142857142854,0.72857142857142854,0.72857142857142854,0.72857142857142854,0.72857142857142854,0.72857142857142854,0.72857142857142854,0.44062499999999999,0.44062499999999999,0.44062499999999999,0.44062499999999999,0.44062499999999999,0.44062499999999999,0.44062499999999999,0.44062499999999999,0,0,0,0,0,0,0 +33,3,2,9,0,420,470,1.3999999999999999,1,1,42,10,10,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.2000000000000002,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,19.199999999999999,20.199999999999999,0,1.0919999999999999,0,0.46799999999999997,0.52000000000000002,0.52000000000000002,0.52000000000000002,0.52000000000000002,0.52000000000000002,0.52000000000000002,0.52000000000000002,0,0,0,0,0,0,0,0,0.087142857142857147,0.087142857142857147,0.087142857142857147,0.087142857142857147,0.087142857142857147,0.087142857142857147,0.087142857142857147 +34,1,0,10,1,430,480,1.5,2,2,43,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,4.2999999999999998,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,0,0,0,0,0,0,0,0.75714285714285712,0.75714285714285712,0.75714285714285712,0.75714285714285712,0.75714285714285712,0.75714285714285712,0.75714285714285712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +35,2,1,11,2,440,490,1.6000000000000001,3,3,44,12,12,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.4000000000000004,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,18.399999999999999,19.399999999999999,20.399999999999999,0,0,0,0,0.77142857142857146,0.77142857142857146,0.77142857142857146,0.77142857142857146,0.77142857142857146,0.77142857142857146,0.77142857142857146,0.45000000000000001,0.45000000000000001,0.45000000000000001,0.45000000000000001,0.45000000000000001,0.45000000000000001,0.45000000000000001,0.45000000000000001,0,0,0,0,0,0,0 +36,3,2,12,3,450,500,1,4,4,45,8,8,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5,20.5,0.5,0,0,0,0.7857142857142857,0.7857142857142857,0.7857142857142857,0.7857142857142857,0.7857142857142857,0.7857142857142857,0.7857142857142857,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +37,1,0,1,0,460,510,1.1000000000000001,5,5,46,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,4.5999999999999996,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,0,0,0,0,3.9199999999999995,0,1.6799999999999999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +38,2,1,2,1,470,520,1.2,6,6,47,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,2.5,0,0,0,0,0,0,4.7000000000000002,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,18.699999999999999,19.699999999999999,20.699999999999999,0,0,0,0,0.81428571428571428,0.81428571428571428,0.81428571428571428,0.81428571428571428,0.81428571428571428,0.81428571428571428,0.81428571428571428,0.45937499999999998,0.45937499999999998,0.45937499999999998,0.45937499999999998,0.45937499999999998,0.45937499999999998,0.45937499999999998,0.45937499999999998,0.09071428571428572,0.09071428571428572,0.09071428571428572,0.09071428571428572,0.09071428571428572,0.09071428571428572,0.09071428571428572 +39,3,2,3,2,480,530,1.3,7,7,48,11,11,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.7999999999999998,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,18.800000000000001,19.800000000000001,20.800000000000001,0,0,0,0,0.82857142857142851,0.82857142857142851,0.82857142857142851,0.82857142857142851,0.82857142857142851,0.82857142857142851,0.82857142857142851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +40,1,0,4,3,490,540,1.3999999999999999,8,8,49,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,4.9000000000000004,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,0,0,0,0,0,0,0,0.84285714285714286,0.84285714285714286,0.84285714285714286,0.84285714285714286,0.84285714285714286,0.84285714285714286,0.84285714285714286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +41,2,1,5,0,500,550,1.5,1,1,50,8,8,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,0.5,1.2599999999999998,0,0.53999999999999992,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.59999999999999998,0.46875,0.46875,0.46875,0.46875,0.46875,0.46875,0.46875,0.46875,0,0,0,0,0,0,0 +42,3,2,6,1,510,560,1.6000000000000001,2,2,51,9,9,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.0999999999999996,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,19.100000000000001,20.100000000000001,21.100000000000001,0,0,0,0,0.87142857142857133,0.87142857142857133,0.87142857142857133,0.87142857142857133,0.87142857142857133,0.87142857142857133,0.87142857142857133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +43,1,0,7,2,520,570,1,3,3,52,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,5.2000000000000002,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,0,0,0,0,0,0,0,0.88571428571428579,0.88571428571428579,0.88571428571428579,0.88571428571428579,0.88571428571428579,0.88571428571428579,0.88571428571428579,0,0,0,0,0,0,0,0,0.094285714285714292,0.094285714285714292,0.094285714285714292,0.094285714285714292,0.094285714285714292,0.094285714285714292,0.094285714285714292 +44,2,1,8,3,530,580,1.1000000000000001,4,4,53,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.2999999999999998,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,19.300000000000001,20.300000000000001,21.300000000000001,0,0,0,0,0.90000000000000002,0.90000000000000002,0.90000000000000002,0.90000000000000002,0.90000000000000002,0.90000000000000002,0.90000000000000002,0.47812500000000002,0.47812500000000002,0.47812500000000002,0.47812500000000002,0.47812500000000002,0.47812500000000002,0.47812500000000002,0.47812500000000002,0,0,0,0,0,0,0 +45,3,2,9,0,540,590,1.2,5,5,54,12,12,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.4000000000000004,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,18.399999999999999,19.399999999999999,20.399999999999999,21.399999999999999,0,1.3439999999999999,0,0.57599999999999996,0.64000000000000001,0.64000000000000001,0.64000000000000001,0.64000000000000001,0.64000000000000001,0.64000000000000001,0.64000000000000001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +46,1,0,10,1,550,600,1.3,6,6,55,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,0,0,0,0.5,0,0,0,0.9285714285714286,0.9285714285714286,0.9285714285714286,0.9285714285714286,0.9285714285714286,0.9285714285714286,0.9285714285714286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +47,2,1,11,2,560,610,1.3999999999999999,7,7,56,9,9,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.5999999999999996,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,18.600000000000001,19.600000000000001,20.600000000000001,21.600000000000001,0,0,0,0,0.94285714285714284,0.94285714285714284,0.94285714285714284,0.94285714285714284,0.94285714285714284,0.94285714285714284,0.94285714285714284,0.48749999999999999,0.48749999999999999,0.48749999999999999,0.48749999999999999,0.48749999999999999,0.48749999999999999,0.48749999999999999,0.48749999999999999,0,0,0,0,0,0,0 +48,3,2,12,3,570,620,1.5,8,8,57,10,10,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.5,0,0,0,0,0,0,5.7000000000000002,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,18.699999999999999,19.699999999999999,20.699999999999999,21.699999999999999,0,0,0,0,0.95714285714285718,0.95714285714285718,0.95714285714285718,0.95714285714285718,0.95714285714285718,0.95714285714285718,0.95714285714285718,0,0,0,0,0,0,0,0,0.097857142857142865,0.097857142857142865,0.097857142857142865,0.097857142857142865,0.097857142857142865,0.097857142857142865,0.097857142857142865 +49,1,0,1,0,580,630,1.6000000000000001,1,1,58,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,5.7999999999999998,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,18.800000000000001,0,0,0,0,4.7599999999999998,0,2.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +50,2,1,2,1,590,640,1,2,2,59,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.9000000000000004,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,18.899999999999999,19.899999999999999,20.899999999999999,21.899999999999999,0,0,0,0,0.98571428571428577,0.98571428571428577,0.98571428571428577,0.98571428571428577,0.98571428571428577,0.98571428571428577,0.98571428571428577,0.49687500000000001,0.49687500000000001,0.49687500000000001,0.49687500000000001,0.49687500000000001,0.49687500000000001,0.49687500000000001,0.49687500000000001,0,0,0,0,0,0,0 +51,3,2,3,2,600,650,1.1000000000000001,3,3,60,8,8,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,0.5,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +52,1,0,4,3,610,660,1.2,4,4,61,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,6.0999999999999996,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,19.100000000000001,0,0,0,0,0,0,0,1.0142857142857142,1.0142857142857142,1.0142857142857142,1.0142857142857142,1.0142857142857142,1.0142857142857142,1.0142857142857142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +53,2,1,5,0,620,670,1.3,5,5,62,10,10,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.2000000000000002,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,19.199999999999999,20.199999999999999,21.199999999999999,22.199999999999999,0,1.512,0,0.64800000000000002,0.71999999999999997,0.71999999999999997,0.71999999999999997,0.71999999999999997,0.71999999999999997,0.71999999999999997,0.71999999999999997,0.50624999999999998,0.50624999999999998,0.50624999999999998,0.50624999999999998,0.50624999999999998,0.50624999999999998,0.50624999999999998,0.50624999999999998,0.10142857142857142,0.10142857142857142,0.10142857142857142,0.10142857142857142,0.10142857142857142,0.10142857142857142,0.10142857142857142 +54,3,2,6,1,630,680,1.3999999999999999,6,6,63,11,11,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.2999999999999998,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,19.300000000000001,20.300000000000001,21.300000000000001,22.300000000000001,0,0,0,0,1.0428571428571429,1.0428571428571429,1.0428571428571429,1.0428571428571429,1.0428571428571429,1.0428571428571429,1.0428571428571429,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +55,1,0,7,2,640,690,1.5,7,7,64,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,6.4000000000000004,7.4000000000000004,8.4000000000000004,9.4000000000000004,10.4,11.4,12.4,13.4,14.4,15.4,16.399999999999999,17.399999999999999,18.399999999999999,19.399999999999999,0,0,0,0,0,0,0,1.0571428571428572,1.0571428571428572,1.0571428571428572,1.0571428571428572,1.0571428571428572,1.0571428571428572,1.0571428571428572,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +56,2,1,8,3,650,700,1.6000000000000001,8,8,65,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5,20.5,21.5,22.5,0.5,0,0,0,1.0714285714285714,1.0714285714285714,1.0714285714285714,1.0714285714285714,1.0714285714285714,1.0714285714285714,1.0714285714285714,0.515625,0.515625,0.515625,0.515625,0.515625,0.515625,0.515625,0.515625,0,0,0,0,0,0,0 +57,3,2,9,0,660,710,1,1,1,66,9,9,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.5999999999999996,7.5999999999999996,8.5999999999999996,9.5999999999999996,10.6,11.6,12.6,13.6,14.6,15.6,16.600000000000001,17.600000000000001,18.600000000000001,19.600000000000001,20.600000000000001,21.600000000000001,22.600000000000001,0,1.5959999999999999,0,0.68399999999999994,0.76000000000000001,0.76000000000000001,0.76000000000000001,0.76000000000000001,0.76000000000000001,0.76000000000000001,0.76000000000000001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +58,1,0,10,1,670,720,1.1000000000000001,2,2,67,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,2.5,0,0,0,0,0,0,6.7000000000000002,7.7000000000000002,8.6999999999999993,9.6999999999999993,10.699999999999999,11.699999999999999,12.699999999999999,13.699999999999999,14.699999999999999,15.699999999999999,16.699999999999999,17.699999999999999,18.699999999999999,19.699999999999999,0,0,0,0,0,0,0,1.1000000000000001,1.1000000000000001,1.1000000000000001,1.1000000000000001,1.1000000000000001,1.1000000000000001,1.1000000000000001,0,0,0,0,0,0,0,0,0.105,0.105,0.105,0.105,0.105,0.105,0.105 +59,2,1,11,2,680,730,1.2,3,3,68,11,11,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.7999999999999998,7.7999999999999998,8.8000000000000007,9.8000000000000007,10.800000000000001,11.800000000000001,12.800000000000001,13.800000000000001,14.800000000000001,15.800000000000001,16.800000000000001,17.800000000000001,18.800000000000001,19.800000000000001,20.800000000000001,21.800000000000001,22.800000000000001,0,0,0,0,1.1142857142857143,1.1142857142857143,1.1142857142857143,1.1142857142857143,1.1142857142857143,1.1142857142857143,1.1142857142857143,0.52500000000000002,0.52500000000000002,0.52500000000000002,0.52500000000000002,0.52500000000000002,0.52500000000000002,0.52500000000000002,0.52500000000000002,0,0,0,0,0,0,0 +60,3,2,12,3,690,740,1.3,4,4,69,12,12,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.9000000000000004,7.9000000000000004,8.9000000000000004,9.9000000000000004,10.9,11.9,12.9,13.9,14.9,15.9,16.899999999999999,17.899999999999999,18.899999999999999,19.899999999999999,20.899999999999999,21.899999999999999,22.899999999999999,0,0,0,0,1.1285714285714286,1.1285714285714286,1.1285714285714286,1.1285714285714286,1.1285714285714286,1.1285714285714286,1.1285714285714286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +61,1,0,1,0,700,750,1.3999999999999999,5,5,70,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,7,8,9,10,11,12,13,14,15,16,17,18,19,20,0,0,0,0.5,5.5999999999999996,0,2.3999999999999999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +62,2,1,2,1,710,760,1.5,6,6,71,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7.0999999999999996,8.0999999999999996,9.0999999999999996,10.1,11.1,12.1,13.1,14.1,15.1,16.100000000000001,17.100000000000001,18.100000000000001,19.100000000000001,20.100000000000001,21.100000000000001,22.100000000000001,23.100000000000001,0,0,0,0,1.157142857142857,1.157142857142857,1.157142857142857,1.157142857142857,1.157142857142857,1.157142857142857,1.157142857142857,0.53437500000000004,0.53437500000000004,0.53437500000000004,0.53437500000000004,0.53437500000000004,0.53437500000000004,0.53437500000000004,0.53437500000000004,0,0,0,0,0,0,0 +63,3,2,3,2,720,770,1.6000000000000001,7,7,72,10,10,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7.2000000000000002,8.1999999999999993,9.1999999999999993,10.199999999999999,11.199999999999999,12.199999999999999,13.199999999999999,14.199999999999999,15.199999999999999,16.199999999999999,17.199999999999999,18.199999999999999,19.199999999999999,20.199999999999999,21.199999999999999,22.199999999999999,23.199999999999999,0,0,0,0,1.1714285714285713,1.1714285714285713,1.1714285714285713,1.1714285714285713,1.1714285714285713,1.1714285714285713,1.1714285714285713,0,0,0,0,0,0,0,0,0.10857142857142857,0.10857142857142857,0.10857142857142857,0.10857142857142857,0.10857142857142857,0.10857142857142857,0.10857142857142857 +64,1,0,4,3,730,780,1,8,8,73,0,0,0,0,0,0,0,6,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,7.2999999999999998,8.3000000000000007,9.3000000000000007,10.300000000000001,11.300000000000001,12.300000000000001,13.300000000000001,14.300000000000001,15.300000000000001,16.300000000000001,17.300000000000001,18.300000000000001,19.300000000000001,20.300000000000001,0,0,0,0,0,0,0,1.1857142857142857,1.1857142857142857,1.1857142857142857,1.1857142857142857,1.1857142857142857,1.1857142857142857,1.1857142857142857,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 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 00f7a78dd1..bba64ebdce 100644 --- a/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json +++ b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/uk_spine.json @@ -1 +1 @@ -{"country":"uk","nodes":[{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Load the source-bound UK FRS root population.","id":"create_uk_frs","inputs":[],"kernel":"uk.create@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"sample_fraction":1.0,"sample_seed":578,"stage_contract_sha256":"74eeb5d0a2decd623fa9e6e48fb1b0766230e00aa6447f460ab1d0367ce7c7d1","time_period":"2024"},"population":null,"sources":["frs"],"structural":"create","weights":null},{"base":"create_uk_frs","citation":"","description":"Ownership boundary for the source-assembling root stage.","id":"frs_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Claim the cells assembled by the UK FRS root transform.","id":"frs_spine","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{},"population":"frs_spine.boundary","sources":[],"structural":"none","weights":null},{"base":"frs_spine.boundary","citation":"","description":"Ownership boundary before age_tail rewrites.","id":"age_tail.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage age_tail.","id":"age_tail","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["external_child_payments","region"],"entity":"household","rows":"all"},{"columns":["gender"],"entity":"person","rows":"all"}],"kernel":"uk.stage.age_tail@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"age_tail","stage_contract_sha256":"963a34f38caede2525e3b8735f904bb70a1bbef5a272f0eefd4346343444484f","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_relationships.","id":"frs_relationships","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_household_head"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_relationships@1","mass":"conserve","outputs":[{"column":"relationship_to_head","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_role","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_looked_after_by_local_authority","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_household_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_relationships","stage_contract_sha256":"85aca92dcc0590c2147cfc7e0886664f26cd8e1bc0b1de728d11fa567e9fd8b4","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_employment.","id":"frs_employment","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_employment@1","mass":"conserve","outputs":[{"column":"employment_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_sector","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"sic_industry_division","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_employment","stage_contract_sha256":"ddbefaf05b44788d794a6e4b0e8926c14318d66e50d2f11f50ca549538bbf60c","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_council_tax.","id":"frs_council_tax","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","sic_industry_division"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_council_tax@1","mass":"conserve","outputs":[{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_council_tax","stage_contract_sha256":"06804f54c12d25f2afcb31eec27789802f663cb42689a932dc32f3ba5fc05fff","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_disability.","id":"frs_disability","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax","region"],"entity":"household","rows":"all"},{"columns":["afcs_reported","age","attendance_allowance_reported","dla_m_reported","dla_sc_reported","esa_contrib_reported","esa_income_reported","iidb_reported","incapacity_benefit_reported","pip_dl_reported","pip_m_reported","sda_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_disability@1","mass":"conserve","outputs":[{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_disability","stage_contract_sha256":"ac500b4cb1bc04d4fb72d198592dd376d61da8c150921a6ac53914ac18be0508","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education.","id":"frs_education","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","esa_contrib_reported","esa_income_reported","is_severely_disabled_for_benefits","jsa_contrib_reported","jsa_income_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education@1","mass":"conserve","outputs":[{"column":"current_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"highest_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_non_advanced_education","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_approved_training","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_started_or_accepted_current_education_or_training","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_before_universal_credit_qualifying_young_person_terminal_date","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"adult_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_outstanding_student_loan","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_left_full_time_education","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education","stage_contract_sha256":"592ddc77703f19bb3e1d48b6aecffc98b4e2abd3379db84a06e011bde4fa5549","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_legacy_proxies.","id":"frs_legacy_proxies","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_legacy_proxies@1","mass":"conserve","outputs":[{"column":"legacy_jobseeker_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_health_condition_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_support_group_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_legacy_proxies","stage_contract_sha256":"1ecf761cf3fa7180da15659e138e67a8654e58272b4fde28344aa27a874ad0aa","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"age_tail.boundary","citation":"","description":"Ownership boundary before frs_education_grant_split rewrites.","id":"frs_education_grant_split.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education_grant_split.","id":"frs_education_grant_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education_grant_split@1","mass":"conserve","outputs":[{"column":"disabled_students_allowance_eligible_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education_grant_split","stage_contract_sha256":"8718f014b90498c2cc7c754289775ca4a41452d9b978d8cbc5f34b64cbdc7df2","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_take_up.","id":"frs_take_up","inputs":[{"columns":["frs_benunit_capital","is_married"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","child_benefit_reported","education_grants","is_uc_claimant","months_since_last_birthday","pension_credit_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_take_up","stage_contract_sha256":"78aec80408c50455b37308e5a977fb70df3ecf915d6c1e8f80715ad9b58e62cf","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_person_draws.","id":"frs_person_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","max_free_entitlement_hours_used"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_person_draws@1","mass":"conserve","outputs":[{"column":"would_claim_marriage_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_scp","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"attends_private_school_random_draw","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_childcare_spend_routed_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_person_draws","stage_contract_sha256":"77483e7f415014d7771b33cc3c9206aa664573ae2e93d37964b0ff4f685be401","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_household_draws.","id":"frs_household_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","tax_free_childcare_spend_routed_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_household_draws@1","mass":"conserve","outputs":[{"column":"household_owns_tv","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"would_evade_tv_licence_fee","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residential_property_purchased_is_first_home","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"property_purchased","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_household_draws","stage_contract_sha256":"c74c63b09264319c4bf0049dabba00ecd0ce660beb7b53d6dae71518434bc949","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_brma.","id":"frs_brma","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_brma@1","mass":"conserve","outputs":[{"column":"brma","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_brma","stage_contract_sha256":"4285376b37299d375ed583b7f6b1747bd8b7cb1c8c0d19a36481156b5314a854","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"frs_education_grant_split.boundary","citation":"","description":"Freeze the assembled-spine gate population.","id":"frs_brma.checkpoint","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_hmrc_spine_leaves.","id":"frs_hmrc_spine_leaves","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["brma","region"],"entity":"household","rows":"all"},{"columns":["age","employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_hmrc_spine_leaves@1","mass":"conserve","outputs":[{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ossben_identifiable_subset","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"srp_regular_code5","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_hmrc_spine_leaves","stage_contract_sha256":"9eac704e9e86e7149321c76fb0f1c9a3ef1b5a0adb94119fc7add4f539717594","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_annual_income_spells.","id":"frs_annual_income_spells","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employer_pension_contributions","employment_income","gender","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_annual_income_spells@1","mass":"conserve","outputs":[{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_annual_income_spells","stage_contract_sha256":"0b15c2e1e569577e2134d4e812e46e2d74d7b474bf58b8dae8aecedc7b47b55f","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"frs_brma.checkpoint","citation":"","description":"Run structural UK stage spi_support_channel.","id":"spi_support_channel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_support_channel@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","source_household_id","int64"],["household","source_year","int64"],["household","source_household_key","string"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_support_channel","stage_contract_sha256":"2c682605139c0a8f96e8ba45a2c03f506d3f758ef437841066a8fdb8b74269b6","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_support_channel.","id":"spi_support_channel.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"source_household_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_year","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_household_key","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["person.person_source_id","person.person_support_channel","person.person_support_clone_index","benunit.benunit_source_id","benunit.benunit_support_channel","benunit.benunit_support_clone_index","household.source_household_id","household.source_year","household.source_household_key","household.household_source_id","household.household_support_channel","household.household_support_clone_index","household.household_is_spi_synthetic"]},"population":"spi_support_channel","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"spi_support_channel","citation":"","description":"Run structural UK stage spi_income_band_donors.","id":"spi_income_band_donors","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_income_band_donors@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"],["household","household_is_spi_income_band_donor","bool"],["household","spi_income_band_donor_lower_bound","float64"],["person","person_is_spi_income_band_carrier","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_income_band_donors","stage_contract_sha256":"d86ab4a1f53cf097f42c9c047e7a3fbb5144dc88496b49cb846b3f8be0bbe0a1","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_income_band_donors.","id":"spi_income_band_donors.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_income_band_donor","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"spi_income_band_donor_lower_bound","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"person_is_spi_income_band_carrier","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_spi_income_band_donor","household.spi_income_band_donor_lower_bound","person.person_is_spi_income_band_carrier"]},"population":"spi_income_band_donors","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_spi_income_spine.","id":"hmrc_spi_income_spine","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","rent_paid_as_boarder","rent_paid_as_lodger","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","maintenance_expenses","childcare_expenses","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","ssmg_reported","incapacity_benefit_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","ossben_identifiable_subset","srp_regular_code5","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_spi_income_spine@1","mass":"conserve","outputs":[{"column":"charitable_investment_gifts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"gift_aid","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employment_benefits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employment_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_social_security_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_taxable_termination_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_miscellaneous_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_state_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employed_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_earned_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_assessable_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_is_spi_income_recipient","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_spi_income_spine","stage_contract_sha256":"b2cd2b9e80845a3867660b8f56eee6341fb89730b1b1cee19ae894ba3bf922fc","time_period":"2024"},"population":"spi_income_band_donors","sources":["frs"],"structural":"none","weights":null},{"base":"spi_income_band_donors","citation":"","description":"Ownership boundary before spi_housing_shell rewrites.","id":"spi_housing_shell.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_housing_shell.","id":"spi_housing_shell","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax_single_adult_raw","household_support_channel","ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","is_household_head","other_investment_income","person_is_spi_income_recipient","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_housing_shell@1","mass":"conserve","outputs":[{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_housing_shell","stage_contract_sha256":"524549b7dfbd0fceb505311eb0c3b923cfe3b11a8acd5ecfbfbcbb477e142eb1","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_wealth.","id":"was_wealth","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_wealth@1","mass":"conserve","outputs":[{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"corporate_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"private_pension_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gross_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"net_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"savings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"num_vehicles","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cash_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"consumer_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"student_loan_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"directly_held_shares","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"unit_and_investment_trusts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_wealth","stage_contract_sha256":"e648f94320deffd15d4e7c2f51e044e8b3572b24bb62d65f157edcb8f31753b5","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_lisa.","id":"was_lisa","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_lisa@1","mass":"conserve","outputs":[{"column":"has_lifetime_isa","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"lifetime_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_lifetime_isa_balance","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_lisa","stage_contract_sha256":"46f12fdf9228f721d860ff7858b78b25406bb8737628acf63ac17d44d549f657","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_housing_shell.boundary","citation":"","description":"Ownership boundary before regional_property_uprating rewrites.","id":"regional_property_uprating.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_property_uprating.","id":"regional_property_uprating","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_lifetime_isa_balance","household_support_channel","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_property_uprating@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_property_uprating","stage_contract_sha256":"f45db95fde3f93731c0925b9bf8c12021921df2e4908770acdec1e3c97889277","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"regional_property_uprating.boundary","citation":"","description":"Run structural UK stage high_value_home_support.","id":"high_value_home_support","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.high_value_home_support@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_high_value_support_copy","bool"],["household","high_value_support_copies","int64"],["household","high_value_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"high_value_home_support","stage_contract_sha256":"174f4b38228d98107bee1639d1a297a2748bb618e87c7bd0a6c869c6ab06f8fa","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by high_value_home_support.","id":"high_value_home_support.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_high_value_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_high_value_support_copy","household.high_value_support_copies","household.high_value_support_copy_index"]},"population":"high_value_home_support","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_home_values.","id":"regional_home_values","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["high_value_support_copy_index","household_is_high_value_support_copy","household_source_id","region","tenure_type"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_home_values@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"main_residence_value_rank_basis","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_home_values","stage_contract_sha256":"48e8a622c8830a54a4c48d9d8cb4f011751aa05d7cb5f6c7f0e06e1121b720b1","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_components.","id":"property_components","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["main_residence_value_rank_basis","non_residential_property_value","other_residential_property_value","region","subrent"],"entity":"household","rows":"all"},{"columns":["age","is_household_head","person_is_spi_income_recipient","person_support_channel"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_components@1","mass":"conserve","outputs":[{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_rental_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_components","stage_contract_sha256":"8c45b96e6c1cd6a3ec8080b674f06666b1bd1e86ecef4a654c18f9825977eb1b","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_purchases.","id":"property_purchases","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_purchases@1","mass":"conserve","outputs":[{"column":"additional_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_purchases","stage_contract_sha256":"281fe34ea94f71ac1a0652bf3ec17922f0d46919bfb74ab7b367ba6e9d680826","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage nts_bus_travel.","id":"nts_bus_travel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.nts_bus_travel@1","mass":"conserve","outputs":[{"column":"local_bus_use_band","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_in_london_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_pass_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_single_fare_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_local_bus_trips","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"nts_bus_travel","stage_contract_sha256":"ef04589ebb01746b996c466517b07cb718cf88febe8c2d6d69f6edf6b4b80f8b","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage lcfs_consumption.","id":"lcfs_consumption","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.lcfs_consumption@1","mass":"conserve","outputs":[{"column":"food_and_non_alcoholic_beverages_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"alcohol_and_tobacco_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"clothing_and_footwear_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_water_and_electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_furnishings_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"health_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"transport_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"communication_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"recreation_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"education_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"restaurants_and_hotels_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"miscellaneous_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"petrol_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"diesel_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_fare_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_energy_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gas_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"liquid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"solid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"has_fuel_consumption","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"uses_energy_prepayment_meter","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"lcfs_consumption","stage_contract_sha256":"eed139d9544e64e689cd163d299f5f3747b2c49d593bdd7b88522ce02c646356","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_vat.","id":"etb_vat","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_vat@1","mass":"conserve","outputs":[{"column":"full_rate_vat_expenditure_rate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_vat","stage_contract_sha256":"01adfcc85d77f38fb9cc896e2e4b4c4752518d9e2aa69e6947832678c25ecf19","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_services.","id":"etb_services","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_services@1","mass":"conserve","outputs":[{"column":"dfe_education_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_usage","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"a_and_e_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"admitted_patient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"outpatient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_a_and_e_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_admitted_patient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_outpatient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_services","stage_contract_sha256":"85c52b57b06db2075b6422e8202b90eb70ebe60a3345e59cf48a4a0460f583e4","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"base":"high_value_home_support","citation":"","description":"Ownership boundary before uc_reporter_redraw rewrites.","id":"uc_reporter_redraw.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_reporter_redraw.","id":"uc_reporter_redraw","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_reporter_redraw@1","mass":"conserve","outputs":[{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_reporter_redraw","stage_contract_sha256":"b03d4947d6cb0404ba410c548e1850d5abe0c7dae2dc097d419b63eea04920a9","time_period":"2024"},"population":"uc_reporter_redraw.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_reporter_redraw.boundary","citation":"","description":"Ownership boundary before spi_benefit_coherence rewrites.","id":"spi_benefit_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_benefit_coherence.","id":"spi_benefit_coherence","inputs":[{"columns":["benunit_support_channel","frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["aa_category","age","attendance_allowance_reported","dla_m_category","dla_m_reported","dla_sc_category","dla_sc_reported","esa_contrib_reported","incapacity_benefit_reported","is_uc_claimant","person_source_id","person_support_channel","pip_dl_category","pip_dl_reported","pip_m_category","pip_m_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_benefit_coherence@1","mass":"conserve","outputs":[{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_benefit_coherence","stage_contract_sha256":"ad3bfd51b377963c1d976a82416283aeb7b80d9f89b44c0e5db79e3598e815d5","time_period":"2024"},"population":"spi_benefit_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_benefit_coherence.boundary","citation":"","description":"Ownership boundary before uc_capital_coherence rewrites.","id":"uc_capital_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_capital_coherence.","id":"uc_capital_coherence","inputs":[{"columns":["benunit_support_channel","dependent_children","is_married"],"entity":"benunit","rows":"all"},{"columns":["non_residential_property_secured_debt","non_residential_property_value","other_residential_property_secured_debt","other_residential_property_value","owned_land","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","is_benunit_head","is_household_head","is_parent","other_investment_income","person_support_channel","savings_interest_income","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_capital_coherence@1","mass":"conserve","outputs":[{"column":"uc_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"pension_credit_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_capital_coherence","stage_contract_sha256":"e7c7311b3852e67ae755c09456cc10c46136681fa92ade60daa1fbeb581288d5","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.boundary","citation":"","description":"Ownership boundary before uc_take_up rewrites.","id":"uc_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_take_up.","id":"uc_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_take_up","stage_contract_sha256":"1ef0c99087d48a4ee3e6298ce7144364b4e7ce4ca47902da738e5881be7f8151","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_legacy_closure_take_up.","id":"uc_legacy_closure_take_up","inputs":[{"columns":["frs_benunit_capital","would_claim_uc"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","region"],"entity":"household","rows":"all"},{"columns":["age","child_tax_credit_reported","esa_income_reported","housing_benefit_reported","income_support_reported","is_claimant_or_partner","jsa_income_reported","universal_credit_reported","working_tax_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_legacy_closure_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc_at_legacy_closure","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_legacy_closure_take_up","stage_contract_sha256":"400097d7d4bf81ebcde8d9a0e8f8d13f306fe50426ea4524b6449ee02137a644","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_take_up.boundary","citation":"","description":"Ownership boundary before pension_credit_take_up rewrites.","id":"pension_credit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage pension_credit_take_up.","id":"pension_credit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.pension_credit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"has_mixed_age_couple_pension_credit_saving","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"pension_credit_take_up","stage_contract_sha256":"e887dbbb186cb79f6d3fc9a629269dbac4a43381b9574df65353b816f01a3a35","time_period":"2024"},"population":"pension_credit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"pension_credit_take_up.boundary","citation":"","description":"Ownership boundary before child_benefit_take_up rewrites.","id":"child_benefit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage child_benefit_take_up.","id":"child_benefit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.child_benefit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"child_benefit_take_up","stage_contract_sha256":"6f1eac2609e868894a287254aac75ec57c0199783c6ae6cf4782f3fbb99f6e92","time_period":"2024"},"population":"child_benefit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"child_benefit_take_up.boundary","citation":"","description":"Ownership boundary before carers_allowance_take_up rewrites.","id":"carers_allowance_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage carers_allowance_take_up.","id":"carers_allowance_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.carers_allowance_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"carers_allowance_take_up","stage_contract_sha256":"c4c1ddf4b7da2c3082e09d6e77a9b4a0dc617743ff2c3c1f546f930bcac0635f","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_deduction_attributes.","id":"uc_deduction_attributes","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","would_claim_carers_allowance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_deduction_attributes@1","mass":"conserve","outputs":[{"column":"uc_deduction_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_type_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_latent_deduction_rate","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_combination","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_deduction_attributes","stage_contract_sha256":"6bc7e3ec1a5712e23ca1b7d2956e8b17f2526b94431ba3e5a9294b04658e4fe0","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"carers_allowance_take_up.boundary","citation":"","description":"Run structural UK stage cgt_support_split.","id":"cgt_support_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_support_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_support_copy","bool"],["household","cgt_support_copies","int64"],["household","cgt_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_support_split","stage_contract_sha256":"f7ef8492bacde1607f24693d7362110ba55ad3d083688f3df61de40dbe65bdc0","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_support_split.","id":"cgt_support_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_support_copy","household.cgt_support_copies","household.cgt_support_copy_index"]},"population":"cgt_support_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_support_split","citation":"","description":"Run structural UK stage cgt_incidence_clone.","id":"cgt_incidence_clone","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_clone@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_capital_gains_clone","bool"],["person","capital_gains","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_clone","stage_contract_sha256":"ee30278543cc0297a5366d855b7753aa04af5518971594c193c52be36bf8a7b4","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_incidence_clone.","id":"cgt_incidence_clone.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_capital_gains_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_capital_gains_clone","person.capital_gains"]},"population":"cgt_incidence_clone","sources":[],"structural":"none","weights":null},{"base":"cgt_incidence_clone","citation":"","description":"Ownership boundary before hmrc_cgt_gains_spine rewrites.","id":"hmrc_cgt_gains_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_gains_spine.","id":"hmrc_cgt_gains_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["cgt_support_copies","corporate_wealth","gross_financial_wealth","household_is_cgt_support_copy","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported","tax_free_savings_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_gains_spine@1","mass":"conserve","outputs":[{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_gains_spine","stage_contract_sha256":"39011749dc0e95362e4ab606f09e95d457fdf3b40c66df9511d93dbb8208805d","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"hmrc_cgt_gains_spine.boundary","citation":"","description":"Run structural UK stage cgt_incidence_anchor.","id":"cgt_incidence_anchor","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_is_capital_gains_clone","region"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","dividend_income","employment_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_anchor@1","mass":"conserve","outputs":[],"params":{"expand_cells":[],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_anchor","stage_contract_sha256":"b79ce806015de2f1e1703fa68bf4ad871c6df54b5b32633c864632ab68919a48","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_incidence_anchor","citation":"","description":"Run structural UK stage cgt_residential_split.","id":"cgt_residential_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_residential_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_residential_clone","bool"],["household","cgt_residential_clone_index","int64"],["person","cgt_residential_probability","float64"],["person","capital_gains_residential_property","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_residential_split","stage_contract_sha256":"1d382f676df487d13cfe88e9b8086fcec2bc1453a29b546cbb24ca2206cb3f6e","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_residential_split.","id":"cgt_residential_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_residential_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_probability","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_residential_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_residential_clone","household.cgt_residential_clone_index","person.cgt_residential_probability","person.capital_gains_residential_property"]},"population":"cgt_residential_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_asset_type_spine.","id":"hmrc_cgt_asset_type_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["corporate_wealth","gross_financial_wealth","other_residential_property_value","region","stocks_and_shares_isa"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","capital_gains_residential_property","dividend_income","property_income","reports_rent_from_other_property","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_asset_type_spine@1","mass":"conserve","outputs":[{"column":"capital_gains_asset_type","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_badr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_asset_type_spine","stage_contract_sha256":"1e5df2498c981c556937bb7b4dfae708327755b6dd35707dc2adec6c0cd04c80","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage salary_sacrifice.","id":"salary_sacrifice","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr"],"entity":"person","rows":"all"}],"kernel":"uk.stage.salary_sacrifice@1","mass":"conserve","outputs":[{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_bonus_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_pre_conversion_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"salary_sacrifice","stage_contract_sha256":"27724cbb11265658b4894191c9a64f516869b183842aa1dc71df8589ee8043ee","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage student_loans.","id":"student_loans","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","age_left_full_time_education","current_education","highest_education","reports_outstanding_student_loan","salary_sacrifice_pre_conversion_pay","student_loan_repayments","student_loans"],"entity":"person","rows":"all"}],"kernel":"uk.stage.student_loans@1","mass":"conserve","outputs":[{"column":"student_loan_plan","dtype":"string","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"student_loans","stage_contract_sha256":"157d9ee607633e4246ed06eeee3aac3cdff98118e72400e18b84c11b3fd2b92b","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"base":"cgt_residential_split","citation":"","description":"Ownership boundary before childcare_copy_take_up rewrites.","id":"childcare_copy_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage childcare_copy_take_up.","id":"childcare_copy_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_uc_childcare","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.childcare_copy_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"childcare_copy_take_up","stage_contract_sha256":"cdbb7e135b16fac7ca1bcd6c54222821e2976b4da99f10a60913efd0ba03c13c","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage private_school_attendance.","id":"private_school_attendance","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.private_school_attendance@1","mass":"conserve","outputs":[{"column":"attends_private_school","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"private_school_attendance","stage_contract_sha256":"7e44379c0331fe4c9de05cd76a075c1a6aa22cf0dec6cd2f91b277e70f14a038","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Content-bound UK FRS and donor fixture/source bundle.","name":"frs"}]} +{"country":"uk","nodes":[{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Load the source-bound UK FRS root population.","id":"create_uk_frs","inputs":[],"kernel":"uk.create@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"sample_fraction":1.0,"sample_seed":578,"stage_contract_sha256":"74eeb5d0a2decd623fa9e6e48fb1b0766230e00aa6447f460ab1d0367ce7c7d1","time_period":"2024"},"population":null,"sources":["frs"],"structural":"create","weights":null},{"base":"create_uk_frs","citation":"","description":"Ownership boundary for the source-assembling root stage.","id":"frs_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"base":null,"citation":"","description":"Claim the cells assembled by the UK FRS root transform.","id":"frs_spine","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"gender","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"months_since_last_birthday","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"marital_status","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hours_worked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"care_hours","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_household_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_benunit_head","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_parent","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_blind","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_uc_claimant","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_claimant_or_partner","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_hbai_dependent_child","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_boarder","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent_paid_as_lodger","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"spousal_maintenance_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"miscellaneous_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_transfer_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"lump_sum_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loan_repayments","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_sick_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_maternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"statutory_paternity_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"student_loans","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"access_fund","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"healthy_start_vouchers","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_breakfasts","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_fruit_veg","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"free_school_meals","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maintenance_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"childcare_expenses","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_asked","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_bonus_amount","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"incapacity_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_married","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dependent_children","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"liable_for_share_of_household_rent","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"region","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_single_adult_raw","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"external_child_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{},"population":"frs_spine.boundary","sources":[],"structural":"none","weights":null},{"base":"frs_spine.boundary","citation":"","description":"Ownership boundary before age_tail rewrites.","id":"age_tail.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage age_tail.","id":"age_tail","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["external_child_payments","region"],"entity":"household","rows":"all"},{"columns":["gender"],"entity":"person","rows":"all"}],"kernel":"uk.stage.age_tail@1","mass":"conserve","outputs":[{"column":"age","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"age_tail","stage_contract_sha256":"963a34f38caede2525e3b8735f904bb70a1bbef5a272f0eefd4346343444484f","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_relationships.","id":"frs_relationships","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","is_household_head"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_relationships@1","mass":"conserve","outputs":[{"column":"relationship_to_head","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_role","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_family_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_looked_after_by_local_authority","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"ons_household_type","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_relationships","stage_contract_sha256":"85aca92dcc0590c2147cfc7e0886664f26cd8e1bc0b1de728d11fa567e9fd8b4","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_employment.","id":"frs_employment","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_employment@1","mass":"conserve","outputs":[{"column":"employment_status","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_sector","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"sic_industry_division","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_employment","stage_contract_sha256":"ddbefaf05b44788d794a6e4b0e8926c14318d66e50d2f11f50ca549538bbf60c","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_council_tax.","id":"frs_council_tax","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","sic_industry_division"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_council_tax@1","mass":"conserve","outputs":[{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_council_tax","stage_contract_sha256":"06804f54c12d25f2afcb31eec27789802f663cb42689a932dc32f3ba5fc05fff","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_disability.","id":"frs_disability","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax","region"],"entity":"household","rows":"all"},{"columns":["afcs_reported","age","attendance_allowance_reported","dla_m_reported","dla_sc_reported","esa_contrib_reported","esa_income_reported","iidb_reported","incapacity_benefit_reported","pip_dl_reported","pip_m_reported","sda_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_disability@1","mass":"conserve","outputs":[{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_disability","stage_contract_sha256":"ac500b4cb1bc04d4fb72d198592dd376d61da8c150921a6ac53914ac18be0508","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education.","id":"frs_education","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","esa_contrib_reported","esa_income_reported","is_severely_disabled_for_benefits","jsa_contrib_reported","jsa_income_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education@1","mass":"conserve","outputs":[{"column":"current_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"highest_education","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_non_advanced_education","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"is_in_approved_training","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_started_or_accepted_current_education_or_training","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"is_before_universal_credit_qualifying_young_person_terminal_date","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"adult_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"child_ema","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"reports_outstanding_student_loan","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"age_left_full_time_education","dtype":"int64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education","stage_contract_sha256":"592ddc77703f19bb3e1d48b6aecffc98b4e2abd3379db84a06e011bde4fa5549","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_legacy_proxies.","id":"frs_legacy_proxies","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_legacy_proxies@1","mass":"conserve","outputs":[{"column":"legacy_jobseeker_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_health_condition_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"esa_support_group_proxy","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_legacy_proxies","stage_contract_sha256":"1ecf761cf3fa7180da15659e138e67a8654e58272b4fde28344aa27a874ad0aa","time_period":"2024"},"population":"age_tail.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"age_tail.boundary","citation":"","description":"Ownership boundary before frs_education_grant_split rewrites.","id":"frs_education_grant_split.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_education_grant_split.","id":"frs_education_grant_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_education_grant_split@1","mass":"conserve","outputs":[{"column":"disabled_students_allowance_eligible_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"education_grants","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_education_grant_split","stage_contract_sha256":"8718f014b90498c2cc7c754289775ca4a41452d9b978d8cbc5f34b64cbdc7df2","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_take_up.","id":"frs_take_up","inputs":[{"columns":["frs_benunit_capital","is_married"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","child_benefit_reported","education_grants","is_uc_claimant","months_since_last_birthday","pension_credit_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"would_claim_uc_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_take_up","stage_contract_sha256":"78aec80408c50455b37308e5a977fb70df3ecf915d6c1e8f80715ad9b58e62cf","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_person_draws.","id":"frs_person_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","max_free_entitlement_hours_used"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_person_draws@1","mass":"conserve","outputs":[{"column":"would_claim_marriage_allowance","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"would_claim_scp","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"attends_private_school_random_draw","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"tax_free_childcare_spend_routed_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_person_draws","stage_contract_sha256":"77483e7f415014d7771b33cc3c9206aa664573ae2e93d37964b0ff4f685be401","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_household_draws.","id":"frs_household_draws","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","tax_free_childcare_spend_routed_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_household_draws@1","mass":"conserve","outputs":[{"column":"household_owns_tv","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"would_evade_tv_licence_fee","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residential_property_purchased_is_first_home","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"property_purchased","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_household_draws","stage_contract_sha256":"c74c63b09264319c4bf0049dabba00ecd0ce660beb7b53d6dae71518434bc949","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_brma.","id":"frs_brma","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_brma@1","mass":"conserve","outputs":[{"column":"brma","dtype":"string","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_brma","stage_contract_sha256":"4285376b37299d375ed583b7f6b1747bd8b7cb1c8c0d19a36481156b5314a854","time_period":"2024"},"population":"frs_education_grant_split.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"frs_education_grant_split.boundary","citation":"","description":"Freeze the assembled-spine gate population.","id":"frs_brma.checkpoint","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_hmrc_spine_leaves.","id":"frs_hmrc_spine_leaves","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["brma","region"],"entity":"household","rows":"all"},{"columns":["age","employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_hmrc_spine_leaves@1","mass":"conserve","outputs":[{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"ossben_identifiable_subset","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"srp_regular_code5","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_hmrc_spine_leaves","stage_contract_sha256":"106b738be51fbbab2e45da15a6c05d0e4e191555ec9ff0ca64538f260c8ad90f","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_annual_income_spells.","id":"frs_annual_income_spells","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employer_pension_contributions","employment_income","gender","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_annual_income_spells@1","mass":"conserve","outputs":[{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"frs_annual_income_spells","stage_contract_sha256":"0b15c2e1e569577e2134d4e812e46e2d74d7b474bf58b8dae8aecedc7b47b55f","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"frs_brma.checkpoint","citation":"","description":"Run structural UK stage spi_support_channel.","id":"spi_support_channel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_support_channel@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","source_household_id","int64"],["household","source_year","int64"],["household","source_household_key","string"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_support_channel","stage_contract_sha256":"2c682605139c0a8f96e8ba45a2c03f506d3f758ef437841066a8fdb8b74269b6","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_support_channel.","id":"spi_support_channel.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"source_household_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_year","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"source_household_key","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["person.person_source_id","person.person_support_channel","person.person_support_clone_index","benunit.benunit_source_id","benunit.benunit_support_channel","benunit.benunit_support_clone_index","household.source_household_id","household.source_year","household.source_household_key","household.household_source_id","household.household_support_channel","household.household_support_clone_index","household.household_is_spi_synthetic"]},"population":"spi_support_channel","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"spi_support_channel","citation":"","description":"Run structural UK stage spi_income_band_donors.","id":"spi_income_band_donors","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.spi_income_band_donors@1","mass":"declared","outputs":[],"params":{"expand_cells":[["person","person_source_id","int64"],["person","person_support_channel","string"],["person","person_support_clone_index","int64"],["benunit","benunit_source_id","int64"],["benunit","benunit_support_channel","string"],["benunit","benunit_support_clone_index","int64"],["household","household_source_id","int64"],["household","household_support_channel","string"],["household","household_support_clone_index","int64"],["household","household_is_spi_synthetic","bool"],["household","household_is_spi_income_band_donor","bool"],["household","spi_income_band_donor_lower_bound","float64"],["person","person_is_spi_income_band_carrier","bool"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_income_band_donors","stage_contract_sha256":"81d80a12eb733767790c180f98f080f9b3f35a37cb2ef13be30d1900500f3304","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by spi_income_band_donors.","id":"spi_income_band_donors.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"person_source_id","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_channel","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_support_clone_index","dtype":"int64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_source_id","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_channel","dtype":"string","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"benunit_support_clone_index","dtype":"int64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_source_id","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_channel","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_support_clone_index","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_synthetic","dtype":"bool","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"household_is_spi_income_band_donor","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"spi_income_band_donor_lower_bound","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"person_is_spi_income_band_carrier","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_spi_income_band_donor","household.spi_income_band_donor_lower_bound","person.person_is_spi_income_band_carrier"]},"population":"spi_income_band_donors","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_spi_income_spine.","id":"hmrc_spi_income_spine","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","rent_paid_as_boarder","rent_paid_as_lodger","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","maintenance_expenses","childcare_expenses","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","ssmg_reported","incapacity_benefit_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","ossben_identifiable_subset","srp_regular_code5","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_spi_income_spine@1","mass":"conserve","outputs":[{"column":"charitable_investment_gifts","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"gift_aid","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employment_benefits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employment_expenses","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_social_security_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_taxable_termination_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_miscellaneous_employment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_other_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_state_pension_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_employed_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_earned_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_total_investment_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"hmrc_spi_assessable_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"savings_interest_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dividend_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employer_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"personal_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"tax_free_savings_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"attendance_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"state_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"carers_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"winter_fuel_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"trading_loss","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"loss_relief","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ni_class_4_losses_brought_forward","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_income_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_pay","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_unemployment_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"hmrc_spi_incapacity_benefit_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"aa_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_sc_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"dla_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_m_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pip_dl_category","dtype":"string","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_startup_period","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"uc_is_in_gainful_self_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_includes_support_component","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"reports_rent_from_other_property","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"stands_as_sole_owner_or_partner_of_company","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_engaged_in_owned_company_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_is_main_employment","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_trade","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_company_carries_on_property_business","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"person_is_spi_income_recipient","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_spi_income_spine","stage_contract_sha256":"08bc1fe266a6a55139cba6f3e739b4bb00540f622bcd9556e6ef02d92de1f037","time_period":"2024"},"population":"spi_income_band_donors","sources":["frs"],"structural":"none","weights":null},{"base":"spi_income_band_donors","citation":"","description":"Ownership boundary before spi_housing_shell rewrites.","id":"spi_housing_shell.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_housing_shell.","id":"spi_housing_shell","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["council_tax_single_adult_raw","household_support_channel","ons_household_type","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","is_household_head","other_investment_income","person_is_spi_income_recipient","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_housing_shell@1","mass":"conserve","outputs":[{"column":"tenure_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"accommodation_type","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_band","dtype":"string","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"num_bedrooms","dtype":"int64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_reported","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"rent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_interest_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"mortgage_capital_repayment","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"structural_insurance_payments","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_service_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"water_and_sewerage_charges","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"domestic_rates","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"subrent","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_rebate","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"housing_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"council_tax_benefit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_housing_shell","stage_contract_sha256":"524549b7dfbd0fceb505311eb0c3b923cfe3b11a8acd5ecfbfbcbb477e142eb1","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_wealth.","id":"was_wealth","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_wealth@1","mass":"conserve","outputs":[{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"corporate_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"private_pension_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gross_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"net_financial_wealth","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"savings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"num_vehicles","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cash_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"stocks_and_shares_isa","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"mortgage_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"consumer_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"student_loan_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"directly_held_shares","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"unit_and_investment_trusts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_secured_debt","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_wealth","stage_contract_sha256":"e648f94320deffd15d4e7c2f51e044e8b3572b24bb62d65f157edcb8f31753b5","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage was_lisa.","id":"was_lisa","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.was_lisa@1","mass":"conserve","outputs":[{"column":"has_lifetime_isa","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"lifetime_isa_balance","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_lifetime_isa_balance","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"was_lisa","stage_contract_sha256":"46f12fdf9228f721d860ff7858b78b25406bb8737628acf63ac17d44d549f657","time_period":"2024"},"population":"spi_housing_shell.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_housing_shell.boundary","citation":"","description":"Ownership boundary before regional_property_uprating rewrites.","id":"regional_property_uprating.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_property_uprating.","id":"regional_property_uprating","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_lifetime_isa_balance","household_support_channel","region"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_property_uprating@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"owned_land","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"other_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"non_residential_property_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_property_uprating","stage_contract_sha256":"f45db95fde3f93731c0925b9bf8c12021921df2e4908770acdec1e3c97889277","time_period":"2024"},"population":"regional_property_uprating.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"regional_property_uprating.boundary","citation":"","description":"Run structural UK stage high_value_home_support.","id":"high_value_home_support","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.high_value_home_support@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_high_value_support_copy","bool"],["household","high_value_support_copies","int64"],["household","high_value_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"high_value_home_support","stage_contract_sha256":"174f4b38228d98107bee1639d1a297a2748bb618e87c7bd0a6c869c6ab06f8fa","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by high_value_home_support.","id":"high_value_home_support.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_high_value_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"high_value_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_high_value_support_copy","household.high_value_support_copies","household.high_value_support_copy_index"]},"population":"high_value_home_support","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage regional_home_values.","id":"regional_home_values","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["high_value_support_copy_index","household_is_high_value_support_copy","household_source_id","region","tenure_type"],"entity":"household","rows":"all"},{"columns":["age"],"entity":"person","rows":"all"}],"kernel":"uk.stage.regional_home_values@1","mass":"conserve","outputs":[{"column":"main_residence_value","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_wealth","dtype":"float64","entity":"household","ownership":"produced","rewrite":true,"rows":"all"},{"column":"main_residence_value_rank_basis","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"regional_home_values","stage_contract_sha256":"48e8a622c8830a54a4c48d9d8cb4f011751aa05d7cb5f6c7f0e06e1121b720b1","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_components.","id":"property_components","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["main_residence_value_rank_basis","non_residential_property_value","other_residential_property_value","region","subrent"],"entity":"household","rows":"all"},{"columns":["age","is_household_head","person_is_spi_income_recipient","person_support_channel"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_components@1","mass":"conserve","outputs":[{"column":"property_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_finance_costs","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"property_rental_income","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_components","stage_contract_sha256":"d13098ee4db4606673a67d9333fcf23eca0900ec76e847c54fa83eeb858b8356","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_purchases.","id":"property_purchases","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_purchases@1","mass":"conserve","outputs":[{"column":"additional_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"property_purchases","stage_contract_sha256":"e555b620362efbf4a32357d20bc0e8cee54eac8610e2b1884ac2a08de7f6dcee","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage nts_bus_travel.","id":"nts_bus_travel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.nts_bus_travel@1","mass":"conserve","outputs":[{"column":"local_bus_use_band","dtype":"int64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_in_london_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"other_local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_trips","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"bus_pass_eligible","dtype":"bool","entity":"person","ownership":"produced","rows":"all"},{"column":"local_bus_single_fare_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"household_local_bus_trips","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"nts_bus_travel","stage_contract_sha256":"4482b0f1a7c48f7bf24a0711797cad0ff3966e855de4b0ef7566f898f0d0f221","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage lcfs_consumption.","id":"lcfs_consumption","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.lcfs_consumption@1","mass":"conserve","outputs":[{"column":"food_and_non_alcoholic_beverages_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"alcohol_and_tobacco_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"clothing_and_footwear_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"housing_water_and_electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"household_furnishings_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"health_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"transport_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"communication_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"recreation_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"education_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"restaurants_and_hotels_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"miscellaneous_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"petrol_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"diesel_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_fare_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"domestic_energy_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"electricity_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"gas_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"liquid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"solid_fuel_consumption","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"has_fuel_consumption","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"uses_energy_prepayment_meter","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"wine_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"spirits_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_fermented_litres","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"beer_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cider_draught_share","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigarettes_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"hand_rolling_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"cigars_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"other_tobacco_grams_per_week","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_gaming_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"pool_betting_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bingo_net_receipts","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"national_lottery_ticket_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_casino_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_lower_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_standard_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"machine_games_higher_rate_net_takings","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"land_based_fixed_odds_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_uk_horseracing_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"remote_other_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"betting_exchange_commission","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"horse_and_dog_pool_betting_net_losses","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"lcfs_consumption","stage_contract_sha256":"2a6ca13b56f8db1d36649c9a0d3d2b053b610b19dd274c1914752bb920d2f0d8","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_vat.","id":"etb_vat","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_vat@1","mass":"conserve","outputs":[{"column":"full_rate_vat_expenditure_rate","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_vat","stage_contract_sha256":"01adfcc85d77f38fb9cc896e2e4b4c4752518d9e2aa69e6947832678c25ecf19","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage etb_services.","id":"etb_services","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share"],"entity":"person","rows":"all"}],"kernel":"uk.stage.etb_services@1","mass":"conserve","outputs":[{"column":"dfe_education_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"bus_subsidy_spending","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"rail_usage","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"a_and_e_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"admitted_patient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"outpatient_visits","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_a_and_e_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_admitted_patient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"nhs_outpatient_spending","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"etb_services","stage_contract_sha256":"a3d9a5c7c708a1ae04039cd686e0ff896ba74108db9ae78f49301a78d98c392b","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"base":"high_value_home_support","citation":"","description":"Ownership boundary before uc_reporter_redraw rewrites.","id":"uc_reporter_redraw.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_reporter_redraw.","id":"uc_reporter_redraw","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_reporter_redraw@1","mass":"conserve","outputs":[{"column":"universal_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_reporter_redraw","stage_contract_sha256":"b03d4947d6cb0404ba410c548e1850d5abe0c7dae2dc097d419b63eea04920a9","time_period":"2024"},"population":"uc_reporter_redraw.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_reporter_redraw.boundary","citation":"","description":"Ownership boundary before spi_benefit_coherence rewrites.","id":"spi_benefit_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage spi_benefit_coherence.","id":"spi_benefit_coherence","inputs":[{"columns":["benunit_support_channel","frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["aa_category","age","attendance_allowance_reported","dla_m_category","dla_m_reported","dla_sc_category","dla_sc_reported","esa_contrib_reported","incapacity_benefit_reported","is_uc_claimant","person_source_id","person_support_channel","pip_dl_category","pip_dl_reported","pip_m_category","pip_m_reported","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.spi_benefit_coherence@1","mass":"conserve","outputs":[{"column":"jsa_contrib_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"jsa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"esa_income_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"income_support_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"working_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_tax_credit_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"sda_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"ssmg_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"iidb_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"afcs_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"bsp_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"war_widows_pension_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"widowed_parents_allowance_reported","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_enhanced_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"is_severely_disabled_for_benefits","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"receives_benefits_in_own_right","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"spi_benefit_coherence","stage_contract_sha256":"ad3bfd51b377963c1d976a82416283aeb7b80d9f89b44c0e5db79e3598e815d5","time_period":"2024"},"population":"spi_benefit_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"spi_benefit_coherence.boundary","citation":"","description":"Ownership boundary before uc_capital_coherence rewrites.","id":"uc_capital_coherence.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_capital_coherence.","id":"uc_capital_coherence","inputs":[{"columns":["benunit_support_channel","dependent_children","is_married"],"entity":"benunit","rows":"all"},{"columns":["non_residential_property_secured_debt","non_residential_property_value","other_residential_property_secured_debt","other_residential_property_value","owned_land","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","is_benunit_head","is_household_head","is_parent","other_investment_income","person_support_channel","savings_interest_income","universal_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_capital_coherence@1","mass":"conserve","outputs":[{"column":"uc_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"pension_credit_reported_capital","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"frs_benunit_capital","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_capital_coherence","stage_contract_sha256":"e7c7311b3852e67ae755c09456cc10c46136681fa92ade60daa1fbeb581288d5","time_period":"2024"},"population":"uc_capital_coherence.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_capital_coherence.boundary","citation":"","description":"Ownership boundary before uc_take_up rewrites.","id":"uc_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_take_up.","id":"uc_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_take_up","stage_contract_sha256":"337e499fb57231223d2caf0c66533751294eb4d336e494c62c338ad0add0603e","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_legacy_closure_take_up.","id":"uc_legacy_closure_take_up","inputs":[{"columns":["frs_benunit_capital","would_claim_uc"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","region"],"entity":"household","rows":"all"},{"columns":["age","child_tax_credit_reported","esa_income_reported","housing_benefit_reported","income_support_reported","is_claimant_or_partner","jsa_income_reported","universal_credit_reported","working_tax_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_legacy_closure_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc_at_legacy_closure","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_legacy_closure_take_up","stage_contract_sha256":"14223ac75f32edca22c42f9fdee2b0ce356bec0520ad0a20ee16529278bcdcbf","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_take_up.boundary","citation":"","description":"Ownership boundary before pension_credit_take_up rewrites.","id":"pension_credit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage pension_credit_take_up.","id":"pension_credit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.pension_credit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_pc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"has_mixed_age_couple_pension_credit_saving","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"pension_credit_take_up","stage_contract_sha256":"e887dbbb186cb79f6d3fc9a629269dbac4a43381b9574df65353b816f01a3a35","time_period":"2024"},"population":"pension_credit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"pension_credit_take_up.boundary","citation":"","description":"Ownership boundary before child_benefit_take_up rewrites.","id":"child_benefit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage child_benefit_take_up.","id":"child_benefit_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.child_benefit_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_child_benefit","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"child_benefit_opts_out","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"child_benefit_take_up","stage_contract_sha256":"6e28b18e4e32542eedf213a395e123ab4adbbd4c0eecd5780444be47404da080","time_period":"2024"},"population":"child_benefit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"child_benefit_take_up.boundary","citation":"","description":"Ownership boundary before carers_allowance_take_up rewrites.","id":"carers_allowance_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage carers_allowance_take_up.","id":"carers_allowance_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.carers_allowance_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_carers_allowance","dtype":"bool","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"carers_allowance_take_up","stage_contract_sha256":"c4c1ddf4b7da2c3082e09d6e77a9b4a0dc617743ff2c3c1f546f930bcac0635f","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_deduction_attributes.","id":"uc_deduction_attributes","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","would_claim_carers_allowance"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_deduction_attributes@1","mass":"conserve","outputs":[{"column":"uc_deduction_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_type_random_draw","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_latent_deduction_rate","dtype":"float64","entity":"benunit","ownership":"produced","rows":"all"},{"column":"uc_deduction_combination","dtype":"string","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"uc_deduction_attributes","stage_contract_sha256":"6bc7e3ec1a5712e23ca1b7d2956e8b17f2526b94431ba3e5a9294b04658e4fe0","time_period":"2024"},"population":"carers_allowance_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"carers_allowance_take_up.boundary","citation":"","description":"Run structural UK stage cgt_support_split.","id":"cgt_support_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_support_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_support_copy","bool"],["household","cgt_support_copies","int64"],["household","cgt_support_copy_index","int64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_support_split","stage_contract_sha256":"37982d7f51f8db15a66feb4145e05d25e5b444ed5f682934a70c26d2a98f34a0","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_support_split.","id":"cgt_support_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_support_copy","household.cgt_support_copies","household.cgt_support_copy_index"]},"population":"cgt_support_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_support_split","citation":"","description":"Run structural UK stage cgt_incidence_clone.","id":"cgt_incidence_clone","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_clone@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_capital_gains_clone","bool"],["person","capital_gains","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_clone","stage_contract_sha256":"ee30278543cc0297a5366d855b7753aa04af5518971594c193c52be36bf8a7b4","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_incidence_clone.","id":"cgt_incidence_clone.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_capital_gains_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_capital_gains_clone","person.capital_gains"]},"population":"cgt_incidence_clone","sources":[],"structural":"none","weights":null},{"base":"cgt_incidence_clone","citation":"","description":"Ownership boundary before hmrc_cgt_gains_spine rewrites.","id":"hmrc_cgt_gains_spine.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_gains_spine.","id":"hmrc_cgt_gains_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["cgt_support_copies","corporate_wealth","gross_financial_wealth","household_is_cgt_support_copy","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","dividend_income","employment_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported","tax_free_savings_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_gains_spine@1","mass":"conserve","outputs":[{"column":"capital_gains","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_gains_spine","stage_contract_sha256":"1206e6b5458db8af71edd3c2a8e6acbbd0175fd7a61c023905568470274312d3","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"hmrc_cgt_gains_spine.boundary","citation":"","description":"Run structural UK stage cgt_incidence_anchor.","id":"cgt_incidence_anchor","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_is_capital_gains_clone","region"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","dividend_income","employment_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_anchor@1","mass":"conserve","outputs":[],"params":{"expand_cells":[],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_incidence_anchor","stage_contract_sha256":"b79ce806015de2f1e1703fa68bf4ad871c6df54b5b32633c864632ab68919a48","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_incidence_anchor","citation":"","description":"Run structural UK stage cgt_residential_split.","id":"cgt_residential_split","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_residential_split@1","mass":"conserve","outputs":[],"params":{"expand_cells":[["household","household_is_cgt_residential_clone","bool"],["household","cgt_residential_clone_index","int64"],["person","cgt_residential_probability","float64"],["person","capital_gains_residential_property","float64"]],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"cgt_residential_split","stage_contract_sha256":"6d659abbd975ca3c988f8625721ec908ed0f007453f2a7c459f1b4cce99ce8e4","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_residential_split.","id":"cgt_residential_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_residential_clone","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_clone_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_residential_probability","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_residential_property","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_residential_clone","household.cgt_residential_clone_index","person.cgt_residential_probability","person.capital_gains_residential_property"]},"population":"cgt_residential_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage hmrc_cgt_asset_type_spine.","id":"hmrc_cgt_asset_type_spine","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["corporate_wealth","gross_financial_wealth","other_residential_property_value","region","stocks_and_shares_isa"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","capital_gains_residential_property","dividend_income","property_income","reports_rent_from_other_property","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.hmrc_cgt_asset_type_spine@1","mass":"conserve","outputs":[{"column":"capital_gains_asset_type","dtype":"string","entity":"person","ownership":"produced","rows":"all"},{"column":"capital_gains_badr","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"hmrc_cgt_asset_type_spine","stage_contract_sha256":"b882bb6b0f1fa8d6cec2b109e59da78a9c6ef756769c886185f397fb94a9743f","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage salary_sacrifice.","id":"salary_sacrifice","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr"],"entity":"person","rows":"all"}],"kernel":"uk.stage.salary_sacrifice@1","mass":"conserve","outputs":[{"column":"pension_contributions_via_salary_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"pension_contributions_via_bonus_sacrifice","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employee_pension_contributions","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"employment_income","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"},{"column":"salary_sacrifice_pre_conversion_pay","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"salary_sacrifice","stage_contract_sha256":"c1fe665c4cf374cbcc8ecf262bb69062c30cca5db8ab35183346bd83761e56f9","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage student_loans.","id":"student_loans","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","age_left_full_time_education","current_education","highest_education","reports_outstanding_student_loan","salary_sacrifice_pre_conversion_pay","student_loan_repayments","student_loans"],"entity":"person","rows":"all"}],"kernel":"uk.stage.student_loans@1","mass":"conserve","outputs":[{"column":"student_loan_plan","dtype":"string","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"student_loans","stage_contract_sha256":"157d9ee607633e4246ed06eeee3aac3cdff98118e72400e18b84c11b3fd2b92b","time_period":"2024"},"population":"cgt_residential_split","sources":["frs"],"structural":"none","weights":null},{"base":"cgt_residential_split","citation":"","description":"Ownership boundary before childcare_copy_take_up rewrites.","id":"childcare_copy_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.identity@1","mass":"conserve","outputs":[],"params":{},"population":null,"sources":[],"structural":"filter","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage childcare_copy_take_up.","id":"childcare_copy_take_up","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_uc_childcare","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.childcare_copy_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_tfc","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_extended_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_universal_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"would_claim_targeted_childcare","dtype":"bool","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"maximum_extended_childcare_hours_usage","dtype":"float64","entity":"benunit","ownership":"produced","rewrite":true,"rows":"all"},{"column":"max_free_entitlement_hours_used","dtype":"float64","entity":"person","ownership":"produced","rewrite":true,"rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"childcare_copy_take_up","stage_contract_sha256":"cdbb7e135b16fac7ca1bcd6c54222821e2976b4da99f10a60913efd0ba03c13c","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage private_school_attendance.","id":"private_school_attendance","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index","household_is_capital_gains_clone","household_is_cgt_residential_clone","cgt_residential_clone_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_as_boarder","rent_paid_as_lodger","employment_income","self_employment_income","trading_loss","loss_relief","ni_class_4_losses_brought_forward","private_pension_income","tax_free_savings_income","savings_interest_income","dividend_income","stands_as_sole_owner_or_partner_of_company","is_engaged_in_owned_company_trade","owned_company_is_main_employment","owned_company_carries_on_trade","owned_company_carries_on_property_business","owned_company_income_share","property_income","reports_rent_from_other_property","maintenance_income","spousal_maintenance_income","miscellaneous_income","private_transfer_income","lump_sum_income","student_loan_repayments","statutory_sick_pay","statutory_maternity_pay","statutory_paternity_pay","student_loans","access_fund","education_grants","healthy_start_vouchers","free_school_breakfasts","free_school_fruit_veg","free_school_meals","council_tax_benefit_reported","maintenance_expenses","childcare_expenses","personal_pension_contributions","employee_pension_contributions","pension_contributions_via_salary_sacrifice","salary_sacrifice_reported","salary_sacrifice_asked","frs_bonus_amount","child_benefit_reported","income_support_reported","housing_benefit_reported","attendance_allowance_reported","dla_sc_reported","dla_m_reported","iidb_reported","carers_allowance_reported","would_claim_carers_allowance","sda_reported","afcs_reported","ssmg_reported","pension_credit_reported","child_tax_credit_reported","working_tax_credit_reported","state_pension_reported","winter_fuel_allowance_reported","incapacity_benefit_reported","universal_credit_reported","pip_m_reported","pip_dl_reported","jsa_contrib_reported","jsa_income_reported","esa_contrib_reported","esa_income_reported","esa_includes_support_component","bsp_reported","war_widows_pension_reported","widowed_parents_allowance_reported","relationship_to_head","ons_family_role","ons_family_index","is_looked_after_by_local_authority","employment_status","employment_sector","sic_industry_division","aa_category","dla_sc_category","dla_m_category","pip_m_category","pip_dl_category","is_disabled_for_benefits","is_enhanced_disabled_for_benefits","is_severely_disabled_for_benefits","current_education","highest_education","is_in_non_advanced_education","is_in_approved_training","age_started_or_accepted_current_education_or_training","is_before_universal_credit_qualifying_young_person_terminal_date","adult_ema","child_ema","receives_benefits_in_own_right","reports_outstanding_student_loan","age_left_full_time_education","legacy_jobseeker_proxy","esa_health_condition_proxy","esa_support_group_proxy","disabled_students_allowance_eligible_expenses","max_free_entitlement_hours_used","would_claim_marriage_allowance","would_claim_scp","attends_private_school_random_draw","tax_free_childcare_spend_routed_share","hmrc_spi_pay","hmrc_spi_unemployment_benefit_income","hmrc_spi_incapacity_benefit_income","ossben_identifiable_subset","srp_regular_code5","employer_pension_contributions","employment_income_annual_share","employment_income_other_spells","self_employment_income_annual_share","self_employment_income_other_spells","private_pension_income_annual_share","contributory_benefits_annual_share","person_source_id","person_support_channel","person_support_clone_index","person_is_spi_income_band_carrier","charitable_investment_gifts","gift_aid","other_investment_income","hmrc_spi_employment_benefits","hmrc_spi_employment_expenses","hmrc_spi_other_social_security_income","hmrc_spi_taxable_termination_pay","hmrc_spi_miscellaneous_employment_income","hmrc_spi_other_income","hmrc_spi_state_pension_income","property_finance_costs","hmrc_spi_employed_income","hmrc_spi_total_earned_income","hmrc_spi_total_investment_income","hmrc_spi_assessable_income","person_is_spi_income_recipient","student_loan_balance","has_lifetime_isa","lifetime_isa_balance","property_rental_income","local_bus_use_band","bus_in_london_trips","other_local_bus_trips","local_bus_trips","bus_pass_eligible","local_bus_single_fare_share","a_and_e_visits","admitted_patient_visits","outpatient_visits","nhs_a_and_e_spending","nhs_admitted_patient_spending","nhs_outpatient_spending","capital_gains","cgt_residential_probability","capital_gains_residential_property","capital_gains_asset_type","capital_gains_badr","pension_contributions_via_bonus_sacrifice","salary_sacrifice_pre_conversion_pay","student_loan_plan"],"entity":"person","rows":"all"}],"kernel":"uk.stage.private_school_attendance@1","mass":"conserve","outputs":[{"column":"attends_private_school","dtype":"bool","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.151.0"],["policyengine-core","3.33.3"],["numpy","2.4.6"],["pandas","3.0.3"],["scikit-learn","1.8.0"],["quantile-forest","1.4.2"]],"stage":"private_school_attendance","stage_contract_sha256":"7e44379c0331fe4c9de05cd76a075c1a6aa22cf0dec6cd2f91b277e70f14a038","time_period":"2024"},"population":"childcare_copy_take_up.boundary","sources":["frs"],"structural":"none","weights":null}],"sources":[{"codec":"csv-tables","description":"Content-bound UK FRS and donor fixture/source bundle.","name":"frs"}]} diff --git a/test_support/microcosm_build/uk_excise_facts.py b/test_support/microcosm_build/uk_excise_facts.py new file mode 100644 index 0000000000..9db0f0cb52 --- /dev/null +++ b/test_support/microcosm_build/uk_excise_facts.py @@ -0,0 +1,235 @@ +"""Synthetic excise facts for the LCFS excise step's tests (microcosm#1359). + +The values are made up, not publisher rows: they exercise the step's +arithmetic and its checks, so no test copies a published figure. The real +rows come from the vendored Chronicle resource (PolicyEngine/chronicle#381). +""" + +from __future__ import annotations + +import copy +from typing import Any + +EXCISE_RESOURCE = "excise_facts.json" +ALCOHOL = "synthetic.alcohol_clearances" +ALCOHOL_BY_RELIEF = "synthetic.alcohol_clearances_by_relief" +TOBACCO = "synthetic.tobacco_clearances" +ON_TRADE = "synthetic.alcohol_on_trade_share" +RECEIPTS = "synthetic.betting_and_gaming_duty_receipts" +LIABILITIES = "synthetic.machine_games_duty_liabilities" +YIELD = "synthetic.gross_gambling_yield" + + +def _row( + concept: str, + dimensions: dict[str, str], + value: float, + unit: str, + geography: str = "K02000001", +) -> dict[str, Any]: + key = ".".join(dimensions.values()) + return { + "concept": concept, + "unit": unit, + "period": {"type": "fiscal_year", "value": 2024}, + "period_coverage": {"start_date": "2024-04-01", "end_date": "2025-03-31"}, + "geography": {"id": geography}, + "dimensions": dict(dimensions), + "value": value, + "source_record_id": f"{concept}.{key}.fy2024", + } + + +def _yield(sector: str, activity: str, event: str, value: float) -> dict[str, Any]: + return _row( + YIELD, + { + "gambling_sector": sector, + "gambling_activity": activity, + "betting_event": event, + }, + value, + "gbp", + geography="K03000001", + ) + + +#: In the units Chronicle stores (litres of pure alcohol, sticks, kilograms, +#: pounds) and a share: round numbers no publisher printed. +EXCISE_FACT_ROWS: list[dict[str, Any]] = [ + _row(ALCOHOL, {"product": "beer_and_cider"}, 2.0e5, "litre_of_pure_alcohol"), + _row(ALCOHOL, {"product": "wine"}, 1.0e5, "litre_of_pure_alcohol"), + _row(ALCOHOL, {"product": "spirits"}, 0.5e5, "litre_of_pure_alcohol"), + *( + _row( + ALCOHOL_BY_RELIEF, + {"product": "beer_and_cider", "relief": relief}, + value, + "litre_of_pure_alcohol", + ) + for relief, value in ( + ("draught_relief_only", 0.4e5), + ("draught_and_small_producer_relief", 0.1e5), + ("all", 2.0e5), + ) + ), + _row(TOBACCO, {"product": "cigarettes"}, 1.0e8, "stick"), + _row(TOBACCO, {"product": "hand_rolling"}, 500.0, "kilogram"), + _row(TOBACCO, {"product": "other"}, 100.0, "kilogram"), + _row(ON_TRADE, {"product": "all_alcohol"}, 0.25, "ratio"), + *( + _row( + RECEIPTS, {"accounting_basis": "cash", "gambling_duty": duty}, value, "gbp" + ) + for duty, value in ( + ("remote_gaming_duty", 2.1e6), + ("general_betting_duty", 1.5e6), + ("pool_betting_duty", 1.5e4), + ("bingo_duty", 1.0e4), + ("lottery_duty", 1.2e6), + ("gaming_duty", 2.0e5), + ) + ), + *( + _row(LIABILITIES, {"mgd_rate": band}, value, "gbp") + for band, value in ( + ("lower_rate", 5.0e3), + ("standard_rate", 6.0e5), + ("higher_rate", 2.5e4), + ) + ), + _yield("betting_non_remote", "off_course_over_the_counter", "all", 4.0e6), + _yield("betting_remote", "betting", "all", 4.0e6), + _yield("betting_remote", "betting_exchange", "all", 1.0e6), + _yield("betting_non_remote", "pool_betting", "all", 0.6e6), + _yield("betting_remote", "pool_betting", "all", 0.4e6), + _yield("betting_remote", "all", "horses", 1.5e6), + _yield("betting_remote", "all", "all", 6.0e6), +] + + +def _alcohol(product: str, strength: float, parameter: str) -> dict[str, Any]: + return { + "concept": ALCOHOL, + "dimensions": {"product": product}, + "unit": "litre_of_pure_alcohol", + "strength": { + "value": strength, + "parameter_path": f"household.consumption.alcohol.{parameter}", + }, + } + + +def _tobacco(product: str, unit: str) -> dict[str, Any]: + return {"concept": TOBACCO, "dimensions": {"product": product}, "unit": unit} + + +def _rate(value: float, path: str) -> dict[str, Any]: + return {"value": value, "parameter_path": path} + + +EXCISE_DECLARATION: dict[str, Any] = { + "kind": "level_excise_quantities", + "resource": EXCISE_RESOURCE, + "period_type": "fiscal_year", + "period_value": 2024, + "fiscal_start": "2024-04-01", + "geography_id": "K02000001", + "weeks_per_year": 52, + "alcohol_volume_weights": {"rule": "spending"}, + "outputs": { + "beer_litres": _alcohol("beer_and_cider", 0.04, "beer_abv"), + "wine_litres": _alcohol("wine", 0.12, "wine_abv"), + "spirits_litres": _alcohol("spirits", 0.40, "spirits_abv"), + "cigarettes_per_week": _tobacco("cigarettes", "stick"), + "hand_rolling_tobacco_grams_per_week": _tobacco("hand_rolling", "kilogram"), + "other_tobacco_grams_per_week": _tobacco("other", "kilogram"), + }, + "draught_shares": { + "beer_draught_share": { + "concept": ALCOHOL_BY_RELIEF, + "unit": "litre_of_pure_alcohol", + "numerator": [ + {"product": "beer_and_cider", "relief": "draught_relief_only"}, + { + "product": "beer_and_cider", + "relief": "draught_and_small_producer_relief", + }, + ], + "denominator": [{"product": "beer_and_cider", "relief": "all"}], + }, + }, + "gambling": { + "receipts": {"concept": RECEIPTS, "dimensions": {"accounting_basis": "cash"}}, + "machine_games_liabilities": {"concept": LIABILITIES}, + "yield": {"concept": YIELD, "geography_id": "K03000001"}, + "rates": { + "general_betting": _rate( + 0.15, "gov.hmrc.gambling_duty.general_betting.rates.fixed_odds" + ), + "pool_betting": _rate(0.15, "gov.hmrc.gambling_duty.pool_betting.rate"), + "remote_gaming": _rate(0.21, "gov.hmrc.gambling_duty.remote_gaming.rate"), + "machine_games_lower": _rate( + 0.05, "gov.hmrc.gambling_duty.machine_games.rates.lower" + ), + "machine_games_standard": _rate( + 0.20, "gov.hmrc.gambling_duty.machine_games.rates.standard" + ), + "machine_games_higher": _rate( + 0.25, "gov.hmrc.gambling_duty.machine_games.rates.higher" + ), + "bingo": _rate(0.10, "gov.hmrc.gambling_duty.bingo.rate"), + "lottery": _rate(0.12, "gov.hmrc.gambling_duty.lottery.rate"), + "casino": _rate( + 0.235487, "household.consumption.gambling.casino_effective_rate" + ), + }, + }, +} + +#: The on-trade channel's volume as a published share, for the channel rule. +ON_TRADE_VOLUME_WEIGHTS: dict[str, Any] = { + "rule": "published_on_trade_share", + "concept": ON_TRADE, + "dimensions": {"product": "all_alcohol"}, +} + + +def excise_declaration(**changes: Any) -> dict[str, Any]: + """A copy of the synthetic declaration with top-level keys replaced.""" + + declaration = copy.deepcopy(EXCISE_DECLARATION) + declaration.update(copy.deepcopy(changes)) + return declaration + + +def patch_excise_facts(monkeypatch, declaration: dict[str, Any] | None = None) -> None: + """Serve the synthetic rows for the excise resource, the real ones otherwise. + + With ``declaration`` the stage also reads it as its declared step, for the + gate, which reads the committed spec's. + """ + + from microcosm.build.uk_runtime import lcfs_consumption + from microcosm.build.uk_runtime.ledger_fact_vendoring import rows_matching + + real = lcfs_consumption.vendored_rows + + def vendored_rows(name, *, fiscal_start=None, **criteria): + if name != EXCISE_RESOURCE: + return real(name, fiscal_start=fiscal_start, **criteria) + rows = rows_matching({"rows": EXCISE_FACT_ROWS}, **criteria) + return [ + row + for row in rows + if fiscal_start is None + or row["period_coverage"]["start_date"] == str(fiscal_start) + ] + + monkeypatch.setattr(lcfs_consumption, "vendored_rows", vendored_rows) + if declaration is not None: + monkeypatch.setattr( + lcfs_consumption, + "excise_quantities_operation", + lambda stage: copy.deepcopy(declaration), + ) diff --git a/tools/diagnose_uk_consumption_taxes.py b/tools/diagnose_uk_consumption_taxes.py index 25e6896209..b833197c6c 100644 --- a/tools/diagnose_uk_consumption_taxes.py +++ b/tools/diagnose_uk_consumption_taxes.py @@ -6,14 +6,16 @@ bound again since the next bump), ``obr.fuel_duties_cars`` by fuel that includes business-paid car fuel, and the ONS electricity and gas rows by a published-source residual against the stage's DESNZ volume at QEP -prices. Rows held out of the objective by the measure-exclusion register stay -measured here, beside the household road-fuel row (ONS 07.2.2) bound in place -of the cars receipts: the tool reports each row's estimate on any H5 the -engine loads, against the value the run's contract registry declares, beside -the household fuel and energy composition the rows used to pull -(gas-connected share, fuel-car households with no fuel, consumption total). -Development diagnostic: it never recalibrates and writes only an aggregate -JSON. +prices, and OBR's excise receipts by the clearances and bases the stage +levels the excise inputs to (microcosm#1359), which are measured at their +own FY2024-25 period. Rows held out of the objective by the +measure-exclusion register stay measured here, beside the household +road-fuel row (ONS 07.2.2) bound in place of the cars receipts: the tool +reports each row's estimate on any H5 the engine loads, against the value +the run's contract registry declares, beside the household fuel and energy +composition the rows used to pull (gas-connected share, fuel-car households +with no fuel, consumption total). Development diagnostic: it never +recalibrates and writes only an aggregate JSON. """ from __future__ import annotations @@ -36,6 +38,22 @@ "ons.household_electricity_expenditure": ("electricity_consumption",), "ons.household_gas_expenditure": ("gas_consumption",), "ons.household_road_fuel_expenditure": ("petrol_spending", "diesel_spending"), + # microcosm#1359: the duties on the excise step's quantities and bases. + "obr.beer_and_cider_duties": ("beer_duty", "cider_duty", "sparkling_cider_duty"), + "obr.wine_duties": ("wine_duty", "other_fermented_duty"), + "obr.spirits_duties": ("spirits_duty",), + "obr.tobacco_duties": ("tobacco_duty",), + "obr.betting_and_gaming_duties": ("gambling_duty",), +} +#: Rows measured at their own period, not ``--year``: the excise receipts at +#: FY2024-25, the year of the stored quantities, which policyengine-uk charges +#: as model year 2024 and holds flat after it (measurement_period 2024). +ROW_YEARS: Mapping[str, int] = { + "obr.beer_and_cider_duties": 2024, + "obr.wine_duties": 2024, + "obr.spirits_duties": 2024, + "obr.tobacco_duties": 2024, + "obr.betting_and_gaming_duties": 2024, } @@ -114,16 +132,17 @@ def registry_values(path: Path) -> dict[str, float]: def engine_estimates(dataset: str, year: int) -> dict[str, float]: - """Weighted engine totals of each held-out row at ``year``.""" + """Weighted engine totals of each held-out row at ``year`` or its own period.""" from policyengine_uk import Microsimulation simulation = Microsimulation(dataset=dataset) estimates: dict[str, float] = {} for name, variables in ROWS.items(): + period = ROW_YEARS.get(name, year) estimates[name] = float( sum( - float(simulation.calculate(variable, year).sum()) + float(simulation.calculate(variable, period).sum()) for variable in variables ) ) diff --git a/tools/graph_uk_spine_fixture.py b/tools/graph_uk_spine_fixture.py index 728768d621..82a4c4769d 100644 --- a/tools/graph_uk_spine_fixture.py +++ b/tools/graph_uk_spine_fixture.py @@ -1069,6 +1069,42 @@ def _lcfs_donors() -> tuple[pd.DataFrame, pd.DataFrame]: # Other motor fuels (c72213): the level_road_fuel step nets the donor's own # share of them from ONS 07.2.2 (microcosm#1113), so a few diaries buy some. household["c72213"] = np.where(rows.astype(int) % 5 == 0, 0.5, 0.0) + # The alcohol and tobacco lines P602 sums, the drinks inside P611 and the + # gambling stakes inside P609, which the excise shares read (microcosm#1359): P602 is its ten lines, with + # tobacco on a quarter of the diaries (all of P602 on a twelfth), and a + # third of the diaries buy drinks away from home. + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_GAMBLING_STAKE_CODES, + UK_LCFS_OFF_TRADE_ALCOHOL_CODES, + UK_LCFS_ON_TRADE_ALCOHOL_CODES, + UK_LCFS_TOBACCO_CODES, + ) + + p602 = np.asarray(household["p602"], dtype=float) + tobacco = np.where( + rows.astype(int) % 12 == 0, + p602, + np.where(rows.astype(int) % 4 == 0, 0.3 * p602, 0.0), + ) + for code, share in zip(UK_LCFS_TOBACCO_CODES, (0.7, 0.0, 0.3), strict=True): + household[code] = share * tobacco + for code in UK_LCFS_OFF_TRADE_ALCOHOL_CODES: + household[code] = (p602 - tobacco) / len(UK_LCFS_OFF_TRADE_ALCOHOL_CODES) + on_trade = np.where( + rows.astype(int) % 3 == 1, + 0.25 * np.asarray(household["p611"], dtype=float), + 0.0, + ) + for code in UK_LCFS_ON_TRADE_ALCOHOL_CODES: + household[code] = on_trade / len(UK_LCFS_ON_TRADE_ALCOHOL_CODES) + # Gambling stakes inside P609, on a fifth of the diaries. + stakes = np.where( + rows.astype(int) % 5 == 2, + 0.05 * np.asarray(household["p609"], dtype=float), + 0.0, + ) + for code in UK_LCFS_GAMBLING_STAKE_CODES: + household[code] = stakes / len(UK_LCFS_GAMBLING_STAKE_CODES) person = pd.DataFrame( { "case": np.arange(1, _DONOR_ROWS + 1),