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..8ced2ce16e --- /dev/null +++ b/changelog.d/1359-uk-excise-quantities.added.md @@ -0,0 +1,13 @@ +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 alcohol or tobacco duty is one multiple of its own spending: about 2.2 times its tobacco spending, against 0.41 times its alcohol spending. + +The gambling inputs follow keys that the new `top_up_gambling_participation` step brings to the Gambling Commission's Gambling Survey for Great Britain 2025, since the diary records a stake for about a fifth of the households that play. 62.7% of households now carry Lottery Duty and 29.8% the other gambling duties, against 10.7% and 2.0% on the diary's draws: +- each adult's chance of playing in four weeks and in twelve months is GSGB's rate for its sex and age band, and a household's combines its adults at a theta fitted on the donor (0.9 for the National Lottery, 0.08 for betting and gaming); +- within nine household strata, households without a stake are added in an order a donor propensity sets, until each stratum's four-week and then twelve-month share is met; +- an added household's stake is drawn from the donor's positive stakes, and an occasional player's is a tenth of that. Households the diary saw keep their stakes, and no spending column moves. + +The stage notes give these and the other known biases: fewer households carry tobacco duty than smoke, other tobacco includes e-cigarette refills, the draught shares are national, alcohol volume follows spending, which leans it towards pub drinkers, and the top-up assumes the diary misses gamblers evenly and takes GSGB's participation as the level, though the Commission found that its estimates move with how the survey invitation is worded. The gambling inputs need policyengine-uk 2.151.0 or later. The new stage-health gates `uk_stage_lcfs_consumption_excise_quantities` and `uk_stage_lcfs_consumption_gambling_participation` recompute every level and rate from the vendored `excise_facts.json` and `gambling_participation_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/changelog.d/1359-uk-feed-repin-272c987.changed.md b/changelog.d/1359-uk-feed-repin-272c987.changed.md new file mode 100644 index 0000000000..a72334e57f --- /dev/null +++ b/changelog.d/1359-uk-feed-repin-272c987.changed.md @@ -0,0 +1 @@ +The UK Chronicle feed is re-pinned to `272c987` (PolicyEngine/chronicle#391), which adds the Gambling Commission's Gambling Survey for Great Britain 2025 participation tables for #1359's gambling top-up. The new vendored `gambling_participation_facts.json` carries the 426 Great Britain participation rows the LCFS stage reads. No compiled target moves on either surface. diff --git a/changelog.d/1383-withholding-review-followups.fixed.md b/changelog.d/1383-withholding-review-followups.fixed.md new file mode 100644 index 0000000000..17fd48312d --- /dev/null +++ b/changelog.d/1383-withholding-review-followups.fixed.md @@ -0,0 +1 @@ +The UK withholding check refuses a local row that names no contract target, where it used to leave the row out of every family block. A contract test keeps each parentless local family free of a higher-grain row of its measurement (Vahid's third review of #1383, item 33). A build now computes the withheld rows once. The national path's diagnostics take the national gates' set, and the Orrery result summary takes the set that a gate on the same result recorded. A local surface's withholding check logs how long it took (item 32). 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..ac9a3d9bbf --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/README.md @@ -0,0 +1,96 @@ +# 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. + + A fourth run, `outputs/stage_dev_run.head-main-rebase.json`, is the head rebased onto main after microcosm#1383 merged. `outputs/stage_dev_run.rebase-comparison.json` sets it against the split head: 26 of the 46 columns are byte-identical. #1383's last levelling rule moves the seven levelled divisions, recreation among them, and the 13 gambling inputs follow recreation; the alcohol and tobacco inputs do not move. +- **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 rebased 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. + +## The gambling participation top-up + +- **Theta** (`scripts/theta_calibration.py`, `outputs/theta_calibration.json`). How a household's adults combine, fitted on the LCFS 2024-25 donor. The script reads the committed declaration and the vendored GSGB rows, and sets theta so that the step's adult rates, applied to the donors' own adults, give the diary's ratio of the two-adult to the one-adult household rate. The results are 0.897 for the National Lottery and 0.081 for betting and gaming; the declaration rounds them to 0.9 and 0.08. The ratio for three or more adults is the check, and it fits less well. Each household-size class rests on 30 or more donors with a stake, which the script checks. +- **Stage-only runs with and without the top-up** (`scripts/stage_run_gsgb.py`, `outputs/stage_run_gsgb.json`). The branch head `348d1209b` ran on the same spine, on the `272c987` feed, twice in one process: as declared, and with `top_up_gambling_participation` removed. The difference is therefore the step's alone. The output records: + - every LCFS gate on the declared run (all nine pass) and the participation receipt; + - for the Lottery Duty base and one betting and gaming input, the share of households carrying it and each equivalised-income decile's share of households and of the base, in both runs; + - by region, the share carrying each key, beside GSGB's regional adult rates (tables B.2 and B.4). This is the out-of-sample check, since region is not a target. + + Every stratum lands on its share. 62.7% of households carry Lottery Duty and 29.8% the other gambling duties, against 10.7% and 2.0% without the step. The added regular players' mean stake equals the seen households', and the occasional players' is about a tenth of it. + + Two results are left for review: + - carrying rises with income, so the betting and gaming base moves towards the top decile; + - the regional pattern follows GSGB only weakly. London is the lowest region for the Lottery, as in GSGB, but the second lowest for betting and gaming. +- **The propensity's features** (`scripts/stage_run_gsgb_variants.py`, `outputs/stage_run_gsgb_variants.json`). Vahid's round 4 found that the propensity read recreation with the stakes in it. The script runs the stage once as committed, then the top-up alone on the same inputs in three ways: + - recreation with the stakes in, as at `3a20860fb`. It reproduces `stage_run_gsgb.json` exactly; + - recreation net of the stakes, as committed; + - the walk ordered by the published chance alone. + + Taking the stakes out flattens part of the income gradient. Betting and gaming now runs from 26.8% of households in the bottom equivalised-income decile to 34.8% in the top, against 24.5% to 36.2% with the stakes in. The Lottery runs from 51.5% to 67.3%, against 51.6% to 70.3%. Ordered by the chance alone, betting and gaming is flat (29.2% to 29.8%), but neither key's regional pattern then follows GSGB's. With the stakes out, the Lottery's correlation with GSGB's regional rates rises from 0.41 to 0.67, and betting and gaming's stays at 0.11. The stake scales hardly move (1.82 to 1.86 for the Lottery, 0.63 to 0.64 for betting and gaming), so the stake in the feature did not cause the raw draws' gap from the seen households' mean. +- **The union and theta** (`scripts/union_theta_sensitivity.py`, `outputs/union_theta_sensitivity.json`). Vahid's round 4 asked how much the keys rest on two choices: activities independent within their population, and theta. GSGB's own tables check the first, by age band: + - B.13, the number of activities each four-week gambler took part in, rules out independence among players. 45% of them took part in one activity, against 26% under independence. + - A model in which each adult's activities share a gamma-distributed intensity comes within 2.5 points of B.13's one-activity share in every age band. It moves neither key's union by more than 9% in any age band. + - Where B.9 prints a union beside its parts, independence gets the two kinds of lottery draw right (36.7% against 36.5% of adults). It overstates one product from two sellers (scratchcards, online instant win games) by 13 to 15%. + + On the frame's adults at prior weights, the share of households carrying each key is then computed at other thetas, with the model's unions, and at the bounds the published rows allow. Theta matters more than the union: from theta 0 to 1, betting and gaming runs from 28.5% to 41.2% of households (29.8% at the fitted 0.08), and the Lottery from 48.2% to 63.8% (62.7% at 0.9). The model's unions move neither key by more than 0.1 points. +- **The re-pin to `272c987`** (`scripts/repin_272c987.sh`, with `scripts/quiet_footprint.sh`). The same steps as for `200bf6d`, on cuts of the artifact built from PolicyEngine/chronicle#391's head, whose tree the merge commit keeps. Each heavy step waits until no other process holds a 3 GB memory footprint (resident plus compressed and swapped), since `ps`'s resident size misses a swapped-out process. + +## 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-main-rebase.json outputs/national_reconciliation.json outputs/excise_incidence.json +``` + +The top-up's runs need the LCFS tabs, the spine and the GSGB rows taken from the pinned artifact (`grep '"gambling_commission.gsgb' consumer_facts.jsonl`): + +```bash +python scripts/theta_calibration.py outputs/theta_calibration.json +``` + +```bash +python scripts/stage_run_gsgb.py outputs/stage_run_gsgb.json +``` + +```bash +python scripts/stage_run_gsgb_variants.py outputs/stage_run_gsgb_variants.json +``` + +```bash +python scripts/union_theta_sensitivity.py outputs/union_theta_sensitivity.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..00318c8fe1 --- /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": 33.66988925943396, + "carrying_share": 0.019563867703070097, + "duty": 2687416960.0, + "duty_over_spending": 6.25399559091979, + "spending": 429712001.0608698 + }, + "national_lottery": { + "bases_over_spending": 4.592051241133866, + "carrying_share": 0.10681009830639804, + "duty": 931886976.0, + "duty_over_spending": 0.5510461347443137, + "spending": 1691123332.9535956 + }, + "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-main-rebase.json b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.head-main-rebase.json new file mode 100644 index 0000000000..fc2d6239f1 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.head-main-rebase.json @@ -0,0 +1,1356 @@ +{ + "excise_quantities": { + "alcohol_volume_weights": { + "rule": "spending" + }, + "components": { + "betting_and_gaming_stakes": { + "positive_share": 0.019563867703070097, + "weighted_total": 429712001.0608698 + }, + "gambling_stakes": { + "positive_share": 0.14629307418887494, + "weighted_total": 2308631878.1773663 + }, + "national_lottery_stakes": { + "positive_share": 0.10681009830639804, + "weighted_total": 1691123332.9535956 + }, + "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": 617508545.2237706 + }, + "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.288448795673, + "frame_annual_total": 123949909.1922428, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.5872072443335293, + "frame_annual_total": 252330000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.12850265314582782, + "frame_annual_total": 55219132.22492455, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.6344935385450456, + "frame_annual_total": 702361489.1692535, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.5554653375783682, + "frame_annual_total": 1527826124.9133615, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.005547901836845139, + "frame_annual_total": 2384000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.32212272326178865, + "frame_annual_total": 138420000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.036666401066326, + "frame_annual_total": 3023740000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.592051241133866, + "frame_annual_total": 7765724999.999998, + "geography_id": "K02000001", + "key": "national_lottery", + "key_total": 1691123332.9535956, + "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.1260534184126587, + "frame_annual_total": 54166666.666666664, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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": 12.882814504442536, + "frame_annual_total": 5535900000.0, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.0358813622515655, + "frame_annual_total": 2163978657.2782593, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.0666853788864663, + "frame_annual_total": 888079509.7245454, + "geography_id": "K02000001", + "key": "betting_and_gaming", + "key_total": 429712001.0608698, + "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.6958802503779964 + }, + "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.015286115600075837 + }, + "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.7325218667121216 + }, + "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": 84.7, + "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": 24981028185.623734, + "diesel_spending": 10457880276.270939, + "domestic_energy_consumption": 48755237020.280426, + "education_consumption": 16125442673.923807, + "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": 21905495025.357376, + "horse_and_dog_pool_betting_net_losses": 55219132.22492455, + "household_furnishings_consumption": 74900685873.98344, + "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": 138419999.99999997, + "machine_games_standard_rate_net_takings": 3023740000.0, + "miscellaneous_consumption": 91785377266.5408, + "national_lottery_ticket_spending": 7765724999.999998, + "other_fermented_litres": 239435846.48703998, + "other_tobacco_grams_per_week": 5797406.910050116, + "petrol_spending": 24840485040.255028, + "pool_betting_net_receipts": 54166666.666666664, + "recreation_consumption": 151028026908.67474, + "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": 178976282972.66656, + "uses_energy_prepayment_meter": 3446619.8864751486, + "wine_litres": 1266891770.400817 + } +} 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.rebase-comparison.json b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.rebase-comparison.json new file mode 100644 index 0000000000..d725c6e79b --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/stage_dev_run.rebase-comparison.json @@ -0,0 +1,144 @@ +{ + "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 + }, + "communication_consumption": { + "base_weighted_total": 24803521172.601994, + "head_weighted_total": 24981028185.623734 + }, + "education_consumption": { + "base_weighted_total": 15876557691.370522, + "head_weighted_total": 16125442673.923807 + }, + "health_consumption": { + "base_weighted_total": 21567398958.325157, + "head_weighted_total": 21905495025.357376 + }, + "horse_and_dog_pool_betting_net_losses": { + "base_weighted_total": 55219132.22492455, + "head_weighted_total": 55219132.22492455 + }, + "household_furnishings_consumption": { + "base_weighted_total": 73744645926.80603, + "head_weighted_total": 74900685873.98344 + }, + "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": 2384000.0, + "head_weighted_total": 2384000.0 + }, + "machine_games_lower_rate_net_takings": { + "base_weighted_total": 138420000.0, + "head_weighted_total": 138419999.99999997 + }, + "machine_games_standard_rate_net_takings": { + "base_weighted_total": 3023740000.0, + "head_weighted_total": 3023740000.0 + }, + "miscellaneous_consumption": { + "base_weighted_total": 90368733861.36032, + "head_weighted_total": 91785377266.5408 + }, + "national_lottery_ticket_spending": { + "base_weighted_total": 7765725000.000001, + "head_weighted_total": 7765724999.999998 + }, + "pool_betting_net_receipts": { + "base_weighted_total": 54166666.66666668, + "head_weighted_total": 54166666.666666664 + }, + "recreation_consumption": { + "base_weighted_total": 148697014445.80408, + "head_weighted_total": 151028026908.67474 + }, + "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.7245454, + "head_weighted_total": 888079509.7245454 + }, + "transport_consumption": { + "base_weighted_total": 175429846522.27753, + "head_weighted_total": 178976282972.66656 + } + }, + "fit_weight_records": [ + 30, + 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", + "restaurants_and_hotels_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/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/outputs/stage_run_gsgb.json b/docs/evidence/uk-excise-quantities-1359/outputs/stage_run_gsgb.json new file mode 100644 index 0000000000..d9a1996fdd --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/stage_run_gsgb.json @@ -0,0 +1,654 @@ +{ + "tree": "populace-1359", + "spine": "spine-b145-treat.h5", + "households": 78440, + "gates": { + "uk_stage_lcfs_consumption_support": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_energy_rake": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_bus_pricing": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_road_fuel_incidence": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_road_fuel_level": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_recomposed_totals": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_excise_quantities": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_gambling_participation": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_basis": { + "passed": true, + "failures": [] + } + }, + "gambling_participation": { + "operation": "top_up_gambling_participation", + "facts": { + "resource": "gambling_participation_facts.json", + "concept": "gambling_commission.gsgb.participation", + "period_type": "calendar_year", + "period_value": 2025, + "geography_id": "K03000001", + "rows_read": 140, + "rates": { + "national_lottery": { + "regular": { + "MALE:18": 0.2276379369586273, + "FEMALE:18": 0.17156585514271147, + "MALE:25": 0.3468267544917498, + "FEMALE:25": 0.2762752413060818, + "MALE:35": 0.4379301754112619, + "FEMALE:35": 0.3596900418828377, + "MALE:45": 0.4449983366913182, + "FEMALE:45": 0.4336073710871508, + "MALE:55": 0.45913786370430215, + "FEMALE:55": 0.4307111600847057, + "MALE:65": 0.40847169986086657, + "FEMALE:65": 0.36949762605520514, + "MALE:75": 0.3278480958217576, + "FEMALE:75": 0.2931659719405684 + }, + "occasional": { + "MALE:18": 0.29865421878075693, + "FEMALE:18": 0.283555465959738, + "MALE:25": 0.437860080533022, + "FEMALE:25": 0.3909637272613961, + "MALE:35": 0.5305644555170597, + "FEMALE:35": 0.48049440174007824, + "MALE:45": 0.538862320613383, + "FEMALE:45": 0.5147173547574002, + "MALE:55": 0.5221849630738421, + "FEMALE:55": 0.5134695346101585, + "MALE:65": 0.467178840785845, + "FEMALE:65": 0.45048573414651666, + "MALE:75": 0.3964857141249057, + "FEMALE:75": 0.3738283466649111 + } + }, + "betting_and_gaming": { + "regular": { + "MALE:18": 0.2972031707660167, + "FEMALE:18": 0.20921784212120279, + "MALE:25": 0.29912440023683773, + "FEMALE:25": 0.21961035136964746, + "MALE:35": 0.2633228881689372, + "FEMALE:35": 0.20595380653124054, + "MALE:45": 0.214559430475166, + "FEMALE:45": 0.1800648681019471, + "MALE:55": 0.15744997309136124, + "FEMALE:55": 0.13454535674594514, + "MALE:65": 0.132413090654694, + "FEMALE:65": 0.1045156995893065, + "MALE:75": 0.08467217950247256, + "FEMALE:75": 0.0739432989323785 + }, + "occasional": { + "MALE:18": 0.3992652608336028, + "FEMALE:18": 0.3766771154233753, + "MALE:25": 0.4196588675235299, + "FEMALE:25": 0.35997055362302516, + "MALE:35": 0.354353091604664, + "FEMALE:35": 0.32057267555738694, + "MALE:45": 0.3030401328743662, + "FEMALE:45": 0.267566586574268, + "MALE:55": 0.22791575892395002, + "FEMALE:55": 0.21630770804825572, + "MALE:65": 0.1887409299765713, + "FEMALE:65": 0.16723246407149936, + "MALE:75": 0.13034111169173102, + "FEMALE:75": 0.1179504580458265 + } + } + } + }, + "settings": { + "theta": { + "national_lottery": 0.9, + "betting_and_gaming": 0.08 + }, + "occasional_stake_share": 0.1, + "strata": { + "adults_cap": 3, + "youngest_adult_bounds": [ + 35, + 55 + ] + }, + "propensity": { + "max_leaf_nodes": 15, + "min_samples_leaf": 40, + "l2_regularization": 1.0, + "validation_fraction": 0.1 + }, + "n_estimators": 100, + "seed": 0, + "salt": "lcfs_gambling_participation" + }, + "keys": { + "national_lottery": { + "regular_target": 0.5324260756016976, + "annual_target": 0.6269044905388952, + "before": 0.10681009830639804, + "after_regular": 0.5324260762746968, + "after_annual": 0.6269044679096775, + "stake_shares": { + "seen": 0.19743226154704896, + "added_regular": 0.7867264089560965, + "added_occasional": 0.01584132949685446 + }, + "amount_scale": 1.8186560478777856, + "added_without_stake": 0, + "propensity": { + "donor_rate": 0.11424026447367312, + "donor_mean_probability": 0.11412908648579359, + "iterations": 28, + "positive_support": "30+" + }, + "stake_training_rows": 610, + "strata": { + "adults_1:youngest_18_to_34": { + "regular_target": 0.28592662966329463, + "annual_target": 0.38864017723404326, + "before": 0.057591625152198164, + "after_regular": 0.2859266266810872, + "after_annual": 0.38864017823667596 + }, + "adults_1:youngest_35_to_54": { + "regular_target": 0.41360518920848105, + "annual_target": 0.5125335330270709, + "before": 0.059841563527926404, + "after_regular": 0.4136051968844743, + "after_annual": 0.5125335370564583 + }, + "adults_1:youngest_55_plus": { + "regular_target": 0.3732687647391913, + "annual_target": 0.44750813809116147, + "before": 0.08805047059510678, + "after_regular": 0.3732687647074158, + "after_annual": 0.44750813853478705 + }, + "adults_2:youngest_18_to_34": { + "regular_target": 0.5271933122029748, + "annual_target": 0.6506560199168051, + "before": 0.10109129487801494, + "after_regular": 0.5271933110582522, + "after_annual": 0.6506560189802276 + }, + "adults_2:youngest_35_to_54": { + "regular_target": 0.6419237903643299, + "annual_target": 0.7453190679162713, + "before": 0.1033007295903695, + "after_regular": 0.6419237901016351, + "after_annual": 0.7453190675634653 + }, + "adults_2:youngest_55_plus": { + "regular_target": 0.6011815088571403, + "annual_target": 0.6849545468691948, + "before": 0.15129631226058027, + "after_regular": 0.6011815095850048, + "after_annual": 0.6849545455789267 + }, + "adults_3_plus:youngest_18_to_34": { + "regular_target": 0.7429984158710821, + "annual_target": 0.8360325324613296, + "before": 0.1348125801954003, + "after_regular": 0.7429984158560335, + "after_annual": 0.8360325307446991 + }, + "adults_3_plus:youngest_35_to_54": { + "regular_target": 0.7704892022889025, + "annual_target": 0.8522056192747512, + "before": 0.19205861969059654, + "after_regular": 0.770489201990282, + "after_annual": 0.8522056074166029 + }, + "adults_3_plus:youngest_55_plus": { + "withheld": true + } + } + }, + "betting_and_gaming": { + "regular_target": 0.20552935083797402, + "annual_target": 0.2980580814998756, + "before": 0.019563867703070097, + "after_regular": 0.20552934899037914, + "after_annual": 0.2980580806218185, + "stake_shares": { + "seen": 0.09106525670336994, + "added_regular": 0.8656260893001735, + "added_occasional": 0.04330865399645676 + }, + "amount_scale": 0.6301622342596962, + "added_without_stake": 0, + "propensity": { + "donor_rate": 0.03583843997552801, + "donor_mean_probability": 0.03687052032777128, + "iterations": 22, + "positive_support": "30+" + }, + "stake_training_rows": 190, + "strata": { + "adults_1:youngest_18_to_34": { + "regular_target": 0.25208587797962595, + "annual_target": 0.38506779821860126, + "before": 0.010528565245079056, + "after_regular": 0.2520858693588115, + "after_annual": 0.38506779965921367 + }, + "adults_1:youngest_35_to_54": { + "regular_target": 0.21174480683860378, + "annual_target": 0.3087597138779508, + "before": 0.013030476668822448, + "after_regular": 0.21174480039616342, + "after_annual": 0.3087597140127525 + }, + "adults_1:youngest_55_plus": { + "regular_target": 0.11059910603878026, + "annual_target": 0.17000219696002414, + "before": 0.018267834642623083, + "after_regular": 0.11059910488053787, + "after_annual": 0.17000219653548335 + }, + "adults_2:youngest_18_to_34": { + "regular_target": 0.29418022662331883, + "annual_target": 0.4186105655768753, + "before": 0.017100283171992327, + "after_regular": 0.2941802286834047, + "after_annual": 0.4186105644076403 + }, + "adults_2:youngest_35_to_54": { + "regular_target": 0.24518118038239656, + "annual_target": 0.34282505559323806, + "before": 0.01906454096131864, + "after_regular": 0.24518118031338504, + "after_annual": 0.3428250547184021 + }, + "adults_2:youngest_55_plus": { + "regular_target": 0.13423279348952227, + "annual_target": 0.19969384466817494, + "before": 0.027364128485159817, + "after_regular": 0.13423279413063716, + "after_annual": 0.19969384472125049 + }, + "adults_3_plus:youngest_18_to_34": { + "regular_target": 0.30457970213928226, + "annual_target": 0.43722659834536576, + "before": 0.022180511927451088, + "after_regular": 0.30457970176064114, + "after_annual": 0.4372265981204438 + }, + "adults_3_plus:youngest_35_to_54": { + "regular_target": 0.25603866000115, + "annual_target": 0.35711030614167355, + "before": 0.02210001037342241, + "after_regular": 0.2560386626291682, + "after_annual": 0.3571103111729529 + }, + "adults_3_plus:youngest_55_plus": { + "withheld": true + } + } + } + } + }, + "fit_weight_records": [ + "uk_lcfs_2024_25_consumption:national_lottery_participation", + "uk_lcfs_2024_25_consumption:national_lottery_participation_stake", + "uk_lcfs_2024_25_consumption:betting_and_gaming_participation", + "uk_lcfs_2024_25_consumption:betting_and_gaming_participation_stake" + ], + "keys": { + "national_lottery": { + "column": "national_lottery_ticket_spending", + "before": { + "households_carrying": 0.10681009830639804, + "frame_total": 7765724999.999998, + "by_decile": { + "1": { + "households_carrying": 0.07226262627677904, + "share_of_base": 0.044682247219209895 + }, + "2": { + "households_carrying": 0.08747681597488957, + "share_of_base": 0.05902438992303077 + }, + "3": { + "households_carrying": 0.09489579248652377, + "share_of_base": 0.08703264619945393 + }, + "4": { + "households_carrying": 0.10448642664276057, + "share_of_base": 0.06439388367585552 + }, + "5": { + "households_carrying": 0.1139445280213663, + "share_of_base": 0.08087413963238688 + }, + "6": { + "households_carrying": 0.10805213725930247, + "share_of_base": 0.07690572119601158 + }, + "7": { + "households_carrying": 0.12208033109796561, + "share_of_base": 0.11456085774679402 + }, + "8": { + "households_carrying": 0.12778123246300868, + "share_of_base": 0.0987172419222419 + }, + "9": { + "households_carrying": 0.12645230875305283, + "share_of_base": 0.1580036719836065 + }, + "10": { + "households_carrying": 0.1106632545566349, + "share_of_base": 0.21580520050140906 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.1039813283529216, + "EAST_OF_ENGLAND": 0.1301274114977801, + "LONDON": 0.07998764262863826, + "NORTHERN_IRELAND": 0.14623088641643117, + "NORTH_EAST": 0.11885431267325838, + "NORTH_WEST": 0.11022234558934367, + "SCOTLAND": 0.10773666351071431, + "SOUTH_EAST": 0.10306279635335609, + "SOUTH_WEST": 0.1152709481770239, + "WALES": 0.10549560309911821, + "WEST_MIDLANDS": 0.10115873470540374, + "YORKSHIRE": 0.1040505168795844 + } + }, + "after": { + "households_carrying": 0.6269044679096775, + "frame_total": 7765725000.0, + "by_decile": { + "1": { + "households_carrying": 0.5161254588364416, + "share_of_base": 0.06244806332957172 + }, + "2": { + "households_carrying": 0.5643778430778591, + "share_of_base": 0.07630622471379954 + }, + "3": { + "households_carrying": 0.5835371009255103, + "share_of_base": 0.07524134504364532 + }, + "4": { + "households_carrying": 0.6069846757218581, + "share_of_base": 0.0831736571650849 + }, + "5": { + "households_carrying": 0.6108532941659445, + "share_of_base": 0.0870185563945921 + }, + "6": { + "households_carrying": 0.6351750909282434, + "share_of_base": 0.09236602804604623 + }, + "7": { + "households_carrying": 0.6766549128635164, + "share_of_base": 0.10785891369346508 + }, + "8": { + "households_carrying": 0.673148592669358, + "share_of_base": 0.11279989972950485 + }, + "9": { + "households_carrying": 0.6990289208548108, + "share_of_base": 0.13637572309425827 + }, + "10": { + "households_carrying": 0.7031367260144917, + "share_of_base": 0.16641158879003198 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.6213601761174543, + "EAST_OF_ENGLAND": 0.6726878001083357, + "LONDON": 0.5878487068424929, + "NORTHERN_IRELAND": 0.6826091796468179, + "NORTH_EAST": 0.6296590024039851, + "NORTH_WEST": 0.609981995361519, + "SCOTLAND": 0.6120130302975263, + "SOUTH_EAST": 0.626273298888999, + "SOUTH_WEST": 0.6571555086689279, + "WALES": 0.6278347397161229, + "WEST_MIDLANDS": 0.6142265410332949, + "YORKSHIRE": 0.6420383404118143 + } + } + }, + "betting_and_gaming": { + "column": "remote_gaming_net_losses", + "before": { + "households_carrying": 0.019563867703070097, + "frame_total": 5535900000.0, + "by_decile": { + "1": { + "households_carrying": 0.018866974509507275, + "share_of_base": 0.1127928670064495 + }, + "2": { + "households_carrying": 0.01861180084112823, + "share_of_base": 0.059036164942125546 + }, + "3": { + "households_carrying": 0.014605843365736474, + "share_of_base": 0.03982452542773016 + }, + "4": { + "households_carrying": 0.015568042467578924, + "share_of_base": 0.033708276673907744 + }, + "5": { + "households_carrying": 0.017549141649566127, + "share_of_base": 0.10978133177920946 + }, + "6": { + "households_carrying": 0.0188946307671968, + "share_of_base": 0.1545342062917306 + }, + "7": { + "households_carrying": 0.02302095259056779, + "share_of_base": 0.057089271009848 + }, + "8": { + "households_carrying": 0.023520834848773504, + "share_of_base": 0.0674551900822328 + }, + "9": { + "households_carrying": 0.02381008310095185, + "share_of_base": 0.1769739710512846 + }, + "10": { + "households_carrying": 0.021190790382678838, + "share_of_base": 0.1888041957354816 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.018063767175721494, + "EAST_OF_ENGLAND": 0.023673558242840915, + "LONDON": 0.007383372283152696, + "NORTHERN_IRELAND": 0.022073077190275812, + "NORTH_EAST": 0.026461144181907773, + "NORTH_WEST": 0.01761845504711714, + "SCOTLAND": 0.020277909387009057, + "SOUTH_EAST": 0.021636288068356723, + "SOUTH_WEST": 0.02345944250919221, + "WALES": 0.023662650176389664, + "WEST_MIDLANDS": 0.02114510588446124, + "YORKSHIRE": 0.020991868137865428 + } + }, + "after": { + "households_carrying": 0.2980580806218185, + "frame_total": 5535900000.000002, + "by_decile": { + "1": { + "households_carrying": 0.24451441417658698, + "share_of_base": 0.06334897514893209 + }, + "2": { + "households_carrying": 0.2501823228864361, + "share_of_base": 0.048661400632892024 + }, + "3": { + "households_carrying": 0.25273631253329015, + "share_of_base": 0.058007287063154694 + }, + "4": { + "households_carrying": 0.26562660715036523, + "share_of_base": 0.055620740109431466 + }, + "5": { + "households_carrying": 0.28690159760324185, + "share_of_base": 0.07222024385383034 + }, + "6": { + "households_carrying": 0.31108734804887234, + "share_of_base": 0.09749400769512762 + }, + "7": { + "households_carrying": 0.31554068432119886, + "share_of_base": 0.07940461757124212 + }, + "8": { + "households_carrying": 0.33035297505066114, + "share_of_base": 0.11574489043929266 + }, + "9": { + "households_carrying": 0.361294054323848, + "share_of_base": 0.1484442379703036 + }, + "10": { + "households_carrying": 0.3623258876617982, + "share_of_base": 0.26105359951579327 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.31201271486366494, + "EAST_OF_ENGLAND": 0.3443950551891897, + "LONDON": 0.26535491975743736, + "NORTHERN_IRELAND": 0.32391069817805057, + "NORTH_EAST": 0.30138095266604403, + "NORTH_WEST": 0.25116037318005036, + "SCOTLAND": 0.2695318802358105, + "SOUTH_EAST": 0.31977671815449576, + "SOUTH_WEST": 0.321012543247456, + "WALES": 0.3046404878363779, + "WEST_MIDLANDS": 0.28590499891469245, + "YORKSHIRE": 0.3172563397347798 + } + } + } + }, + "gsgb_regions": { + "E92000001": { + "name": "England", + "any_gambling:past_12_months": 0.5867387789293214, + "excluding_lottery_draw_only:past_12_months": 0.4000683740648598, + "any_gambling:past_4_weeks": 0.4693162052419202, + "excluding_lottery_draw_only:past_4_weeks": 0.26748991697593166 + }, + "E12000004": { + "name": "East Midlands", + "any_gambling:past_12_months": 0.6061477422830256, + "excluding_lottery_draw_only:past_12_months": 0.4181531845429491, + "any_gambling:past_4_weeks": 0.5114671494031701, + "excluding_lottery_draw_only:past_4_weeks": 0.29459970822997245 + }, + "E12000006": { + "name": "East of England", + "any_gambling:past_12_months": 0.623524483523034, + "excluding_lottery_draw_only:past_12_months": 0.4272136456648121, + "any_gambling:past_4_weeks": 0.4915049439267949, + "excluding_lottery_draw_only:past_4_weeks": 0.28099023252516747 + }, + "E12000007": { + "name": "London", + "any_gambling:past_12_months": 0.48452248047984187, + "excluding_lottery_draw_only:past_12_months": 0.33885890449059053, + "any_gambling:past_4_weeks": 0.3533872707862041, + "excluding_lottery_draw_only:past_4_weeks": 0.21154405889892378 + }, + "E12000001": { + "name": "North East", + "any_gambling:past_12_months": 0.6404265941303118, + "excluding_lottery_draw_only:past_12_months": 0.42907883653834356, + "any_gambling:past_4_weeks": 0.5235280881269218, + "excluding_lottery_draw_only:past_4_weeks": 0.31175103979417373 + }, + "E12000002": { + "name": "North West", + "any_gambling:past_12_months": 0.6223941248104442, + "excluding_lottery_draw_only:past_12_months": 0.43367067476931764, + "any_gambling:past_4_weeks": 0.5121054112612049, + "excluding_lottery_draw_only:past_4_weeks": 0.29574417885962373 + }, + "E12000008": { + "name": "South East", + "any_gambling:past_12_months": 0.581316854160285, + "excluding_lottery_draw_only:past_12_months": 0.3985725437204206, + "any_gambling:past_4_weeks": 0.45984715055414205, + "excluding_lottery_draw_only:past_4_weeks": 0.2578743493206166 + }, + "E12000009": { + "name": "South West", + "any_gambling:past_12_months": 0.5661704946197468, + "excluding_lottery_draw_only:past_12_months": 0.3654853658656612, + "any_gambling:past_4_weeks": 0.4429881607348466, + "excluding_lottery_draw_only:past_4_weeks": 0.2325991225054801 + }, + "E12000005": { + "name": "West Midlands", + "any_gambling:past_12_months": 0.6201158589320629, + "excluding_lottery_draw_only:past_12_months": 0.42051887072281596, + "any_gambling:past_4_weeks": 0.5171816991281729, + "excluding_lottery_draw_only:past_4_weeks": 0.2962127473009485 + }, + "E12000003": { + "name": "Yorkshire and The Humber", + "any_gambling:past_12_months": 0.6102265442921296, + "excluding_lottery_draw_only:past_12_months": 0.4076672557175066, + "any_gambling:past_4_weeks": 0.49877697705575164, + "excluding_lottery_draw_only:past_4_weeks": 0.27939749086164417 + }, + "S92000003": { + "name": "Scotland", + "any_gambling:past_12_months": 0.6033311476257376, + "excluding_lottery_draw_only:past_12_months": 0.40842055545913575, + "any_gambling:past_4_weeks": 0.4983093431168061, + "excluding_lottery_draw_only:past_4_weeks": 0.28768100171699995 + }, + "W92000004": { + "name": "Wales", + "any_gambling:past_12_months": 0.6316123722366833, + "excluding_lottery_draw_only:past_12_months": 0.42984238897624044, + "any_gambling:past_4_weeks": 0.5199527370340137, + "excluding_lottery_draw_only:past_4_weeks": 0.28862742665735963 + } + }, + "seconds": 196.9 +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/stage_run_gsgb_variants.json b/docs/evidence/uk-excise-quantities-1359/outputs/stage_run_gsgb_variants.json new file mode 100644 index 0000000000..db290fba11 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/stage_run_gsgb_variants.json @@ -0,0 +1,680 @@ +{ + "tree": "populace-1359", + "spine": "spine-b145-treat.h5", + "households": 78440, + "gates": { + "uk_stage_lcfs_consumption_support": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_energy_rake": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_bus_pricing": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_road_fuel_incidence": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_road_fuel_level": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_recomposed_totals": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_excise_quantities": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_gambling_participation": { + "passed": true, + "failures": [] + }, + "uk_stage_lcfs_consumption_basis": { + "passed": true, + "failures": [] + } + }, + "variants": { + "net_recreation": { + "national_lottery": { + "households_carrying": 0.6269045524447385, + "by_decile": { + "1": { + "households_carrying": 0.5153392335572259, + "share_of_key": 0.0633574328954208 + }, + "2": { + "households_carrying": 0.5814600943222448, + "share_of_key": 0.0790355317100511 + }, + "3": { + "households_carrying": 0.592387723886179, + "share_of_key": 0.07974768676244195 + }, + "4": { + "households_carrying": 0.6044447398865179, + "share_of_key": 0.08624232314683898 + }, + "5": { + "households_carrying": 0.6195133385722663, + "share_of_key": 0.08986538032633642 + }, + "6": { + "households_carrying": 0.641260046292137, + "share_of_key": 0.09218683007183262 + }, + "7": { + "households_carrying": 0.6789088563201754, + "share_of_key": 0.11135966258994807 + }, + "8": { + "households_carrying": 0.6684980502977581, + "share_of_key": 0.11109006166052855 + }, + "9": { + "households_carrying": 0.6942343525403325, + "share_of_key": 0.13204458247518944 + }, + "10": { + "households_carrying": 0.6729830471582723, + "share_of_key": 0.15507050836141212 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.6363406218394103, + "EAST_OF_ENGLAND": 0.674224585542745, + "LONDON": 0.5531646889797116, + "NORTHERN_IRELAND": 0.7357038596551144, + "NORTH_EAST": 0.6672721133605717, + "NORTH_WEST": 0.6093049038401619, + "SCOTLAND": 0.6037415610092419, + "SOUTH_EAST": 0.6440089184022963, + "SOUTH_WEST": 0.6399170787157715, + "WALES": 0.6304734908760522, + "WEST_MIDLANDS": 0.6041551518924129, + "YORKSHIRE": 0.6526518756096135 + }, + "amount_scale": 1.8552203555458617, + "stake_shares": { + "seen": 0.19730131400256884, + "added_regular": 0.7862046024952156, + "added_occasional": 0.016494083502215505 + }, + "propensity": { + "donor_rate": 0.11424026447367312, + "donor_mean_probability": 0.11323541207513795, + "iterations": 61, + "positive_support": "30+" + } + }, + "betting_and_gaming": { + "households_carrying": 0.29805808231517317, + "by_decile": { + "1": { + "households_carrying": 0.26813800512788927, + "share_of_key": 0.07291645170225312 + }, + "2": { + "households_carrying": 0.26284271862249264, + "share_of_key": 0.0508503576568551 + }, + "3": { + "households_carrying": 0.2788549161136103, + "share_of_key": 0.06823293851270296 + }, + "4": { + "households_carrying": 0.27518505016008804, + "share_of_key": 0.05111812709616021 + }, + "5": { + "households_carrying": 0.2713435114644349, + "share_of_key": 0.07633917150218551 + }, + "6": { + "households_carrying": 0.31366916628759267, + "share_of_key": 0.09190810626946946 + }, + "7": { + "households_carrying": 0.29556876885445327, + "share_of_key": 0.07316142750479689 + }, + "8": { + "households_carrying": 0.31359988709018616, + "share_of_key": 0.11036081604267055 + }, + "9": { + "households_carrying": 0.3531546396925872, + "share_of_key": 0.1516464085917182 + }, + "10": { + "households_carrying": 0.34820838229224854, + "share_of_key": 0.253466195121188 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.32494833450397226, + "EAST_OF_ENGLAND": 0.3227486113506013, + "LONDON": 0.28858409737151774, + "NORTHERN_IRELAND": 0.32184323749121496, + "NORTH_EAST": 0.3046583871530665, + "NORTH_WEST": 0.26988843173610977, + "SCOTLAND": 0.2645583407653047, + "SOUTH_EAST": 0.30523891769848327, + "SOUTH_WEST": 0.3072119013826081, + "WALES": 0.31727365031290106, + "WEST_MIDLANDS": 0.28676191150080876, + "YORKSHIRE": 0.3035622523193349 + }, + "amount_scale": 0.6407891238414444, + "stake_shares": { + "seen": 0.09108407005191262, + "added_regular": 0.8658049304716801, + "added_occasional": 0.043110999476407376 + }, + "propensity": { + "donor_rate": 0.03583843997552801, + "donor_mean_probability": 0.03738392285090387, + "iterations": 14, + "positive_support": "30+" + } + } + }, + "gross_recreation": { + "national_lottery": { + "households_carrying": 0.6269044679096775, + "by_decile": { + "1": { + "households_carrying": 0.5161254588364416, + "share_of_key": 0.06244806332957172 + }, + "2": { + "households_carrying": 0.5643778430778591, + "share_of_key": 0.07630622471379955 + }, + "3": { + "households_carrying": 0.5835371009255103, + "share_of_key": 0.0752413450436453 + }, + "4": { + "households_carrying": 0.6069846757218581, + "share_of_key": 0.0831736571650849 + }, + "5": { + "households_carrying": 0.6108532941659445, + "share_of_key": 0.08701855639459209 + }, + "6": { + "households_carrying": 0.6351750909282434, + "share_of_key": 0.09236602804604621 + }, + "7": { + "households_carrying": 0.6766549128635164, + "share_of_key": 0.10785891369346506 + }, + "8": { + "households_carrying": 0.673148592669358, + "share_of_key": 0.11279989972950484 + }, + "9": { + "households_carrying": 0.6990289208548108, + "share_of_key": 0.13637572309425827 + }, + "10": { + "households_carrying": 0.7031367260144917, + "share_of_key": 0.16641158879003198 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.6213601761174543, + "EAST_OF_ENGLAND": 0.6726878001083357, + "LONDON": 0.5878487068424929, + "NORTHERN_IRELAND": 0.6826091796468179, + "NORTH_EAST": 0.6296590024039851, + "NORTH_WEST": 0.609981995361519, + "SCOTLAND": 0.6120130302975263, + "SOUTH_EAST": 0.626273298888999, + "SOUTH_WEST": 0.6571555086689279, + "WALES": 0.6278347397161229, + "WEST_MIDLANDS": 0.6142265410332949, + "YORKSHIRE": 0.6420383404118143 + }, + "amount_scale": 1.8186560478777856, + "stake_shares": { + "seen": 0.19743226154704896, + "added_regular": 0.7867264089560965, + "added_occasional": 0.01584132949685446 + }, + "propensity": { + "donor_rate": 0.11424026447367312, + "donor_mean_probability": 0.11412908648579359, + "iterations": 28, + "positive_support": "30+" + } + }, + "betting_and_gaming": { + "households_carrying": 0.2980580806218185, + "by_decile": { + "1": { + "households_carrying": 0.24451441417658698, + "share_of_key": 0.0633489751489321 + }, + "2": { + "households_carrying": 0.2501823228864361, + "share_of_key": 0.04866140063289203 + }, + "3": { + "households_carrying": 0.25273631253329015, + "share_of_key": 0.0580072870631547 + }, + "4": { + "households_carrying": 0.26562660715036523, + "share_of_key": 0.05562074010943148 + }, + "5": { + "households_carrying": 0.28690159760324185, + "share_of_key": 0.07222024385383036 + }, + "6": { + "households_carrying": 0.31108734804887234, + "share_of_key": 0.09749400769512763 + }, + "7": { + "households_carrying": 0.31554068432119886, + "share_of_key": 0.07940461757124212 + }, + "8": { + "households_carrying": 0.33035297505066114, + "share_of_key": 0.11574489043929269 + }, + "9": { + "households_carrying": 0.361294054323848, + "share_of_key": 0.14844423797030365 + }, + "10": { + "households_carrying": 0.3623258876617982, + "share_of_key": 0.2610535995157934 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.31201271486366494, + "EAST_OF_ENGLAND": 0.3443950551891897, + "LONDON": 0.26535491975743736, + "NORTHERN_IRELAND": 0.32391069817805057, + "NORTH_EAST": 0.30138095266604403, + "NORTH_WEST": 0.25116037318005036, + "SCOTLAND": 0.2695318802358105, + "SOUTH_EAST": 0.31977671815449576, + "SOUTH_WEST": 0.321012543247456, + "WALES": 0.3046404878363779, + "WEST_MIDLANDS": 0.28590499891469245, + "YORKSHIRE": 0.3172563397347798 + }, + "amount_scale": 0.6301622342596962, + "stake_shares": { + "seen": 0.09106525670336994, + "added_regular": 0.8656260893001735, + "added_occasional": 0.04330865399645676 + }, + "propensity": { + "donor_rate": 0.03583843997552801, + "donor_mean_probability": 0.03687052032777128, + "iterations": 22, + "positive_support": "30+" + } + } + }, + "chance_only": { + "national_lottery": { + "households_carrying": 0.6269045012204031, + "by_decile": { + "1": { + "households_carrying": 0.5703600607820869, + "share_of_key": 0.06942770016563302 + }, + "2": { + "households_carrying": 0.5957167091990443, + "share_of_key": 0.07719576138455102 + }, + "3": { + "households_carrying": 0.5996758655777242, + "share_of_key": 0.07764671738756623 + }, + "4": { + "households_carrying": 0.599611935801341, + "share_of_key": 0.08370064394521956 + }, + "5": { + "households_carrying": 0.6184526589182979, + "share_of_key": 0.08861161374652361 + }, + "6": { + "households_carrying": 0.6247642696512397, + "share_of_key": 0.09114207203619808 + }, + "7": { + "households_carrying": 0.6583405755899744, + "share_of_key": 0.10879459733204684 + }, + "8": { + "households_carrying": 0.6480665608825595, + "share_of_key": 0.11033187184387419 + }, + "9": { + "households_carrying": 0.6750998369326239, + "share_of_key": 0.13116975937134245 + }, + "10": { + "households_carrying": 0.678944936903262, + "share_of_key": 0.16197926278704505 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.6201305542411287, + "EAST_OF_ENGLAND": 0.6604486784911957, + "LONDON": 0.6305936450392837, + "NORTHERN_IRELAND": 0.665613840089183, + "NORTH_EAST": 0.6229393240037503, + "NORTH_WEST": 0.6142603096537772, + "SCOTLAND": 0.6098736585025434, + "SOUTH_EAST": 0.6120195113890433, + "SOUTH_WEST": 0.6441206726808821, + "WALES": 0.6147473295337469, + "WEST_MIDLANDS": 0.6255348846330344, + "YORKSHIRE": 0.629438923004435 + }, + "amount_scale": 1.8424069307693678, + "stake_shares": { + "seen": 0.19726809543507393, + "added_regular": 0.7860722388583511, + "added_occasional": 0.016659665706575007 + }, + "propensity": { + "donor_rate": 0.11424026447367312, + "ordering": "published chance alone" + } + }, + "betting_and_gaming": { + "households_carrying": 0.29805808016581226, + "by_decile": { + "1": { + "households_carrying": 0.29227951316757755, + "share_of_key": 0.08639535204592484 + }, + "2": { + "households_carrying": 0.27829169966199957, + "share_of_key": 0.06528761250504479 + }, + "3": { + "households_carrying": 0.2972788746341961, + "share_of_key": 0.0714815514826766 + }, + "4": { + "households_carrying": 0.2839818102315987, + "share_of_key": 0.05741137106557876 + }, + "5": { + "households_carrying": 0.2692853184251417, + "share_of_key": 0.07841302128710442 + }, + "6": { + "households_carrying": 0.3115352277897324, + "share_of_key": 0.08850993692207233 + }, + "7": { + "households_carrying": 0.31232304221433493, + "share_of_key": 0.07540704291008148 + }, + "8": { + "households_carrying": 0.31422334777422495, + "share_of_key": 0.10409238996313906 + }, + "9": { + "households_carrying": 0.3235897891181361, + "share_of_key": 0.14553990405344103 + }, + "10": { + "households_carrying": 0.2977892008705833, + "share_of_key": 0.22746181776493662 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.3077338118388485, + "EAST_OF_ENGLAND": 0.3037922004476685, + "LONDON": 0.3085355850566924, + "NORTHERN_IRELAND": 0.29906294736921607, + "NORTH_EAST": 0.2719403243540376, + "NORTH_WEST": 0.29832487118891116, + "SCOTLAND": 0.2840154462734354, + "SOUTH_EAST": 0.2934050551096187, + "SOUTH_WEST": 0.3025317957885371, + "WALES": 0.2814836446826928, + "WEST_MIDLANDS": 0.3146097374721191, + "YORKSHIRE": 0.28959044553770896 + }, + "amount_scale": 0.6812069607405206, + "stake_shares": { + "seen": 0.09078818062588262, + "added_regular": 0.8629923359180861, + "added_occasional": 0.0462194834560312 + }, + "propensity": { + "donor_rate": 0.03583843997552801, + "ordering": "published chance alone" + } + } + } + }, + "before": { + "national_lottery": { + "households_carrying": 0.10681009830639804, + "by_decile": { + "1": { + "households_carrying": 0.07226262627677904, + "share_of_key": 0.04468224721920989 + }, + "2": { + "households_carrying": 0.08747681597488957, + "share_of_key": 0.05902438992303076 + }, + "3": { + "households_carrying": 0.09489579248652377, + "share_of_key": 0.08703264619945392 + }, + "4": { + "households_carrying": 0.10448642664276057, + "share_of_key": 0.06439388367585552 + }, + "5": { + "households_carrying": 0.1139445280213663, + "share_of_key": 0.08087413963238686 + }, + "6": { + "households_carrying": 0.10805213725930247, + "share_of_key": 0.07690572119601158 + }, + "7": { + "households_carrying": 0.12208033109796561, + "share_of_key": 0.11456085774679402 + }, + "8": { + "households_carrying": 0.12778123246300868, + "share_of_key": 0.09871724192224186 + }, + "9": { + "households_carrying": 0.12645230875305283, + "share_of_key": 0.1580036719836065 + }, + "10": { + "households_carrying": 0.1106632545566349, + "share_of_key": 0.21580520050140903 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.1039813283529216, + "EAST_OF_ENGLAND": 0.1301274114977801, + "LONDON": 0.07998764262863826, + "NORTHERN_IRELAND": 0.14623088641643117, + "NORTH_EAST": 0.11885431267325838, + "NORTH_WEST": 0.11022234558934367, + "SCOTLAND": 0.10773666351071431, + "SOUTH_EAST": 0.10306279635335609, + "SOUTH_WEST": 0.1152709481770239, + "WALES": 0.10549560309911821, + "WEST_MIDLANDS": 0.10115873470540374, + "YORKSHIRE": 0.1040505168795844 + } + }, + "betting_and_gaming": { + "households_carrying": 0.019563867703070097, + "by_decile": { + "1": { + "households_carrying": 0.018866974509507275, + "share_of_key": 0.1127928670064495 + }, + "2": { + "households_carrying": 0.01861180084112823, + "share_of_key": 0.05903616494212554 + }, + "3": { + "households_carrying": 0.014605843365736474, + "share_of_key": 0.03982452542773016 + }, + "4": { + "households_carrying": 0.015568042467578924, + "share_of_key": 0.033708276673907744 + }, + "5": { + "households_carrying": 0.017549141649566127, + "share_of_key": 0.10978133177920947 + }, + "6": { + "households_carrying": 0.0188946307671968, + "share_of_key": 0.1545342062917306 + }, + "7": { + "households_carrying": 0.02302095259056779, + "share_of_key": 0.057089271009847994 + }, + "8": { + "households_carrying": 0.023520834848773504, + "share_of_key": 0.0674551900822328 + }, + "9": { + "households_carrying": 0.02381008310095185, + "share_of_key": 0.17697397105128462 + }, + "10": { + "households_carrying": 0.021190790382678838, + "share_of_key": 0.18880419573548166 + } + }, + "by_region": { + "EAST_MIDLANDS": 0.018063767175721494, + "EAST_OF_ENGLAND": 0.023673558242840915, + "LONDON": 0.007383372283152696, + "NORTHERN_IRELAND": 0.022073077190275812, + "NORTH_EAST": 0.026461144181907773, + "NORTH_WEST": 0.01761845504711714, + "SCOTLAND": 0.020277909387009057, + "SOUTH_EAST": 0.021636288068356723, + "SOUTH_WEST": 0.02345944250919221, + "WALES": 0.023662650176389664, + "WEST_MIDLANDS": 0.02114510588446124, + "YORKSHIRE": 0.020991868137865428 + } + } + }, + "gsgb_regions": { + "E92000001": { + "name": "England", + "any_gambling:past_12_months": 0.5867387789293214, + "excluding_lottery_draw_only:past_12_months": 0.4000683740648598, + "any_gambling:past_4_weeks": 0.4693162052419202, + "excluding_lottery_draw_only:past_4_weeks": 0.26748991697593166 + }, + "E12000004": { + "name": "East Midlands", + "any_gambling:past_12_months": 0.6061477422830256, + "excluding_lottery_draw_only:past_12_months": 0.4181531845429491, + "any_gambling:past_4_weeks": 0.5114671494031701, + "excluding_lottery_draw_only:past_4_weeks": 0.29459970822997245 + }, + "E12000006": { + "name": "East of England", + "any_gambling:past_12_months": 0.623524483523034, + "excluding_lottery_draw_only:past_12_months": 0.4272136456648121, + "any_gambling:past_4_weeks": 0.4915049439267949, + "excluding_lottery_draw_only:past_4_weeks": 0.28099023252516747 + }, + "E12000007": { + "name": "London", + "any_gambling:past_12_months": 0.48452248047984187, + "excluding_lottery_draw_only:past_12_months": 0.33885890449059053, + "any_gambling:past_4_weeks": 0.3533872707862041, + "excluding_lottery_draw_only:past_4_weeks": 0.21154405889892378 + }, + "E12000001": { + "name": "North East", + "any_gambling:past_12_months": 0.6404265941303118, + "excluding_lottery_draw_only:past_12_months": 0.42907883653834356, + "any_gambling:past_4_weeks": 0.5235280881269218, + "excluding_lottery_draw_only:past_4_weeks": 0.31175103979417373 + }, + "E12000002": { + "name": "North West", + "any_gambling:past_12_months": 0.6223941248104442, + "excluding_lottery_draw_only:past_12_months": 0.43367067476931764, + "any_gambling:past_4_weeks": 0.5121054112612049, + "excluding_lottery_draw_only:past_4_weeks": 0.29574417885962373 + }, + "E12000008": { + "name": "South East", + "any_gambling:past_12_months": 0.581316854160285, + "excluding_lottery_draw_only:past_12_months": 0.3985725437204206, + "any_gambling:past_4_weeks": 0.45984715055414205, + "excluding_lottery_draw_only:past_4_weeks": 0.2578743493206166 + }, + "E12000009": { + "name": "South West", + "any_gambling:past_12_months": 0.5661704946197468, + "excluding_lottery_draw_only:past_12_months": 0.3654853658656612, + "any_gambling:past_4_weeks": 0.4429881607348466, + "excluding_lottery_draw_only:past_4_weeks": 0.2325991225054801 + }, + "E12000005": { + "name": "West Midlands", + "any_gambling:past_12_months": 0.6201158589320629, + "excluding_lottery_draw_only:past_12_months": 0.42051887072281596, + "any_gambling:past_4_weeks": 0.5171816991281729, + "excluding_lottery_draw_only:past_4_weeks": 0.2962127473009485 + }, + "E12000003": { + "name": "Yorkshire and The Humber", + "any_gambling:past_12_months": 0.6102265442921296, + "excluding_lottery_draw_only:past_12_months": 0.4076672557175066, + "any_gambling:past_4_weeks": 0.49877697705575164, + "excluding_lottery_draw_only:past_4_weeks": 0.27939749086164417 + }, + "S92000003": { + "name": "Scotland", + "any_gambling:past_12_months": 0.6033311476257376, + "excluding_lottery_draw_only:past_12_months": 0.40842055545913575, + "any_gambling:past_4_weeks": 0.4983093431168061, + "excluding_lottery_draw_only:past_4_weeks": 0.28768100171699995 + }, + "W92000004": { + "name": "Wales", + "any_gambling:past_12_months": 0.6316123722366833, + "excluding_lottery_draw_only:past_12_months": 0.42984238897624044, + "any_gambling:past_4_weeks": 0.5199527370340137, + "excluding_lottery_draw_only:past_4_weeks": 0.28862742665735963 + } + }, + "seconds": 128.7 +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/theta_calibration.json b/docs/evidence/uk-excise-quantities-1359/outputs/theta_calibration.json new file mode 100644 index 0000000000..e722bb2ef8 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/theta_calibration.json @@ -0,0 +1,44 @@ +{ + "declared_theta": { + "betting_and_gaming": 0.08, + "national_lottery": 0.9 + }, + "fitted": { + "betting_and_gaming": { + "diary_over_gsgb_four_week_rate": { + "1": 0.175, + "2": 0.175, + "3+": 0.154 + }, + "theta": 0.081, + "three_plus_over_one": { + "diary": 1.658, + "fitted": 1.892 + }, + "two_over_one": { + "diary": 1.404, + "fitted": 1.404, + "theta_0": 1.332, + "theta_1": 2.14 + } + }, + "national_lottery": { + "diary_over_gsgb_four_week_rate": { + "1": 0.215, + "2": 0.215, + "3+": 0.199 + }, + "theta": 0.897, + "three_plus_over_one": { + "diary": 1.827, + "fitted": 1.974 + }, + "two_over_one": { + "diary": 1.583, + "fitted": 1.583, + "theta_0": 1.093, + "theta_1": 1.628 + } + } + } +} diff --git a/docs/evidence/uk-excise-quantities-1359/outputs/union_theta_sensitivity.json b/docs/evidence/uk-excise-quantities-1359/outputs/union_theta_sensitivity.json new file mode 100644 index 0000000000..7c9a403a39 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/outputs/union_theta_sensitivity.json @@ -0,0 +1,731 @@ +{ + "gsgb": { + "all": { + "four_week_rate": { + "any_gambling": 0.4742, + "excluding_lottery_draw_only": 0.2702 + }, + "activities_among_four_week_players": { + "gsgb_b13": { + "one": 0.454, + "two_to_three": 0.385, + "four_to_six": 0.116, + "seven_or_more": 0.044, + "mean": 2.36 + }, + "independent_among_players": { + "one": 0.261, + "two_to_three": 0.598, + "four_to_six": 0.14, + "seven_or_more": 0.001, + "mean": 2.31, + "standard_deviation": 1.1, + "share_left_with_none": 0.065 + }, + "shared_intensity": { + "one": 0.441, + "two_to_three": 0.399, + "four_to_six": 0.146, + "seven_or_more": 0.014, + "mean": 2.16, + "standard_deviation": 1.43 + } + }, + "shared_intensity_shape": { + "national_lottery": 0.458, + "betting_and_gaming": 0.233 + }, + "published_unions": { + "excluding_lottery_draw_only": { + "published": 0.2702, + "independent_within_any_gambling": 0.3388, + "shared_intensity_fitted_to_any_gambling": 0.3232 + }, + "any_lottery_draw": { + "published": 0.3649, + "population": "any_gambling", + "independent_within_population": 0.3667, + "shared_intensity": 0.3682 + }, + "scratchcards": { + "published": 0.1221, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.1375, + "shared_intensity": 0.1363 + }, + "online_instant_win_games": { + "published": 0.0786, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.0907, + "shared_intensity": 0.0892 + } + }, + "keys": { + "national_lottery": { + "independent_within_population": 0.3648, + "shared_intensity": 0.3644, + "shared_intensity_over_independent": 0.999, + "bounds": [ + 0.3103, + 0.4742 + ] + }, + "betting_and_gaming": { + "independent_within_population": 0.1919, + "shared_intensity": 0.1922, + "shared_intensity_over_independent": 1.001, + "bounds": [ + 0.0977, + 0.2702 + ] + } + } + }, + "age_18_to_24": { + "four_week_rate": { + "any_gambling": 0.3295, + "excluding_lottery_draw_only": 0.2948 + }, + "activities_among_four_week_players": { + "gsgb_b13": { + "one": 0.345, + "two_to_three": 0.357, + "four_to_six": 0.16, + "seven_or_more": 0.138, + "mean": 3.6 + }, + "independent_among_players": { + "one": 0.137, + "two_to_three": 0.516, + "four_to_six": 0.334, + "seven_or_more": 0.013, + "mean": 3.05, + "standard_deviation": 1.4, + "share_left_with_none": 0.033 + }, + "shared_intensity": { + "one": 0.369, + "two_to_three": 0.329, + "four_to_six": 0.205, + "seven_or_more": 0.096, + "mean": 2.94, + "standard_deviation": 2.33 + } + }, + "shared_intensity_shape": { + "national_lottery": 0.2, + "betting_and_gaming": 0.183 + }, + "published_unions": { + "excluding_lottery_draw_only": { + "published": 0.2948, + "independent_within_any_gambling": 0.3086, + "shared_intensity_fitted_to_any_gambling": 0.3045 + }, + "any_lottery_draw": { + "published": 0.1234, + "population": "any_gambling", + "independent_within_population": 0.1572, + "shared_intensity": 0.1486 + }, + "scratchcards": { + "published": 0.103, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.1337, + "shared_intensity": 0.1268 + }, + "online_instant_win_games": { + "published": 0.1036, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.1281, + "shared_intensity": 0.1215 + } + }, + "keys": { + "national_lottery": { + "independent_within_population": 0.2004, + "shared_intensity": 0.1847, + "shared_intensity_over_independent": 0.922, + "bounds": [ + 0.1112, + 0.2631 + ] + }, + "betting_and_gaming": { + "independent_within_population": 0.2545, + "shared_intensity": 0.2455, + "shared_intensity_over_independent": 0.965, + "bounds": [ + 0.1282, + 0.2948 + ] + } + } + }, + "age_25_to_34": { + "four_week_rate": { + "any_gambling": 0.431, + "excluding_lottery_draw_only": 0.326 + }, + "activities_among_four_week_players": { + "gsgb_b13": { + "one": 0.403, + "two_to_three": 0.35, + "four_to_six": 0.156, + "seven_or_more": 0.091, + "mean": 2.94 + }, + "independent_among_players": { + "one": 0.188, + "two_to_three": 0.565, + "four_to_six": 0.243, + "seven_or_more": 0.005, + "mean": 2.69, + "standard_deviation": 1.27, + "share_left_with_none": 0.049 + }, + "shared_intensity": { + "one": 0.393, + "two_to_three": 0.365, + "four_to_six": 0.194, + "seven_or_more": 0.049, + "mean": 2.56, + "standard_deviation": 1.87 + } + }, + "shared_intensity_shape": { + "national_lottery": 0.342, + "betting_and_gaming": 0.242 + }, + "published_unions": { + "excluding_lottery_draw_only": { + "published": 0.326, + "independent_within_any_gambling": 0.3738, + "shared_intensity_fitted_to_any_gambling": 0.3629 + }, + "any_lottery_draw": { + "published": 0.2571, + "population": "any_gambling", + "independent_within_population": 0.2723, + "shared_intensity": 0.265 + }, + "scratchcards": { + "published": 0.1489, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.1713, + "shared_intensity": 0.1661 + }, + "online_instant_win_games": { + "published": 0.1131, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.1296, + "shared_intensity": 0.1249 + } + }, + "keys": { + "national_lottery": { + "independent_within_population": 0.31, + "shared_intensity": 0.2999, + "shared_intensity_over_independent": 0.967, + "bounds": [ + 0.2211, + 0.427 + ] + }, + "betting_and_gaming": { + "independent_within_population": 0.2574, + "shared_intensity": 0.2501, + "shared_intensity_over_independent": 0.972, + "bounds": [ + 0.1351, + 0.326 + ] + } + } + }, + "age_35_to_44": { + "four_week_rate": { + "any_gambling": 0.4927, + "excluding_lottery_draw_only": 0.3341 + }, + "activities_among_four_week_players": { + "gsgb_b13": { + "one": 0.387, + "two_to_three": 0.411, + "four_to_six": 0.147, + "seven_or_more": 0.055, + "mean": 2.61 + }, + "independent_among_players": { + "one": 0.217, + "two_to_three": 0.594, + "four_to_six": 0.187, + "seven_or_more": 0.002, + "mean": 2.5, + "standard_deviation": 1.17, + "share_left_with_none": 0.05 + }, + "shared_intensity": { + "one": 0.403, + "two_to_three": 0.391, + "four_to_six": 0.179, + "seven_or_more": 0.027, + "mean": 2.37, + "standard_deviation": 1.62 + } + }, + "shared_intensity_shape": { + "national_lottery": 0.433, + "betting_and_gaming": 0.295 + }, + "published_unions": { + "excluding_lottery_draw_only": { + "published": 0.3341, + "independent_within_any_gambling": 0.3918, + "shared_intensity_fitted_to_any_gambling": 0.3706 + }, + "any_lottery_draw": { + "published": 0.3638, + "population": "any_gambling", + "independent_within_population": 0.3713, + "shared_intensity": 0.3675 + }, + "scratchcards": { + "published": 0.165, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.1855, + "shared_intensity": 0.1835 + }, + "online_instant_win_games": { + "published": 0.1107, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.1277, + "shared_intensity": 0.1252 + } + }, + "keys": { + "national_lottery": { + "independent_within_population": 0.3978, + "shared_intensity": 0.3943, + "shared_intensity_over_independent": 0.991, + "bounds": [ + 0.3256, + 0.4927 + ] + }, + "betting_and_gaming": { + "independent_within_population": 0.2338, + "shared_intensity": 0.2302, + "shared_intensity_over_independent": 0.985, + "bounds": [ + 0.1141, + 0.3341 + ] + } + } + }, + "age_45_to_54": { + "four_week_rate": { + "any_gambling": 0.5296, + "excluding_lottery_draw_only": 0.3009 + }, + "activities_among_four_week_players": { + "gsgb_b13": { + "one": 0.435, + "two_to_three": 0.394, + "four_to_six": 0.139, + "seven_or_more": 0.033, + "mean": 2.32 + }, + "independent_among_players": { + "one": 0.253, + "two_to_three": 0.613, + "four_to_six": 0.134, + "seven_or_more": 0.001, + "mean": 2.31, + "standard_deviation": 1.07, + "share_left_with_none": 0.053 + }, + "shared_intensity": { + "one": 0.422, + "two_to_three": 0.415, + "four_to_six": 0.151, + "seven_or_more": 0.011, + "mean": 2.18, + "standard_deviation": 1.4 + } + }, + "shared_intensity_shape": { + "national_lottery": 0.503, + "betting_and_gaming": 0.292 + }, + "published_unions": { + "excluding_lottery_draw_only": { + "published": 0.3009, + "independent_within_any_gambling": 0.3674, + "shared_intensity_fitted_to_any_gambling": 0.3431 + }, + "any_lottery_draw": { + "published": 0.4426, + "population": "any_gambling", + "independent_within_population": 0.4387, + "shared_intensity": 0.4406 + }, + "scratchcards": { + "published": 0.1528, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.1646, + "shared_intensity": 0.1646 + }, + "online_instant_win_games": { + "published": 0.0875, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.0995, + "shared_intensity": 0.0985 + } + }, + "keys": { + "national_lottery": { + "independent_within_population": 0.4393, + "shared_intensity": 0.4393, + "shared_intensity_over_independent": 1.0, + "bounds": [ + 0.3853, + 0.5296 + ] + }, + "betting_and_gaming": { + "independent_within_population": 0.1971, + "shared_intensity": 0.198, + "shared_intensity_over_independent": 1.005, + "bounds": [ + 0.1088, + 0.2834 + ] + } + } + }, + "age_55_to_64": { + "four_week_rate": { + "any_gambling": 0.5483, + "excluding_lottery_draw_only": 0.2414 + }, + "activities_among_four_week_players": { + "gsgb_b13": { + "one": 0.493, + "two_to_three": 0.412, + "four_to_six": 0.076, + "seven_or_more": 0.018, + "mean": 1.93 + }, + "independent_among_players": { + "one": 0.344, + "two_to_three": 0.59, + "four_to_six": 0.067, + "seven_or_more": 0.0, + "mean": 2.0, + "standard_deviation": 0.93, + "share_left_with_none": 0.073 + }, + "shared_intensity": { + "one": 0.492, + "two_to_three": 0.422, + "four_to_six": 0.083, + "seven_or_more": 0.002, + "mean": 1.85, + "standard_deviation": 1.08 + } + }, + "shared_intensity_shape": { + "national_lottery": 0.687, + "betting_and_gaming": 0.294 + }, + "published_unions": { + "excluding_lottery_draw_only": { + "published": 0.2414, + "independent_within_any_gambling": 0.2952, + "shared_intensity_fitted_to_any_gambling": 0.2845 + }, + "any_lottery_draw": { + "published": 0.481, + "population": "any_gambling", + "independent_within_population": 0.4617, + "shared_intensity": 0.4746 + }, + "scratchcards": { + "published": 0.1015, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.1129, + "shared_intensity": 0.1144 + }, + "online_instant_win_games": { + "published": 0.0605, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.0657, + "shared_intensity": 0.0659 + } + }, + "keys": { + "national_lottery": { + "independent_within_population": 0.4448, + "shared_intensity": 0.4508, + "shared_intensity_over_independent": 1.014, + "bounds": [ + 0.4093, + 0.5483 + ] + }, + "betting_and_gaming": { + "independent_within_population": 0.1458, + "shared_intensity": 0.153, + "shared_intensity_over_independent": 1.049, + "bounds": [ + 0.08, + 0.1999 + ] + } + } + }, + "age_65_to_74": { + "four_week_rate": { + "any_gambling": 0.5011, + "excluding_lottery_draw_only": 0.1922 + }, + "activities_among_four_week_players": { + "gsgb_b13": { + "one": 0.536, + "two_to_three": 0.384, + "four_to_six": 0.071, + "seven_or_more": 0.009, + "mean": 1.8 + }, + "independent_among_players": { + "one": 0.368, + "two_to_three": 0.586, + "four_to_six": 0.047, + "seven_or_more": 0.0, + "mean": 1.91, + "standard_deviation": 0.87, + "share_left_with_none": 0.083 + }, + "shared_intensity": { + "one": 0.52, + "two_to_three": 0.418, + "four_to_six": 0.061, + "seven_or_more": 0.001, + "mean": 1.75, + "standard_deviation": 0.97 + } + }, + "shared_intensity_shape": { + "national_lottery": 0.619, + "betting_and_gaming": 0.273 + }, + "published_unions": { + "excluding_lottery_draw_only": { + "published": 0.1922, + "independent_within_any_gambling": 0.2277, + "shared_intensity_fitted_to_any_gambling": 0.2211 + }, + "any_lottery_draw": { + "published": 0.4471, + "population": "any_gambling", + "independent_within_population": 0.4245, + "shared_intensity": 0.4436 + }, + "scratchcards": { + "published": 0.0786, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.0854, + "shared_intensity": 0.0871 + }, + "online_instant_win_games": { + "published": 0.0301, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.0339, + "shared_intensity": 0.0341 + } + }, + "keys": { + "national_lottery": { + "independent_within_population": 0.3878, + "shared_intensity": 0.3924, + "shared_intensity_over_independent": 1.012, + "bounds": [ + 0.3609, + 0.4609 + ] + }, + "betting_and_gaming": { + "independent_within_population": 0.1176, + "shared_intensity": 0.1281, + "shared_intensity_over_independent": 1.09, + "bounds": [ + 0.0586, + 0.1617 + ] + } + } + }, + "age_75_plus": { + "four_week_rate": { + "any_gambling": 0.4153, + "excluding_lottery_draw_only": 0.1416 + }, + "activities_among_four_week_players": { + "gsgb_b13": { + "one": 0.581, + "two_to_three": 0.35, + "four_to_six": 0.065, + "seven_or_more": 0.004, + "mean": 1.7 + }, + "independent_among_players": { + "one": 0.396, + "two_to_three": 0.568, + "four_to_six": 0.035, + "seven_or_more": 0.0, + "mean": 1.84, + "standard_deviation": 0.83, + "share_left_with_none": 0.098 + }, + "shared_intensity": { + "one": 0.559, + "two_to_three": 0.395, + "four_to_six": 0.046, + "seven_or_more": 0.0, + "mean": 1.66, + "standard_deviation": 0.9 + } + }, + "shared_intensity_shape": { + "national_lottery": 0.487, + "betting_and_gaming": 0.201 + }, + "published_unions": { + "excluding_lottery_draw_only": { + "published": 0.1416, + "independent_within_any_gambling": 0.1679, + "shared_intensity_fitted_to_any_gambling": 0.1645 + }, + "any_lottery_draw": { + "published": 0.3685, + "population": "any_gambling", + "independent_within_population": 0.3472, + "shared_intensity": 0.3678 + }, + "scratchcards": { + "published": 0.063, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.0691, + "shared_intensity": 0.0715 + }, + "online_instant_win_games": { + "published": 0.019, + "population": "excluding_lottery_draw_only", + "independent_within_population": 0.0219, + "shared_intensity": 0.022 + } + }, + "keys": { + "national_lottery": { + "independent_within_population": 0.3095, + "shared_intensity": 0.3142, + "shared_intensity_over_independent": 1.015, + "bounds": [ + 0.287, + 0.3621 + ] + }, + "betting_and_gaming": { + "independent_within_population": 0.0795, + "shared_intensity": 0.0864, + "shared_intensity_over_independent": 1.087, + "bounds": [ + 0.0373, + 0.1055 + ] + } + } + } + }, + "frame": { + "households": 78440, + "keys": { + "national_lottery": { + "declared_theta": 0.9, + "theta": { + "0": { + "four_weeks": 0.3993, + "twelve_months": 0.4822 + }, + "0.5": { + "four_weeks": 0.4818, + "twelve_months": 0.5748 + }, + "0.9": { + "four_weeks": 0.5324, + "twelve_months": 0.6269 + }, + "1": { + "four_weeks": 0.5434, + "twelve_months": 0.6377 + } + }, + "union": { + "shared_intensity": { + "four_weeks": 0.5316, + "twelve_months": 0.6258 + }, + "lower_bound": { + "four_weeks": 0.4685, + "twelve_months": 0.5542 + }, + "upper_bound": { + "four_weeks": 0.6282, + "twelve_months": 0.7307 + } + } + }, + "betting_and_gaming": { + "declared_theta": 0.08, + "theta": { + "0": { + "four_weeks": 0.1965, + "twelve_months": 0.2853 + }, + "0.08": { + "four_weeks": 0.2055, + "twelve_months": 0.2981 + }, + "0.25": { + "four_weeks": 0.2239, + "twelve_months": 0.3233 + }, + "0.5": { + "four_weeks": 0.2492, + "twelve_months": 0.3566 + }, + "1": { + "four_weeks": 0.2941, + "twelve_months": 0.4123 + } + }, + "union": { + "shared_intensity": { + "four_weeks": 0.2064, + "twelve_months": 0.2991 + }, + "lower_bound": { + "four_weeks": 0.1066, + "twelve_months": 0.155 + }, + "upper_bound": { + "four_weeks": 0.2758, + "twelve_months": 0.3974 + } + } + } + } + } +} 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..2963e5de73 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/receipts.json @@ -0,0 +1,57 @@ +{ + "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", + "stage_dev_run.head-main-rebase.json": "the branch head rebased onto main after microcosm#1383 merged, on the 200bf6d feed", + "stage_run_gsgb.json": "the branch head 348d1209b on the 272c987 feed, as declared and with top_up_gambling_participation removed", + "union_theta_sensitivity.json": "not a stage run: the 272c987 feed's GSGB rows, and the frame's adults at the branch's declared rates and thetas (round 4 moves no rate)", + "stage_run_gsgb_variants.json": "the branch head 6fb55666f on the 272c987 feed: the stage once as declared, then the top-up alone three ways (recreation with the stakes in, as at 3a20860fb; net of them, as committed; the published chance alone)" + }, + "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": "dbc3628f1c24cd4a441db18d3d06ca9857c40caf0982fe3b0dea1f097422d908", + "outputs/alcohol_channel_weights.json": "a954d7f712a17bc665cf2e4f6540fb26a8f7f34be61e4997f471e28395164dcd", + "outputs/excise_incidence.json": "3c8421da17f3380f0874a3a797a1d0188c7700ce03a260134701c97d11dd54b3", + "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-main-rebase.json": "a7a7283de8178f860a53caaf8eebce48d803c29dd24957ffcac01836a30a51ec", + "outputs/stage_dev_run.head-restack.json": "88f5c2507da769c738c167b2a51b5f59f40d23c501d2eaee89ff94daf3bc9980", + "outputs/stage_dev_run.head-split.json": "737e6bf88f1572e9162285b74da83b681dbf00fdb115c6cd299ad124d826752a", + "outputs/stage_dev_run.rebase-comparison.json": "a0029dbf44e6c3814f593d9067a7a26a004d933cfc493bde9093910e9ebf2e36", + "outputs/stage_dev_run.split-comparison.json": "357b620571609a735024e4cc329cdda07713d7bfa5da8d91e89431e62d997323", + "outputs/stage_run_gsgb.json": "e88cfef0c9784f776fdb99fe78c905b6cc83fb769d912693279279d2c2843c40", + "outputs/stage_run_gsgb_variants.json": "eac066de2e656667906c273231832f798bf0d4a1d13f00a08390ead9ab7bfc61", + "outputs/theta_calibration.json": "91ceef47db82b738160ab7bac8d4663b88c6bf9debd9662f107b57acc218a755", + "outputs/union_theta_sensitivity.json": "a76812cf951973f5ebb47154bdbfdba70f6607a1e4f1ab34425c8f7d050ae153", + "scripts/alcohol_channel_weights.py": "61ce5ede7faa5c92ff62aa9fb27b0c89eb2c4cf7ee76ccddcd26a786405f6af6", + "scripts/compare_runs.py": "b6eb778ebe250f084534fb6f986de285d4a1ccda1dd89d6a96ba0da17e9c5341", + "scripts/excise_incidence.py": "3f50eea6b5f1a288cda6524589b04e8121db48bca7618fd26cdb8116e18d9f7f", + "scripts/national_reconciliation.py": "d2d92bac43929c6b9ab11d659d0068ad526d8dc0d5197ba99f7c5d8860c0e186", + "scripts/quiet_footprint.sh": "1c42ed951f6476952310a2fd36671e752a88422f13475eabe6a5adddc4ee8561", + "scripts/repin_200bf6d.sh": "bce41a86e44531e98cb9ab939c3cfa374c810937fbbaa8695088cfadc3dbec25", + "scripts/repin_272c987.sh": "f1cb0416a72840d7a844f7fe1a17654fd18b99553a019ccad5cee855f4362950", + "scripts/run_stage_dev.sh": "44c211d1f8b38b24ffddab058a0912c651de44ac5f4e1a3f0330613d0a9ad7c3", + "scripts/sanitize_outputs.py": "47330fdd8dd1865a1823d161267480e7528dad694e1ba79ab0fd0599f74d1e66", + "scripts/stage_dev_run.py": "5a06e200e93698ccfc48a48cee293ecfe9aee213ad9e5f49735b44ad26813ef8", + "scripts/stage_run_gsgb.py": "4589fa9c94f9f59a7a9fbef936f1f5962097462f8e7e0d01b3ce6eec26c9e2cb", + "scripts/stage_run_gsgb_variants.py": "a937cbfd19cbe6e4dbae9e6f8851d51b067b9308ad21590364df96154c8256c1", + "scripts/theta_calibration.py": "58e8d5cb8dc1fb46f6f921cb4b516bbe588e4cc1af8ad74821e59f6db17ba0d0", + "scripts/union_theta_sensitivity.py": "2c9ccce49381970877865af855c3a51c9ee55d19aed32f5c5186f258809f4441" + } +} 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/quiet_footprint.sh b/docs/evidence/uk-excise-quantities-1359/scripts/quiet_footprint.sh new file mode 100644 index 0000000000..cf9f3cfaa4 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/quiet_footprint.sh @@ -0,0 +1,13 @@ +# Sourced by the 1359 GSGB scripts. big_footprints prints every process whose memory +# footprint (top's MEM: resident plus compressed and swapped) is above $1 MB, other than +# the PIDs in $2 (space-separated). ps rss misses a swapped-out process, so it is not used. +big_footprints() { + local floor=$1 skip=" ${2:-} " + top -l 1 -o mem -n 30 -stats pid,mem,command 2>/dev/null | awk -v floor="$floor" -v skip="$skip" ' + $1 ~ /^[0-9]+$/ { + m = $2; gsub(/[+-]$/, "", m) + unit = substr(m, length(m), 1); value = substr(m, 1, length(m) - 1) + 0 + if (unit == "G") value *= 1024; else if (unit == "K") value /= 1024; else if (unit == "B") value /= 1048576; else if (unit != "M") value = m / 1048576 + if (value > floor && index(skip, " " $1 " ") == 0) print $1, $2, $3 + }' +} 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/repin_272c987.sh b/docs/evidence/uk-excise-quantities-1359/scripts/repin_272c987.sh new file mode 100755 index 0000000000..5b539b9b76 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/repin_272c987.sh @@ -0,0 +1,197 @@ +#!/usr/bin/env bash +# microcosm#1359 B2 (GSGB): re-pin the UK Chronicle feed to 272c987a, chronicle main after +# PolicyEngine/chronicle#391. Its tree is 6269a88b's (the PR head, merged onto an unmoved base), so the +# artifact built from 6269a88b's bundle is the merge commit's. 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 +B=$D/1359-excise/chronicle-gsgb-6269a88b +A=$B/uk-artifact +NAT=$B/uk-artifact-national +LOC=$B/uk-artifact-local-levels +UK=$T/packages/microcosm-build/src/microcosm/build/uk +PY=$T/.venv/bin/python +COMMIT=272c987af175687aca21f82851ef349521802b12 +NATIONAL_LABEL=chronicle-uk-272c987-consumer-facts +LOCAL_LABEL=chronicle-uk-artifact-272c987 +FACTS=$A/consumer_facts.jsonl +LOG=$D/1359-excise/b2_gsgb_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; } +. "$D/1359-excise/quiet_footprint.sh" +ARM_LOCK=$D/1095-uk-data-ports-6/arm.lock +quiet() { + # Wait up to three hours until no other process holds more than 3 GB, then stop: on a + # 24 GiB machine a heavy step beside another session's spine or generator swaps. + local deadline=$(( $(date +%s) + 10800 )) + while true; do + local big + # Footprints, not ps rss: a swapped-out process holds little resident memory. + big=$(big_footprints 3072 "$$" | wc -l | tr -d ' ') + # The #1095 arms hold this lock while they run; other sessions hold heavy work meanwhile. + if [[ ! -f "$D/1359-excise/b2_ignore_arm_lock" && -f "$ARM_LOCK" ]] && kill -0 "$(cat "$ARM_LOCK")" 2>/dev/null; then + big=$((big + 1)) + fi + if [[ $big -eq 0 ]]; then echo " quiet at $(date -u +%FT%TZ)" >> "$LOG"; return; fi + if [[ $(date +%s) -ge $deadline ]]; then + echo " waited 3 h; $big other process(es) above 3 GB; stopping (rerun from this step)" >> "$LOG" + big_footprints 3072 "$$" >> "$LOG" + exit 3 + fi + sleep 60 + done +} +reached=0 +STOP_AFTER=$(cat "$D/1359-excise/b2_stop_after" 2>/dev/null || true) +previous="" +at() { + # Stop once the step named in b2_stop_after has run (resume later with its successor). + if [[ $reached -eq 1 && -n $STOP_AFTER && $previous == "$STOP_AFTER" ]]; then + step "stopping after $STOP_AFTER (b2_stop_after); resume from $1" + git status --short >> "$LOG" + exit 0 + fi + [[ $reached -eq 1 || $FROM == "$1" ]] && reached=1 + [[ $reached -eq 1 ]] && previous=$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 "b2 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..fecd877fe6 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/sanitize_outputs.py @@ -0,0 +1,62 @@ +"""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", + "stage_dev_run.head-main-rebase.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/evidence/uk-excise-quantities-1359/scripts/stage_run_gsgb.py b/docs/evidence/uk-excise-quantities-1359/scripts/stage_run_gsgb.py new file mode 100644 index 0000000000..b9fef3d41a --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/stage_run_gsgb.py @@ -0,0 +1,220 @@ +"""Stage-only runs of lcfs_consumption without and with the gambling top-up (microcosm#1359). + +Usage, from the tree (its packages first on PYTHONPATH): + /bin/python + +Runs the tree's committed lcfs_consumption stage on a finished spine twice in one +process: as declared, and with top_up_gambling_participation removed, so the +difference is the step's alone. Records aggregates only, at prior weights: + +- every LCFS stage-health gate on the declared run, and the participation + receipt (shares, bands); +- for the Lottery Duty base and one betting and gaming input (every other + gambling input shares that key), the share of households carrying it and each + equivalised-income decile's share of households carrying it and of the base, + in both runs; +- by region, the share of households carrying each key in both runs, beside + GSGB's published adult rates for the region (B.2, B.4): the out-of-sample + check, since region is not a target. + +Every cell is a weighted share of households resting on far more than ten +source households, which the script checks. Licensed output: it stays under +data/ukds/acceptance. +""" + +from __future__ import annotations + +import dataclasses +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.household_income import household_level +from microcosm.build.uk_runtime.lcfs_consumption import UKLCFSConsumptionStageTransform +from microcosm.build.uk_runtime.national_frame import ( + load_uk_national_frame, + uk_time_period, +) +from microcosm.build.uk_runtime.receipt_counts import distinct_count +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") +KEYS = { + "national_lottery": "national_lottery_ticket_spending", + "betting_and_gaming": "remote_gaming_net_losses", +} +#: GSGB's region rows: the population each key's activities sit within. +POPULATIONS = { + "national_lottery": "any_gambling", + "betting_and_gaming": "excluding_lottery_draw_only", +} +SHEETS = {"past_4_weeks": "Table B.4", "past_12_months": "Table B.2"} +FLOOR = 10 + + +def _tool(tree: Path): + import importlib.util + + 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 _run(stage, frame): + 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) + return transform, result.table("household") + + +def _gsgb_regions(path: Path) -> dict: + rates: dict = {} + for line in open(path): + fact = json.loads(line) + dims = fact["dimensions"] + if ( + fact["concept_alignment"]["canonical_concept"] + != "gambling_commission.gsgb.participation" + ): + continue + if ( + dims.get("source_sheet") not in SHEETS.values() + or dims.get("participation_scope") not in POPULATIONS.values() + ): + continue + geography = fact["geography"] + rates.setdefault(geography["id"], {"name": geography.get("name")})[ + f"{dims['participation_scope']}:{dims['participation_window']}" + ] = fact["value"] + return rates + + +def main() -> None: + tree, spine, gsgb, out = (Path(arg) for arg in sys.argv[1:5]) + started = time.time() + frame, _ = load_uk_national_frame(spine) + frame = _tool(tree)._engine_safe_frame(frame) + spec = load_country_spec("uk") + declared = spec.sources.stage_map()["lcfs_consumption"] + plain = dataclasses.replace( + declared, + operations=tuple( + op + for op in declared.operations + if op.kind != "top_up_gambling_participation" + ), + ) + if len(plain.operations) != len(declared.operations) - 1: + raise SystemExit("the stage does not declare the top-up.") + transform, after = _run(declared, frame) + _, before = _run(plain, frame) + evidence = transform.checkpoint_metadata()["evidence"] + gates = {} + for gate in spec.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)} + + household = frame.table("household") + weight = frame.weights_for("household").values + mass = float(weight.sum()) + sources = ( + household["source_household_id"].to_numpy() + if "source_household_id" in household + else np.arange(len(household)) + ) + engine = PolicyEngineUKEngine() + variable = "equiv_hbai_household_net_income" + materialized = engine.materialize(frame, (variable,), uk_time_period(frame)) + income = np.asarray( + household_level(frame, engine, variable, materialized[variable]), dtype=float + ) + order = np.argsort(income, kind="stable") + cumulative = np.cumsum(weight[order]) / mass + decile = np.empty(len(income), dtype=int) + decile[order] = np.minimum((cumulative * 10).astype(int), 9) + 1 + region = ( + household["region"].map(lambda v: getattr(v, "name", v)).astype(str).to_numpy() + ) + + def cells(mask_by_group: dict) -> None: + for name, mask in mask_by_group.items(): + if 0 < distinct_count(sources, mask, weight) < FLOOR: + raise SystemExit( + f"cell {name} rests on fewer than {FLOOR} source households." + ) + + report: dict = { + "tree": str(tree), + "spine": str(spine), + "households": int(len(household)), + "gates": gates, + "gambling_participation": evidence.get("gambling_participation"), + "fit_weight_records": [r.fit_name for r in transform.fit_weight_records][-4:], + "keys": {}, + } + for key, column in KEYS.items(): + entry: dict = {"column": column} + for label, table in (("before", before), ("after", after)): + values = table[column].to_numpy(dtype=float) + positive = values > 0 + total = float(weight @ values) + cells({f"{key}:{label}:positive": positive}) + by_decile = {} + for d in range(1, 11): + in_decile = decile == d + cells( + { + f"{key}:{label}:decile{d}": in_decile & positive, + f"decile{d}": in_decile, + } + ) + by_decile[d] = { + "households_carrying": float( + weight[in_decile & positive].sum() / weight[in_decile].sum() + ), + "share_of_base": float( + weight[in_decile] @ values[in_decile] / total + ), + } + by_region = {} + for r in sorted(set(region)): + in_region = region == r + cells({f"{key}:{label}:{r}": in_region & positive, r: in_region}) + by_region[r] = float( + weight[in_region & positive].sum() / weight[in_region].sum() + ) + entry[label] = { + "households_carrying": float(weight[positive].sum() / mass), + "frame_total": total, + "by_decile": by_decile, + "by_region": by_region, + } + report["keys"][key] = entry + report["gsgb_regions"] = _gsgb_regions(gsgb) + report["seconds"] = round(time.time() - started, 1) + 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/evidence/uk-excise-quantities-1359/scripts/stage_run_gsgb_variants.py b/docs/evidence/uk-excise-quantities-1359/scripts/stage_run_gsgb_variants.py new file mode 100644 index 0000000000..0e945b60c0 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/stage_run_gsgb_variants.py @@ -0,0 +1,265 @@ +"""The gambling top-up's income gradient under three propensity variants (microcosm#1359). + +Usage, from the tree (its packages first on PYTHONPATH): + /bin/python + +Vahid's round 4 on microcosm#1381 asked how much of the top-up's income +gradient comes from the propensity's own features. This script runs the tree's +committed lcfs_consumption stage once on a finished spine, as declared, and +records the top-up's inputs. It then runs the top-up alone on those inputs for +each variant, so every other input is the declared run's: + +- ``gross_recreation``: the propensity and the stake draws read recreation with + its gambling stakes in, as at 3a20860fb; +- ``net_recreation``: recreation net of its stakes, as committed; +- ``chance_only``: the walk ordered by the published chance alone (the + propensity set to one), with the committed features for the stakes. + +level_excise_quantities shares each national base by the keys, so a decile's +share of a base is its share of the key; the script checks that on the +declared run. Records aggregates only, at prior weights: nationally and by +equivalised-income decile, the share of households carrying each key and each +decile's share of the key; by region, the share carrying each key, with GSGB's +regional rates (B.2, B.4) for the correlation; the before (diary draws only) +shares; and each variant's stake scales. Every cell rests on ten or more source +households, which the script checks. Licensed output: it stays under +data/ukds/acceptance until sanitize_outputs.py has run. +""" + +from __future__ import annotations + +import json +import sys +import time +from pathlib import Path + +import numpy as np + +import microcosm.build.uk_runtime.gambling_participation as participation +import microcosm.build.uk_runtime.lcfs_consumption as consumption +from microcosm.build.country_spec import load_country_spec +from microcosm.build.uk_runtime.household_income import household_level +from microcosm.build.uk_runtime.national_frame import ( + load_uk_national_frame, + uk_time_period, +) +from microcosm.build.uk_runtime.receipt_counts import distinct_count +from microcosm.build.uk_runtime.stage_health import uk_stage_health_gate +from microcosm.frame.adapters.policyengine_uk import PolicyEngineUKEngine + +sys.path.insert(0, str(Path(__file__).resolve().parent)) +from stage_run_gsgb import KEYS, LCFS, _gsgb_regions, _tool # noqa: E402 + +FLOOR = 10 + + +def _gross_recreation_features(donor_encoded, recipient_encoded, drawn, predictors): + """The features as at 3a20860fb: every spend target, recreation gross.""" + + columns = list(consumption.UK_LCFS_CONSUMPTION_TARGET_COLUMNS) + donor = donor_encoded[[*predictors, *columns]].reset_index(drop=True) + recipient = recipient_encoded[list(predictors)].reset_index(drop=True) + for column in columns: + recipient[column] = drawn[column].to_numpy(dtype=float) + return donor, recipient + + +def _ones(donor_features, donor_played, donor_weights, recipient_features, **_): + played = np.asarray(donor_played, dtype=bool) + weight = np.asarray(donor_weights, dtype=float) + return np.ones(len(recipient_features)), { + "donor_rate": float(weight[played].sum() / weight.sum()), + "ordering": "published chance alone", + } + + +def main() -> None: + tree, spine, gsgb, out = (Path(arg) for arg in sys.argv[1:5]) + started = time.time() + recorded: dict = {} + top_up = consumption.top_up_gambling_participation + features = consumption.gambling_participation_features + + def recording_top_up(keys, **kwargs): + recorded["keys"] = {key: np.array(value) for key, value in keys.items()} + recorded["kwargs"] = kwargs + result = top_up(keys, **kwargs) + recorded["result"] = result + return result + + def recording_features( + donor_encoded, donor_spending, recipient_encoded, drawn, *, predictors + ): + recorded["inputs"] = ( + donor_encoded.copy(), + recipient_encoded.copy(), + drawn.copy(), + list(predictors), + ) + return features( + donor_encoded, + donor_spending, + recipient_encoded, + drawn, + predictors=predictors, + ) + + consumption.top_up_gambling_participation = recording_top_up + consumption.gambling_participation_features = recording_features + + frame, _ = load_uk_national_frame(spine) + frame = _tool(tree)._engine_safe_frame(frame) + spec = load_country_spec("uk") + stage = spec.sources.stage_map()["lcfs_consumption"] + transform = consumption.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", + ) + after = transform(frame).table("household") + consumption.top_up_gambling_participation = top_up + consumption.gambling_participation_features = features + evidence = transform.checkpoint_metadata()["evidence"] + gates = {} + for gate in spec.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)} + + kwargs = recorded["kwargs"] + donor_encoded, recipient_encoded, drawn, predictors = recorded["inputs"] + variants = {"net_recreation": recorded["result"]} + donor_gross, recipient_gross = _gross_recreation_features( + donor_encoded, recipient_encoded, drawn, predictors + ) + variants["gross_recreation"] = participation.top_up_gambling_participation( + recorded["keys"], + **{ + **kwargs, + "donor_features": donor_gross, + "recipient_features": recipient_gross, + }, + ) + propensity = participation._propensity + participation._propensity = _ones + try: + variants["chance_only"] = participation.top_up_gambling_participation( + recorded["keys"], **kwargs + ) + finally: + participation._propensity = propensity + + household = frame.table("household") + weight = frame.weights_for("household").values + mass = float(weight.sum()) + sources = ( + household["source_household_id"].to_numpy() + if "source_household_id" in household + else np.arange(len(household)) + ) + if not np.array_equal( + np.asarray(kwargs["household_ids"]), household["household_id"].to_numpy() + ): + raise SystemExit("the top-up's households are not the frame's, in order.") + engine = PolicyEngineUKEngine() + variable = "equiv_hbai_household_net_income" + materialized = engine.materialize(frame, (variable,), uk_time_period(frame)) + income = np.asarray( + household_level(frame, engine, variable, materialized[variable]), dtype=float + ) + order = np.argsort(income, kind="stable") + cumulative = np.cumsum(weight[order]) / mass + decile = np.empty(len(income), dtype=int) + decile[order] = np.minimum((cumulative * 10).astype(int), 9) + 1 + region = ( + household["region"].map(lambda v: getattr(v, "name", v)).astype(str).to_numpy() + ) + + def check(name: str, mask: np.ndarray) -> None: + if 0 < distinct_count(sources, mask, weight) < FLOOR: + raise SystemExit( + f"cell {name} rests on fewer than {FLOOR} source households." + ) + + def summary(name: str, values: np.ndarray) -> dict: + positive = values > 0 + total = float(weight @ values) + check(f"{name}:positive", positive) + by_decile = {} + for d in range(1, 11): + in_decile = decile == d + check(f"{name}:decile{d}", in_decile & positive) + check(f"decile{d}", in_decile) + by_decile[d] = { + "households_carrying": float( + weight[in_decile & positive].sum() / weight[in_decile].sum() + ), + "share_of_key": float(weight[in_decile] @ values[in_decile] / total), + } + by_region = {} + for r in sorted(set(region)): + in_region = region == r + check(f"{name}:{r}", in_region & positive) + check(r, in_region) + by_region[r] = float( + weight[in_region & positive].sum() / weight[in_region].sum() + ) + return { + "households_carrying": float(weight[positive].sum() / mass), + "by_decile": by_decile, + "by_region": by_region, + } + + report: dict = { + "tree": str(tree), + "spine": str(spine), + "households": int(len(household)), + "gates": gates, + "variants": {}, + } + # The declared run's levelled inputs follow its keys. + for key, column in KEYS.items(): + values = after[column].to_numpy(dtype=float) + topped = np.asarray(variants["net_recreation"].keys[key], dtype=float) + if not np.array_equal(values > 0, topped > 0): + raise SystemExit(f"{column} is not carried where {key} is.") + levelled = summary(f"{key}:levelled", values) + keyed = summary(f"{key}:declared", topped) + for d in range(1, 11): + gap = abs( + levelled["by_decile"][d]["share_of_key"] + - keyed["by_decile"][d]["share_of_key"] + ) + if gap > 1e-9: + raise SystemExit(f"{column}'s decile {d} share is not {key}'s.") + report["before"] = { + key: summary(f"{key}:before", np.asarray(recorded["keys"][key], dtype=float)) + for key in KEYS + } + for name, result in variants.items(): + entry = {} + for key in KEYS: + keyed = result.receipt["keys"][key] + entry[key] = { + **summary(f"{name}:{key}", np.asarray(result.keys[key], dtype=float)), + "amount_scale": keyed.get("amount_scale"), + "stake_shares": keyed.get("stake_shares"), + "propensity": keyed.get("propensity"), + } + report["variants"][name] = entry + report["gsgb_regions"] = _gsgb_regions(gsgb) + report["seconds"] = round(time.time() - started, 1) + 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/evidence/uk-excise-quantities-1359/scripts/theta_calibration.py b/docs/evidence/uk-excise-quantities-1359/scripts/theta_calibration.py new file mode 100644 index 0000000000..e973a8bf98 --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/theta_calibration.py @@ -0,0 +1,138 @@ +"""Fit theta, how a household's adults combine, on the LCFS 2024-25 donor. + +Usage, from the tree: python theta_calibration.py + +A household plays when any adult does: + q(theta) = 1 - (1 - p_max) * prod_{other adults} (1 - p_i) ** theta, +with each adult's p_i the committed top_up_gambling_participation step's +four-week rate for its sex and age band, read from the vendored GSGB rows +through the committed declaration. Theta 0 is one player per household, theta +1 adults who play independently. The diary under-records gambling, but if it +misses the same share of one- and two-adult households, the ratio of their +diary rates carries the household effect, so theta is set to give it. The +three-or-more-adult ratio is the check. + +Writes aggregates only: weighted shares of households by number of adults, +each resting on 30 or more donors, which the script checks (microcosm#1359). +""" + +from __future__ import annotations + +import json +import sys +from pathlib import Path + +import numpy as np +import pandas as pd + +from microcosm.build.country_spec import load_country_spec +from microcosm.build.uk_runtime.gambling_participation import ( + REGULAR, + gambling_participation_operation, + household_participation, + participation_rates, +) + +KEYS = { + "national_lottery": ("c94316", "c94319"), + "betting_and_gaming": ("c94311", "c94312", "c94314"), +} +SUPPORT_FLOOR = 30 + + +def main() -> None: + lcfs, out = Path(sys.argv[1]), Path(sys.argv[2]) + stage = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + parameters = gambling_participation_operation(stage) + rates = participation_rates(parameters) + codes = sorted({code for lines in KEYS.values() for code in lines}) + household = pd.read_csv( + lcfs / "dvhh_uk_anon_v3_2024.tab", + sep="\t", + usecols=["case", "cal_weight_annual", *codes], + ) + household = household.apply(pd.to_numeric, errors="coerce").fillna(0.0) + raw = pd.read_csv( + lcfs / "dvper_uk_anon_2024.tab", sep="\t", usecols=["case", "a004", "a005p"] + ) + raw = raw.apply(pd.to_numeric, errors="coerce") + ids = household["case"].to_numpy() + person = pd.DataFrame( + { + "person_household_id": raw["case"].to_numpy(), + "age": raw["a005p"].to_numpy(dtype=float), + "gender": np.where(raw["a004"] == 1, "MALE", "FEMALE"), + } + ) + person = person[person["person_household_id"].isin(set(ids))] + weight = household["cal_weight_annual"].to_numpy(dtype=float) + adults = person[person["age"] >= 18].groupby("person_household_id").size() + size = adults.reindex(ids).fillna(0).to_numpy() + sizes = {"1": size == 1, "2": size == 2, "3+": size >= 3} + report: dict = {"declared_theta": {}, "fitted": {}} + for key, lines in KEYS.items(): + played = sum(household[code].clip(lower=0).to_numpy() for code in lines) > 0 + for name, mask in sizes.items(): + if ( + int(mask.sum()) < SUPPORT_FLOOR + or int((mask & played).sum()) < SUPPORT_FLOOR + ): + raise SystemExit( + f"{key}: {name}-adult households rest on fewer than {SUPPORT_FLOOR} donors." + ) + observed = { + n: float(weight[m & played].sum() / weight[m].sum()) + for n, m in sizes.items() + } + target = observed["2"] / observed["1"] + + def predicted(theta: float) -> dict[str, float]: + q = household_participation( + person, ids, rates.rates[key][REGULAR], bands=rates.bands, theta=theta + ) + return { + n: float(weight[m] @ q[m] / weight[m].sum()) for n, m in sizes.items() + } + + def ratio(shares: dict[str, float]) -> float: + return shares["2"] / shares["1"] + + low, high = 0.0, 1.0 + at_low, at_high = predicted(low), predicted(high) + if not ratio(at_low) <= target <= ratio(at_high): + theta = low if target < ratio(at_low) else high + else: + for _ in range(40): + middle = (low + high) / 2 + low, high = ( + (middle, high) + if ratio(predicted(middle)) < target + else (low, middle) + ) + theta = (low + high) / 2 + fitted = predicted(theta) + report["declared_theta"][key] = parameters["keys"][key]["theta"] + report["fitted"][key] = { + "theta": round(theta, 3), + "two_over_one": { + "diary": round(target, 3), + "theta_0": round(ratio(at_low), 3), + "theta_1": round(ratio(at_high), 3), + "fitted": round(ratio(fitted), 3), + }, + "three_plus_over_one": { + "diary": round(observed["3+"] / observed["1"], 3), + "fitted": round(fitted["3+"] / fitted["1"], 3), + }, + # The diary's household rate over GSGB's at the fitted theta: equal + # for one and two adults by construction, a check for three or more. + "diary_over_gsgb_four_week_rate": { + n: round(observed[n] / fitted[n], 3) for n in sizes + }, + } + out.write_text(json.dumps(report, indent=1, sort_keys=True) + "\n") + print(json.dumps(report["fitted"], indent=1)) + + +if __name__ == "__main__": + main() diff --git a/docs/evidence/uk-excise-quantities-1359/scripts/union_theta_sensitivity.py b/docs/evidence/uk-excise-quantities-1359/scripts/union_theta_sensitivity.py new file mode 100644 index 0000000000..94f36ee99d --- /dev/null +++ b/docs/evidence/uk-excise-quantities-1359/scripts/union_theta_sensitivity.py @@ -0,0 +1,403 @@ +"""How much the gambling keys rest on the union's independence and on theta (microcosm#1359). + +Usage, from the tree: + /bin/python -I + +A key's adult rate is the union of its activities (GSGB B.9), taken as +independent within the population that plays any of them (B.3). This script +checks that against what GSGB publishes beside it, all for all sexes by age +band: + +- **B.13**, the number of activities each four-week gambler took part in. Its + share with one activity and its standard deviation, against what independence + among players gives on B.9's thirteen top-level activities. +- **Published unions.** Where B.9 or B.3 prints a union beside its parts (any + lottery draw, scratchcards, online instant win games, and every activity but + the two draws within the population that plays more than draws), the union + that independence gives, and the one a shared-intensity model gives. +- **The shared-intensity model.** Each adult carries an intensity drawn from a + gamma distribution with mean 1; given it, the activities are independent, each + played with chance ``1 - exp(-intensity * h)``. The ``h`` reproduce each + activity's published rate, and the gamma's shape the published rate of the + key's population (any gambling for the National Lottery, more than draws for + betting and gaming). B.13 is then the check. + +It then sets the frame's adults (age, sex, household, prior weight) against the +key's rates and writes the national share of households the step targets over +four weeks and twelve months (the share that carries the duty, since the walk +fills each stratum to its share), at the declared rates and theta, at other +thetas, and with each key's union from the model and at its bounds. + +GSGB figures are public. The frame's figures are national shares of the frame's +households at prior weights. +""" + +from __future__ import annotations + +import json +import sys +from pathlib import Path + +import h5py +import numpy as np +import pandas as pd +from scipy import optimize, stats + +from microcosm.build.country_spec import load_country_spec +from microcosm.build.uk_runtime.gambling_participation import ( + OCCASIONAL, + REGULAR, + gambling_participation_operation, + household_participation, + participation_rates, +) + +GREAT_BRITAIN = "K03000001" +PARTICIPATION = "gambling_commission.gsgb.participation" +COUNTS = "gambling_commission.gsgb.activity_count_distribution" +MEAN_COUNT = "gambling_commission.gsgb.mean_activity_count" +AGES = ( + "all", + "age_18_to_24", + "age_25_to_34", + "age_35_to_44", + "age_45_to_54", + "age_55_to_64", + "age_65_to_74", + "age_75_plus", +) +#: B.9's top-level activities, each once, with the channel row that holds it. +ACTIVITIES = { + "national_lottery_draws": "all", + "other_charity_lottery_draws": "all", + "national_lottery_scratchcards": "all", + "other_scratchcards": "in_person", + "national_lottery_online_instant_win_games": "online", + "other_online_instant_win_games": "online", + "betting": "all", + "bingo": "all", + "casino_games": "all", + "fruit_and_slots_games": "all", + "another_form_of_gambling": "all", + "football_pools": "all", + "private_betting": "all", +} +DRAWS = ("national_lottery_draws", "other_charity_lottery_draws") +NON_DRAWS = tuple(name for name in ACTIVITIES if name not in DRAWS) +#: Each key's population (B.3) and the activities it may hold. +POPULATIONS = { + "national_lottery": ("any_gambling", tuple(ACTIVITIES)), + "betting_and_gaming": ("excluding_lottery_draw_only", NON_DRAWS), +} +#: Unions B.9 prints beside their parts, and the population they sit in. +PUBLISHED_UNIONS = { + "any_lottery_draw": (("any_lottery_draw", "all"), DRAWS, "national_lottery"), + "scratchcards": ( + ("scratchcards", "all"), + ("national_lottery_scratchcards", "other_scratchcards"), + "betting_and_gaming", + ), + "online_instant_win_games": ( + ("online_instant_win_games", "online"), + ( + "national_lottery_online_instant_win_games", + "other_online_instant_win_games", + ), + "betting_and_gaming", + ), +} +COUNT_BANDS = { + "one": (1, 1), + "two_to_three": (2, 3), + "four_to_six": (4, 6), + "seven_or_more": (7, len(ACTIVITIES)), +} +THETAS = { + "national_lottery": (0.0, 0.5, 1.0), + "betting_and_gaming": (0.0, 0.25, 0.5, 1.0), +} +QUANTILES = 4000 + + +def _rows(path: Path) -> list[dict]: + rows = [] + for line in open(path): + fact = json.loads(line) + if fact["geography"]["id"] == GREAT_BRITAIN: + rows.append(fact) + return rows + + +def _value(rows, concept, sheet, age, **dimensions) -> float: + found = [ + fact["value"] + for fact in rows + if fact["concept_alignment"]["canonical_concept"] == concept + and fact["dimensions"].get("source_sheet") == sheet + and fact["dimensions"].get("sex") == "all" + and fact["dimensions"].get("age_band") == age + and all(fact["dimensions"].get(k) == v for k, v in dimensions.items()) + ] + if len(found) != 1: + raise SystemExit(f"{sheet} {age} {dimensions}: {len(found)} rows.") + return float(found[0]) + + +def _rate(rows, scope, age, channel=None, sheet="Table B.9") -> float: + selector = {"participation_scope": scope, "participation_window": "past_4_weeks"} + if channel is not None: + selector["gambling_channel"] = channel + return _value(rows, PARTICIPATION, sheet, age, **selector) + + +def _independent(rates, names, within) -> float: + """The union among all adults, independent within ``within``.""" + + return within * (1.0 - np.prod([1.0 - min(rates[n] / within, 1.0) for n in names])) + + +class SharedIntensity: + """Activities independent given a gamma intensity, fitted to a population's rate.""" + + def __init__(self, rates: dict[str, float], names, population: float): + self.names = tuple(names) + played = np.array([rates[n] for n in self.names]) + + def loads(shape): + return shape * ((1.0 - played) ** (-1.0 / shape) - 1.0) + + def gap(log_shape): + shape = np.exp(log_shape) + return 1.0 - (1.0 + loads(shape).sum() / shape) ** -shape - population + + self.shape = float( + np.exp(optimize.brentq(gap, np.log(1e-2), np.log(1e5), xtol=1e-12)) + ) + self.load = dict(zip(self.names, loads(self.shape), strict=True)) + + def union(self, names) -> float: + total = sum(self.load[n] for n in names) + return 1.0 - (1.0 + total / self.shape) ** -self.shape + + def counts(self) -> np.ndarray: + """The distribution of the number of activities, from 0.""" + + intensity = stats.gamma.ppf( + (np.arange(QUANTILES) + 0.5) / QUANTILES, self.shape, scale=1 / self.shape + ) + chance = 1.0 - np.exp(-np.outer(intensity, [self.load[n] for n in self.names])) + return _poisson_binomial(chance).mean(axis=0) + + +def _poisson_binomial(chance: np.ndarray) -> np.ndarray: + chance = np.atleast_2d(chance) + out = np.zeros((chance.shape[0], chance.shape[1] + 1)) + out[:, 0] = 1.0 + for column in range(chance.shape[1]): + step = out * (1.0 - chance[:, [column]]) + step[:, 1:] += out[:, :-1] * chance[:, [column]] + out = step + return out + + +def _among_players(counts: np.ndarray) -> dict[str, float]: + played = counts[1:] / counts[1:].sum() + n = np.arange(1, len(counts)) + mean = float(played @ n) + shares = { + band: float(played[low - 1 : high].sum()) + for band, (low, high) in COUNT_BANDS.items() + } + return { + **{band: round(share, 3) for band, share in shares.items()}, + "mean": round(mean, 2), + "standard_deviation": round(float(np.sqrt(played @ n**2 - mean**2)), 2), + } + + +def published_checks(rows) -> tuple[dict, dict]: + """The B.13 and union checks, and each key's union share by age band.""" + + report: dict = {} + unions: dict = {key: {} for key in POPULATIONS} + for age in AGES: + rates = {n: _rate(rows, n, age, c) for n, c in ACTIVITIES.items()} + populations = { + key: _rate(rows, scope, age, sheet="Table B.3") + for key, (scope, _) in POPULATIONS.items() + } + models = { + key: SharedIntensity(rates, names, populations[key]) + for key, (_, names) in POPULATIONS.items() + } + within = populations["national_lottery"] + independent = np.array([min(rates[n] / within, 1.0) for n in ACTIVITIES]) + players = _poisson_binomial(independent)[0] + b13 = { + band: round( + _value( + rows, + COUNTS, + "Table B.13", + age, + activity_count_band=band, + participation_window="past_4_weeks", + ), + 3, + ) + for band in COUNT_BANDS + } + b13["mean"] = round( + _value( + rows, MEAN_COUNT, "Table B.13", age, participation_window="past_4_weeks" + ), + 2, + ) + entry = { + "four_week_rate": { + "any_gambling": round(within, 4), + "excluding_lottery_draw_only": round( + populations["betting_and_gaming"], 4 + ), + }, + "activities_among_four_week_players": { + "gsgb_b13": b13, + "independent_among_players": _among_players(players) + | {"share_left_with_none": round(float(players[0]), 3)}, + "shared_intensity": _among_players(models["national_lottery"].counts()), + }, + "shared_intensity_shape": { + key: round(model.shape, 3) for key, model in models.items() + }, + "published_unions": {}, + "keys": {}, + } + excluding = populations["betting_and_gaming"] + entry["published_unions"]["excluding_lottery_draw_only"] = { + "published": round(excluding, 4), + "independent_within_any_gambling": round( + _independent(rates, NON_DRAWS, within), 4 + ), + "shared_intensity_fitted_to_any_gambling": round( + models["national_lottery"].union(NON_DRAWS), 4 + ), + } + for name, ((scope, channel), parts, key) in PUBLISHED_UNIONS.items(): + entry["published_unions"][name] = { + "published": round(_rate(rows, scope, age, channel), 4), + "population": POPULATIONS[key][0], + "independent_within_population": round( + _independent(rates, parts, populations[key]), 4 + ), + "shared_intensity": round(models[key].union(parts), 4), + } + for key, names in ( + ("national_lottery", KEY_ACTIVITIES["national_lottery"]), + ("betting_and_gaming", KEY_ACTIVITIES["betting_and_gaming"]), + ): + population = populations[key] + low = max(rates[n] for n in names) + high = min(sum(rates[n] for n in names), population) + step = _independent(rates, names, population) + model = models[key].union(names) + entry["keys"][key] = { + "independent_within_population": round(step, 4), + "shared_intensity": round(model, 4), + "shared_intensity_over_independent": round(model / step, 3), + "bounds": [round(low, 4), round(high, 4)], + } + if age != "all": + unions[key][age] = { + "step": step / population, + "shared_intensity": model / population, + "lower_bound": low / population, + "upper_bound": high / population, + } + report[age] = entry + return report, unions + + +#: Each key's activities, as the committed declaration names them. +KEY_ACTIVITIES: dict[str, tuple[str, ...]] = {} + + +def household_targets(spine: Path, unions: dict) -> dict: + stage = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + parameters = gambling_participation_operation(stage) + rates = participation_rates(parameters) + bands = rates.bands + names = {int(lower): str(value) for lower, value in parameters["age_bands"]} + with h5py.File(spine, "r") as handle: + person = handle["person/table"].fields( + ["person_household_id", "age", "gender"] + )[:] + household = handle["household/table"].fields( + ["household_id", "household_weight"] + )[:] + person = pd.DataFrame( + { + "person_household_id": person["person_household_id"], + "age": person["age"].astype(float), + "gender": [g.decode() for g in person["gender"]], + } + ) + ids = household["household_id"] + weight = household["household_weight"].astype(float) + mass = float(weight.sum()) + + def share(cells, theta): + q = household_participation(person, ids, cells, bands=bands, theta=theta) + return round(float(weight @ q / mass), 4) + + report: dict = {"households": int(len(ids)), "keys": {}} + for key in POPULATIONS: + theta = float(parameters["keys"][key]["theta"]) + declared = rates.rates[key] + entry: dict = {"declared_theta": theta, "theta": {}, "union": {}} + for value in sorted({theta, *THETAS[key]}): + entry["theta"][f"{value:g}"] = { + window: share(declared[cls], value) + for window, cls in ( + ("four_weeks", REGULAR), + ("twelve_months", OCCASIONAL), + ) + } + for variant in ("shared_intensity", "lower_bound", "upper_bound"): + scale = { + lower: unions[key][names[lower]][variant] + / unions[key][names[lower]]["step"] + for lower in bands + } + entry["union"][variant] = {} + for window, cls in (("four_weeks", REGULAR), ("twelve_months", OCCASIONAL)): + cells = { + (sex, lower): min(value * scale[lower], 1.0) + for (sex, lower), value in declared[cls].items() + } + entry["union"][variant][window] = share(cells, theta) + report["keys"][key] = entry + return report + + +def main() -> None: + feed, spine, out = (Path(arg) for arg in sys.argv[1:4]) + stage = load_country_spec("uk").sources.stage_map()["lcfs_consumption"] + declared = gambling_participation_operation(stage)["keys"] + for key in POPULATIONS: + KEY_ACTIVITIES[key] = tuple(declared[key]["activities"]) + if declared[key]["population"] != POPULATIONS[key][0]: + raise SystemExit(f"{key}: the declaration's population moved.") + if not set(KEY_ACTIVITIES[key]) <= set(POPULATIONS[key][1]): + raise SystemExit(f"{key}: an activity sits outside its population.") + rows = _rows(feed) + published, unions = published_checks(rows) + report = { + "gsgb": published, + "frame": household_targets(spine, unions), + } + out.write_text(json.dumps(report, indent=1) + "\n") + print(json.dumps(report["frame"], indent=1)) + + +if __name__ == "__main__": + main() diff --git a/docs/uk-chronicle-feed-repin.md b/docs/uk-chronicle-feed-repin.md index ae0644f1fc..be06afe7e8 100644 --- a/docs/uk-chronicle-feed-repin.md +++ b/docs/uk-chronicle-feed-repin.md @@ -255,3 +255,59 @@ 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. + +The `272c987` re-pin (microcosm#1359, PolicyEngine/chronicle#391, on top of `200bf6d`) brought the +Gambling Commission's Gambling Survey for Great Britain 2025 tables: the share of adults who gambled +in the past four weeks and the past twelve months by sex, age band, country and English region, by +activity and channel, and the number of activities, with each table's unweighted bases (1,024 +facts; 1,503,315 rows). The merge commit's tree is the pull request head's (`6269a88`), merged onto +an unmoved base, so the artifact was built from that head's bundle and carries the merge commit's +digests. + +A new vendored resource, `gambling_participation_facts.json`, carries the 426 Great Britain +participation rows the LCFS `top_up_gambling_participation` step reads. The other vendored resources +carry the same rows under the new feed identity. No compiled value moves on either surface: the +national and local reference files are byte-identical, the membership moves only its feed label, +and both compile-parity receipts are unchanged. Both surfaces were regenerated from the national +and local cuts, as for `200bf6d`. No reference moves, so the national register version does not +either. The high-value home stock still names `735820c`: the addition touches none of its inputs. diff --git a/experiments/1359-excise-quantities-receipts.md b/experiments/1359-excise-quantities-receipts.md new file mode 100644 index 0000000000..d730df2e5d --- /dev/null +++ b/experiments/1359-excise-quantities-receipts.md @@ -0,0 +1,230 @@ +# 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. + +On 2026-10-24 the branch was rebased onto main after microcosm#1383 merged, so the hashes above are the pre-rebase ones. + +## 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. +- **The rebase onto main** (after microcosm#1383 merged), against the split head: 26 of the 46 columns are byte-identical. #1383's last commits level each division on the spend the chain drew against the donor's same spend, so the seven levelled divisions move, recreation from £148.7bn to £151.0bn. The 13 gambling inputs follow recreation, since the stakes are a share of it. The alcohol and tobacco inputs, the spending they follow and every share's incidence are unchanged. +- **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.31bn | 14.6% | + | of which the National Lottery | £1.69bn | 10.7% | + | of which betting and gaming | £0.43bn | 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.69bn | 0.55 | 10.7% | +| Other gambling | £2.69bn | £0.43bn | 6.25 | 2.0% | + +The diary records a fraction of what is bought. The National Lottery's base, ticket sales, is 4.6 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. + +After the rebase onto main, with the follow-ups to Vahid's third review of microcosm#1383: + +- **The stage, the spec and the declaration**, with contract mirrors and both H2 parity files: 931 of 931. +- **The re-pin and the targets**: 353, of which 7 feed-gated checks skip. +- **The withholding, the gates, Orrery and the build CLI**: 631 of 631. +- **Engine**: the excise inputs, H2 parity and the coverage manifest, 64 of 64. +- `tools/ci_test_plan.py verify`: ok. The battery digests do not move. + +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 023e23d173..631d7b254d 100644 --- a/packages/microcosm-build/src/microcosm/build/source_manifest.py +++ b/packages/microcosm-build/src/microcosm/build/source_manifest.py @@ -153,6 +153,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", @@ -193,6 +194,7 @@ "support_clip", "sub_aea_remainder", "taxable_income_proxy", + "top_up_gambling_participation", "top_up_to_stock", "transfer_clone_mass_to_originals", "uprate", 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 06a9fb8126..492014c50a 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 @@ -7477,6 +7477,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" + } + } + } + } } } }, @@ -12485,6 +12516,545 @@ } } }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "kind", + "resource", + "concept", + "period_type", + "period_value", + "geography_id", + "dimensions", + "windows", + "sexes", + "age_bands", + "keys", + "occasional_stake_share", + "strata", + "propensity", + "n_estimators", + "seed", + "salt" + ], + "properties": { + "kind": { + "const": "top_up_gambling_participation" + }, + "resource": { + "type": "string" + }, + "concept": { + "type": "string" + }, + "period_type": { + "const": "calendar_year" + }, + "period_value": { + "type": "integer" + }, + "geography_id": { + "type": "string" + }, + "dimensions": { + "type": "object", + "additionalProperties": false, + "required": [ + "window", + "scope", + "sex", + "age_band" + ], + "properties": { + "window": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "sex": { + "type": "string" + }, + "age_band": { + "type": "string" + } + } + }, + "population_dimensions": { + "type": "object", + "additionalProperties": false, + "properties": { + "regular": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "occasional": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "activity_dimensions": { + "type": "object", + "additionalProperties": false, + "properties": { + "regular": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "occasional": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "windows": { + "type": "object", + "additionalProperties": false, + "required": [ + "regular", + "occasional" + ], + "properties": { + "regular": { + "type": "string" + }, + "occasional": { + "type": "string" + } + } + }, + "sexes": { + "type": "object", + "additionalProperties": false, + "required": [ + "MALE", + "FEMALE", + "all" + ], + "properties": { + "MALE": { + "type": "string" + }, + "FEMALE": { + "type": "string" + }, + "all": { + "type": "string" + } + } + }, + "age_bands": { + "type": "array", + "minItems": 1, + "items": { + "type": "array", + "prefixItems": [ + { + "type": "integer", + "minimum": 18 + }, + { + "type": "string" + } + ], + "minItems": 2, + "maxItems": 2 + } + }, + "keys": { + "type": "object", + "additionalProperties": false, + "required": [ + "national_lottery", + "betting_and_gaming" + ], + "properties": { + "national_lottery": { + "type": "object", + "additionalProperties": false, + "required": [ + "population", + "activities", + "theta" + ], + "properties": { + "population": { + "type": "string" + }, + "activities": { + "type": "object", + "minProperties": 1, + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "theta": { + "type": "number", + "minimum": 0, + "maximum": 1 + } + } + }, + "betting_and_gaming": { + "type": "object", + "additionalProperties": false, + "required": [ + "population", + "activities", + "theta" + ], + "properties": { + "population": { + "type": "string" + }, + "activities": { + "type": "object", + "minProperties": 1, + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "theta": { + "type": "number", + "minimum": 0, + "maximum": 1 + } + } + } + } + }, + "occasional_stake_share": { + "type": "number", + "exclusiveMinimum": 0, + "maximum": 1 + }, + "strata": { + "type": "object", + "additionalProperties": false, + "required": [ + "adults_cap", + "youngest_adult_bounds" + ], + "properties": { + "adults_cap": { + "type": "integer", + "minimum": 1 + }, + "youngest_adult_bounds": { + "type": "array", + "items": { + "type": "integer", + "minimum": 19 + } + } + } + }, + "propensity": { + "type": "object", + "additionalProperties": false, + "required": [ + "max_leaf_nodes", + "min_samples_leaf", + "l2_regularization", + "validation_fraction" + ], + "properties": { + "max_leaf_nodes": { + "type": "integer", + "minimum": 2 + }, + "min_samples_leaf": { + "type": "integer", + "minimum": 1 + }, + "l2_regularization": { + "type": "number", + "minimum": 0 + }, + "validation_fraction": { + "type": "number", + "exclusiveMinimum": 0, + "maximum": 0.5 + } + } + }, + "n_estimators": { + "type": "integer", + "minimum": 1 + }, + "seed": { + "type": "integer" + }, + "salt": { + "type": "string" + } + } + }, + { + "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..56a7466e46 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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 d06dc40647..29b6f06e99 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..8a69e434df 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" } 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..a1f084067c 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,16 @@ "kind": "legacy_json", "schema_id": "legacy_json" }, + { + "path": "excise_facts.json", + "kind": "legacy_json", + "schema_id": "legacy_json" + }, + { + "path": "gambling_participation_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..14af81e370 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..e9e7de6e60 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..4013a3baf1 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..2aeeb7ee84 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..9cba4f31c9 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..eeb9c8c4a8 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..3f18dd3e44 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..1795597b8a 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..547c53ac50 --- /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": "272c987af175687aca21f82851ef349521802b12", + "build": "build-bundle --suite uk -> build-consumer-artifact", + "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", + "fact_row_count": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" + }, + "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/gambling_participation_facts.json b/packages/microcosm-build/src/microcosm/build/uk/gambling_participation_facts.json new file mode 100644 index 0000000000..fc84e51bd4 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk/gambling_participation_facts.json @@ -0,0 +1,21769 @@ +{ + "schema_version": 1, + "country": "uk", + "kind": "uk_vendored_ledger_facts", + "resource": "gambling_participation_facts.json", + "purpose": "The Gambling Commission's Gambling Survey for Great Britain 2025: the share of adults who gambled in the past four weeks and the past twelve months, any gambling and excluding lottery-draw-only players, by sex crossed with age band (tables B.1 and B.3), and past-four-week participation by activity and channel, by sex and by age band (table B.9), Great Britain, calendar 2025: the adult rates the LCFS top_up_gambling_participation step brings the National Lottery and the betting and gaming keys to (microcosm#1359, PolicyEngine/chronicle#391).", + "consumers": [ + "uk_runtime.gambling_participation" + ], + "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": "272c987af175687aca21f82851ef349521802b12", + "build": "build-bundle --suite uk -> build-consumer-artifact", + "artifact_schema_version": "policyengine_ledger.consumer_artifact.v2", + "fact_row_count": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" + }, + "selections": [ + { + "label": "gambling_commission_gsgb_participation_2025", + "selector": { + "source_name": "gambling_commission", + "source_concept": "gambling_commission.gsgb.participation", + "geography_id": "K03000001", + "period_type": "calendar_year", + "period_value": [ + 2025 + ] + }, + "row_count": 426 + } + ], + "row_count": 426, + "rows": [ + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_00bd5746051ba2a0ae323f6e", + "semantic_fact_key": "ledger_semantic_fact_v2_a73761c664ad7053cb9d95f9", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_18_to_24.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.47922739143654736 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d433b391e030ec37107c5fad", + "semantic_fact_key": "ledger_semantic_fact_v2_205150248b8aef2c08a4b639", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_18_to_24.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3294973189404326 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bcef5775cc021c848b9b293b", + "semantic_fact_key": "ledger_semantic_fact_v2_4d39e90f8779bcbd6b852743", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_18_to_24.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.45008804906106703 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_255be00df37a2520681df2dc", + "semantic_fact_key": "ledger_semantic_fact_v2_ce2ba16440c66047df563479", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_18_to_24.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2948101102987473 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_37e29116de382babbf48db62", + "semantic_fact_key": "ledger_semantic_fact_v2_f8173288540fc8a3fb63045f", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_25_to_34.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5747761082486935 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_308e99239bb5bafe1949fe02", + "semantic_fact_key": "ledger_semantic_fact_v2_c5d3bb30190b6c9fd84acc4e", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_25_to_34.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.4309509421382499 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_239fb68429db43b920e9ab38", + "semantic_fact_key": "ledger_semantic_fact_v2_4ee0a020307ef562f35c4e64", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_25_to_34.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.4916940230844936 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7d06069483fc6615027a6f35", + "semantic_fact_key": "ledger_semantic_fact_v2_7882d5068124d53841739f1a", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_25_to_34.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.32600855484200225 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5969cde2b96631a8a8545448", + "semantic_fact_key": "ledger_semantic_fact_v2_a22c629c79720115b219100b", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_35_to_44.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.6254556865481572 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_59d79582c607a7acb81d45c7", + "semantic_fact_key": "ledger_semantic_fact_v2_f1916c5db014fd3582ef5cc5", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_35_to_44.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.4926506525207849 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6ddfe59b4075c0253b740c12", + "semantic_fact_key": "ledger_semantic_fact_v2_2976892f56ccb8a77a8e1598", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_35_to_44.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.48205680548624263 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e8c2c9012dad1829dc74107c", + "semantic_fact_key": "ledger_semantic_fact_v2_419448ad4690f285399409b7", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_35_to_44.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3340905795844397 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_53649ba9e6ed34aa786acc87", + "semantic_fact_key": "ledger_semantic_fact_v2_788fbeadd56156c3d15456c1", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_45_to_54.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.6349827044068541 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_344cbdf1cc1daff3ed515bd3", + "semantic_fact_key": "ledger_semantic_fact_v2_22178ea6c554f39b65804d0a", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_45_to_54.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5296298423605214 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fb9b01372eaa0238261f2fd1", + "semantic_fact_key": "ledger_semantic_fact_v2_fde6c99304b0556ae5ce9ef0", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_45_to_54.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.4352719598698355 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4034f7db7323da51af7887b2", + "semantic_fact_key": "ledger_semantic_fact_v2_8374d4539afe75a77ae17c65", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_45_to_54.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.300949568330132 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_55667214f31abf963a6ab10d", + "semantic_fact_key": "ledger_semantic_fact_v2_911996bc5d5a42fd68fa2293", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_55_to_64.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.6383386661491955 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_31b7f84f6786cda2630362e1", + "semantic_fact_key": "ledger_semantic_fact_v2_bfd551c7fe3a6446cb41bb49", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_55_to_64.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5483039889374175 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_973f8abd8c5759af1bbe9507", + "semantic_fact_key": "ledger_semantic_fact_v2_c58a9da69f169c9606847319", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_55_to_64.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.36756313919661 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ee80c31430037c6cfef302e9", + "semantic_fact_key": "ledger_semantic_fact_v2_d444483aa1f08d058b8e8c34", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_55_to_64.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2414287028984631 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4ffc3f29ca7f14ea239b687f", + "semantic_fact_key": "ledger_semantic_fact_v2_60d3441efec86bed25a64001", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_65_to_74.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5923476142875793 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0b6c32e28b5d0fdfa7f50c47", + "semantic_fact_key": "ledger_semantic_fact_v2_b1db5e14ebd929f6d401e6ae", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_65_to_74.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5011145895716616 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a2f42594ad912a09d4660acf", + "semantic_fact_key": "ledger_semantic_fact_v2_cf9192cbf8588f065aeb1c34", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_65_to_74.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2895404329236232 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1123cde244909d47c4d66255", + "semantic_fact_key": "ledger_semantic_fact_v2_7247c49585a7ca8c9c3b7b7d", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_65_to_74.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.19216750735931482 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_53a1c2f4e32fd9ca94a067e3", + "semantic_fact_key": "ledger_semantic_fact_v2_e4e146c2afc4ec3c8f95bd6a", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_75_plus.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5158973698265219 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7e0e608706bf05f173dff228", + "semantic_fact_key": "ledger_semantic_fact_v2_80bb80a4570232c37ca6170e", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_75_plus.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.41532956963776163 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d9275d0e2affabc3dede08cb", + "semantic_fact_key": "ledger_semantic_fact_v2_5f5fd26fe66d5cee7aa7b1ed", + "source_record_id": "gambling_commission.gsgb_2025.b1.aged_75_plus.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.22124383295989458 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8ac84fc300d4156277397b59", + "semantic_fact_key": "ledger_semantic_fact_v2_b0a116a273f56313001bb509", + "source_record_id": "gambling_commission.gsgb_2025.b3.aged_75_plus.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.14163827072675872 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_02941b1d4bd18b634978fca0", + "semantic_fact_key": "ledger_semantic_fact_v2_802807de58dd0b9e5f2e1e36", + "source_record_id": "gambling_commission.gsgb_2025.b1.all_females.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_females", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.572531637146481 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d8b117e8704d094665b7b518", + "semantic_fact_key": "ledger_semantic_fact_v2_70bfda29248b82aa21e4b698", + "source_record_id": "gambling_commission.gsgb_2025.b3.all_females.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_females", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.4446262711172064 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_eed44be1fe0e4fee52597718", + "semantic_fact_key": "ledger_semantic_fact_v2_cef98ab010d0cfb307655734", + "source_record_id": "gambling_commission.gsgb_2025.b1.all_females.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_females", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3796527049626497 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5e596497eb28c44675e66b39", + "semantic_fact_key": "ledger_semantic_fact_v2_3412137ca06b7595c145a580", + "source_record_id": "gambling_commission.gsgb_2025.b3.all_females.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_females", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.23800062795169447 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4cbd7a4307d52fa6e2d09a22", + "semantic_fact_key": "ledger_semantic_fact_v2_7c0ba79d73003d916f111002", + "source_record_id": "gambling_commission.gsgb_2025.b1.all_males.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_males", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.609037990753169 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_731e40021b6821ed94500665", + "semantic_fact_key": "ledger_semantic_fact_v2_d08e0a07960ddcf2ed0f7bf6", + "source_record_id": "gambling_commission.gsgb_2025.b3.all_males.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_males", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5056791375561801 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2d5cea7c48e6936693573175", + "semantic_fact_key": "ledger_semantic_fact_v2_d89201b3744c2f8b0f31759b", + "source_record_id": "gambling_commission.gsgb_2025.b1.all_males.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_males", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.42601463955924446 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7f830f1a20ad56ad74bcdc7c", + "semantic_fact_key": "ledger_semantic_fact_v2_aa71008b7e8e2aa1bb33c301", + "source_record_id": "gambling_commission.gsgb_2025.b3.all_males.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_males", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3044305399626653 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_def0f6880c1970a333845236", + "semantic_fact_key": "ledger_semantic_fact_v2_0a1525cc6ea62b9d3cd8433e", + "source_record_id": "gambling_commission.gsgb_2025.b1.all_participants.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_participants", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5903138417393634 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e1ef442b8c98fea3c222529b", + "semantic_fact_key": "ledger_semantic_fact_v2_46bfedea816a846dce0e660f", + "source_record_id": "gambling_commission.gsgb_2025.b3.all_participants.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_participants", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.47422605081965163 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_841d4ad82c2f9f7e4b1cbce8", + "semantic_fact_key": "ledger_semantic_fact_v2_887e2200c65d5177bf4542de", + "source_record_id": "gambling_commission.gsgb_2025.b1.all_participants.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_participants", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "all", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.4022150727251686 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_05f741dadc49157e5a7eb79b", + "semantic_fact_key": "ledger_semantic_fact_v2_1306737cb6410a8315d047a6", + "source_record_id": "gambling_commission.gsgb_2025.b3.all_participants.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "all_participants", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2702253810105367 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bfbe14399e7012bf897762c2", + "semantic_fact_key": "ledger_semantic_fact_v2_668cdc7e931ba549fa9146f8", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.031782369633691146 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b5f5ad6fcd983e55dd54f0c4", + "semantic_fact_key": "ledger_semantic_fact_v2_abdbe48c139b5abb0d4adfd8", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02521352848630247 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c7c42043a6b39789de09ee0b", + "semantic_fact_key": "ledger_semantic_fact_v2_f96a63d66ecef56a650144a5", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.017723292669311407 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_09f8ed54fc1578832aaf6845", + "semantic_fact_key": "ledger_semantic_fact_v2_8a4159f37241c88df7e50fbb", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.018247320666710917 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_70bdf2b3a302070790ccd152", + "semantic_fact_key": "ledger_semantic_fact_v2_e6f2d75f3a830786af5e0dc2", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.017670646473412776 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d697a8a168a659949ad3d59b", + "semantic_fact_key": "ledger_semantic_fact_v2_b5a5ee5cfb0bc9fa215f648b", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.010443045859300153 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4f22f2a2daa5a223e731d6ee", + "semantic_fact_key": "ledger_semantic_fact_v2_34f0e0403106f49ff6f39c9f", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.008632440190282415 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_96eb25de5c623b223a395414", + "semantic_fact_key": "ledger_semantic_fact_v2_ba414e7b7fa2707c73a5219f", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.01860401019311561 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4d35a3e570da630b6300d16d", + "semantic_fact_key": "ledger_semantic_fact_v2_71dab2602febe8afd7783e59", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.013989874451993942 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7c900b81c0b8823658a888b4", + "semantic_fact_key": "ledger_semantic_fact_v2_f4b7986657edbf8e62825ed3", + "source_record_id": "gambling_commission.gsgb_2025.b9.another_form_of_gambling.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "another_form_of_gambling", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "another_form_of_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.023545734165811467 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f50586126401d4744075da22", + "semantic_fact_key": "ledger_semantic_fact_v2_2168b0cc1c52d9b16937c832", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.20406551559291067 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_84011a9005246a9df624d733", + "semantic_fact_key": "ledger_semantic_fact_v2_5d545fe6748dea51a723b800", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.24211559899690344 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_41957546877784280440fcbb", + "semantic_fact_key": "ledger_semantic_fact_v2_343f085da80a28dcd354cc04", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.27900115980015977 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cdd4215e88fa0498a97406be", + "semantic_fact_key": "ledger_semantic_fact_v2_c63e483b09255548963b738e", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.30501069386787755 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f2d3776b2fcb152df3f77f05", + "semantic_fact_key": "ledger_semantic_fact_v2_f56df127b18a4c80576273f9", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.30752820832914113 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_333a65d674287826747d7b96", + "semantic_fact_key": "ledger_semantic_fact_v2_4364cbce7e7c57ef8b63cd01", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3095958760878065 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_39aab8413bfce89ac52e3b9e", + "semantic_fact_key": "ledger_semantic_fact_v2_4cb277c37536d8f19a6c4db4", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2705727255144782 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_23f0ad4599af6707b90b99a2", + "semantic_fact_key": "ledger_semantic_fact_v2_7faa9fc093f1b8aadaec6b59", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.27725118904939744 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a3ca1bb0f6a383c9bbb93c85", + "semantic_fact_key": "ledger_semantic_fact_v2_4a1ac163fe5acfd6908f71f9", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.26915208224057063 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e5e83001c65017b98106c63a", + "semantic_fact_key": "ledger_semantic_fact_v2_c1ed013b53dda85a1082b231", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_in_person.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2856106056810406 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d26734610097427c11b7a694", + "semantic_fact_key": "ledger_semantic_fact_v2_dce10831963ed7e307559b06", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.23407437235758352 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f86a2a648577203783ab9334", + "semantic_fact_key": "ledger_semantic_fact_v2_d35548edbc321f7919e9ba4c", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3390888237665197 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1cb02d8a9e16f5be75d4a6f0", + "semantic_fact_key": "ledger_semantic_fact_v2_dec4d2a4aa862befd8e21980", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.40669407923107476 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_378a91283abffb79bb1b28e3", + "semantic_fact_key": "ledger_semantic_fact_v2_77725f92d77cdced7e09a293", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.43943336920157544 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_83831c27b6104e99a6c545d2", + "semantic_fact_key": "ledger_semantic_fact_v2_f0a45538d88a4c3676ba9529", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.45771543162366085 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5f43ed76c4b3a71828f3687f", + "semantic_fact_key": "ledger_semantic_fact_v2_56243065007ed6eac77aa029", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3892839835565183 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ae11155557d1c6c46d648e75", + "semantic_fact_key": "ledger_semantic_fact_v2_87d3b37ed21d3db523110f0b", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3093128624752916 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_530d105b0aa5dc71f0ede437", + "semantic_fact_key": "ledger_semantic_fact_v2_908352c7ccf5d93e52cc830c", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3794066593360569 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_60ee2f8af53e41d3fcaff86f", + "semantic_fact_key": "ledger_semantic_fact_v2_0aa9055be276bbf706130fdf", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.34425107167783286 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e49879527cd5611296a7e5a2", + "semantic_fact_key": "ledger_semantic_fact_v2_685595e6ba9577b6de2b613f", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_gambling_online.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_gambling_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.4168050955911777 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_20597aab80808ad14a7bc712", + "semantic_fact_key": "ledger_semantic_fact_v2_033b4b19ce73722204b85122", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.12338584872906093 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f96662d317f254ef8937bce9", + "semantic_fact_key": "ledger_semantic_fact_v2_fd3cb109ed23b81571b2714d", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.25707197236508766 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3492beb01950deb732fa84e3", + "semantic_fact_key": "ledger_semantic_fact_v2_96450fc906223a1240579cb3", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3638211603392755 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2e3e54afc0ed6418f3906de7", + "semantic_fact_key": "ledger_semantic_fact_v2_ba794ffa475a77d6536dba36", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.44258669434710546 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_84771e5ee3a183f90488c59c", + "semantic_fact_key": "ledger_semantic_fact_v2_9c43e6be0082c902ca2506cd", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.48096123949521874 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_59c350725594dc6cc6ebdf62", + "semantic_fact_key": "ledger_semantic_fact_v2_8f5042317d085099f27d21a9", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.44705216402061654 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_981cce42c2a2d994529c723f", + "semantic_fact_key": "ledger_semantic_fact_v2_13f5f5e70d7544e78b0a701a", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3685185850593368 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7474ab3bea96ec4ac163adfb", + "semantic_fact_key": "ledger_semantic_fact_v2_c81b022bbf641a0636085893", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.36489943983302553 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d1656bb2cca1d1e985f997a3", + "semantic_fact_key": "ledger_semantic_fact_v2_01edf83e12856fad07af4610", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3499075194854373 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_55c336a3b2bf78aa437bcb1e", + "semantic_fact_key": "ledger_semantic_fact_v2_efc755c015b763f5c9ec8959", + "source_record_id": "gambling_commission.gsgb_2025.b9.any_lottery_draw.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "any_lottery_draw", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "any_lottery_draw", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.38099504176260696 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_300d5fd89358339168b356ef", + "semantic_fact_key": "ledger_semantic_fact_v2_7794dd208d6e5475e88977db", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.12815314055840568 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_46fd26f80ccffeab382c85c2", + "semantic_fact_key": "ledger_semantic_fact_v2_1c12e7bc94366c19a2b34910", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.13509496292599255 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2ebf7638dd0abb02dd43f713", + "semantic_fact_key": "ledger_semantic_fact_v2_a88da6a9550b4d8cb3a0fb86", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1141095212007061 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fd41e25a6b32f4be28491114", + "semantic_fact_key": "ledger_semantic_fact_v2_ed55e7b35c99c776b6500bca", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.10877440941368499 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4cb7c641a3dcf5e99df3ef5a", + "semantic_fact_key": "ledger_semantic_fact_v2_11b7064c5e37e402858b3849", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.08002736580402883 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c5a443fef0a53665f9c4b0d4", + "semantic_fact_key": "ledger_semantic_fact_v2_b93cda92c8c64fb60750bbbb", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05861530146868841 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0b768d8361dad1740437743b", + "semantic_fact_key": "ledger_semantic_fact_v2_70bef2ff56b3802ad94bf81d", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03727413887893565 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6f8ef15f9e3f0ce5a9e69483", + "semantic_fact_key": "ledger_semantic_fact_v2_5816f326644c1eeb93904478", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.09766839517162401 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3d0cfdcbc2b8b3fac128f85e", + "semantic_fact_key": "ledger_semantic_fact_v2_2e430b1fc0570f4449228e42", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0480395194565029 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ba36966459295e2ecbc512d7", + "semantic_fact_key": "ledger_semantic_fact_v2_91e136dc74098fbdb820789a", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "betting", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1503093291525794 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_025be8d2f52c91be0da3037a", + "semantic_fact_key": "ledger_semantic_fact_v2_886d98e4e5331499db8ddb82", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.047144589794699696 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_27a2ec481ee9b921859d07a1", + "semantic_fact_key": "ledger_semantic_fact_v2_a4ad9932565634dd55050aee", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03715696615152249 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_172cb77abcf74c6094c26c1c", + "semantic_fact_key": "ledger_semantic_fact_v2_02ee5199983206f055cc6346", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.030330324747555707 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_41992e1a45e49db9feb938e2", + "semantic_fact_key": "ledger_semantic_fact_v2_6c200e4d4868907f6b7adc92", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03072269015756317 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bc176a518e54f3c0e5bc96a1", + "semantic_fact_key": "ledger_semantic_fact_v2_aa3f2c76d003df9f9b76c523", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02853549963776648 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3e4508565a642bb2d45e2b52", + "semantic_fact_key": "ledger_semantic_fact_v2_02b155da444df3fe9a912a13", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02601978629057394 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_83dc4efea6262592d3ea6501", + "semantic_fact_key": "ledger_semantic_fact_v2_530addd48e04d8edbc56d487", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.021244278317513472 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_413ad13cd5a55001be411ef6", + "semantic_fact_key": "ledger_semantic_fact_v2_4de6408cbf70f49fc81811aa", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0314516234175777 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_08f99bb3e96a6c6bf17ab196", + "semantic_fact_key": "ledger_semantic_fact_v2_d812db9273d560e04b1b5ab2", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.014879222043502352 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cbf6c5616f4fb69490ae492c", + "semantic_fact_key": "ledger_semantic_fact_v2_3df5fa60da4ddefcb7d7e4dd", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_in_person.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.048847182784909196 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a41c4ab9ccf8aa29ebea32b7", + "semantic_fact_key": "ledger_semantic_fact_v2_057d16aefc1845eb25b35941", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.11399698597474953 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f313f4659c4910c4163098ce", + "semantic_fact_key": "ledger_semantic_fact_v2_5108a8d003f057ee8e9ed286", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.12240147340725926 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1455304c9e5e7ae0b3a47092", + "semantic_fact_key": "ledger_semantic_fact_v2_b780a4e41888d4737ea1a5b3", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.10461048623828313 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8e865735c25c26b96a7d7b92", + "semantic_fact_key": "ledger_semantic_fact_v2_19467c9fb7688d9827f6d908", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.09699870902796562 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ee5687c084052057cb26425f", + "semantic_fact_key": "ledger_semantic_fact_v2_2cfd37e89b89e63e1fd6d1b1", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0636971729028476 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_385d5578e1193ffbe12e700b", + "semantic_fact_key": "ledger_semantic_fact_v2_6ca83ee73018e8c7f981d426", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.043482404353349866 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_df8e2a2ff477cf5b7f09798d", + "semantic_fact_key": "ledger_semantic_fact_v2_3a8fa6bb36551adba495b71a", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.01999068862158299 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_dce609f58d43c9165f91a77e", + "semantic_fact_key": "ledger_semantic_fact_v2_4df68dfb687c2178383c4cd2", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.08414733506047618 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9d8c72c4eb836c15690a963b", + "semantic_fact_key": "ledger_semantic_fact_v2_ba5950985aa483c701553f84", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03805830020283407 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a9f3e670ca81ead217e13443", + "semantic_fact_key": "ledger_semantic_fact_v2_121ba1a46196c7dabc66812b", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_sports_and_racing_online.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_sports_and_racing_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "betting_on_sports_and_racing", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1331311243332415 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9c71a8011998414bb04b7173", + "semantic_fact_key": "ledger_semantic_fact_v2_26554556ef14d6011bc0bcaa", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.025401427537875026 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7ea1120c8f781b1e7275b7ce", + "semantic_fact_key": "ledger_semantic_fact_v2_7ba1269c0dbd8693638ef463", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02298506697467165 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_582963258bc8f607e48ba97a", + "semantic_fact_key": "ledger_semantic_fact_v2_53925ee17df8419771aa799c", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.016959502690070634 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c985d00cd6fade06c77cd750", + "semantic_fact_key": "ledger_semantic_fact_v2_10d1d9e3cf2f3499cbcd584e", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.00874018613631317 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_115dc7339153282c37d361ce", + "semantic_fact_key": "ledger_semantic_fact_v2_34358a08fc91167a2f5edf85", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.005843082907075425 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_937aa09315e50c01f89b807e", + "semantic_fact_key": "ledger_semantic_fact_v2_2cd33fe49eca08a4b446b44c", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.002040867023186958 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fc3fe915c7bd5149712e3043", + "semantic_fact_key": "ledger_semantic_fact_v2_8e895fc9fffce9788f6fcc5d", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0012684775442459674 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b6e92dbe2f8101e2f014e96f", + "semantic_fact_key": "ledger_semantic_fact_v2_4802035ed199bf241003f391", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.012149761774045906 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_63259a5c6938649ca3a8eb65", + "semantic_fact_key": "ledger_semantic_fact_v2_f6ca639346989c8b83a16324", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.006275618794904038 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1a92bf410af9abc86d969b3d", + "semantic_fact_key": "ledger_semantic_fact_v2_2a6875936b8dbb91625bce0f", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_in_person.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.018264422687150686 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_24d040fcb84a684e3a155735", + "semantic_fact_key": "ledger_semantic_fact_v2_6b17338a9b069128310a05e3", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04128201574665554 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a6b9085bab01cac22a8bbc88", + "semantic_fact_key": "ledger_semantic_fact_v2_614199c086a985b3715ac8de", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.027555678129545926 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0eb31bc79c21c77b87fad5ad", + "semantic_fact_key": "ledger_semantic_fact_v2_60c3df1a9b5e221595ea6576", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.021466926346929746 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3ec751f978214b9eda3ec5af", + "semantic_fact_key": "ledger_semantic_fact_v2_180b029a5ebed9a349702678", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.012687922337941495 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0108aa898e5f297d75163b59", + "semantic_fact_key": "ledger_semantic_fact_v2_6cc058ca09e87c9e6d8385d7", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.006740696200940308 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_935a44a18649779a8449b67a", + "semantic_fact_key": "ledger_semantic_fact_v2_b21c5f8d5c8fa08fc1d15405", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0032930727780289193 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5516ae28e2b68cbcd230b644", + "semantic_fact_key": "ledger_semantic_fact_v2_e25662516ea021957dc597b4", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0012689083193212736 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_29bc29d924820c24c65ef801", + "semantic_fact_key": "ledger_semantic_fact_v2_549d989de41de10a72590eea", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.016207406893347473 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fcd7f73abc6f5bd2f75eae3d", + "semantic_fact_key": "ledger_semantic_fact_v2_bcfeb9bfd5998372fa2e5951", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.009217275813970466 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4c45e53652dca7d05af49537", + "semantic_fact_key": "ledger_semantic_fact_v2_f202db0770bb579d650e0839", + "source_record_id": "gambling_commission.gsgb_2025.b9.betting_on_the_outcome_of_events_online.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "betting_on_the_outcome_of_events_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "betting_on_the_outcome_of_events", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.023520441207255244 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7fb6b5093bb03f7b4661670b", + "semantic_fact_key": "ledger_semantic_fact_v2_57485e9e419918b22efae0ff", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05748527516892485 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3ce9eca52feffaa4990ce16f", + "semantic_fact_key": "ledger_semantic_fact_v2_68b1e737a01c3f91045fea13", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05240200710105542 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0cb0795bd62395c5310e5871", + "semantic_fact_key": "ledger_semantic_fact_v2_4e25004067a46b8c24d27984", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05048381385390318 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_55ae1d34ec0d83f580364d16", + "semantic_fact_key": "ledger_semantic_fact_v2_56e236e76b79b8c82fd6d878", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.038228675707642996 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_291803bf347d52bf03c6a425", + "semantic_fact_key": "ledger_semantic_fact_v2_a4dbce916d77cd6ce29a2fcc", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03676073993504992 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_22bc294d87c9997ada4fa528", + "semantic_fact_key": "ledger_semantic_fact_v2_d26d78dfaefddf0b59675099", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04616382517367496 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_addf61f40c1b7f57427c7c0d", + "semantic_fact_key": "ledger_semantic_fact_v2_451090114b5df0d82f7d02c5", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03140437745734973 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_07d7402e927a92500bca1d94", + "semantic_fact_key": "ledger_semantic_fact_v2_4591f2d846f767ac8ff2cf26", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04481678680373462 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_beca152e3b7affd67909b162", + "semantic_fact_key": "ledger_semantic_fact_v2_0d8d0df210456b0e77421128", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05688565641658453 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b08c77d8ab42d72c45466f7f", + "semantic_fact_key": "ledger_semantic_fact_v2_cfaeff79e5623ecd98cc6c91", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.031885038008246776 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_39b349846d3cb6282ea142ca", + "semantic_fact_key": "ledger_semantic_fact_v2_48ee71ae4b15e6eb322fb9a5", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04865130056996034 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9882c446a9667b483a007fe3", + "semantic_fact_key": "ledger_semantic_fact_v2_0bf6e133497b95a0da396cf3", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03715442301275987 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6acf7d43d0aeea9f978baecd", + "semantic_fact_key": "ledger_semantic_fact_v2_d9fe80db12f95bf6d4c85756", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03179662165684946 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_97e8eb768d71bdbdfa3a399b", + "semantic_fact_key": "ledger_semantic_fact_v2_5a1bd61435557ef386548233", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.025019726417753085 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a2411ff233c0eaf2f43552c6", + "semantic_fact_key": "ledger_semantic_fact_v2_19bdf34ea5a7f4b77341836a", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02727264604467179 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_70bf9fe026df1da554979f6b", + "semantic_fact_key": "ledger_semantic_fact_v2_72387b6ffe47a3647e55d0cd", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03940065647529965 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a68fdb442a8deda4b534f64d", + "semantic_fact_key": "ledger_semantic_fact_v2_6dc4b40a43f93b9bb0d13297", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0275038424129872 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_725c64d331785d2145f0dcda", + "semantic_fact_key": "ledger_semantic_fact_v2_0c7ebb2f0f10395e04497fc8", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03315106234405631 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7d4d820c283c076d376eb6c5", + "semantic_fact_key": "ledger_semantic_fact_v2_8a81f07725a72d691465f8a0", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.042052637591057124 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0882ae0ec35e0ffb03be1912", + "semantic_fact_key": "ledger_semantic_fact_v2_d3ee40ec114d459e34397aa4", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_at_a_venue.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_at_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "venue", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.023619809757679494 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fb9f4611ae304e24575bfaa4", + "semantic_fact_key": "ledger_semantic_fact_v2_bbd5c2212f29edc2ff1dba78", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03655507699213411 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6dff571572546869da1378ba", + "semantic_fact_key": "ledger_semantic_fact_v2_eead61a5948b4fd1f8e5423d", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02972276430205658 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_063c393abf7ef6bb96f153b3", + "semantic_fact_key": "ledger_semantic_fact_v2_b0acb92f2d42010dd819f1d5", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03150141074967753 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_836cbc01349ec792b0b75ba3", + "semantic_fact_key": "ledger_semantic_fact_v2_dfd420f2d3e5a88d55e7262d", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.020450348648410045 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9117e7af8311cd91411a6943", + "semantic_fact_key": "ledger_semantic_fact_v2_2f3111bc53b1dd3d932644fb", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.014852946273838406 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cd4f59fe83e78b62726f6bfc", + "semantic_fact_key": "ledger_semantic_fact_v2_bc985af407e88684ca77ba4f", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.011059844984847508 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ffadaed0bf0536afe19ebb4d", + "semantic_fact_key": "ledger_semantic_fact_v2_57db04342d732bf987ad61e0", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.011062999245548717 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_874548e278c4f6e48a87e047", + "semantic_fact_key": "ledger_semantic_fact_v2_6660cb15284d614e9eb8ee89", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.022438570205985154 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1d3ed811648756660e142133", + "semantic_fact_key": "ledger_semantic_fact_v2_9ef6ecebb0f5dc3cdaced3f5", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.024722637807824303 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bce0acae50506b8b168a4810", + "semantic_fact_key": "ledger_semantic_fact_v2_ac17413e3b21829aca04d26a", + "source_record_id": "gambling_commission.gsgb_2025.b9.bingo_online.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "bingo_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "bingo", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.019842633291825132 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c261c05359c457b6850e8b3e", + "semantic_fact_key": "ledger_semantic_fact_v2_0a459561d4f432563259fa3c", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.08632314880039366 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9d7a9f7783e2181264e2319c", + "semantic_fact_key": "ledger_semantic_fact_v2_9c8bdb360dcb0488055b923b", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05875613434216638 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_499951f8dbb2ca9eb5e6d40f", + "semantic_fact_key": "ledger_semantic_fact_v2_0dc2fdc0f0a3e061aa7f6bc5", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03890089116913164 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c5d5222776146db3ba1e3b70", + "semantic_fact_key": "ledger_semantic_fact_v2_360c94aaf66536e3cbb1ae75", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.028277431164715473 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_aea0b508f862e1a04bdf1bfa", + "semantic_fact_key": "ledger_semantic_fact_v2_db84310fc980f6fc4e5886da", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.014880504337844465 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b66f9b60b842d708c6eba0da", + "semantic_fact_key": "ledger_semantic_fact_v2_f16800f554f27f736bd9dd1e", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.007173202344448204 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4879d929b6c36bbe1be7e8ab", + "semantic_fact_key": "ledger_semantic_fact_v2_6dd1801874463318680ce89d", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0047314541143763204 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d343032d36d32af156f0ea71", + "semantic_fact_key": "ledger_semantic_fact_v2_2bed18c49485fcebf9f446c2", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.033724950553530385 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_44abd47e984c20c2e58903ff", + "semantic_fact_key": "ledger_semantic_fact_v2_0a447b80079085bd68f1825c", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.017710425093749853 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ede58c4ab95949fde6f3fead", + "semantic_fact_key": "ledger_semantic_fact_v2_aff5330a16e076b91390d296", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.050639910137577016 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3456fc8794861eeee8c3d5bf", + "semantic_fact_key": "ledger_semantic_fact_v2_f0f2f64bf5836238b3fae9f6", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.036817122044387245 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_433f494f701ec18e8e702d7a", + "semantic_fact_key": "ledger_semantic_fact_v2_c46bbf0f7932c1ea0fa7e434", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.027245824159442628 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_66369de15298b64518cb67f6", + "semantic_fact_key": "ledger_semantic_fact_v2_3383ee8d6cac18421a16b0f0", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.016190151151613888 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_31848254c14a0877bc77cfd0", + "semantic_fact_key": "ledger_semantic_fact_v2_a247abd476b7c6f1c31828c2", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.008586060759795532 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b6434f31611054e37e000e2a", + "semantic_fact_key": "ledger_semantic_fact_v2_682ce54fa1896aeb81d81948", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0035477060655378246 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_47b09c39a05af5de4aee946f", + "semantic_fact_key": "ledger_semantic_fact_v2_5b640ee3e065c2c59ae5e234", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.001956095045667367 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6754185cc5f7f7ce5d94e64f", + "semantic_fact_key": "ledger_semantic_fact_v2_deaa4e9a9364db606b576113", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0012003554611915862 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_883ae29d734c11d712e38324", + "semantic_fact_key": "ledger_semantic_fact_v2_b353c2259fa08191582b8873", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.013463223704121112 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_39b9a0e53efec4482ad8a2cf", + "semantic_fact_key": "ledger_semantic_fact_v2_8f6f91676ee193e40410e018", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.006953953075054277 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f4b83dad4dce11234e9addbc", + "semantic_fact_key": "ledger_semantic_fact_v2_1abccbc2c0f49d3fb8086cdf", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_at_a_casino.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_at_a_casino", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "casino", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02040142158924274 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e8ef20e14f97c7b330b08bb3", + "semantic_fact_key": "ledger_semantic_fact_v2_a29d60210b2b15a00cafff2b", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03725561815095105 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f8abfab9433a40497a40b73c", + "semantic_fact_key": "ledger_semantic_fact_v2_ed9efafe4f74d687e35c035e", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.027481796398325535 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cb1cf1d61666f8b8aeca0dc5", + "semantic_fact_key": "ledger_semantic_fact_v2_8ebf3740f51cfaccc64edae2", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.01896391438276114 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6c1a4c3add905551ad841bef", + "semantic_fact_key": "ledger_semantic_fact_v2_f0bf00feaa3af568c2ef177a", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.00955499386989541 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b7bfc097890d703e900c4a59", + "semantic_fact_key": "ledger_semantic_fact_v2_b1996b040f95f5b247db23d2", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.005266221586897053 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_78980ec41c62bbf5d962cb1d", + "semantic_fact_key": "ledger_semantic_fact_v2_abc3f5fe5b7f6f93aaab4d47", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0036082985639723604 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6f0480401b52e722d5ac2cc3", + "semantic_fact_key": "ledger_semantic_fact_v2_84f040bd23c02f71e8c84cb8", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0021434762173472358 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0ab6f44018a73fb7fa1a4890", + "semantic_fact_key": "ledger_semantic_fact_v2_db577b8205390a4fe8c487bb", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.014763114484447963 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_aa85f5104a1918a6ba637437", + "semantic_fact_key": "ledger_semantic_fact_v2_43ef51ef3d4c90a540af33bb", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.008682465533057815 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_480e31778581b882343ced89", + "semantic_fact_key": "ledger_semantic_fact_v2_a22496d68912b8be4b3ea6ec", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_on_a_machine_in_a_venue.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_on_a_machine_in_a_venue", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "machine_in_a_venue", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02124752172306934 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_31fbef7cc5931cb10d9e4e97", + "semantic_fact_key": "ledger_semantic_fact_v2_03eef3ba314816c2464a9007", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06948425541548048 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6245eac42728acb3c8541dcf", + "semantic_fact_key": "ledger_semantic_fact_v2_09420818c336e2adf8aac238", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.047973747164650235 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cb877ee06aad831ea279a904", + "semantic_fact_key": "ledger_semantic_fact_v2_9c624fb9f3cc81421b5a8e9c", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.028288622896852838 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_69b5a52f53b3d22126d9cde3", + "semantic_fact_key": "ledger_semantic_fact_v2_9aeac8a0bb141ab54deac21c", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.021893864212390906 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5de637d0feba074e69476aee", + "semantic_fact_key": "ledger_semantic_fact_v2_400f13dcb2d35a51d13042f0", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.011000733165090948 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fee329ca8fe7a7799bc3d528", + "semantic_fact_key": "ledger_semantic_fact_v2_db6a2d9cd6e98c27d83dacfa", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.00421485575676125 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1077f88de49382bc44b4b28f", + "semantic_fact_key": "ledger_semantic_fact_v2_43a396fc46c41182f79750fc", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.00425933822624178 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_27dd92ca430f17500d3431db", + "semantic_fact_key": "ledger_semantic_fact_v2_f6b7c56b940c3925b8c2d046", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.026299906821657646 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_de2119269fb6ca551e224dfb", + "semantic_fact_key": "ledger_semantic_fact_v2_e84de97893e3ca2d15743b55", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.013009316631499521 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b447ddfe13e3f7c4bce54c6f", + "semantic_fact_key": "ledger_semantic_fact_v2_de215b28f9d2548a47b2911a", + "source_record_id": "gambling_commission.gsgb_2025.b9.casino_games_online.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "casino_games_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "casino_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04031133897429112 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_063170a8c1d4aed275efc8ec", + "semantic_fact_key": "ledger_semantic_fact_v2_8c0a953a1f9e926b56154812", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_18_to_24.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.46612700702639015 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4f4c475c05b08bad8bce7340", + "semantic_fact_key": "ledger_semantic_fact_v2_93aa7f22d63cab41e8414256", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_18_to_24.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.28203116556021685 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_518ccaa653b6780bb191238e", + "semantic_fact_key": "ledger_semantic_fact_v2_6d6c3bab4f152142489f1d73", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_18_to_24.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.43627882985934524 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_432597170e278c3e79efcb77", + "semantic_fact_key": "ledger_semantic_fact_v2_499e09a5cb0d6c69f2c3d7ea", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_18_to_24.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.24232243374738135 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_89a3d0429739c8b9762712bd", + "semantic_fact_key": "ledger_semantic_fact_v2_68b5c181b6c3fdadc4d31d59", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_25_to_34.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5434610525582656 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ce84c654a8a9b340338833a5", + "semantic_fact_key": "ledger_semantic_fact_v2_bc65d4701545e6431e54be45", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_25_to_34.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.384037758407204 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_269137bed1d8ca7a8c9d51fd", + "semantic_fact_key": "ledger_semantic_fact_v2_64b7d6cbf940a4e9ba885337", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_25_to_34.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.45589379061166757 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d42d33394226657b1397fe98", + "semantic_fact_key": "ledger_semantic_fact_v2_effba9efd17d9a791e2c490e", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_25_to_34.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2781310708217462 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a49253de4902cc24d32f8483", + "semantic_fact_key": "ledger_semantic_fact_v2_16f9e2f210ad86b4b479c8d5", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_35_to_44.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5950547615758479 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1bcad632ca37ae30ee962e16", + "semantic_fact_key": "ledger_semantic_fact_v2_9c55ae1013fa1f5a4e5127a6", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_35_to_44.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.44544800384496547 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_dd1d0b5b565f8082d486aab7", + "semantic_fact_key": "ledger_semantic_fact_v2_4b6a1690aea1f8707c3ab79e", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_35_to_44.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.45811363889379636 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6af003a29c43052dabb700d7", + "semantic_fact_key": "ledger_semantic_fact_v2_d28f32938e67e51c90bf6b6a", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_35_to_44.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2943178098071104 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_150b68659d91eab6ca28a3ad", + "semantic_fact_key": "ledger_semantic_fact_v2_d2d01088ced386fe7ba7c496", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_45_to_54.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.6205750617704721 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c8b428db6f67d09737359f0c", + "semantic_fact_key": "ledger_semantic_fact_v2_6545f018c3302322e87a38fb", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_45_to_54.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5227838513884341 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0efae2310f214c01ab5e50cc", + "semantic_fact_key": "ledger_semantic_fact_v2_e835970b7fef4837715025c8", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_45_to_54.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.40849326461591695 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d014a4e7463dbb936e2999ec", + "semantic_fact_key": "ledger_semantic_fact_v2_cf6b671f15f9248df8c84b00", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_45_to_54.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.27490460133811306 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5535f73d3f11019846b2d956", + "semantic_fact_key": "ledger_semantic_fact_v2_ebbd706df007f8754c62443c", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_55_to_64.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.633014787528788 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f028cbc4a5f855b86bcd86f9", + "semantic_fact_key": "ledger_semantic_fact_v2_3bb66bd2de61fae28bca301a", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_55_to_64.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5309887249577508 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d7d11df998414b436ec91667", + "semantic_fact_key": "ledger_semantic_fact_v2_e43be2cc8dc7edd5335ab4cb", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_55_to_64.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.35807655082488404 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c5f12345e78bebc0b24d6c37", + "semantic_fact_key": "ledger_semantic_fact_v2_19fa41db783664209745989d", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_55_to_64.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.22272686307759193 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_949992915c41650ad42f0381", + "semantic_fact_key": "ledger_semantic_fact_v2_c1980fc60a41726cf33d07e2", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_65_to_74.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5821120902780816 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_935665d0f7ea3df4ce7bda6e", + "semantic_fact_key": "ledger_semantic_fact_v2_2a11f277878db94f1388ad4e", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_65_to_74.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.47746025934270436 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_aa0f8be7e4e46c8c4a39b9e4", + "semantic_fact_key": "ledger_semantic_fact_v2_23cf8ffbc2566e9de0efd469", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_65_to_74.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.27329430179627834 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_465042788c82396b45437b0c", + "semantic_fact_key": "ledger_semantic_fact_v2_2bfc4201dbb776f7399719c5", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_65_to_74.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.170801436817895 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e75619d404df313a910e10d8", + "semantic_fact_key": "ledger_semantic_fact_v2_53ce98dff6f11c8c130e636c", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_75_plus.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.501718303283453 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c5ee882aa1e35bf5dce79b58", + "semantic_fact_key": "ledger_semantic_fact_v2_2f1d2d3a8e8b5d7032cc2723", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_75_plus.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.39346062259508285 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9fa4f8bb53895683af414e7f", + "semantic_fact_key": "ledger_semantic_fact_v2_93d6678be55e225d20b006be", + "source_record_id": "gambling_commission.gsgb_2025.b1.female_aged_75_plus.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "female", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.21020759821531879 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9c1af408f3ddf783bde79175", + "semantic_fact_key": "ledger_semantic_fact_v2_b1709e6c0b7da9a32ec2407d", + "source_record_id": "gambling_commission.gsgb_2025.b3.female_aged_75_plus.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "female_aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.13177942273571874 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6172305298559d1397c380eb", + "semantic_fact_key": "ledger_semantic_fact_v2_81a57ae73303eb56f4bd8c69", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03248778181890648 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2e0796891e0b993adca2ca28", + "semantic_fact_key": "ledger_semantic_fact_v2_7deba5789a4e731e6170f3d4", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.024253345101776694 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9b16620f79b587090f6cda8d", + "semantic_fact_key": "ledger_semantic_fact_v2_64bac14558da526018d8f6fd", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.016619816621274847 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e6353416258684ee91d5ae96", + "semantic_fact_key": "ledger_semantic_fact_v2_435a97214407f7a6cd2eb1e2", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.012245073828223213 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fde44e6f54df97b42023d470", + "semantic_fact_key": "ledger_semantic_fact_v2_83f9bd9d46952503d9345673", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.00873262257860716 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b694b4090c28e2d025efb424", + "semantic_fact_key": "ledger_semantic_fact_v2_cacedfbbde207595ebae1a0f", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.008223048096881165 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_17128736446ea64374226ce2", + "semantic_fact_key": "ledger_semantic_fact_v2_afac8d210f737a4305763dd8", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.008750455196575392 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d710bb8844f438e53ce9bbe3", + "semantic_fact_key": "ledger_semantic_fact_v2_fc4624e2194f85bd371538f2", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.015619356205724655 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f4ab01bd3c2f732600ef6e57", + "semantic_fact_key": "ledger_semantic_fact_v2_c2e41afe98fdc3af9ab4bfd9", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.005852944587256444 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2b570f96bc70304fe2ec992e", + "semantic_fact_key": "ledger_semantic_fact_v2_c1b876e9901caa05a0335c6f", + "source_record_id": "gambling_commission.gsgb_2025.b9.football_pools.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "football_pools", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "football_pools", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.026030322017838767 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4c497fbf5cac75bfba3ed4e7", + "semantic_fact_key": "ledger_semantic_fact_v2_887238f535b7b0726974a615", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07793308661604914 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5dcc4b48d9473f22b5d0f26e", + "semantic_fact_key": "ledger_semantic_fact_v2_556af14a503ca6674c0bf5c6", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07499792085223543 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_16964de6c2d64f7b016c2ccd", + "semantic_fact_key": "ledger_semantic_fact_v2_0ba6bcccbefcb1f1e2fedf66", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06799619961501822 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b610cbbeee37eba5ac2c2d81", + "semantic_fact_key": "ledger_semantic_fact_v2_6990f0be118944c7add3a5ef", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04631370137055334 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_65dd0c7da23392f7bea0d8ca", + "semantic_fact_key": "ledger_semantic_fact_v2_37ed7d7a9cd15d74fd7aa7f8", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.028599259705384003 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1d4760a44b86f21a5b2ddef4", + "semantic_fact_key": "ledger_semantic_fact_v2_ded54b69eff3a800ac16020f", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02233675648920327 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_caa3e35859f93ba7f9cd4549", + "semantic_fact_key": "ledger_semantic_fact_v2_86465f219b14d4487ea12af3", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.010192103081329753 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6706e822469b92dbd2df49b0", + "semantic_fact_key": "ledger_semantic_fact_v2_81ea9db703dbed4c66288138", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0483907650545061 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b0847832c9162d144ab0d7bf", + "semantic_fact_key": "ledger_semantic_fact_v2_756cf0cecf446fa07ae9f88b", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.038091043512689826 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e2ed6d628ce6a4b315e1a498", + "semantic_fact_key": "ledger_semantic_fact_v2_28eb8eae8734e5b0e05e6f2e", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_games.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05943382554881991 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_59df9772be629febe68ddf13", + "semantic_fact_key": "ledger_semantic_fact_v2_b8f795e473053fa4626b6f12", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05509111983815958 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1e3ecfd6d591ba905014b981", + "semantic_fact_key": "ledger_semantic_fact_v2_35df5d4cb431b1b46e85eeaa", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04894557051468271 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fb2186c0e17068924ec433d0", + "semantic_fact_key": "ledger_semantic_fact_v2_2e8be19f1e53b00eee90e2f1", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04322266877189703 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_900858b05f3674f1969cd221", + "semantic_fact_key": "ledger_semantic_fact_v2_79dd5e164fb6dc35227d482b", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.030652756774380775 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9d33f7f1b1362601ef0a1329", + "semantic_fact_key": "ledger_semantic_fact_v2_c0a6c578b8a1db49993935fa", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.018702746381401535 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_644cc2e1ff846a36e04f64f7", + "semantic_fact_key": "ledger_semantic_fact_v2_f67dccb9e51780aa89945ede", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.01603573030717434 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_be89a8e2568922a169c87a10", + "semantic_fact_key": "ledger_semantic_fact_v2_cafbce60c1e7d9319d93eeb3", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.00903214325035257 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1ff7b75f24e4baa631b9c617", + "semantic_fact_key": "ledger_semantic_fact_v2_84b26a035a76b7d24ef0a0ec", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03230291810367104 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_143c62754b88c09bff828faa", + "semantic_fact_key": "ledger_semantic_fact_v2_5d09b1b6f7aedd6f0cc11fdf", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02655261628812874 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8bbdbf8919d20ca20e0ee13d", + "semantic_fact_key": "ledger_semantic_fact_v2_f1d56c47720433ddaa7dcaf9", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_in_person.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.038482555433189215 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_be69a59db2ef49931686abf1", + "semantic_fact_key": "ledger_semantic_fact_v2_47c741a9d5427e5ccfbf82d0", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05298126925396751 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f13b250701dc3de6bdaa8569", + "semantic_fact_key": "ledger_semantic_fact_v2_f8fad6911d54f0a9a5ee560b", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05789489564613645 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5ee51e5e251a5e0ed9f40f40", + "semantic_fact_key": "ledger_semantic_fact_v2_6557f4d344cefa542f85d111", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.048462301249787586 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c72024573d9d4e02f0fa5b04", + "semantic_fact_key": "ledger_semantic_fact_v2_a4af8759f250704bf87b622f", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02943157222417974 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e5e08cf3433147211e59dfd2", + "semantic_fact_key": "ledger_semantic_fact_v2_0c160802a38559258a1b28d6", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.018591417571823327 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0b2afa0045c0c8d26d688d47", + "semantic_fact_key": "ledger_semantic_fact_v2_79a2e1fb61faf3d3ffdba205", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.009239347081510318 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1d13dee13f6e471547a252ce", + "semantic_fact_key": "ledger_semantic_fact_v2_04ef5731c389b31472efa095", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.003218580693582182 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_868c9d311a4a0226af0954f8", + "semantic_fact_key": "ledger_semantic_fact_v2_448724088841ae12128649b3", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03287080651087913 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3e6ebac713817c8ad7311b37", + "semantic_fact_key": "ledger_semantic_fact_v2_c6c4527d1492b06867a2d4af", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.024462894842015734 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e09edead95097952b142d04d", + "semantic_fact_key": "ledger_semantic_fact_v2_e16068e44066a78764fff620", + "source_record_id": "gambling_commission.gsgb_2025.b9.fruit_and_slots_online.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "fruit_and_slots_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "fruit_and_slots_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04187290364871995 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_19b8483e52ee3cb640df99cb", + "semantic_fact_key": "ledger_semantic_fact_v2_8fa2830c4db89cca12201e98", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_18_to_24.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.4909473237093072 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f187a9a0ed21e14ee42d8503", + "semantic_fact_key": "ledger_semantic_fact_v2_5323fec363ab1cba5923053a", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_18_to_24.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.37420611830227707 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d74998c216d4b9dd540a7d7d", + "semantic_fact_key": "ledger_semantic_fact_v2_d40d10caaca477fe50c84c6d", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_18_to_24.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.46244110318245474 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7a448c1ef359c733d0aba9d5", + "semantic_fact_key": "ledger_semantic_fact_v2_f03b54e922d8c795b201feed", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_18_to_24.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_18_to_24", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.34422970300849465 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3cb19becf5001abf6955d56f", + "semantic_fact_key": "ledger_semantic_fact_v2_70dfbfff1e1bba092965fc42", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_25_to_34.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.6086495591459933 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_40ea8c9b616c0ce56149d96e", + "semantic_fact_key": "ledger_semantic_fact_v2_755e5e9f50f362038c57b318", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_25_to_34.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.48210823641302236 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d43daf6136f44e7bf1c66868", + "semantic_fact_key": "ledger_semantic_fact_v2_95d6e8f181cc9e5074eb557c", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_25_to_34.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5314875618394584 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_68afa238bafb71947dedfb60", + "semantic_fact_key": "ledger_semantic_fact_v2_0f1cebd79be24f15a7564cb5", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_25_to_34.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_25_to_34", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3788336443519886 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_42bf5b9e4d74c12546589546", + "semantic_fact_key": "ledger_semantic_fact_v2_f64372d518358b131aff64e1", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_35_to_44.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.6570626097515043 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c535bd4befe58ff09f1de5f5", + "semantic_fact_key": "ledger_semantic_fact_v2_3e36cf1ca74e64bfe9d9afcb", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_35_to_44.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5423422940465065 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7d8ba1dff9d023ece421b1f5", + "semantic_fact_key": "ledger_semantic_fact_v2_5e7c1c7e29670a2b0f20f8e3", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_35_to_44.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5063874641406215 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5c8d872ed4a7625b5ceaac7b", + "semantic_fact_key": "ledger_semantic_fact_v2_f3a5d643fb748011b26b87b6", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_35_to_44.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_35_to_44", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.37630096293563 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_680dbd510413197237d19167", + "semantic_fact_key": "ledger_semantic_fact_v2_d7ff41d9f9f47c2a786fbe38", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_45_to_54.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.6496857252035804 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_95942c262c590c74f35f5bcc", + "semantic_fact_key": "ledger_semantic_fact_v2_568d90a7797328d76982b9a0", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_45_to_54.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5365175036892454 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_84809e035b12143f61bfcad4", + "semantic_fact_key": "ledger_semantic_fact_v2_383364d5f0ca065e6ba80636", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_45_to_54.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.46265064249018617 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5949593efd8cadd3b3cdfeeb", + "semantic_fact_key": "ledger_semantic_fact_v2_a67606ad96d731a9a7f19f6d", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_45_to_54.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_45_to_54", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.32756736680424275 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b08523bfe3a06e32292f7a64", + "semantic_fact_key": "ledger_semantic_fact_v2_0987a578cb7c67ac23ddf0a1", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_55_to_64.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.6437593297563025 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_142b195435911926e53b67a9", + "semantic_fact_key": "ledger_semantic_fact_v2_ac5a03483ba55963613998d8", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_55_to_64.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5660336936248104 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_189ffe1aeba91c15c821aa80", + "semantic_fact_key": "ledger_semantic_fact_v2_572313f43dc24cd75de4e442", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_55_to_64.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3772925596156624 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a1bd2b11f613456e2bc3e548", + "semantic_fact_key": "ledger_semantic_fact_v2_b4360e59b440b6fe74f31728", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_55_to_64.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_55_to_64", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.26064324660796606 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a90f4557180d4d668fc160c4", + "semantic_fact_key": "ledger_semantic_fact_v2_1b094bad758770f8331e40df", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_65_to_74.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.6036827160770639 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_81deb6d319d663b5279c56b1", + "semantic_fact_key": "ledger_semantic_fact_v2_c51153d3520ca878171743f2", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_65_to_74.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5278220751561369 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_de1c99576780c35d5cfb5de3", + "semantic_fact_key": "ledger_semantic_fact_v2_3afdb6d6e2411d18f94a2c9b", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_65_to_74.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.30844382377977625 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a4efa105893b5a1ede2a1b08", + "semantic_fact_key": "ledger_semantic_fact_v2_005950ed0a3297b6228c01e1", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_65_to_74.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_65_to_74", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2163918552541929 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_147b7375eeccd17905d35209", + "semantic_fact_key": "ledger_semantic_fact_v2_a80ba181e317da7a860ee30a", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_75_plus.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.5321269549020736 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_33af528b71c8df680410f405", + "semantic_fact_key": "ledger_semantic_fact_v2_3ef5009ade1dd8e72851c983", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_75_plus.participation_any_gambling", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_any_gambling", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "any_gambling", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.4400078052878234 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4a8101ab45e937c9dba70f2b", + "semantic_fact_key": "ledger_semantic_fact_v2_780883aa139c15144692dacb", + "source_record_id": "gambling_commission.gsgb_2025.b1.male_aged_75_plus.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b1", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_12_months", + "sex": "male", + "source_sheet": "Table B.1", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.23228983160699854 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_03ada5f6f9a5762d34210f4e", + "semantic_fact_key": "ledger_semantic_fact_v2_f62ba50ebce67c1288d416cf", + "source_record_id": "gambling_commission.gsgb_2025.b3.male_aged_75_plus.participation_excluding_lottery_draw_only", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "participation_excluding_lottery_draw_only", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b3", + "groupby_dimension": "gambling_commission.gsgb_population_group", + "groupby_value_id": "male_aged_75_plus", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "excluding_lottery_draw_only", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.3", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1509000963943343 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7665e6cdc8e646c302c111c9", + "semantic_fact_key": "ledger_semantic_fact_v2_0d65c043a13c01a4fc54da0a", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.11115995499977947 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_93392f70adc91f042043f821", + "semantic_fact_key": "ledger_semantic_fact_v2_fdb014eb90508be3fe5117bc", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.22105744408135145 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_38a5ae4d1a4094d058571a35", + "semantic_fact_key": "ledger_semantic_fact_v2_89f1f00ea561af3f2fff244b", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3255793391163912 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3cc22f11136010703d893603", + "semantic_fact_key": "ledger_semantic_fact_v2_f6b81d6fa2c3c31f7c39efdb", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.38526205530301993 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_adf531e89b1e2bb2ec612152", + "semantic_fact_key": "ledger_semantic_fact_v2_168e7b4ce1cdf53483594163", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.40925250605939895 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0bc146392f6249ec23e4a7c9", + "semantic_fact_key": "ledger_semantic_fact_v2_84dc6f2e24f25e20d2f260f9", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3608878274419982 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7faa077dd0c8826fed4e49ba", + "semantic_fact_key": "ledger_semantic_fact_v2_3bcf7146abef3f79000bfd8b", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2870177847736546 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_daa261754291ae54e29496d3", + "semantic_fact_key": "ledger_semantic_fact_v2_62ce26e8caee0116954735b6", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.31027491680584685 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_440e4124c2b4e0509dee112c", + "semantic_fact_key": "ledger_semantic_fact_v2_6179328889cb7c3de51e6415", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2812774493845725 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_497f7c0825c5c53d323c1b1c", + "semantic_fact_key": "ledger_semantic_fact_v2_0698a924aded6368c2fb2a51", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.34116446472047407 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_59e5deb4ecc5861de39d66e2", + "semantic_fact_key": "ledger_semantic_fact_v2_e2cb7e1024c9f46578bdd94e", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.071065774218181 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_23d60382cb3eab9b553014e5", + "semantic_fact_key": "ledger_semantic_fact_v2_f7db3ebb0ca2a6509228b460", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.08748302799605089 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_68043bca979259d4c869ec29", + "semantic_fact_key": "ledger_semantic_fact_v2_858c1d312983e404a0cf7b63", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.13783734225490715 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_52ad4a446005f8a50d8f74a1", + "semantic_fact_key": "ledger_semantic_fact_v2_70364b84df93384ea9fecf8e", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1874265455360343 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1f3298246f4847c9641af46a", + "semantic_fact_key": "ledger_semantic_fact_v2_b22caa547c2d49123a08171d", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.200112289537398 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_12ced0a1d779bedac7f17dfd", + "semantic_fact_key": "ledger_semantic_fact_v2_6bd335790357a471ad447699", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.21461816569175826 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9edd49c2632f2023ccb0bf99", + "semantic_fact_key": "ledger_semantic_fact_v2_b7aba32d7d928c435a5103d0", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1844584817391199 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ea73f1251c30f53ce8057cfa", + "semantic_fact_key": "ledger_semantic_fact_v2_c1e09ad618204f72480ca5ff", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1554726759674528 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_95551242d76779fc6fef3f7b", + "semantic_fact_key": "ledger_semantic_fact_v2_20a4000cd0d85b9f6c4a354e", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1437362748593144 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3132df09802062283ac1242b", + "semantic_fact_key": "ledger_semantic_fact_v2_62375dcd9f00f8ab1e1d812b", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_in_person.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1679600664910444 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_94a87a7c26c527629435c314", + "semantic_fact_key": "ledger_semantic_fact_v2_4e694b8911e70cd5ee52b359", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.09122576237819624 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2a46d49d163a081e8a881a5d", + "semantic_fact_key": "ledger_semantic_fact_v2_c9eb12ba3210d33ac9d6efe2", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.19176558121059128 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d96ad7e388248f502b010066", + "semantic_fact_key": "ledger_semantic_fact_v2_3c9c5fcaf4b30f74dc66f492", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2834164167710414 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_866c4b684061e5c38b115bc9", + "semantic_fact_key": "ledger_semantic_fact_v2_abf716dfac9738ef2e2fadd7", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.3238485412592884 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f1b9fd01b5ef5285b746668a", + "semantic_fact_key": "ledger_semantic_fact_v2_34394c405cbaa068b2d58c4d", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.33873374541860346 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b41540065be2b86a68e18c56", + "semantic_fact_key": "ledger_semantic_fact_v2_a2a0fa8df5ffdec3b7c37e8a", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.27892830514634176 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8a35060c06d4abfc748efd82", + "semantic_fact_key": "ledger_semantic_fact_v2_82aa4dc0e55984745b992f7e", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.21307063806210993 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2a01d62d8d77ed4f9cc92b9b", + "semantic_fact_key": "ledger_semantic_fact_v2_5631a0211afd1ba55f6a156f", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.2562690006678586 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bb34f6ebd9b098cfad039b40", + "semantic_fact_key": "ledger_semantic_fact_v2_998cf0b48e69baae5df54d67", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.22868587570839105 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_575537544c9a4f48d30f3bb0", + "semantic_fact_key": "ledger_semantic_fact_v2_5c03d4cbd5dbde791415c784", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_draws_online.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "national_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.28575849363871936 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5eb31da8b24c91134f709c1f", + "semantic_fact_key": "ledger_semantic_fact_v2_f62026ce39db714c975af89b", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06548388317968065 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4c660d995b29214c337623eb", + "semantic_fact_key": "ledger_semantic_fact_v2_0f0bac13c6675ae91f42d4fd", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07871942553339573 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_38d23b06a4c0953e6664803d", + "semantic_fact_key": "ledger_semantic_fact_v2_4105be0c037354e7c076a294", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.09081434665165157 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bafda940042b5be937bf97ac", + "semantic_fact_key": "ledger_semantic_fact_v2_b6a6977b2261da4ac8ac111d", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07608205557692821 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_95c219eff1533b70e7dddc51", + "semantic_fact_key": "ledger_semantic_fact_v2_b03496184b9a010fdfb96bfd", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.055563420596840774 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8c320c6ed14a0c029c9b7737", + "semantic_fact_key": "ledger_semantic_fact_v2_b69e8be3649bd9090823b4b3", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02632712707018098 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2529838858a5fcc2e22c561e", + "semantic_fact_key": "ledger_semantic_fact_v2_ac17dba870e426571717a211", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.017994257437397174 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cc134070fc327d4ded203d48", + "semantic_fact_key": "ledger_semantic_fact_v2_697f9942b7b460bf61ef7cb5", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06218797673845007 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c0c0372648ce5b5437cae61d", + "semantic_fact_key": "ledger_semantic_fact_v2_5f42965890d4ae16ff0cb6e2", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05938365357462715 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f74bd3afcfcb9be4b0682a77", + "semantic_fact_key": "ledger_semantic_fact_v2_fc815bdc7d8fbc589b290e27", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_online_instant_win_games.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "national_lottery_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06514198637682544 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_c8b1923f4d90b27864177493", + "semantic_fact_key": "ledger_semantic_fact_v2_e01ce74d667f44cd22890f86", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.08642786849926183 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_178bb7ce149b1f99ebe2ae66", + "semantic_fact_key": "ledger_semantic_fact_v2_f305f709a6d87fc7305864ad", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.12717728744865503 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cf1e49e7cd9e385eaa3c22c1", + "semantic_fact_key": "ledger_semantic_fact_v2_f1c2b0c43ae3a42def3c16b1", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.14976954063739423 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_17b5cb2ccbb04e21e7d273cc", + "semantic_fact_key": "ledger_semantic_fact_v2_bad832161938a2c629b85589", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.14259313613439595 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ab0b8f8d5d809e7960db64d2", + "semantic_fact_key": "ledger_semantic_fact_v2_3e43ec95eb2ce09f02af900d", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.09395585238159015 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cc7de789de3bcf615104b13d", + "semantic_fact_key": "ledger_semantic_fact_v2_88295f126710b2eca62a3040", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07373160063180462 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_92fc5e0294e44a2bdca76bd6", + "semantic_fact_key": "ledger_semantic_fact_v2_3417349cae81a6d701575c92", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05712481884092008 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8cd5f989b759d6a815ee3c5a", + "semantic_fact_key": "ledger_semantic_fact_v2_875037b6f73bebd97ce0a6a7", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.10990796186066981 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a21bc513014d7bf10e837b8b", + "semantic_fact_key": "ledger_semantic_fact_v2_fbf33b2084792fe483c0d068", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.11357672154676096 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e4f5e91c8467dab0bb1d8a9b", + "semantic_fact_key": "ledger_semantic_fact_v2_1152a737c10dcf252f657814", + "source_record_id": "gambling_commission.gsgb_2025.b9.national_lottery_scratchcards.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "national_lottery_scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "national_lottery_scratchcards", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.10591541938737885 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6111b9fd0fbb4d2953a215e2", + "semantic_fact_key": "ledger_semantic_fact_v2_808c2a75d0647b928776ca6c", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.10358206737348219 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f89dc1e2c872263452ef658f", + "semantic_fact_key": "ledger_semantic_fact_v2_356c12012c00de3c19748826", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.11311700008077917 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ab98627040adf7d41086fc9a", + "semantic_fact_key": "ledger_semantic_fact_v2_f1c86a68c840ea57665c78d6", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1107168507660429 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2c5f962a41756bbddad224e6", + "semantic_fact_key": "ledger_semantic_fact_v2_563cfbea4fd57d1cc2466ce2", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.08747650231832842 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5cb659f8b573d3a2018b9c5f", + "semantic_fact_key": "ledger_semantic_fact_v2_fb798c78e1f0bd6877333b73", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06048373137440013 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d492b0cd8d022ee99d716d2e", + "semantic_fact_key": "ledger_semantic_fact_v2_58298f7856c2f1f9481e7303", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.030094668235792495 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d3c9cdd002bb27cf87646b31", + "semantic_fact_key": "ledger_semantic_fact_v2_c4bebd3aef1968d606c08ded", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.01900681010625725 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_aa6eac2b4527d811aed942b0", + "semantic_fact_key": "ledger_semantic_fact_v2_302605756f1b137e38f87433", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07859106494857115 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9d2ec4041238c0b917e6d9ce", + "semantic_fact_key": "ledger_semantic_fact_v2_0e85f26bc89a5784af617b63", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07512327391827554 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a987ff464c07b2020c8b7587", + "semantic_fact_key": "ledger_semantic_fact_v2_03150e87eece2044a9ff0221", + "source_record_id": "gambling_commission.gsgb_2025.b9.online_instant_win_games.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.08228411600718648 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2943287a1d49c1af08408662", + "semantic_fact_key": "ledger_semantic_fact_v2_71c687e8f5a6e3e6fb9bbd72", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06947313377486991 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_622251316de327af26ba1a85", + "semantic_fact_key": "ledger_semantic_fact_v2_d93a595a11215c728336e140", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.10518477604999854 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_268a6e6a265465081c0cec5e", + "semantic_fact_key": "ledger_semantic_fact_v2_42896e2102d1380b8d9d918b", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.13471378232901607 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d1a1d0e4ca7c16b99a040610", + "semantic_fact_key": "ledger_semantic_fact_v2_636ff56dbd06aacbedad5e36", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1959606517250531 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e69d63fc4341909cb182ebfc", + "semantic_fact_key": "ledger_semantic_fact_v2_8f7769eb00b4b4becdf5a71d", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.20666140437792624 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f11fc4f22a23450cdeba4b84", + "semantic_fact_key": "ledger_semantic_fact_v2_718c3b018b0036c1374f1a83", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.22745292665725084 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_54befe370038bd303c69dcb9", + "semantic_fact_key": "ledger_semantic_fact_v2_1da188aa6733ffed4e021c94", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.19494469422743063 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_75e3e9358ae488847c92db17", + "semantic_fact_key": "ledger_semantic_fact_v2_642e503267f154892eca9e6d", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.16310517287117388 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6ce893716ae07a3d44dfbe84", + "semantic_fact_key": "ledger_semantic_fact_v2_281929b1e1d2100f7cc433a6", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.17366219023328264 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7fe66470b12ef670d148e21f", + "semantic_fact_key": "ledger_semantic_fact_v2_a8342b2172a5c8b609d73236", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.15181200108606185 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a48fc5a06c307baaee15d196", + "semantic_fact_key": "ledger_semantic_fact_v2_dbb2f118147f24145d7eabe9", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04580078569879481 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6e7a15ef465505350264677a", + "semantic_fact_key": "ledger_semantic_fact_v2_90b7ea4f386b9fab0e589840", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03911456766934678 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d19f0e818940ee5794aaa568", + "semantic_fact_key": "ledger_semantic_fact_v2_b8f06cc4cbdea59b388be16b", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.043763732150447154 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_29f6bcb1e281d27755e24668", + "semantic_fact_key": "ledger_semantic_fact_v2_80b23f565c8059270aa252f2", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05969041203562488 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_de0355b51646f33976479c2f", + "semantic_fact_key": "ledger_semantic_fact_v2_e2cd07aa38a05592d44bc079", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06143431634359246 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ed62073573cba0bb75209dd5", + "semantic_fact_key": "ledger_semantic_fact_v2_bc1f3761a5ee187d9c124e7d", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0806479328509947 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fe4b2cccea2beeccd43a6ca4", + "semantic_fact_key": "ledger_semantic_fact_v2_c054fceed58c5acfe6176820", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.08263204314767045 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_be4c31ccc9d3833ff21f3328", + "semantic_fact_key": "ledger_semantic_fact_v2_b19fa418fccbf93496cc33a4", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0573855099383556 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_453db56f763a4ffa1ace8954", + "semantic_fact_key": "ledger_semantic_fact_v2_e25b858f19fc87a83129e2e2", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05502234280443322 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_7b19123c93d6a5016af9ea4a", + "semantic_fact_key": "ledger_semantic_fact_v2_18ed44fbee57560a292388a2", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_in_person.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05979582210827601 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e5d7d789328cf948468ee5f4", + "semantic_fact_key": "ledger_semantic_fact_v2_d0cd6657dbbb11ea14dec78d", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06178494532051736 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6a4eaccb08ad42574bf0a9ba", + "semantic_fact_key": "ledger_semantic_fact_v2_81f3a9ebc6780eaaf24b29a9", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.09542659604390324 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_641b7bcd5ab3442d678db051", + "semantic_fact_key": "ledger_semantic_fact_v2_03c4a43be555b9d7b78adf2e", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.12466284171112112 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_88f8f84e6e0099899781e781", + "semantic_fact_key": "ledger_semantic_fact_v2_76b5a91c2b84cb036ba454e7", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.1816197970297398 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_96b0826bfa2403cbbd0f2d64", + "semantic_fact_key": "ledger_semantic_fact_v2_c9f90aceafbcf95c5253a0a9", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.18876860372116003 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3214a7713a491276d7b14065", + "semantic_fact_key": "ledger_semantic_fact_v2_eb9c95fe73f444f3affdde56", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.19314048815171636 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4133183dda43c9bfa917127f", + "semantic_fact_key": "ledger_semantic_fact_v2_c50cf2d37850e2fe7eef371e", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.15807666689726252 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8dec1af4091e12ebeb0d96dd", + "semantic_fact_key": "ledger_semantic_fact_v2_ab8190912ee4fbec986d185f", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.14543279591457126 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_4e8a133d802a2501633da80c", + "semantic_fact_key": "ledger_semantic_fact_v2_4356069f1190c1b19b7078e6", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.15443946514683507 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_e23bd3533c4b3f1609c8fd12", + "semantic_fact_key": "ledger_semantic_fact_v2_a84a5124eb43893efd86757c", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_charity_lottery_draws_online.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_charity_lottery_draws_online", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "other_charity_lottery_draws", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.13589187413317108 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b447433379ca0694f8f39b99", + "semantic_fact_key": "ledger_semantic_fact_v2_331634f207fd8ab37376278d", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.08052336972046241 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ef1f3c5e8bab3e52ac7ec36f", + "semantic_fact_key": "ledger_semantic_fact_v2_1746fbde20cca58b4c4af046", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06709153813716748 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_14035a4d3f258fabd9aa8e0d", + "semantic_fact_key": "ledger_semantic_fact_v2_df306f7613290f667e44f5c8", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.050707193956513 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5162d42d5db4a54c7f6ef094", + "semantic_fact_key": "ledger_semantic_fact_v2_4b90edd09dacba113b5423a9", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03134367402282494 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_48184b45327e19b3dc173adc", + "semantic_fact_key": "ledger_semantic_fact_v2_7fb75725e5ff3d1a3d924722", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.013179035018673936 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_d4564adf3f06e1007ad3df98", + "semantic_fact_key": "ledger_semantic_fact_v2_6b38e7ee048f8b50845cc1e9", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.008767814198082311 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9d70bc61c0bd0bce0ad47ada", + "semantic_fact_key": "ledger_semantic_fact_v2_7f262a2af0103af61f8f2316", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.00448043147803854 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fe6b1544e86fa4320b489a12", + "semantic_fact_key": "ledger_semantic_fact_v2_714496f3e0c29f490ca3e8a6", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.037080140388877865 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_2ce8a8a5069805ff24786851", + "semantic_fact_key": "ledger_semantic_fact_v2_46b594dd2546cf45cb92de26", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03279135338266171 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_3be7b6269039747e9815ae95", + "semantic_fact_key": "ledger_semantic_fact_v2_0e3e246965f423c055ba8897", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_online_instant_win_games.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_online_instant_win_games", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "online", + "participation_scope": "other_online_instant_win_games", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.041553234332245656 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_501f26f5d5ccc44e0b0690cd", + "semantic_fact_key": "ledger_semantic_fact_v2_0b76d6df4cd6f6a5da6122cc", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06687151950366534 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_61b386ec2e3ac83b073518b3", + "semantic_fact_key": "ledger_semantic_fact_v2_64a83de6787144ac171d26b2", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07239109339979008 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b8c1a4ef3dd986f49443808d", + "semantic_fact_key": "ledger_semantic_fact_v2_0498a7dc0111052144299a4c", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06483070374924822 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_93821ce675036e49c2630bff", + "semantic_fact_key": "ledger_semantic_fact_v2_7573e41107e4387f58388d29", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04178575520690746 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_cdfa176686938b4251cb7484", + "semantic_fact_key": "ledger_semantic_fact_v2_fd9d97b4a1058a8b6fb7268b", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.030990002465173548 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_67a0bd123d604962288b41e5", + "semantic_fact_key": "ledger_semantic_fact_v2_6a5b5e9e09171a276d308c88", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.018965260427274047 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_bb6bde2531a219cac7424f89", + "semantic_fact_key": "ledger_semantic_fact_v2_45c3803bde0f1825a2294eb7", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02007300744908788 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0ca583a7bbd3b66363e958b8", + "semantic_fact_key": "ledger_semantic_fact_v2_409afe8c090d09e9bcc62920", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04654641466528948 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_75e2067bc613af3c897224a0", + "semantic_fact_key": "ledger_semantic_fact_v2_f3f9fe70994260658bc8f8ef", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04703241867596009 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_25596811e2aa40ec9afcb501", + "semantic_fact_key": "ledger_semantic_fact_v2_cb360ba90ccd14c9c139be88", + "source_record_id": "gambling_commission.gsgb_2025.b9.other_scratchcards_in_person.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "other_scratchcards_in_person", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "in_person", + "participation_scope": "other_scratchcards", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04590260020410683 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_36a88b6cedf0710b0c1b118d", + "semantic_fact_key": "ledger_semantic_fact_v2_f2280265b9532c668e990887", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07598072602698443 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_f373b0d690a3d826ef586a73", + "semantic_fact_key": "ledger_semantic_fact_v2_12463ab0233d5754d700e6f4", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.06151745754370808 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a7b50a84e05c389921991754", + "semantic_fact_key": "ledger_semantic_fact_v2_4a44b3fe20fb963999bf525e", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.04564431622227981 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_9ae404325314002b94e4c011", + "semantic_fact_key": "ledger_semantic_fact_v2_0848d40d27c634ee3b00fd46", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03160218070514968 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_21f1f629287eb58233603967", + "semantic_fact_key": "ledger_semantic_fact_v2_ab47812371af5cb97efb7e7a", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.02067932050341886 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_1ae0624acd6f982942d02b64", + "semantic_fact_key": "ledger_semantic_fact_v2_27ba4ac62a1380dd529a51aa", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.00888846334711335 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_8f8987c364046c7d79207886", + "semantic_fact_key": "ledger_semantic_fact_v2_f3807633c5189e9d6a692e1b", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0058093725830188825 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ef011325ad393dfa1db8b0d3", + "semantic_fact_key": "ledger_semantic_fact_v2_f34b65ed0f52c8b1756bc491", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.03618258688373607 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_0260331985d07faa81bc77d9", + "semantic_fact_key": "ledger_semantic_fact_v2_eb97f37e75a1c911121f1a88", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.020939283769486932 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_fb29f046f6fd9e9a821aafb3", + "semantic_fact_key": "ledger_semantic_fact_v2_cd8c3ffe168b287e61738ccb", + "source_record_id": "gambling_commission.gsgb_2025.b9.private_betting.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "private_betting", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "private_betting", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.05245491831234949 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_76d78f95ba0b74f4591e13d7", + "semantic_fact_key": "ledger_semantic_fact_v2_212b48926a04c514897fd4ae", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.aged_18_to_24", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_18_to_24", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_18_to_24", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.10300578745469614 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_5f5f530f91b625ca6fb5b57c", + "semantic_fact_key": "ledger_semantic_fact_v2_d2e4255eedf4598c2a941ad9", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.aged_25_to_34", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_25_to_34", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_25_to_34", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.14889872219670283 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_b6cc28e0becf8e3cfef779bc", + "semantic_fact_key": "ledger_semantic_fact_v2_472519068e7f5fc7c815f7d7", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.aged_35_to_44", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_35_to_44", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_35_to_44", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.16499648180835183 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_ea1ba44c768945759138b153", + "semantic_fact_key": "ledger_semantic_fact_v2_b71e48c1d38b13fd1ef7a247", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.aged_45_to_54", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_45_to_54", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_45_to_54", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.15281910348038424 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_38943118dd615c9def75701e", + "semantic_fact_key": "ledger_semantic_fact_v2_f97f68eb832ffc913115a420", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.aged_55_to_64", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_55_to_64", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_55_to_64", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.10150674216450976 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_6f32b7a1170ca675aec71024", + "semantic_fact_key": "ledger_semantic_fact_v2_59e2e26825394a9f65c2d458", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.aged_65_to_74", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_65_to_74", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_65_to_74", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.07862137984403232 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a5a7fdc6d5d1ac1e9da7b9d0", + "semantic_fact_key": "ledger_semantic_fact_v2_f681753c32fb4fac64f42fc4", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.aged_75_plus", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "aged_75_plus", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "age_75_plus", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.0630317277622007 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_81177b4e756f4c5050be2d2a", + "semantic_fact_key": "ledger_semantic_fact_v2_be8b3b5cb9b02ee0b577c37d", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.all_participants", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_participants", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "all", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.12205029698982232 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_578c8ff1cc7f18dee6168d32", + "semantic_fact_key": "ledger_semantic_fact_v2_7c3db5ef88c5423c88211ca4", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.all_females", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_females", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "female", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.12599901023394144 + }, + { + "aggregate_fact_key": "ledger_aggregate_fact_v2_a1265d0d0a10d2a09eb6ea84", + "semantic_fact_key": "ledger_semantic_fact_v2_cab2fd6a1aef179a5be3bf79", + "source_record_id": "gambling_commission.gsgb_2025.b9.scratchcards.all_males", + "concept": "gambling_commission.gsgb.participation", + "measure_id": "all_males", + "unit": "share", + "aggregation": "share", + "entity": { + "name": "person", + "role": "survey_population" + }, + "geography": { + "id": "K03000001", + "level": "country", + "vintage": "current" + }, + "period": { + "type": "calendar_year", + "value": 2025 + }, + "period_coverage": { + "start_date": "2025-01-13", + "end_date": "2026-01-22", + "basis": "survey_reference" + }, + "layout": { + "record_set_id": "gambling_commission.gsgb_2025.b9", + "groupby_dimension": "gambling_commission.gsgb_activity", + "groupby_value_id": "scratchcards", + "table_record_kind": "detail" + }, + "dimensions": { + "age_band": "all", + "gambling_channel": "all", + "participation_scope": "scratchcards", + "participation_window": "past_4_weeks", + "sex": "male", + "source_sheet": "Table B.9", + "survey_base": "productive_individuals" + }, + "source": { + "source_name": "gambling_commission", + "source_table": "Gambling Survey for Great Britain, Annual Report 2025: data tables B.1 to B.4, B.9, B.10 and B.13", + "source_file": "GSGB_annual_report_2025_data_tables.xlsx", + "source_sha256": "ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271", + "vintage": "2026_07_16_release", + "raw_r2_key": "raw/uk/gambling_commission/gambling-commission-gsgb-annual-report-2025/2026/ccee22692bb49f627cec5ed78f7acb5590a87f728de0567e786090f55496f271/GSGB_annual_report_2025_data_tables.xlsx" + }, + "value": 0.117713784920423 + } + ] +} diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index b32b926fe1..8e5e885011 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -392,6 +392,42 @@ }, "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_gambling_participation", + "gate": "stage_health", + "phase": "transferred", + "criticality": "release_blocking", + "evidence_absent_blocks": true, + "population_fact_check": true, + "parameters": { + "stage": "lcfs_consumption", + "check": "gambling_participation", + "maximum_relative_deviation": 1e-09, + "maximum_stratum_shortfall": 0.01, + "amount_scale_bounds": [ + 0.5, + 2.0 + ], + "required_support_band": "30+" + }, + "notes": "Stage-time fact check on the lcfs gambling_participation receipt (microcosm#1359): each key's adult participation rates (the National Lottery's products, and the betting and gaming the other gambling duties charge; past four weeks and past twelve months, by sex and age band) are recomputed from the vendored GSGB 2025 rows through the stage's own declaration, never taken from the receipt, and must equal the receipt's, and the receipt's settings (theta per key, the occasional players' stake share, the strata, the propensity classifier, the seed and the salt) must be the declared ones. Per key, each household stratum the receipt gives must sit within maximum_stratum_shortfall of its four-week target and from there of its twelve-month target, or add no household where the diary already passed a target; the national shares must reach the targets less that shortfall; no added household may lack a stake; the three classes' shares of the key's stakes must sum to one; the scale that brings the added regular players' mean stake to the seen households' must lie in amount_scale_bounds, so a broken stake draw that the anchoring would otherwise hide fails (Vahid's review, round 4); the propensity must rest on 30 or more donors; and the excise levelling must have shared the gambling bases by the topped-up keys, each key positive on its twelve-month share. The receipt withholds a stratum with a cell under ten source households, which the gate counts rather than checks; a key withheld nationally fails. The rates are recomputed from the same vendored rows the stage read, so the check catches a step that did not apply the declared rates or settings; it cannot catch an error in the rows themselves, and the stratum targets, which need the frame's adults, are the step's own (it refuses a stratum it cannot fill). A population fact check: the synthetic smoke records it without blocking." + }, { "id": "uk_stage_lcfs_consumption_basis", "gate": "stage_health", @@ -1080,6 +1116,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 +1309,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..af5c11adcb 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..eeaf2d9e59 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..86236b5c94 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..e019ee13d5 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..a0cfdbf92b 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..31cbbfd875 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..6ede3bb34f 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..43b4a10e7f 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,104 @@ } ] }, + { + "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": "gambling_participation_facts.json", + "purpose": "The Gambling Commission's Gambling Survey for Great Britain 2025: the share of adults who gambled in the past four weeks and the past twelve months, any gambling and excluding lottery-draw-only players, by sex crossed with age band (tables B.1 and B.3), and past-four-week participation by activity and channel, by sex and by age band (table B.9), Great Britain, calendar 2025: the adult rates the LCFS top_up_gambling_participation step brings the National Lottery and the betting and gaming keys to (microcosm#1359, PolicyEngine/chronicle#391).", + "consumers": [ + "uk_runtime.gambling_participation" + ], + "planned_consumers": [], + "selections": [ + { + "label": "gambling_commission_gsgb_participation_2025", + "selector": { + "source_name": "gambling_commission", + "source_concept": "gambling_commission.gsgb.participation", + "geography_id": "K03000001", + "period_type": "calendar_year", + "period_value": [ + 2025 + ] + }, + "expected_row_count": 426 + } + ] + }, { "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..4f8b2fe88a 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..1fd126f1d1 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-272c987", "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..15eb498685 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": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", "source_repo": "PolicyEngine/chronicle", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164" + "source_commit": "272c987af175687aca21f82851ef349521802b12" }, "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..aaf3196f9a 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..12ad4ea41f 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..c9c36c194f 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..c485edbaff 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..6e0f55b3cb 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..e51d6cda1d 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..4aaa8ac818 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..79590c665a 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..04bcbc5bab 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..aad53af853 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..b3f215d7fd 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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..29e3dcec24 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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 1dfd8388d5..73a4eace3c 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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "source_vintages": { "conditioning_resource": "hmrc_cgt_conditioning_facts.json", - "conditioning_resource_sha256": "054b1ee1a66cae6ed3793053eb0d3b9eea6b3f8976953479948ae11f7eedcd35", + "conditioning_resource_sha256": "e54cdad4cfe4498bfddb329d6b0aef468ea542a55c1970df574859626a3d19d3", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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": "24ff76dc6d94449d7e453c9423894be12df2c28168e8722e6d9c06eae5009209", + "source_manifest_sha256": "5be1572121ba9c09f698eba7e50a24c8d2c6eba8d5b0eef0bfc3a365aebb9011", "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..4889d9b5a5 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": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" }, "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 55aa154710..24f2646efa 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,18 @@ "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" + }, + { + "role": "gambling_participation", + "resource": "gambling_participation_facts.json", + "kind": "public_aggregate_reference", + "format": "json" } ], "operations": [ @@ -4111,7 +4123,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 +4417,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", @@ -4720,6 +4821,352 @@ ] } }, + { + "kind": "top_up_gambling_participation", + "resource": "gambling_participation_facts.json", + "concept": "gambling_commission.gsgb.participation", + "period_type": "calendar_year", + "period_value": 2025, + "geography_id": "K03000001", + "dimensions": { + "window": "participation_window", + "scope": "participation_scope", + "sex": "sex", + "age_band": "age_band" + }, + "population_dimensions": { + "regular": { + "source_sheet": "Table B.3" + }, + "occasional": { + "source_sheet": "Table B.1" + } + }, + "activity_dimensions": { + "regular": { + "source_sheet": "Table B.9" + } + }, + "windows": { + "regular": "past_4_weeks", + "occasional": "past_12_months" + }, + "sexes": { + "MALE": "male", + "FEMALE": "female", + "all": "all" + }, + "age_bands": [ + [ + 18, + "age_18_to_24" + ], + [ + 25, + "age_25_to_34" + ], + [ + 35, + "age_35_to_44" + ], + [ + 45, + "age_45_to_54" + ], + [ + 55, + "age_55_to_64" + ], + [ + 65, + "age_65_to_74" + ], + [ + 75, + "age_75_plus" + ] + ], + "keys": { + "national_lottery": { + "population": "any_gambling", + "activities": { + "national_lottery_draws": { + "gambling_channel": "all" + }, + "national_lottery_scratchcards": { + "gambling_channel": "all" + }, + "national_lottery_online_instant_win_games": { + "gambling_channel": "online" + } + }, + "theta": 0.9 + }, + "betting_and_gaming": { + "population": "excluding_lottery_draw_only", + "activities": { + "betting": { + "gambling_channel": "all" + }, + "bingo": { + "gambling_channel": "all" + }, + "casino_games": { + "gambling_channel": "all" + }, + "fruit_and_slots_games": { + "gambling_channel": "all" + }, + "football_pools": { + "gambling_channel": "all" + }, + "other_online_instant_win_games": { + "gambling_channel": "online" + }, + "another_form_of_gambling": { + "gambling_channel": "all" + } + }, + "theta": 0.08 + } + }, + "occasional_stake_share": 0.1, + "strata": { + "adults_cap": 3, + "youngest_adult_bounds": [ + 35, + 55 + ] + }, + "propensity": { + "max_leaf_nodes": 15, + "min_samples_leaf": 40, + "l2_regularization": 1.0, + "validation_fraction": 0.1 + }, + "n_estimators": 100, + "seed": 0, + "salt": "lcfs_gambling_participation" + }, + { + "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 +5197,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 +5245,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's drawn spend per household (a recomposed total's remainder, any other division's whole draw) is set against the donor's mean of the same spend (for housing and transport, the donor's total less the same parts, since the levelled parts keep their published levels and are no over-draw); a division above the divisions' shared ratio, measured once before any levelling, comes down to it (María's rulings of 2026-10-23 and 2026-10-24, microcosm#1278; Vahid's review of microcosm#1383, item 9); the receipt records each division's ratio and factor and the shared ratio (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. The liquid fuels hold bottled gas (b018, c45222), which COICOP puts under 04.5.2 (gas) and ONS's 04.5.3 leaves out, so the receipt also gives the donor's liquid fuels without it; neither heating-fuel column is levelled to ONS: the donor's diary totals are about twice ONS's, and the frame's draws reach neither those nor ONS's, so a costing on either needs levelling to ONS first (Vahid's review of microcosm#1383, item 8)." + "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 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's drawn spend per household (a recomposed total's remainder, any other division's whole draw) is set against the donor's mean of the same spend (for housing and transport, the donor's total less the same parts, since the levelled parts keep their published levels and are no over-draw); a division above the divisions' shared ratio, measured once before any levelling, comes down to it (María's rulings of 2026-10-23 and 2026-10-24, microcosm#1278; Vahid's review of microcosm#1383, item 9); the receipt records each division's ratio and factor and the shared ratio (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. The liquid fuels hold bottled gas (b018, c45222), which COICOP puts under 04.5.2 (gas) and ONS's 04.5.3 leaves out, so the receipt also gives the donor's liquid fuels without it; neither heating-fuel column is levelled to ONS: the donor's diary totals are about twice ONS's, and the frame's draws reach neither those nor ONS's, so a costing on either needs levelling to ONS first (Vahid's review of microcosm#1383, item 8). 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. Both keys are first brought to published participation by the declared top_up_gambling_participation step (microcosm#1359; María's ruling of 2026-10-25). The diary records a stake for about a fifth of the households the Gambling Commission's Gambling Survey for Great Britain 2025 implies (PolicyEngine/chronicle#391), and under any steady rate of play a two-week diary sees at least half of the four-week players, so the gap is play the diary misses, not its window. Each adult's chance of playing in four weeks and in twelve months is GSGB's published rate for its sex and age band (tables B.1 and B.3), as the union of a key's activities (table B.9: the National Lottery's draws, scratchcards and online instant-win games; betting, bingo, casino games, fruit and slots, football pools, other online instant-win games and other gambling), taken as independent within the population that plays any of them (all gamblers, or those who play more than lottery draws). A household plays when any adult does, combined at theta: 1 - (1 - p_max) x prod(1 - p_other)^theta, where 0 is one player per household and 1 adults who play independently. Theta is fitted on the donor so that GSGB's rates, applied to the donors' own adults, give the diary's ratio of the two-adult to the one-adult household rate, in which under-recording cancels if it is the same for both: 0.9 for the National Lottery, whose couples mostly buy their own tickets, and 0.08 for betting and gaming, mostly one adult's. Within nine strata (one, two, or three or more adults, by the youngest adult's age band: 18 to 34, 35 to 54, 55 and over), households without a stake are added by the gas connection walk's weight-fitting rule, in an identity-keyed order drawn in proportion to a regularised donor propensity (on the chain's predictors and spend draws, with recreation net of its gambling stakes, so that a recorded stake does not predict itself) times the household's published chance, first to the stratum's four-week share (regular players) and then on to its twelve-month share (occasional players); households the diary saw keep their stakes and count as regular. An added household's stake is a draw from the donor's positive stakes at a quantile keyed on its id, scaled so the added regular players' mean is the mean of the households the diary saw, and an occasional player's is a tenth of that. Both are assumptions: a two-week diary is more likely to catch frequent players, so the households it saw are probably the heavier players and equal means spread the base more evenly than play probably is; the tenth stands until GSGB publishes how often people play. The keys only re-share the bases: the stored spending stays the drawn one, so an added household's stakes are not in its recorded recreation spending. The gambling_participation gate recomputes the rates from the vendored rows, checks every stratum's shares, and holds each key's stake scale within 0.5 to 2, so a broken stake draw that the scaling would hide fails it. 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 alcohol or tobacco duty is one multiple of its own spending, the same for every household that carries it: at prior weights alcohol duty is about 0.41 times alcohol spending and tobacco duty about 2.2 times tobacco spending, since the diary records a fraction of what is bought; VAT on the same goods stays on the survey base. Tobacco duty also sits on fewer households than smoke: 8.2 percent of households carry it, against 11.9 percent of UK adults who smoked cigarettes in 2023 (ONS), while the share of households with a smoker is above the adult rate; the duty per carrying household is higher by the same factor. Part of the gap is the frame's: the chain's share draws come out zero more often than the donors' (10.3 percent of donors carry tobacco), mostly within households that carry the parent total. The gambling duties sit on the households the top-up brings to participation: 62.7 percent of households carry Lottery Duty and 29.8 percent the other gambling duties, against 10.7 and 2.0 percent on the diary's draws alone, and 47 percent of adults in Great Britain who gambled in the past four weeks of 2025 (27 percent once lottery-draw-only players are left out). The top-up's own biases: GSGB is taken as the level, though the Gambling Commission's guidance on its statistics reports that an invitation that mentions gambling raised participation estimates, and that its experiment could not conclude which estimates are the more accurate; under-recording is taken as even across households, so the donor propensity carries the diary's gradient by income, tenure, region and spending; the activity unions take activities as independent within their population, which GSGB's table B.13 rules out among players (45 percent of four-week gamblers took part in one activity, against 26 percent under independence), but a model in which each adult's activities share an intensity, which comes within 2.5 points of that share in every age band, moves neither key's union by more than 9 percent in any age band, nor the share of households carrying either key by more than 0.1 points; theta is one per key, fits households of three or more adults less well, and takes the share carrying betting and gaming from 28.5 percent at 0 to 41.2 percent at 1; the stake assumptions above; and GSGB covers adults in Great Britain in calendar 2025, so Northern Ireland's adults take its rates, against the FY2024-25 bases. On the real spine at prior weights, the share of households carrying the National Lottery rises from 51.5 percent in the bottom equivalised-income decile to 67.3 percent in the top, and betting and gaming from 26.8 to 34.8 percent, whose top decile holds 25.3 percent of the base; on the diary's draws alone betting and gaming is almost flat (1.9 to 2.1 percent, 18.9 percent of the base in the top decile). Ordered by the published chance alone, betting and gaming would run from 29.2 to 29.8 percent and the Lottery from 57.0 to 67.9 percent with GSGB's age mix, but neither key's regional pattern would follow GSGB's. With the propensity, the Lottery's does (a correlation of 0.67 across Great Britain's eleven regions, London lowest, as in GSGB), and betting and gaming's barely (0.11). 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 ee1090897b..fe3a46c942 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,14 @@ 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 + - role: gambling_participation + resource: gambling_participation_facts.json + kind: public_aggregate_reference + format: json operations: - kind: derive lowercase_columns: true @@ -3399,6 +3407,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 +3645,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 @@ -3872,6 +3953,248 @@ stages: - coicop: 04.5.4 concept: ons.household_expenditure.solid_fuels column: solid_fuel_consumption + - kind: top_up_gambling_participation + resource: gambling_participation_facts.json + concept: gambling_commission.gsgb.participation + period_type: calendar_year + period_value: 2025 + geography_id: K03000001 + dimensions: + window: participation_window + scope: participation_scope + sex: sex + age_band: age_band + population_dimensions: + regular: + source_sheet: Table B.3 + occasional: + source_sheet: Table B.1 + activity_dimensions: + regular: + source_sheet: Table B.9 + windows: + regular: past_4_weeks + occasional: past_12_months + sexes: + MALE: male + FEMALE: female + all: all + age_bands: + - - 18 + - age_18_to_24 + - - 25 + - age_25_to_34 + - - 35 + - age_35_to_44 + - - 45 + - age_45_to_54 + - - 55 + - age_55_to_64 + - - 65 + - age_65_to_74 + - - 75 + - age_75_plus + keys: + national_lottery: + population: any_gambling + activities: + national_lottery_draws: + gambling_channel: all + national_lottery_scratchcards: + gambling_channel: all + national_lottery_online_instant_win_games: + gambling_channel: online + theta: 0.9 + betting_and_gaming: + population: excluding_lottery_draw_only + activities: + betting: + gambling_channel: all + bingo: + gambling_channel: all + casino_games: + gambling_channel: all + fruit_and_slots_games: + gambling_channel: all + football_pools: + gambling_channel: all + other_online_instant_win_games: + gambling_channel: online + another_form_of_gambling: + gambling_channel: all + theta: 0.08 + occasional_stake_share: 0.1 + strata: + adults_cap: 3 + youngest_adult_bounds: + - 35 + - 55 + propensity: + max_leaf_nodes: 15 + min_samples_leaf: 40 + l2_regularization: 1.0 + validation_fraction: 0.1 + n_estimators: 100 + seed: 0 + salt: lcfs_gambling_participation + - 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 +4223,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 +4270,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''s drawn spend per household (a recomposed total''s remainder, any other division''s whole draw) is set against the donor''s mean of the same spend (for housing and transport, the donor''s total less the same parts, since the levelled parts keep their published levels and are no over-draw); a division above the divisions'' shared ratio, measured once before any levelling, comes down to it (María''s rulings of 2026-10-23 and 2026-10-24, microcosm#1278; Vahid''s review of microcosm#1383, item 9); the receipt records each division''s ratio and factor and the shared ratio (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. The liquid fuels hold bottled gas (b018, c45222), which COICOP puts under 04.5.2 (gas) and ONS''s 04.5.3 leaves out, so the receipt also gives the donor''s liquid fuels without it; neither heating-fuel column is levelled to ONS: the donor''s diary totals are about twice ONS''s, and the frame''s draws reach neither those nor ONS''s, so a costing on either needs levelling to ONS first (Vahid''s review of microcosm#1383, item 8).' + - 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 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''s drawn spend per household (a recomposed total''s remainder, any other division''s whole draw) is set against the donor''s mean of the same spend (for housing and transport, the donor''s total less the same parts, since the levelled parts keep their published levels and are no over-draw); a division above the divisions'' shared ratio, measured once before any levelling, comes down to it (María''s rulings of 2026-10-23 and 2026-10-24, microcosm#1278; Vahid''s review of microcosm#1383, item 9); the receipt records each division''s ratio and factor and the shared ratio (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. The liquid fuels hold bottled gas (b018, c45222), which COICOP puts under 04.5.2 (gas) and ONS''s 04.5.3 leaves out, so the receipt also gives the donor''s liquid fuels without it; neither heating-fuel column is levelled to ONS: the donor''s diary totals are about twice ONS''s, and the frame''s draws reach neither those nor ONS''s, so a costing on either needs levelling to ONS first (Vahid''s review of microcosm#1383, item 8). 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. Both keys are first brought to published participation by the declared top_up_gambling_participation step (microcosm#1359; María''s ruling of 2026-10-25). The diary records a stake for about a fifth of the households the Gambling Commission''s Gambling Survey for Great Britain 2025 implies (PolicyEngine/chronicle#391), and under any steady rate of play a two-week diary sees at least half of the four-week players, so the gap is play the diary misses, not its window. Each adult''s chance of playing in four weeks and in twelve months is GSGB''s published rate for its sex and age band (tables B.1 and B.3), as the union of a key''s activities (table B.9: the National Lottery''s draws, scratchcards and online instant-win games; betting, bingo, casino games, fruit and slots, football pools, other online instant-win games and other gambling), taken as independent within the population that plays any of them (all gamblers, or those who play more than lottery draws). A household plays when any adult does, combined at theta: 1 - (1 - p_max) x prod(1 - p_other)^theta, where 0 is one player per household and 1 adults who play independently. Theta is fitted on the donor so that GSGB''s rates, applied to the donors'' own adults, give the diary''s ratio of the two-adult to the one-adult household rate, in which under-recording cancels if it is the same for both: 0.9 for the National Lottery, whose couples mostly buy their own tickets, and 0.08 for betting and gaming, mostly one adult''s. Within nine strata (one, two, or three or more adults, by the youngest adult''s age band: 18 to 34, 35 to 54, 55 and over), households without a stake are added by the gas connection walk''s weight-fitting rule, in an identity-keyed order drawn in proportion to a regularised donor propensity (on the chain''s predictors and spend draws, with recreation net of its gambling stakes, so that a recorded stake does not predict itself) times the household''s published chance, first to the stratum''s four-week share (regular players) and then on to its twelve-month share (occasional players); households the diary saw keep their stakes and count as regular. An added household''s stake is a draw from the donor''s positive stakes at a quantile keyed on its id, scaled so the added regular players'' mean is the mean of the households the diary saw, and an occasional player''s is a tenth of that. Both are assumptions: a two-week diary is more likely to catch frequent players, so the households it saw are probably the heavier players and equal means spread the base more evenly than play probably is; the tenth stands until GSGB publishes how often people play. The keys only re-share the bases: the stored spending stays the drawn one, so an added household''s stakes are not in its recorded recreation spending. The gambling_participation gate recomputes the rates from the vendored rows, checks every stratum''s shares, and holds each key''s stake scale within 0.5 to 2, so a broken stake draw that the scaling would hide fails it. 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 alcohol or tobacco duty is one multiple of its own spending, the same for every household that carries it: at prior weights alcohol duty is about 0.41 times alcohol spending and tobacco duty about 2.2 times tobacco spending, since the diary records a fraction of what is bought; VAT on the same goods stays on the survey base. Tobacco duty also sits on fewer households than smoke: 8.2 percent of households carry it, against 11.9 percent of UK adults who smoked cigarettes in 2023 (ONS), while the share of households with a smoker is above the adult rate; the duty per carrying household is higher by the same factor. Part of the gap is the frame''s: the chain''s share draws come out zero more often than the donors'' (10.3 percent of donors carry tobacco), mostly within households that carry the parent total. The gambling duties sit on the households the top-up brings to participation: 62.7 percent of households carry Lottery Duty and 29.8 percent the other gambling duties, against 10.7 and 2.0 percent on the diary''s draws alone, and 47 percent of adults in Great Britain who gambled in the past four weeks of 2025 (27 percent once lottery-draw-only players are left out). The top-up''s own biases: GSGB is taken as the level, though the Gambling Commission''s guidance on its statistics reports that an invitation that mentions gambling raised participation estimates, and that its experiment could not conclude which estimates are the more accurate; under-recording is taken as even across households, so the donor propensity carries the diary''s gradient by income, tenure, region and spending; the activity unions take activities as independent within their population, which GSGB''s table B.13 rules out among players (45 percent of four-week gamblers took part in one activity, against 26 percent under independence), but a model in which each adult''s activities share an intensity, which comes within 2.5 points of that share in every age band, moves neither key''s union by more than 9 percent in any age band, nor the share of households carrying either key by more than 0.1 points; theta is one per key, fits households of three or more adults less well, and takes the share carrying betting and gaming from 28.5 percent at 0 to 41.2 percent at 1; the stake assumptions above; and GSGB covers adults in Great Britain in calendar 2025, so Northern Ireland''s adults take its rates, against the FY2024-25 bases. On the real spine at prior weights, the share of households carrying the National Lottery rises from 51.5 percent in the bottom equivalised-income decile to 67.3 percent in the top, and betting and gaming from 26.8 to 34.8 percent, whose top decile holds 25.3 percent of the base; on the diary''s draws alone betting and gaming is almost flat (1.9 to 2.1 percent, 18.9 percent of the base in the top decile). Ordered by the published chance alone, betting and gaming would run from 29.2 to 29.8 percent and the Lottery from 57.0 to 67.9 percent with GSGB''s age mix, but neither key''s regional pattern would follow GSGB''s. With the propensity, the Lottery''s does (a correlation of 0.67 across Great Britain''s eleven regions, London lowest, as in GSGB), and betting and gaming''s barely (0.11). 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..80a4983a4f 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-272c987-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..4dd1235be8 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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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": 1503315, + "facts_sha256": "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85", "manifest": ".codex-work/consumer_facts_uk_manifest.json", - "manifest_sha256": "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21", - "source_commit": "abf0921b896d29ee0745ed2aefde8d6337ed7164", + "manifest_sha256": "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd", + "source_commit": "272c987af175687aca21f82851ef349521802b12", "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 c4771002da..20ab12bbac 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..377842ee47 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,16 @@ 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", + # #1359 gambling_participation check: how far a stratum's + # topped-up share may sit from its published target, and the + # bounds on the scale that anchors the added stakes. + "maximum_stratum_shortfall", + "amount_scale_bounds", # #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..9b72a3faa2 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,8 @@ "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_gambling_participation", "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 3b18b2d11d..dc447af60b 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/diagnostics.py @@ -18,6 +18,7 @@ import json import math import sys +import time import warnings from collections.abc import Collection, Mapping, Sequence from dataclasses import dataclass @@ -707,7 +708,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 ( @@ -717,6 +721,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 = { @@ -760,6 +766,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) @@ -1147,20 +1156,34 @@ def _row_blocks( A local row whose carriers span regions, or that has none, is checked in its own grain and area. Local rows need the frame's household region, so - a frame without one refuses. :func:`uk_withheld_row_sets` runs the blocks - until none withholds a row another needs. + a frame without one refuses, and each local row needs its contract + target, which ties it to its family and parents, so a row without one + refuses too rather than join no family block (Vahid's third review of + #1383, item 33). :func:`uk_withheld_row_sets` runs the blocks until none + withholds a row another needs. """ level = _row_level(geography_levels) national: set[str] = set() local: dict[tuple[str, str], set[str]] = {} + untied: list[str] = [] for row in target_rows: name = str(row["name"]) grain = level(name) if grain in UK_AREA_SUPPORT_LEVELS: local.setdefault((grain, _row_area(row)), set()).add(name) + metadata = row.get("metadata") + if not ( + isinstance(metadata, Mapping) and metadata.get("contract_target_id") + ): + untied.append(name) else: national.add(name) + if untied: + raise ValueError( + "UK local rows are checked with their family's parents, matched by " + f"contract target, but {len(untied)} name none: {sorted(untied)[:5]}." + ) blocks = [sorted(national)] if national else [] if not local: return blocks @@ -1216,7 +1239,9 @@ def _family_blocks( A family is the local targets the cross-grain declarations' partitions or a nested measurement tie together (:func:`uk_local_family_parents`); its parents are the higher-grain targets tied to it. A row is matched to - its target by ``metadata.contract_target_id``. + its target by ``metadata.contract_target_id``, which :func:`_row_blocks` + requires of every local row. A parent the build does not bind is not + published, so its absence needs no refusal. """ by_target: dict[str, set[str]] = {} @@ -1505,6 +1530,7 @@ def uk_withheld_row_sets( if not target_rows: return set(), set() + started = time.perf_counter() span = _CarrierSpan.build(problem, weights, frame, geography_levels) blocks = _row_blocks(target_rows, geography_levels, span) block_rows = [span.rows(block) for block in blocks] @@ -1525,6 +1551,7 @@ def uk_withheld_row_sets( withheld = set(thin) checked: dict[int, frozenset[str]] = {} pending = list(range(len(blocks))) + checks = 0 while pending: position = pending.pop(0) names = block_rows[position][0] @@ -1535,6 +1562,7 @@ def uk_withheld_row_sets( added = _withheld_in_block( *block_rows[position], held=held, protected=protected ) + checks += 1 checked[position] = held | added for name in added: owners.setdefault(name, set()).add(position) @@ -1542,6 +1570,14 @@ def uk_withheld_row_sets( for other in membership[name]: if other != position and other not in pending: pending.append(other) + if len(blocks) > 1: + # A local surface checks overlapping blocks, each a dense span; the + # build's log times it (Vahid's third review of #1383, item 32). + print( + f"UK withholding: {len(blocks)} blocks, {checks} block checks, " + f"{len(withheld)} rows withheld, {time.perf_counter() - started:.1f} s.", + file=sys.stderr, + ) return thin, withheld - thin diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_spine.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_spine.py index fb8a3a76fa..4fe0253114 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_spine.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/frs_spine.py @@ -1166,7 +1166,10 @@ def _add_benefits( # Any other amount, above the allowance's rate and at no rate (a lump sum, # a part month or a misreport), stays the payment, which is neither taxed # nor means-tested (Vahid's review of #1383, item 12); an allowance with an - # inherited additional pension above its rate reads as the payment too. + # inherited additional pension above its rate reads as the payment too, + # which the FRS 2024-25 leaves rare: fewer than ten code-6 amounts sit + # above the allowance's rate at no rate of the payment (his third review, + # item 34). code_6 = benefit == 6 wpa = code_6 & ~bsp_rate_match(amount) & wpa_rate_match(amount) bsp = code_6 & ~wpa diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/full_build_cli.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/full_build_cli.py index f52acf28ad..3652c63cb2 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/full_build_cli.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/full_build_cli.py @@ -3157,6 +3157,14 @@ def _execute_national_build( "score_vs_enhanced_frs": None, } stage(telemetry, "diagnostics", "started") + # The national gates flagged the rows whose model figures stay in the + # build; the diagnostics take that set rather than count it again, so it + # is computed once per build (Vahid's third review of #1383, item 32). + withheld = frozenset( + str(row["name"]) + for row in evidence["diagnostics"] + if row.get("model_figures_withheld") is True + ) diagnostics_outcome = write_uk_calibration_diagnostics( result, paths["calibration_diagnostics"], @@ -3164,6 +3172,7 @@ def _execute_national_build( target_geography_levels=evidence["target_geography_levels"], target_registry=solved_registry, build=build_block, + withheld=withheld, ) if isinstance(diagnostics_outcome, DiagnosticsWriteFailure): raise RuntimeError( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py new file mode 100644 index 0000000000..b850d012c7 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/gambling_participation.py @@ -0,0 +1,802 @@ +"""Bring the LCFS stage's gambling keys to published participation (microcosm#1359). + +The LCFS diary under-records gambling. On the 2024-25 diary about a fifth of +the households that GSGB's four-week participation implies record a stake in +their two weeks. Under any steady rate of play the two-week share is at least +half the four-week share, so the gap is play the diary never records (online +play, subscriptions, small stakes forgotten), not its window. The declared +``top_up_gambling_participation`` step therefore takes how many households +play from the Gambling Commission's GSGB, and which households and how much +from the diary: + +- **Adult rates.** Each adult's chance of playing in four weeks and in twelve + months comes from the published rates by sex and age band. A key's rate + (the National Lottery's products, or the betting and gaming the other + duties charge) is the union of its activities, taken as independent within + the published population that plays any of them, per age band. +- **Households.** A household plays when any adult does, combined at the + key's declared theta: ``1 - (1 - p_max) * prod(1 - p_other) ** theta``. + Theta 0 is one player per household (adults who play together), theta 1 + adults who play independently. +- **The walk.** Within each household stratum (its adults, and its youngest + adult's age band), households without a stake are added by the gas + connection walk's weight-fitting rule (microcosm#1164), in an + identity-keyed order drawn in proportion to the donor's propensity times + the household's published chance, until the stratum's four-week share is + met (regular players) and then its twelve-month share (occasional + players). The chain's predictors carry no age or sex, so the published + chance brings GSGB's age and sex mix inside a stratum, and the propensity + the diary's gradient by income, tenure, region and spending. Households the + diary saw keep their stakes. +- **Stakes.** An added household's stake is a draw from the donor's positive + stakes at a quantile keyed on its id, scaled so the added regular players' + mean is the mean of the households the diary saw. + An occasional player's is the declared share of that. + +``level_excise_quantities`` then shares each national base by the topped-up +keys, so every base still sums to its published figure. +""" + +from __future__ import annotations + +from collections.abc import Callable, Mapping, Sequence +from dataclasses import dataclass +from typing import Any + +import numpy as np +import pandas as pd + +from microcosm.build.gates import EXPLICIT_KIND, FitWeightRecord +from microcosm.build.source_manifest import SourceStageSpec +from microcosm.build.stochastic_assignment import stable_identity_uniforms +from microcosm.build.uk_runtime.energy_pricing import _connect_walk +from microcosm.build.uk_runtime.ledger_fact_vendoring import vendored_rows +from microcosm.build.uk_runtime.receipt_counts import ( + distinct_count, + extreme_count, + rounded_count, + support_band, +) + +TOP_UP_GAMBLING_PARTICIPATION_KIND = "top_up_gambling_participation" +UK_GAMBLING_PARTICIPATION_RESOURCE = "gambling_participation_facts.json" +UK_GAMBLING_PARTICIPATION_RECEIPT = "gambling_participation" +#: The keys the step tops up: the stakes ``level_excise_quantities`` shares +#: Lottery Duty's base by, and those it shares every other gambling base by. +UK_GAMBLING_PARTICIPATION_KEYS = ("national_lottery", "betting_and_gaming") +UK_GAMBLING_ADULT_AGE = 18 +#: The two classes, by the window whose share they fill: regular players to +#: the four-week share, occasional players on to the twelve-month share. +REGULAR = "regular" +OCCASIONAL = "occasional" +#: The frame's sexes, as its person table spells them. +UK_GAMBLING_SEXES = ("MALE", "FEMALE") +#: The stratum of households with no adult, which play nothing. +NO_ADULTS = "no_adults" +#: The propensity classifier's settings a declaration sets; early stopping on +#: the held-out fraction is always on. +UK_GAMBLING_PROPENSITY_SETTINGS = ( + "max_leaf_nodes", + "min_samples_leaf", + "l2_regularization", + "validation_fraction", +) +#: The fewest distinct source households a receipt cell may rest on, and the +#: fewest donor households a key's fits may learn from (CD171 section 5.2.1). +SMALL_CELL = 10 + + +@dataclass(frozen=True) +class ParticipationRates: + """Each key's adult chance of playing, by class, sex and age band. + + ``bands`` are the age bands' lower bounds in years, ascending. ``rates`` + maps a key and a class to each (sex, band) cell's rate. ``receipt`` + records the rows read and the rates. + """ + + bands: tuple[int, ...] + rates: Mapping[str, Mapping[str, Mapping[tuple[str, int], float]]] + receipt: Mapping[str, Any] + + +@dataclass(frozen=True) +class GamblingParticipation: + """The topped-up keys, the receipt and the fits' weight records.""" + + keys: Mapping[str, np.ndarray] + receipt: Mapping[str, Any] + fit_weight_records: tuple[FitWeightRecord, ...] + + +def gambling_participation_operation( + stage: SourceStageSpec, +) -> Mapping[str, Any] | None: + """The stage's declared ``top_up_gambling_participation`` parameters, if any.""" + + for operation in stage.operations: + if operation.kind == TOP_UP_GAMBLING_PARTICIPATION_KIND: + return {"kind": operation.kind, **operation.parameters} + return None + + +def _require(parameters: Mapping[str, Any], name: str) -> Any: + value = parameters.get(name) + if value is None or (isinstance(value, str | Mapping | list) and not value): + raise ValueError(f"{TOP_UP_GAMBLING_PARTICIPATION_KIND} must declare {name}.") + return value + + +def _number(value: object, *, what: str, low: float, high: float) -> float: + """A declared number inside [low, high], or a refusal naming it.""" + + if ( + isinstance(value, bool) + or not isinstance(value, int | float) + or not low <= float(value) <= high + ): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: {what} must be a number in " + f"[{low}, {high}], not {value!r}." + ) + return float(value) + + +def participation_settings(parameters: Mapping[str, Any]) -> dict[str, Any]: + """The declared step's settings, checked: what its receipt records. + + Each key's theta lies in [0, 1]; the occasional players' stake share in + (0, 1]; the strata cap the adults at a count of one or more and band the + youngest adult by ascending bounds above 18; the propensity sets exactly + ``UK_GAMBLING_PROPENSITY_SETTINGS``. + """ + + keys = _require(parameters, "keys") + if not isinstance(keys, Mapping) or set(keys) != set( + UK_GAMBLING_PARTICIPATION_KEYS + ): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND} keys must be " + f"{UK_GAMBLING_PARTICIPATION_KEYS}." + ) + theta = { + key: _number( + (keys[key] or {}).get("theta"), what=f"{key} theta", low=0.0, high=1.0 + ) + for key in UK_GAMBLING_PARTICIPATION_KEYS + } + share = _number( + parameters.get("occasional_stake_share"), + what="occasional_stake_share", + low=0.0, + high=1.0, + ) + if share == 0.0: + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: occasional_stake_share must be " + "above zero, or the occasional players carry no stake." + ) + strata = _require(parameters, "strata") + cap = strata.get("adults_cap") + bounds = list(strata.get("youngest_adult_bounds") or ()) + if isinstance(cap, bool) or not isinstance(cap, int) or cap < 1: + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: strata.adults_cap must be a " + f"count of one or more, not {cap!r}." + ) + if ( + not all(isinstance(b, int) and not isinstance(b, bool) for b in bounds) + or bounds != sorted(set(bounds)) + or (bounds and bounds[0] <= UK_GAMBLING_ADULT_AGE) + ): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: strata.youngest_adult_bounds " + f"must be ascending ages above {UK_GAMBLING_ADULT_AGE}, not {bounds!r}." + ) + propensity = _require(parameters, "propensity") + if set(propensity) != set(UK_GAMBLING_PROPENSITY_SETTINGS): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: propensity must set " + f"{UK_GAMBLING_PROPENSITY_SETTINGS}, not {sorted(propensity)}." + ) + n_estimators = int(_require(parameters, "n_estimators")) + if n_estimators < 1: + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: n_estimators must be positive." + ) + return { + "theta": theta, + "occasional_stake_share": share, + "strata": {"adults_cap": cap, "youngest_adult_bounds": bounds}, + "propensity": { + "max_leaf_nodes": int(propensity["max_leaf_nodes"]), + "min_samples_leaf": int(propensity["min_samples_leaf"]), + "l2_regularization": _number( + propensity["l2_regularization"], + what="propensity.l2_regularization", + low=0.0, + high=float("inf"), + ), + "validation_fraction": _number( + propensity["validation_fraction"], + what="propensity.validation_fraction", + low=0.01, + high=0.5, + ), + }, + "n_estimators": n_estimators, + "seed": int(parameters.get("seed", 0)), + "salt": str(_require(parameters, "salt")), + } + + +def participation_rates( + parameters: Mapping[str, Any], + *, + rows: Callable[..., list[dict[str, Any]]] | None = None, +) -> ParticipationRates: + """Resolve each key's adult rates from the declared published rows. + + The declaration names the resource, its concept, period and geography; the + dimension that carries each of the window, the scope (an activity or a + population), sex and age band; the values of the two windows, of each sex + and of all sexes; the age bands as ``[lower bound, value]`` pairs; and, per + key, the population its activities sit within and each activity, read for + the four weeks only, with the further dimensions of its row (an activity + with online and in-person rows names its all-channels row, an online-only + activity its online row). ``population_dimensions`` and + ``activity_dimensions`` map a class to the further dimensions all its rows + carry, such as the worksheet a window's population rates come from. Every + cell must match exactly one row. + """ + + read = vendored_rows if rows is None else rows + resource = str(_require(parameters, "resource")) + if resource != UK_GAMBLING_PARTICIPATION_RESOURCE: + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND} must read " + f"{UK_GAMBLING_PARTICIPATION_RESOURCE!r}, not {resource!r}." + ) + concept = str(_require(parameters, "concept")) + period_type = str(_require(parameters, "period_type")) + period_value = int(_require(parameters, "period_value")) + geography_id = str(_require(parameters, "geography_id")) + dimensions = _require(parameters, "dimensions") + windows = _require(parameters, "windows") + sexes = _require(parameters, "sexes") + keys = _require(parameters, "keys") + for name in ("window", "scope", "sex", "age_band"): + if not dimensions.get(name): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND} must name the {name} dimension." + ) + if set(windows) != {REGULAR, OCCASIONAL}: + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND} windows must map {REGULAR!r} " + f"(four weeks) and {OCCASIONAL!r} (twelve months)." + ) + if set(sexes) != {*UK_GAMBLING_SEXES, "all"}: + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND} sexes must map " + f"{(*UK_GAMBLING_SEXES, 'all')}." + ) + if not isinstance(keys, Mapping) or set(keys) != set( + UK_GAMBLING_PARTICIPATION_KEYS + ): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND} keys must be " + f"{UK_GAMBLING_PARTICIPATION_KEYS}." + ) + declared_bands = list(_require(parameters, "age_bands")) + bands = tuple(int(lower) for lower, _ in declared_bands) + if bands[0] != UK_GAMBLING_ADULT_AGE or list(bands) != sorted(set(bands)): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND} age bands must rise from " + f"{UK_GAMBLING_ADULT_AGE} without repeats." + ) + band_values = {int(lower): str(value) for lower, value in declared_bands} + fixed: dict[str, dict[str, dict[str, str]]] = {} + for kind in ("population", "activity"): + declared = parameters.get(f"{kind}_dimensions") or {} + if not isinstance(declared, Mapping) or not set(declared) <= { + REGULAR, + OCCASIONAL, + }: + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: {kind}_dimensions must map " + f"the classes {REGULAR!r} and {OCCASIONAL!r} to dimensions." + ) + fixed[kind] = { + window: {str(name): str(value) for name, value in selector.items()} + for window, selector in declared.items() + } + roles = {dimensions[name] for name in dimensions} + if any(set(selector) & roles for selector in fixed[kind].values()): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: {kind}_dimensions may not " + "fix the window, scope, sex or age band dimension." + ) + read_rows: set[str] = set() + + def cell( + kind: str, + window: str, + scope: str, + sex: str, + band: int, + extra: Mapping[str, str] | None = None, + ) -> float: + selector = { + **fixed[kind].get(window, {}), + **(extra or {}), + dimensions["window"]: windows[window], + dimensions["scope"]: scope, + dimensions["sex"]: sexes[sex], + dimensions["age_band"]: band_values[band], + } + found = read( + resource, + concept=concept, + period_type=period_type, + period_value=period_value, + geography_id=geography_id, + dimensions=selector, + ) + if len(found) != 1: + raise ValueError( + f"{resource}: expected one {concept} row {selector}, found {len(found)}." + ) + value = float(found[0]["value"]) + if not 0.0 <= value <= 1.0: + raise ValueError(f"{resource}: {selector} is no share: {value}.") + read_rows.add(str(found[0].get("source_record_id") or selector)) + return value + + rates: dict[str, dict[str, dict[tuple[str, int], float]]] = {} + for key in UK_GAMBLING_PARTICIPATION_KEYS: + population = str(keys[key].get("population") or "") + declared_activities = keys[key].get("activities") + if not population or not isinstance(declared_activities, Mapping): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: {key} must declare its " + "population and map each activity to the further dimensions of " + "its row." + ) + activities = { + str(activity): { + str(name): str(value) for name, value in (row or {}).items() + } + for activity, row in declared_activities.items() + } + roles = {dimensions[name] for name in dimensions} + if not activities or any(set(row) & roles for row in activities.values()): + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: {key} must declare an " + "activity, and no activity may fix the window, scope, sex or age " + "band dimension." + ) + rates[key] = {REGULAR: {}, OCCASIONAL: {}} + for band in bands: + # Activities independent within the population that plays any of + # them, so the union is that population's share of it. + within = cell("population", REGULAR, population, "all", band) + product = 1.0 + for activity, row in activities.items(): + played = cell("activity", REGULAR, activity, "all", band, row) + product *= 1.0 - (min(played / within, 1.0) if within > 0 else 0.0) + union = 1.0 - product + for sex in UK_GAMBLING_SEXES: + regular = cell("population", REGULAR, population, sex, band) + annual = cell("population", OCCASIONAL, population, sex, band) + rates[key][REGULAR][(sex, band)] = regular * union + # The four-week share scaled by the cell's own twelve-month to + # four-week ratio, which is the union of the twelve-month rate. + rates[key][OCCASIONAL][(sex, band)] = min(union * annual, 1.0) + receipt = { + "resource": resource, + "concept": concept, + "period_type": period_type, + "period_value": period_value, + "geography_id": geography_id, + "rows_read": len(read_rows), + "rates": { + key: { + window: {f"{sex}:{band}": value for (sex, band), value in cells.items()} + for window, cells in by_window.items() + } + for key, by_window in rates.items() + }, + } + return ParticipationRates(bands, rates, receipt) + + +def _sex_name(value: object) -> str: + name = getattr(value, "name", None) + return str(name if name is not None else value).upper() + + +def _adults( + person: pd.DataFrame, household_ids: Sequence[object] +) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: + """Each person's household row, age, sex and whether an adult.""" + + rows = pd.Index(household_ids).get_indexer(person["person_household_id"].to_numpy()) + if (rows < 0).any(): + raise ValueError("Some people name a household the frame does not hold.") + age = pd.to_numeric(person["age"], errors="raise").to_numpy(dtype=float) + sex = np.array([_sex_name(value) for value in person["gender"]], dtype=object) + adult = age >= UK_GAMBLING_ADULT_AGE + unknown = set(sex[adult]) - set(UK_GAMBLING_SEXES) + if unknown: + raise ValueError( + f"The frame's adults carry a gender outside {UK_GAMBLING_SEXES}: " + f"{sorted(unknown)}." + ) + return rows, age, sex, adult + + +def household_participation( + person: pd.DataFrame, + household_ids: Sequence[object], + cells: Mapping[tuple[str, int], float], + *, + bands: Sequence[int], + theta: float, +) -> np.ndarray: + """Each household's chance that any adult plays, combined at ``theta``. + + ``1 - (1 - p_max) * prod_{other adults} (1 - p_i) ** theta``, where each + adult's ``p_i`` is its (sex, age band) cell. A household with no adult + plays nothing. + """ + + if not 0.0 <= theta <= 1.0: + raise ValueError(f"theta {theta} is outside [0, 1].") + rows, age, sex, adult = _adults(person, household_ids) + band = np.maximum(np.searchsorted(np.asarray(bands), age, side="right") - 1, 0) + table = np.array( + [[cells[(name, int(lower))] for lower in bands] for name in UK_GAMBLING_SEXES] + ) + p = np.where(adult, table[(sex == UK_GAMBLING_SEXES[1]).astype(int), band], 0.0) + p = np.minimum(p, 1.0 - 1e-12) + households = len(household_ids) + top = np.zeros(households) + np.maximum.at(top, rows, p) + log_none = np.zeros(households) + np.add.at(log_none, rows, np.log1p(-p)) + log_others = log_none - np.log1p(-top) + return 1.0 - (1.0 - top) * np.exp(theta * log_others) + + +def household_strata( + person: pd.DataFrame, + household_ids: Sequence[object], + *, + adults_cap: int, + youngest_bounds: Sequence[int], +) -> np.ndarray: + """Each household's stratum: its adults (capped) and its youngest adult's band.""" + + rows, age, _sex, adult = _adults(person, household_ids) + households = len(household_ids) + adults = np.zeros(households, dtype=int) + np.add.at(adults, rows[adult], 1) + has_adult = adults > 0 + lowest = np.full(households, np.inf) + np.minimum.at(lowest, rows[adult], age[adult]) + youngest = np.where(has_adult, lowest, float(UK_GAMBLING_ADULT_AGE)) + edges = [UK_GAMBLING_ADULT_AGE, *youngest_bounds] + spans = [ + f"{lower}_to_{edges[i + 1] - 1}" if i + 1 < len(edges) else f"{lower}_plus" + for i, lower in enumerate(edges) + ] + place = np.searchsorted(np.asarray(edges), youngest, side="right") - 1 + count = np.minimum(adults, adults_cap) + labels = np.array( + [ + f"adults_{c}{'_plus' if c == adults_cap else ''}:youngest_{spans[p]}" + for c, p in zip(count, place, strict=True) + ], + dtype=object, + ) + labels[~has_adult] = NO_ADULTS + return labels + + +def _propensity( + donor_features: np.ndarray, + donor_played: np.ndarray, + donor_weights: np.ndarray, + recipient_features: np.ndarray, + *, + seed: int, + settings: Mapping[str, Any], +) -> tuple[np.ndarray, dict[str, Any]]: + """The donor's chance of recording the key, for each recipient. + + A regularised gradient-boosted classifier that stops early on a held-out + fraction, so its probabilities on households it did not see do not sink + the way the chain's default gate's do for a rare positive (2026-10-24). It + only orders the walk, which sets how many households are added. + """ + + from sklearn.ensemble import HistGradientBoostingClassifier + + classifier = HistGradientBoostingClassifier( + random_state=seed, early_stopping=True, **dict(settings) + ) + classifier.fit( + donor_features, donor_played.astype(int), sample_weight=donor_weights + ) + positive = list(classifier.classes_).index(1) + probability = classifier.predict_proba(recipient_features)[:, positive] + on_donor = classifier.predict_proba(donor_features)[:, positive] + receipt = { + "donor_rate": float(donor_weights[donor_played].sum() / donor_weights.sum()), + "donor_mean_probability": float(np.average(on_donor, weights=donor_weights)), + "iterations": int(classifier.n_iter_), + "positive_support": support_band(int(donor_played.sum())), + } + return probability, receipt + + +def _positive_stakes( + donor_features: pd.DataFrame, + donor_stakes: np.ndarray, + donor_weights: np.ndarray, + recipient_features: pd.DataFrame, + household_ids: np.ndarray, + *, + seed: int, + salt: str, + n_estimators: int, +) -> tuple[np.ndarray, Any]: + """A positive stake for every recipient, from the donor's positive stakes. + + The gas connection walk's amount model (``gas_payer_draws``): a + regime-gated QRF fitted on the donors who record the key, drawn from its + positive forest at quantiles keyed on the household id. + """ + + from microcosm.fit.qrf import Regime, RegimeGatedQRF + + target = "stake" + positive = donor_stakes > 0 + train = donor_features.loc[positive].reset_index(drop=True) + train[target] = donor_stakes[positive] + train["household_weight"] = donor_weights[positive] + fitted = RegimeGatedQRF(n_estimators=n_estimators, seed=seed).fit( + train, list(donor_features.columns), [target], weights="household_weight" + ) + regime = str(fitted.regimes()[target]) + if regime != Regime.POSITIVE_ONLY: + raise ValueError( + f"the donor's positive stakes fitted regime {regime!r}, not " + f"{Regime.POSITIVE_ONLY!r}." + ) + stakes = fitted.predict_positive_from_uniforms( + recipient_features.reset_index(drop=True), + quantiles={ + target: stable_identity_uniforms(household_ids, seed=seed, salt=salt) + }, + )[target].to_numpy(dtype=float) + return stakes, fitted.weight_kind + + +def _ships( + sources: np.ndarray, weight: np.ndarray, cells: Sequence[np.ndarray] +) -> bool: + """Whether every cell rests on none or on ``SMALL_CELL`` or more source households. + + A receipt gives a group's figures only when each of its cells does: its + figures are sums of these cells, so one small cell would come back by + difference (CD171 section 5.2.1). + """ + + return all( + (count := distinct_count(sources, cell, weight)) == 0 or count >= SMALL_CELL + for cell in cells + ) + + +def top_up_gambling_participation( + keys: Mapping[str, np.ndarray], + *, + person: pd.DataFrame, + household_ids: Sequence[object], + weights: Sequence[float], + sources: Sequence[object] | None, + donor_features: pd.DataFrame, + donor_keys: Mapping[str, np.ndarray], + donor_weights: Sequence[float], + recipient_features: pd.DataFrame, + parameters: Mapping[str, Any], + fit_name: str, + rows: Callable[..., list[dict[str, Any]]] | None = None, +) -> GamblingParticipation: + """Top each gambling key up to its published household participation. + + ``keys`` are the frame's drawn stakes per key, in household order, and + ``donor_keys`` the donor's own, on its rows; ``donor_features`` and + ``recipient_features`` are the same predictor columns on each side. + ``sources`` are the households' source households, for the receipt's + floors (``None`` when every household is its own). Every household the + diary saw keeps its stake, and the walk adds households with drawn stakes + until each stratum's four-week and twelve-month shares are met; a stratum + that runs out of households first is refused. + + The receipt gives, per key, the targets and the shares before and after, + nationally and per stratum, the share of the key's stakes each class + carries and the fits' donor support as a band: shares only, and a + group's figures only where every cell under them rests on ten or more + source households. + """ + + ids = np.asarray(household_ids) + weight = np.asarray(weights, dtype=float) + mass = float(weight.sum()) + source_ids = np.arange(len(ids)) if sources is None else np.asarray(sources) + donor_weight = np.asarray(donor_weights, dtype=float) + settings = participation_settings(parameters) + rates = participation_rates(parameters, rows=rows) + strata = household_strata( + person, + ids, + adults_cap=settings["strata"]["adults_cap"], + youngest_bounds=settings["strata"]["youngest_adult_bounds"], + ) + labels = sorted(set(strata)) + seed, salt = settings["seed"], settings["salt"] + share = settings["occasional_stake_share"] + donor_x = donor_features.to_numpy(dtype=float) + recipient_x = recipient_features.to_numpy(dtype=float) + everyone = np.ones(len(ids), dtype=bool) + topped_keys: dict[str, np.ndarray] = {} + records: list[FitWeightRecord] = [] + receipt: dict[str, Any] = { + "operation": TOP_UP_GAMBLING_PARTICIPATION_KIND, + "facts": rates.receipt, + "settings": settings, + "keys": {}, + } + for key in UK_GAMBLING_PARTICIPATION_KEYS: + drawn = np.asarray(keys[key], dtype=float) + donor_stakes = np.asarray(donor_keys[key], dtype=float) + played = donor_stakes > 0 + if not SMALL_CELL <= int(played.sum()) <= len(played) - SMALL_CELL: + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: the donor must record {key} " + f"stakes on {SMALL_CELL} or more households and leave {SMALL_CELL} " + "or more without, to fit and report its share." + ) + chance = { + window: household_participation( + person, + ids, + rates.rates[key][window], + bands=rates.bands, + theta=settings["theta"][key], + ) + for window in (REGULAR, OCCASIONAL) + } + propensity, propensity_receipt = _propensity( + donor_x, + played, + donor_weight, + recipient_x, + seed=seed, + settings=settings["propensity"], + ) + draws, stake_kind = _positive_stakes( + donor_features, + donor_stakes, + donor_weight, + recipient_features, + ids, + seed=seed, + salt=f"{salt}:{key}:stake", + n_estimators=settings["n_estimators"], + ) + seen = drawn > 0 + ordering = propensity * chance[OCCASIONAL] + uniforms = stable_identity_uniforms(ids, seed=seed, salt=f"{salt}:{key}:order") + with np.errstate(divide="ignore"): + order = np.where(ordering > 0, -np.log(uniforms) / ordering, np.inf) + taken = seen.copy() + regular = np.zeros(len(ids), dtype=bool) + targets: dict[str, dict[str, float]] = {label: {} for label in labels} + for window in (REGULAR, OCCASIONAL): + for label in labels: + members = np.flatnonzero(strata == label) + total = float(weight[members].sum()) + target = float( + np.average(chance[window][members], weights=weight[members]) + ) + targets[label][window] = target + walk = _connect_walk( + taken, + rows=members, + weight=weight, + key=order, + total=total, + before=float(weight[members][taken[members]].sum()) / total, + target=target, + ) + if walk["candidates_exhausted"] and walk["shortfall"] > 1e-9: + raise ValueError( + f"{TOP_UP_GAMBLING_PARTICIPATION_KIND}: {key} stratum {label} " + f"ran out of households before its {window} share." + ) + if window == REGULAR: + regular = taken & ~seen + occasional = taken & ~seen & ~regular + # The added regular players' mean stake is the seen households' (the + # donor's positive mean where the frame drew none): the walk picks + # households whose predictors draw larger stakes, so scaling to the + # donor's mean would put them above the players the diary saw. + anchor = ( + np.average(drawn[seen], weights=weight[seen]) + if seen.any() + else np.average(donor_stakes[played], weights=donor_weight[played]) + ) + scale = ( + float(anchor / np.average(draws[regular], weights=weight[regular])) + if regular.any() + else 1.0 + ) + topped = drawn.copy() + topped[regular] = scale * draws[regular] + topped[occasional] = share * scale * draws[occasional] + topped_keys[key] = topped + strata_receipt: dict[str, Any] = {} + for label in labels: + member = strata == label + cells = (member, member & seen, member & regular, member & occasional) + if not _ships(source_ids, weight, cells): + strata_receipt[label] = {"withheld": True} + continue + total = float(weight[member].sum()) + strata_receipt[label] = { + "regular_target": targets[label][REGULAR], + "annual_target": targets[label][OCCASIONAL], + "before": float(weight[cells[1]].sum()) / total, + "after_regular": float(weight[cells[1] | cells[2]].sum()) / total, + "after_annual": float(weight[cells[1] | cells[2] | cells[3]].sum()) + / total, + } + entry: dict[str, Any] = {"withheld": True} + stakes = float(weight @ topped) + if stakes > 0 and _ships( + source_ids, weight, (everyone, seen, regular, occasional) + ): + entry = { + "regular_target": float(weight @ chance[REGULAR]) / mass, + "annual_target": float(weight @ chance[OCCASIONAL]) / mass, + "before": float(weight[seen].sum()) / mass, + "after_regular": float(weight[seen | regular].sum()) / mass, + # As level_excise_quantities reads its keys' positive shares. + "after_annual": float(weight[topped > 0].sum() / mass), + "stake_shares": { + "seen": float(weight[seen] @ topped[seen]) / stakes, + "added_regular": float(weight[regular] @ topped[regular]) / stakes, + "added_occasional": float(weight[occasional] @ topped[occasional]) + / stakes, + }, + "amount_scale": scale, + } + receipt["keys"][key] = { + **entry, + "added_without_stake": extreme_count( + int(((regular | occasional) & ~(topped > 0)).sum()) + ), + "propensity": propensity_receipt, + "stake_training_rows": rounded_count(int(played.sum())), + "strata": strata_receipt, + } + records.extend( + ( + FitWeightRecord(f"{fit_name}:{key}_participation", EXPLICIT_KIND), + FitWeightRecord(f"{fit_name}:{key}_participation_stake", stake_kind), + ) + ) + return GamblingParticipation(topped_keys, receipt, tuple(records)) 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 999937f4b1..56da87324c 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 @@ -57,6 +57,14 @@ spend_to_kwh, ) from microcosm.build.uk_runtime.frs_spine import read_pinned_tab +from microcosm.build.uk_runtime.gambling_participation import ( + TOP_UP_GAMBLING_PARTICIPATION_KIND, + UK_GAMBLING_PARTICIPATION_KEYS, + UK_GAMBLING_PARTICIPATION_RECEIPT, + GamblingParticipation, + gambling_participation_operation, + top_up_gambling_participation, +) from microcosm.build.uk_runtime.household_income import ( UK_HBAI_GROSS_INCOME_DEDUCTIONS, UK_HBAI_NET_INCOME_PREDICTOR, @@ -77,6 +85,7 @@ floored_share, rounded_count, small_cell_share, + support_band, ) from microcosm.build.uk_runtime.support_clip import ( UKSupportClipReceipt, @@ -168,6 +177,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 @@ -298,6 +369,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, @@ -309,6 +383,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") @@ -326,6 +401,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",) @@ -428,6 +672,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 @@ -479,10 +784,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" @@ -508,6 +832,9 @@ 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 + gambling_participation: Mapping[str, Any] | None = None + excise_quantities: Mapping[str, Any] | None = None def evidence(self) -> dict[str, object]: evidence: dict[str, object] = { @@ -540,6 +867,14 @@ 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.gambling_participation is not None: + evidence[UK_GAMBLING_PARTICIPATION_RECEIPT] = dict( + self.gambling_participation + ) + if self.excise_quantities is not None: + evidence[UK_LCFS_EXCISE_QUANTITIES_RECEIPT] = dict(self.excise_quantities) return evidence @@ -592,12 +927,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( @@ -627,11 +964,14 @@ 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), ) 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, @@ -721,6 +1061,36 @@ 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 + ) + gambling = lcfs_gambling_participation( + self.stage, + household_draws, + donor=donor, + recipient=recipient, + drawn=imputation.draws, + person=frame.table("person"), + household_ids=frame.table("household")["household_id"].to_numpy(), + weights=weights, + sources=sources, + shares=shares, + ) + quantities, excise_quantities = lcfs_excise_quantities( + self.stage, + household_draws, + weights=weights, + shares=shares, + participation=None if gambling is None else gambling.keys, + ) household = frame.table("household").copy() for column in UK_LCFS_CONSUMPTION_TARGET_COLUMNS: household[column] = household_draws[column].to_numpy() @@ -729,6 +1099,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(), @@ -749,6 +1126,7 @@ def __call__(self, frame: Frame) -> Frame: *incidence.fit_weight_records, *(() if prepayment is None else prepayment.fit_weight_records), *(() if gas_payers is None else gas_payers.fit_weight_records), + *(() if gambling is None else gambling.fit_weight_records), ) self.last_result = UKLCFSConsumptionResult( frame=result, @@ -766,6 +1144,9 @@ 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, + gambling_participation=None if gambling is None else gambling.receipt, + excise_quantities=excise_quantities, ) return result @@ -1794,12 +2175,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 = { @@ -1830,6 +2210,753 @@ 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], + participation: Mapping[str, np.ndarray] | None = None, +) -> 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). ``participation`` gives the two gambling keys the + declared ``top_up_gambling_participation`` step brought to published + participation, in place of the drawn stakes; the stored spending stays + the drawn one. + """ + + 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, + } + if participation is not None: + if set(participation) != set(UK_GAMBLING_PARTICIPATION_KEYS): + raise ValueError( + f"the topped-up gambling keys must be {UK_GAMBLING_PARTICIPATION_KEYS}, " + f"not {sorted(participation)}." + ) + for key, values in participation.items(): + topped = np.asarray(values, dtype=float) + if topped.shape != (len(household_draws),): + raise ValueError(f"the topped-up {key} key is not one per household.") + keys[key] = topped + 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], + participation: Mapping[str, np.ndarray] | None = None, +) -> 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, participation=participation + ) + 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 + + +#: The gambling top-up's recreation feature: recreation less its gambling +#: stakes, which P609 includes. +UK_LCFS_RECREATION_NET_OF_STAKES = "recreation_net_of_gambling_stakes" + + +def gambling_participation_features( + donor_encoded: pd.DataFrame, + donor_spending: pd.DataFrame, + recipient_encoded: pd.DataFrame, + drawn: pd.DataFrame, + *, + predictors: Sequence[str], +) -> tuple[pd.DataFrame, pd.DataFrame]: + """The donor's and the frame's features for the gambling top-up's two fits. + + The chain's predictors and the spend targets the shares were drawn on: + the donor's diary totals, and the chain's raw draws on the frame. Recreation + enters net of its gambling stakes on both sides. P609 sums the stake lines, + so a recorded stake would otherwise raise the very feature that predicts it, + and the walk would favour high-recreation households for that reason alone + (Vahid's review of microcosm#1381, round 4). + """ + + spend = [ + c for c in UK_LCFS_CONSUMPTION_TARGET_COLUMNS if c != "recreation_consumption" + ] + donor_features = donor_encoded[[*predictors, *spend]].reset_index(drop=True) + donor_features[UK_LCFS_RECREATION_NET_OF_STAKES] = donor_encoded[ + "recreation_consumption" + ].to_numpy(dtype=float) - donor_spending[UK_LCFS_GAMBLING_SPENDING].to_numpy( + dtype=float + ) + recipient_features = recipient_encoded[list(predictors)].reset_index(drop=True) + for column in spend: + recipient_features[column] = drawn[column].to_numpy(dtype=float) + share = np.clip(drawn[UK_LCFS_GAMBLING_SHARE].to_numpy(dtype=float), 0.0, 1.0) + recipient_features[UK_LCFS_RECREATION_NET_OF_STAKES] = drawn[ + "recreation_consumption" + ].to_numpy(dtype=float) * (1.0 - share) + return donor_features, recipient_features + + +def lcfs_gambling_participation( + stage: SourceStageSpec, + household_draws: pd.DataFrame, + *, + donor: pd.DataFrame, + recipient: pd.DataFrame, + drawn: pd.DataFrame, + person: pd.DataFrame, + household_ids: np.ndarray, + weights: Sequence[float], + sources: np.ndarray | None, + shares: Mapping[str, object], +) -> GamblingParticipation | None: + """Apply the declared ``top_up_gambling_participation`` step (none if undeclared). + + The keys are the drawn National Lottery and betting and gaming stakes, + and the donor's own. Both fits read ``gambling_participation_features``. + The step only re-keys ``level_excise_quantities``, so it needs that step + and the shares. + """ + + parameters = gambling_participation_operation(stage) + if parameters is None: + return None + if excise_quantities_operation(stage) is None or set(shares) != set( + UK_LCFS_EXCISE_SHARES + ): + raise ValueError( + f"{stage.stage}: {TOP_UP_GAMBLING_PARTICIPATION_KIND} re-keys " + f"{LEVEL_EXCISE_QUANTITIES_KIND}, so it needs that step and the " + f"excise shares {tuple(UK_LCFS_EXCISE_SHARES)}." + ) + columns = { + UK_LCFS_NATIONAL_LOTTERY_KEY: UK_LCFS_NATIONAL_LOTTERY_SPENDING, + UK_LCFS_BETTING_AND_GAMING_KEY: UK_LCFS_BETTING_AND_GAMING_SPENDING, + } + spending = excise_spending(household_draws) + donor_spending = excise_spending(donor) + donor_encoded, recipient_encoded, predictors = _encode_consumption_predictors( + donor, recipient + ) + donor_features, recipient_features = gambling_participation_features( + donor_encoded, + donor_spending, + recipient_encoded, + drawn, + predictors=predictors, + ) + return top_up_gambling_participation( + { + key: spending[column].to_numpy(dtype=float) + for key, column in columns.items() + }, + person=person, + household_ids=household_ids, + weights=weights, + sources=sources, + donor_features=donor_features, + donor_keys={ + key: donor_spending[column].to_numpy(dtype=float) + for key, column in columns.items() + }, + donor_weights=donor_encoded["household_weight"].to_numpy(dtype=float), + recipient_features=recipient_features, + parameters=parameters, + fit_name=UK_LCFS_CONSUMPTION_FIT_NAME, + ) + + def recompose_from_remainder_operation( stage: SourceStageSpec, ) -> Mapping[str, Any] | None: @@ -2878,6 +4005,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, @@ -2885,6 +4251,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. @@ -2898,6 +4265,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) @@ -2917,6 +4287,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: @@ -2961,6 +4335,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", @@ -2972,6 +4347,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 @@ -3357,6 +4734,7 @@ def impute_lcfs_consumption( seed: int, n_estimators: int, record_ids: Sequence[object] | np.ndarray, + targets: Sequence[str] = UK_LCFS_CONSUMPTION_TARGET_COLUMNS, ) -> UKLCFSConsumptionImputationResult: """Chain-draw the targets in the declared order. @@ -3367,8 +4745,20 @@ 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. """ + 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( @@ -3383,13 +4773,13 @@ def impute_lcfs_consumption( 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( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/orrery_contract.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/orrery_contract.py index 9c0283a54c..ace70019f9 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/orrery_contract.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/orrery_contract.py @@ -27,9 +27,13 @@ from .graph import _manifest_stages, uk_spine_operation_inventory from .graph_calibration import SIZE_DRAW_TYPE, SIZE_RECEIPT_TYPE, SIZE_SEARCH_TYPE from .graph_evidence import SPINE_GATE_REPORT_TYPE -from .graph_national import NATIONAL_GATE_REPORT_TYPE, NATIONAL_TARGET_TYPE +from .graph_national import ( + NATIONAL_EVIDENCE_TYPE, + NATIONAL_GATE_REPORT_TYPE, + NATIONAL_TARGET_TYPE, +) from .graph_targets import TARGET_SELECTION_TYPE, registry_from_payload -from .graph_terminal import FULL_GATE_REPORT_TYPE +from .graph_terminal import FULL_DIAGNOSTICS_TYPE, FULL_GATE_REPORT_TYPE #: A summary row's fields that the result's weights produce. _SUMMARY_MODEL_FIELDS = ( @@ -41,7 +45,68 @@ ) -def _withhold_summary_rows(data: dict, result, ordered) -> None: +#: The outputs in which a gate on a result records the rows it withheld: the +#: national gates flag each row of their calibration evidence, and the full +#: build's terminal gate notes each withheld row in its diagnostics' metadata. +_RECORDED_WITHHELD = { + "calibration_evidence": ( + NATIONAL_EVIDENCE_TYPE, + "diagnostics", + lambda row: row.get("model_figures_withheld") is True, + ), + "calibration_diagnostics": ( + FULL_DIAGNOSTICS_TYPE, + "targets", + lambda row: bool((row.get("metadata") or {}).get("model_figures_withheld")), + ), +} + + +def _recorded_withheld( + context: ArtifactSummaryContext, +) -> tuple[frozenset[str], frozenset[str]] | None: + """The rows a gate on this result saw, and those it recorded as withheld. + + Only a gate that reads this result directly counts. The summary takes its + set rather than count it again, so a build computes the withholding once + (Vahid's third review of #1383, item 32). None when no such gate has run. + """ + + found: set[tuple[frozenset[str], frozenset[str]]] = set() + for node_id, predecessors in context.run.compiled.predecessors.items(): + if context.node_id not in predecessors: + continue + receipt = context.run.manifest.nodes.get(node_id) + if receipt is None: + continue + for name, descriptor in receipt.typed_artifacts.get("outputs", {}).items(): + reader = _RECORDED_WITHHELD.get(name) + if reader is None or name not in receipt.opaque_artifacts: + continue + type_, table, flagged = reader + if descriptor["type"] != { + "name": type_.name, + "schema_version": type_.schema_version, + }: + continue + rows = json.loads(context.store.load_bytes(descriptor["key"]))[table] + found.add( + ( + frozenset(str(row["name"]) for row in rows), + frozenset(str(row["name"]) for row in rows if flagged(row)), + ) + ) + if len(found) > 1: + raise ValueError("Gates on one result recorded different withheld rows.") + return next(iter(found), None) + + +def _withhold_summary_rows( + data: dict, + result, + ordered, + recorded: tuple[frozenset[str], frozenset[str]] | None = None, +) -> None: """Keep a thin row's figures out of the published summary (#1262). María's ruling of 2026-10-17: a BRMA row's model figures leave a build @@ -49,7 +114,9 @@ def _withhold_summary_rows(data: dict, result, ordered) -> None: result's own weights; her rule of 2026-10-21 extends it to national and regional rows (local rows keep the area-support rule). A withheld row keeps its target and its place, and the final loss covers the published - rows (her ruling of 2026-10-18). + rows (her ruling of 2026-10-18). ``recorded`` is a gate's + (:func:`_recorded_withheld`): taken as it is when that gate saw every + summary row, and counted here otherwise. """ from .diagnostics import _restate_totals_over_published_rows, uk_withheld_rows @@ -61,27 +128,30 @@ def _withhold_summary_rows(data: dict, result, ordered) -> None: ordered.problem.targets, ordered.target_metadata, strict=True ) } - # The withholding ties a local family to its parents by contract target - # (Vahid's review of #1383, item 1). - withheld = uk_withheld_rows( - ordered.problem, - result.weights, - result.frame, - [ + if recorded is not None and {row["name"] for row in rows} <= recorded[0]: + withheld = set(recorded[1]) + else: + # The withholding ties a local family to its parents by contract + # target (Vahid's review of #1383, item 1). + withheld = uk_withheld_rows( + ordered.problem, + result.weights, + result.frame, + [ + { + **row, + "metadata": { + key: metadata_by_row.get(row["name"], {}).get(key) + for key in ("contract_target_id", "geography_id") + }, + } + for row in rows + ], { - **row, - "metadata": { - key: metadata_by_row.get(row["name"], {}).get(key) - for key in ("contract_target_id", "geography_id") - }, - } - for row in rows - ], - { - name: metadata.get("geography_level", "") - for name, metadata in metadata_by_row.items() - }, - ) + name: metadata.get("geography_level", "") + for name, metadata in metadata_by_row.items() + }, + ) if not withheld: return for row in rows: @@ -101,7 +171,7 @@ def _withhold_summary_rows(data: dict, result, ordered) -> None: def _uk_result_summary(context: ArtifactSummaryContext) -> dict: result, ordered = summary_result(context) data = result_summary_data(result, ordered) - _withhold_summary_rows(data, result, ordered) + _withhold_summary_rows(data, result, ordered, _recorded_withheld(context)) ancestors, pending = set(), [context.node_id] while pending: current = pending.pop() 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..2a9de2c019 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,10 @@ 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 == "gambling_participation": + return _gambling_participation_gate(stage, evidence, parameters) if check == "bus_support_pricing": return _bus_support_pricing_gate(stage, evidence, parameters) if check == "property_components": @@ -3484,6 +3488,441 @@ 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 _gambling_participation_gate( + stage: str, + evidence: Mapping[str, object], + parameters: Mapping[str, object], +) -> GateResult: + """The gambling keys reached published participation (microcosm#1359). + + Fact checks on the ``gambling_participation`` receipt: each key's adult + rates are recomputed here from the vendored rows through the stage's own + declaration (never taken from the receipt) and must equal the receipt's + to ``maximum_relative_deviation``, and the receipt's settings (theta, the + occasional stake share, the strata, the propensity, the seed and the + salt) must be the declared ones. Per key, each stratum the receipt gives + must sit within ``maximum_stratum_shortfall`` of its four-week target, and + from there of its twelve-month target, or add nothing where the diary + already passed a target; the national shares must reach the targets less + that shortfall; no added household may lack a stake; the three classes' + stake shares must sum to one; the scale that brings the added regular + players' mean stake to the seen households' must lie inside + ``amount_scale_bounds``, so a broken stake draw that the anchoring would + otherwise hide fails; the propensity must rest on + ``required_support_band`` donors; and the excise levelling must have + shared the bases by the topped-up keys, so each key is positive on the + twelve-month share. The receipt withholds a stratum with a cell under ten + source households, which the gate counts; a key it withholds nationally + fails, since nothing of it could be checked. + """ + + from microcosm.build.country_spec import load_country_spec + from microcosm.build.uk_runtime.gambling_participation import ( + UK_GAMBLING_PARTICIPATION_KEYS, + gambling_participation_operation, + participation_rates, + participation_settings, + ) + + check = "gambling_participation" + receipt = _mapping( + evidence.get("gambling_participation"), + label=f"{stage}.gambling_participation", + ) + excise = _mapping( + evidence.get("excise_quantities"), label=f"{stage}.excise_quantities" + ) + tolerance = _finite_number( + parameters.get("maximum_relative_deviation"), + label=f"{stage}.maximum_relative_deviation", + ) + shortfall = _finite_number( + parameters.get("maximum_stratum_shortfall"), + label=f"{stage}.maximum_stratum_shortfall", + ) + required_support = parameters.get("required_support_band") + scale_bounds = parameters.get("amount_scale_bounds") + if not ( + isinstance(scale_bounds, list | tuple) + and len(scale_bounds) == 2 + and all( + isinstance(bound, int | float) and not isinstance(bound, bool) + for bound in scale_bounds + ) + and 0.0 < float(scale_bounds[0]) <= float(scale_bounds[1]) + ): + raise ValueError( + f"{stage}.amount_scale_bounds must be [low, high] with 0 < low <= high, " + f"got {scale_bounds!r}." + ) + low_scale, high_scale = (float(bound) for bound in scale_bounds) + declared = gambling_participation_operation( + load_country_spec("uk").sources.stage_map()[stage] + ) + if declared is None: + raise ValueError( + f"{stage}: declares no top_up_gambling_participation operation." + ) + settings = participation_settings(declared) + facts = participation_rates(declared).receipt + + def _number(value: object) -> bool: + return isinstance(value, int | float) and not isinstance(value, bool) + + def _close(observed: object, value: float) -> bool: + return _number(observed) and abs(float(observed) - value) <= ( + tolerance * max(1.0, abs(value)) + ) + + failures: list[str] = [] + if receipt.get("settings") != settings: + failures.append( + f"{stage}: the participation receipt's settings " + f"{receipt.get('settings')!r} are not the declared {settings!r}." + ) + recorded = _mapping( + receipt.get("facts"), label=f"{stage}.gambling_participation.facts" + ) + for name in ( + "resource", + "concept", + "period_type", + "period_value", + "geography_id", + "rows_read", + ): + if recorded.get(name) != facts[name]: + failures.append( + f"{stage}: the participation facts' {name} {recorded.get(name)!r} " + f"is not {facts[name]!r}." + ) + recorded_rates = recorded.get("rates") + for key, by_window in facts["rates"].items(): + for window, cells in by_window.items(): + for cell, value in cells.items(): + observed = ( + ((recorded_rates or {}).get(key) or {}).get(window) or {} + ).get(cell) + if not _close(observed, value): + failures.append( + f"{stage}: {key}'s {window} rate for {cell} {observed!r} is " + f"not the vendored {value}." + ) + + def _stratum(key: str, label: str, entry: Mapping[str, object]) -> list[str]: + names = ( + "before", + "regular_target", + "after_regular", + "annual_target", + "after_annual", + ) + if not all(_number(entry.get(name)) for name in names): + return [f"{stage}: {key} stratum {label} gives no shares to check."] + values = {name: float(entry[name]) for name in names} + problems: list[str] = [] + for start, target, after in ( + ("before", "regular_target", "after_regular"), + ("after_regular", "annual_target", "after_annual"), + ): + if values[start] >= values[target]: + if not _close(values[after], values[start]): + problems.append( + f"{stage}: {key} stratum {label} was at {values[start]} past " + f"its {target} {values[target]} but moved to {values[after]}." + ) + elif abs(values[after] - values[target]) > shortfall: + problems.append( + f"{stage}: {key} stratum {label}'s {after} {values[after]} is " + f"more than {shortfall} from its {target} {values[target]}." + ) + return problems + + keys = _mapping(receipt.get("keys"), label=f"{stage}.gambling_participation.keys") + levelled = _mapping(excise.get("keys"), label=f"{stage}.excise_quantities.keys") + withheld_strata = 0 + national: dict[str, object] = {} + for key in UK_GAMBLING_PARTICIPATION_KEYS: + entry = keys.get(key) + if not isinstance(entry, Mapping): + failures.append(f"{stage}: the participation receipt tops up no {key}.") + continue + if entry.get("added_without_stake") != 0: + failures.append( + f"{stage}: {entry.get('added_without_stake')!r} households added to " + f"{key} carry no stake." + ) + propensity = entry.get("propensity") + support = ( + propensity.get("positive_support") + if isinstance(propensity, Mapping) + else None + ) + if support != required_support: + failures.append( + f"{stage}: {key}'s fits rest on {support!r} donors, not " + f"{required_support!r}." + ) + strata = entry.get("strata") + for label, stratum in strata.items() if isinstance(strata, Mapping) else (): + if isinstance(stratum, Mapping) and stratum.get("withheld") is True: + withheld_strata += 1 + elif isinstance(stratum, Mapping): + failures.extend(_stratum(key, str(label), stratum)) + else: + failures.append(f"{stage}: {key} stratum {label} is not an object.") + if entry.get("withheld") is True: + failures.append( + f"{stage}: the receipt withholds {key}'s national shares, so the gate " + "can check none of them." + ) + continue + for target, after in ( + ("regular_target", "after_regular"), + ("annual_target", "after_annual"), + ): + if not ( + _number(entry.get(target)) + and _number(entry.get(after)) + and float(entry[after]) >= float(entry[target]) - shortfall + ): + failures.append( + f"{stage}: {key}'s {after} {entry.get(after)!r} falls short of its " + f"{target} {entry.get(target)!r}." + ) + shares = entry.get("stake_shares") + if not ( + isinstance(shares, Mapping) + and set(shares) == {"seen", "added_regular", "added_occasional"} + and all(_number(value) for value in shares.values()) + and _close(sum(float(value) for value in shares.values()), 1.0) + ): + failures.append( + f"{stage}: {key}'s stake shares {shares!r} do not split its stakes." + ) + scale = entry.get("amount_scale") + if not (_number(scale) and low_scale <= float(scale) <= high_scale): + failures.append( + f"{stage}: {key}'s amount scale {scale!r} is outside " + f"[{low_scale}, {high_scale}]: the donor's stake draws missed the " + "seen households' mean by more than the bounds allow." + ) + excise_key = levelled.get(key) + positive = ( + excise_key.get("positive_share") + if isinstance(excise_key, Mapping) + else None + ) + if not ( + _number(entry.get("after_annual")) + and _close(positive, float(entry["after_annual"])) + ): + failures.append( + f"{stage}: the excise levelling's {key} key is positive on {positive!r} " + f"of households, not the topped-up {entry.get('after_annual')!r}." + ) + national[key] = { + name: entry.get(name) + for name in ( + "regular_target", + "after_regular", + "annual_target", + "after_annual", + ) + } + details = { + "maximum_relative_deviation": tolerance, + "maximum_stratum_shortfall": shortfall, + "strata_withheld": withheld_strata, + "national": national, + } + 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..3d19609935 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,8 @@ 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", + "gambling_participation_facts.json", "dft_bus_journeys.json", "nts_trip_rates.json", "nts_car_availability.json", @@ -1166,6 +1168,8 @@ 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", + "gambling_participation_facts.json", "dft_bus_journeys.json", "nts_trip_rates.json", "nts_car_availability.json", @@ -1182,8 +1186,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 +1464,8 @@ 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_gambling_participation", "uk_stage_lcfs_consumption_basis", "uk_stage_etb_vat_support", "uk_stage_etb_services_support", @@ -1588,6 +1594,8 @@ 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_gambling_participation", "uk_stage_lcfs_consumption_basis", "uk_stage_etb_vat_support", "uk_stage_etb_services_support", 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..da7f216753 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 == "272c987af175687aca21f82851ef349521802b12" assert pin.source_repo == "PolicyEngine/chronicle" - assert pin.fact_row_count == 1499301 + assert pin.fact_row_count == 1503315 assert pin.facts_sha256 == ( - "2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b" + "084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85" ) assert pin.manifest_sha256 == ( - "b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21" + "229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd" ) 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 b274d09e86..280a9e6b06 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 @@ -839,6 +839,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) @@ -1512,7 +1541,14 @@ def test_a_thin_row_is_withheld_at_every_level() -> None: EntitySchema(group_entities=("household",)), {"household": Weights(np.ones(n), WeightKind.DESIGN)}, ) - rows = [{"name": "thin_row@E14000001@2025"}] + # A local row names its contract target (Vahid's third review of #1383, + # item 33); this one ties to no family. + rows = [ + { + "name": "thin_row@E14000001@2025", + "metadata": {"contract_target_id": "fixture.thin_row"}, + } + ] for level, withheld in ( ("national", True), ("region", True), @@ -1536,13 +1572,16 @@ def _withheld_sets( levels: dict[str, str] | None = None, regions: list[str] | None = None, targets: dict[str, str] | None = None, + tie_targets: bool = True, ) -> tuple[set[str], set[str]]: """``uk_withheld_row_sets`` over rows given by the households that carry them. Every household is its own source household (or ``sources``) and carries weight one. A row's entries are one, or its ``values`` (one for all its households, or one each). ``regions`` gives each household's region, and - ``targets`` a row's contract target. + ``targets`` a row's contract target. Any other row gets a contract target + no family holds, as a local row must name one; ``tie_targets=False`` + leaves the other rows without one. """ from types import SimpleNamespace @@ -1579,10 +1618,15 @@ def _withheld_sets( EntitySchema(group_entities=("household",)), {"household": Weights(np.ones(n), WeightKind.DESIGN)}, ) + tied = { + name: (targets or {}).get(name) + or (f"test:{name.split('@')[0]}" if tie_targets else None) + for name in names + } target_rows = [ {"name": name} - if name not in (targets or {}) - else {"name": name, "metadata": {"contract_target_id": targets[name]}} + if tied[name] is None + else {"name": name, "metadata": {"contract_target_id": tied[name]}} for name in names ] return uk_withheld_row_sets(problem, np.ones(n), frame, target_rows, levels) @@ -2813,9 +2857,49 @@ def test_a_national_row_less_a_familys_published_cells_withholds_one_more() -> N ) assert thin == {"dwp.uc.households_by_area@E14000003@2025"} assert beside == {"dwp.uc.households_by_area@E14000002@2025"} - # Without the contract targets no family block forms, and nothing is - # withheld beside the thin cell: the gap this closes. - assert _withheld_sets(rows, 60, levels=levels, regions=regions) == (thin, set()) + # Without its contract target a local row would join no family block and + # nothing would be withheld beside the thin cell, so it refuses (Vahid's + # third review of #1383, item 33). + with pytest.raises(ValueError, match="name none"): + _withheld_sets(rows, 60, levels=levels, regions=regions, tie_targets=False) + + +def test_no_parentless_local_family_shares_its_measurement_with_a_higher_row() -> None: + """A local family with no parent has no higher-grain row of its measurement. + + The family check ties a family to its parents through the cross-grain + declarations or a nested measurement. A national or regional row of the + same measurement left untied would let a published total less the + family's cells give a thin cell back unchecked (Vahid's third review of + #1383, item 33). Today the parentless families are the two DESNZ kWh + families, the three equivalised income and housing cost families and the + two private rent families; the national energy rows are spend, not kWh. + """ + + from microcosm.build.uk_runtime.cross_grain_declarations import ( + UK_LOCAL_GEOGRAPHY_LEVELS, + ) + from microcosm.build.uk_runtime.diagnostics import uk_local_family_parents + from microcosm.build.uk_runtime.ledger_targets import ( + uk_cross_grain_contract_signatures, + ) + + contract = uk_cross_grain_contract_signatures() + + def concept(target_id: str) -> object: + return (contract[target_id].get("measurement") or {}).get("concept") + + higher: dict[object, set[str]] = {} + for target_id, target in contract.items(): + if set(target.get("geography_levels") or ()) - UK_LOCAL_GEOGRAPHY_LEVELS: + higher.setdefault(concept(target_id), set()).add(target_id) + parentless = [ + members for members, parents in uk_local_family_parents() if not parents + ] + assert parentless + for members in parentless: + for target_id in members: + assert not higher.get(concept(target_id), set()) - members, target_id def test_a_row_one_block_withholds_stays_hidden_in_another() -> None: diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_full_gates.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_full_gates.py index 0172d1cadd..67866b50eb 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_full_gates.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_full_gates.py @@ -109,6 +109,9 @@ def evidence(monkeypatch): "geography_id": "E14000001", "family": "population", "materialization": "uk_local_surface", + # A local row names its contract target (Vahid's third review of + # #1383, item 33); this one ties to no family. + "contract_target_id": "fixture.population", }, ) ordered = OrderedProblem( 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..123e245a47 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,14 @@ 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 272c987 feed re-pinned by microcosm#1359 + # (PolicyEngine/chronicle#391: the Gambling Commission's Gambling Survey + # for Great Britain 2025 participation tables), on top of the 200bf6d feed + # of 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 +222,19 @@ def test_current_national_and_local_pins_share_one_reviewed_identity(): assert ( national.facts_sha256 == local["facts_sha256"] - == ("2b64fecfe746164203dac1726aae6ffdb3e5d8e478bd3d64d118ac76cb00780b") + == ("084ddf46fa34b1e03b5f0a7287617aeafaf7f614e3619d87a6565409e4adac85") ) assert ( national.manifest_sha256 == local["manifest_sha256"] - == ("b90fb1b8f1a910458fac41425360209d101796e6de0b134f952ad93323ca6e21") + == ("229afc18d8201bbd59a41777453f487ad750be2802425240ac26ee54849bfafd") ) assert ( national.source_commit == local["source_commit"] - == "abf0921b896d29ee0745ed2aefde8d6337ed7164" + == "272c987af175687aca21f82851ef349521802b12" ) - assert national.fact_row_count == local["fact_row_count"] == 1499301 + assert national.fact_row_count == local["fact_row_count"] == 1503315 def test_chronicle_source_codec_validates_directory_manifest(tmp_path): diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_gambling_participation.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_gambling_participation.py new file mode 100644 index 0000000000..0954e969e5 --- /dev/null +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_gambling_participation.py @@ -0,0 +1,403 @@ +"""The gambling participation top-up of the LCFS stage (microcosm#1359), on synthetic facts.""" + +from __future__ import annotations + +import copy + +import numpy as np +import pandas as pd +import pytest + +from microcosm.build.uk_runtime.gambling_participation import ( + NO_ADULTS, + OCCASIONAL, + REGULAR, + UK_GAMBLING_PARTICIPATION_KEYS, + household_participation, + household_strata, + participation_rates, + participation_settings, + top_up_gambling_participation, +) +from test_support.microcosm_build.uk_gambling_participation_facts import ( + ACTIVITIES, + participation_declaration, + participation_inputs, + serve_participation_rows, +) + +_CELLS = { + ("MALE", 18): 0.3, + ("FEMALE", 18): 0.2, + ("MALE", 35): 0.25, + ("FEMALE", 35): 0.4, + ("MALE", 55): 0.1, + ("FEMALE", 55): 0.15, +} + + +def _people(*households: tuple[tuple[float, str], ...]) -> pd.DataFrame: + rows = [ + {"person_household_id": index, "age": age, "gender": sex} + for index, members in enumerate(households, start=1) + for age, sex in members + ] + return pd.DataFrame(rows) + + +def test_household_participation_combines_adults_at_theta() -> None: + person = _people( + ((20, "MALE"),), + ((20, "MALE"), (40, "FEMALE"), (10, "FEMALE")), + ((12, "MALE"),), + ((20, "MALE"), (40, "FEMALE"), (70, "MALE")), + ) + ids = [1, 2, 3, 4] + + def chance(theta: float) -> np.ndarray: + return household_participation( + person, ids, _CELLS, bands=(18, 35, 55), theta=theta + ) + + # One player per household: the most likely adult's rate. + assert chance(0.0) == pytest.approx([0.3, 0.4, 0.0, 0.4]) + # Independent adults: any of them plays. + assert chance(1.0) == pytest.approx([0.3, 1 - 0.6 * 0.7, 0.0, 1 - 0.6 * 0.7 * 0.9]) + assert chance(0.5)[1] == pytest.approx(1 - 0.6 * 0.7**0.5) + with pytest.raises(ValueError, match="outside"): + chance(1.5) + + +def test_household_participation_refuses_an_unknown_sex_or_household() -> None: + with pytest.raises(ValueError, match="gender outside"): + household_participation( + _people(((30, "UNKNOWN"),)), [1], _CELLS, bands=(18, 35, 55), theta=1.0 + ) + with pytest.raises(ValueError, match="does not hold"): + household_participation( + _people(((30, "MALE"),)), [2], _CELLS, bands=(18, 35, 55), theta=1.0 + ) + + +def test_household_strata_count_adults_and_band_the_youngest() -> None: + person = _people( + ((20, "MALE"),), + ((40, "MALE"), (60, "FEMALE"), (3, "MALE")), + ((9, "FEMALE"),), + ((56, "MALE"), (60, "FEMALE"), (70, "MALE"), (80, "FEMALE")), + ) + labels = household_strata( + person, [1, 2, 3, 4], adults_cap=3, youngest_bounds=[35, 55] + ) + assert list(labels) == [ + "adults_1:youngest_18_to_34", + "adults_2:youngest_35_to_54", + NO_ADULTS, + "adults_3_plus:youngest_55_plus", + ] + + +def test_participation_rates_take_each_keys_union_within_its_population() -> None: + rates = participation_rates( + participation_declaration(), rows=serve_participation_rows + ) + + # National Lottery products among all gamblers aged 35 to 54 (four-week + # rate 0.42; men 0.48, twelve months 1.3 times that). + draws, scratchcards = ( + ACTIVITIES[name][1] + for name in ( + "national_lottery_draws", + "national_lottery_scratchcards", + ) + ) + union = 1 - (1 - draws / 0.42) * (1 - scratchcards / 0.42) + lottery = rates.rates["national_lottery"] + assert lottery[REGULAR][("MALE", 35)] == pytest.approx(0.48 * union) + assert lottery[OCCASIONAL][("MALE", 35)] == pytest.approx(0.48 * union * 1.3) + # Betting and gaming among non-draw gamblers aged 18 to 34 (0.4; women + # 0.35), the online-only activity included through its online row. + product = 1.0 + for name in ("betting", "bingo", "casino_games", "other_online_instant_win_games"): + product *= 1 - ACTIVITIES[name][0] / 0.4 + betting = rates.rates["betting_and_gaming"] + assert betting[REGULAR][("FEMALE", 18)] == pytest.approx(0.35 * (1 - product)) + assert betting[OCCASIONAL][("FEMALE", 18)] == pytest.approx( + 0.35 * (1 - product) * 1.5 + ) + # Per band, each key reads its population for all adults and its + # activities, then both windows for each sex. + assert rates.receipt["rows_read"] == 3 * (1 + 2 + 4) + 3 * (1 + 4 + 4) + assert rates.bands == (18, 35, 55) + + +@pytest.mark.parametrize( + ("change", "message"), + [ + ({"resource": "excise_facts.json"}, "must read"), + ({"age_bands": [[25, "18_to_34"]]}, "rise from 18"), + ({"windows": {"regular": "past_four_weeks"}}, "windows must map"), + ({"sexes": {"MALE": "male", "FEMALE": "female"}}, "sexes must map"), + ], +) +def test_participation_rates_refuse_a_declaration_they_cannot_read( + change, message +) -> None: + with pytest.raises(ValueError, match=message): + participation_rates( + participation_declaration(**change), rows=serve_participation_rows + ) + + +def _activities(key: str, **rows) -> dict: + keys = copy.deepcopy(participation_declaration()["keys"]) + keys[key]["activities"] = rows + return {"keys": keys} + + +@pytest.mark.parametrize( + ("change", "message"), + [ + (_activities("betting_and_gaming", poker={}), "expected one .* found 0"), + # An online-only activity has no all-channels row. + ( + _activities( + "betting_and_gaming", + other_online_instant_win_games={"gambling_channel": "all"}, + ), + "other_online_instant_win_games.* found 0", + ), + # Any gambling's online row in the activity table matches the + # population table's row without its worksheet ... + ({"population_dimensions": {}}, "any_gambling.* found 2"), + # ... and an activity's online row its all-channels row without the + # channel. + ( + _activities("national_lottery", national_lottery_draws={}), + "national_lottery_draws.* found 2", + ), + ({"population_dimensions": {"regular": {"sex": "all"}}}, "may not fix"), + ( + _activities("national_lottery", national_lottery_draws={"sex": "all"}), + "no activity may fix", + ), + ( + {"activity_dimensions": {"gambling_channel": "all"}}, + "must map the classes", + ), + ( + { + "keys": { + **participation_declaration()["keys"], + "national_lottery": { + "population": "any_gambling", + "activities": ["national_lottery_draws"], + "theta": 0.9, + }, + } + }, + "map each activity", + ), + ], +) +def test_participation_rates_read_each_cell_from_its_own_row(change, message) -> None: + with pytest.raises(ValueError, match=message): + participation_rates( + participation_declaration(**change), rows=serve_participation_rows + ) + + +def _keys(**changes) -> dict: + keys = copy.deepcopy(participation_declaration()["keys"]) + for key, entry in changes.items(): + if entry is None: + keys.pop(key) + else: + keys[key].update(entry) + return keys + + +@pytest.mark.parametrize( + ("change", "message"), + [ + ({"keys": _keys(betting_and_gaming=None)}, "keys must be"), + ({"keys": _keys(national_lottery={"theta": 1.5})}, "national_lottery theta"), + ({"occasional_stake_share": 0.0}, "above zero"), + ({"occasional_stake_share": 1.5}, "occasional_stake_share"), + ({"strata": {"adults_cap": 0, "youngest_adult_bounds": [35]}}, "adults_cap"), + ( + {"strata": {"adults_cap": 3, "youngest_adult_bounds": [55, 35]}}, + "youngest_adult_bounds", + ), + ({"propensity": {"max_leaf_nodes": 15}}, "propensity must set"), + ({"salt": ""}, "must declare salt"), + ], +) +def test_participation_settings_refuse_a_declaration_out_of_range( + change, message +) -> None: + with pytest.raises(ValueError, match=message): + participation_settings(participation_declaration(**change)) + + +def _strata_and_targets(inputs: dict) -> tuple[np.ndarray, dict]: + """The strata and each key's household chances, recomputed from the facts.""" + + settings = participation_settings(inputs["parameters"]) + rates = participation_rates(inputs["parameters"], rows=serve_participation_rows) + strata = household_strata( + inputs["person"], + inputs["household_ids"], + adults_cap=settings["strata"]["adults_cap"], + youngest_bounds=settings["strata"]["youngest_adult_bounds"], + ) + chances = { + key: { + window: household_participation( + inputs["person"], + inputs["household_ids"], + rates.rates[key][window], + bands=rates.bands, + theta=settings["theta"][key], + ) + for window in (REGULAR, OCCASIONAL) + } + for key in UK_GAMBLING_PARTICIPATION_KEYS + } + return strata, chances + + +def test_top_up_meets_each_stratum_share_within_one_household_weight() -> None: + inputs = participation_inputs() + result = top_up_gambling_participation(**inputs) + strata, chances = _strata_and_targets(inputs) + weight = inputs["weights"] + for key in UK_GAMBLING_PARTICIPATION_KEYS: + drawn = inputs["keys"][key] + topped = result.keys[key] + recorded = result.receipt["keys"][key]["strata"] + for label in set(strata): + member = strata == label + mass = weight[member].sum() + target = np.average( + chances[key][OCCASIONAL][member], weights=weight[member] + ) + before = weight[member & (drawn > 0)].sum() / mass + after = weight[member & (topped > 0)].sum() / mass + # The walk stops within the weight of one household in the stratum. + assert abs(after - max(target, before)) * mass <= weight[member].max() + if recorded[label] != {"withheld": True}: + regular = np.average( + chances[key][REGULAR][member], weights=weight[member] + ) + assert recorded[label]["regular_target"] == pytest.approx(regular) + assert recorded[label]["annual_target"] == pytest.approx(target) + assert recorded[label]["after_annual"] == pytest.approx(after) + assert ( + abs(recorded[label]["after_regular"] - regular) * mass + <= weight[member].max() + ) + + +def test_top_up_keeps_the_diarys_stakes_and_stakes_every_added_household() -> None: + inputs = participation_inputs() + result = top_up_gambling_participation(**inputs) + for key in UK_GAMBLING_PARTICIPATION_KEYS: + drawn, topped = inputs["keys"][key], result.keys[key] + seen = drawn > 0 + np.testing.assert_array_equal(topped[seen], drawn[seen]) + added = (topped > 0) & ~seen + assert added.sum() > seen.sum() + entry = result.receipt["keys"][key] + assert entry["added_without_stake"] == 0 + assert sum(entry["stake_shares"].values()) == pytest.approx(1.0) + assert entry["after_annual"] == float( + inputs["weights"][topped > 0].sum() / inputs["weights"].sum() + ) + assert [record.fit_name for record in result.fit_weight_records] == [ + "test:national_lottery_participation", + "test:national_lottery_participation_stake", + "test:betting_and_gaming_participation", + "test:betting_and_gaming_participation_stake", + ] + + +def test_occasional_players_take_the_declared_share_of_a_drawn_stake() -> None: + inputs = participation_inputs() + low = top_up_gambling_participation(**inputs) + high = top_up_gambling_participation( + **participation_inputs( + declaration=participation_declaration(occasional_stake_share=0.2) + ) + ) + weight = inputs["weights"] + for key in UK_GAMBLING_PARTICIPATION_KEYS: + moved = low.keys[key] != high.keys[key] + assert moved.sum() > 0 + # Only the occasional players move, and by exactly the ratio of shares. + np.testing.assert_allclose(high.keys[key][moved] / low.keys[key][moved], 2.0) + share = low.receipt["keys"][key]["stake_shares"]["added_occasional"] + assert 0 < share < low.receipt["keys"][key]["stake_shares"]["added_regular"] + # The added regular players' mean stake is the seen households'. + drawn, topped = inputs["keys"][key], low.keys[key] + seen = drawn > 0 + regular = (topped > 0) & ~seen & ~moved + assert np.average(topped[regular], weights=weight[regular]) == pytest.approx( + np.average(drawn[seen], weights=weight[seen]) + ) + + +def test_top_up_is_keyed_on_household_identity() -> None: + inputs = participation_inputs() + result = top_up_gambling_participation(**inputs) + order = np.random.default_rng(3).permutation(len(inputs["household_ids"])) + shuffled = { + **inputs, + "keys": {key: values[order] for key, values in inputs["keys"].items()}, + "household_ids": inputs["household_ids"][order], + "weights": inputs["weights"][order], + "recipient_features": inputs["recipient_features"].iloc[order], + } + again = top_up_gambling_participation(**shuffled) + for key in UK_GAMBLING_PARTICIPATION_KEYS: + np.testing.assert_allclose(again.keys[key], result.keys[key][order], rtol=1e-12) + + +def test_a_stratum_already_past_its_shares_adds_no_household() -> None: + inputs = participation_inputs() + strata, _ = _strata_and_targets(inputs) + full = strata == "adults_1:youngest_55_plus" + for key in UK_GAMBLING_PARTICIPATION_KEYS: + inputs["keys"][key] = np.where(full, 5.0, inputs["keys"][key]) + result = top_up_gambling_participation(**inputs) + for key in UK_GAMBLING_PARTICIPATION_KEYS: + np.testing.assert_array_equal(result.keys[key][full], 5.0) + entry = result.receipt["keys"][key]["strata"]["adults_1:youngest_55_plus"] + assert entry["before"] == entry["after_regular"] == entry["after_annual"] == 1.0 + + +def test_the_receipt_withholds_a_stratum_resting_on_few_households() -> None: + inputs = participation_inputs() + strata, _ = _strata_and_targets(inputs) + # Every household in the stratum copies one source household. + sources = np.asarray(inputs["household_ids"]).copy() + thin = strata == "adults_2:youngest_18_to_34" + sources[thin] = sources[thin][0] + result = top_up_gambling_participation(**{**inputs, "sources": sources}) + for key in UK_GAMBLING_PARTICIPATION_KEYS: + recorded = result.receipt["keys"][key]["strata"] + assert recorded["adults_2:youngest_18_to_34"] == {"withheld": True} + assert any(entry != {"withheld": True} for entry in recorded.values()) + # The national figures rest on every other source household, and the + # receipt gives no stratum's households, so they give none back. + assert "withheld" not in result.receipt["keys"][key] + assert "households" not in recorded["adults_1:youngest_35_to_54"] + + +def test_top_up_refuses_a_donor_with_too_few_stakes() -> None: + inputs = participation_inputs() + stakes = np.zeros(len(inputs["donor_weights"])) + stakes[:5] = 10.0 + inputs["donor_keys"] = {**inputs["donor_keys"], "national_lottery": stakes} + with pytest.raises(ValueError, match="10 or more households"): + top_up_gambling_participation(**inputs) diff --git a/packages/microcosm-build/tests/engine_free/uk/test_uk_graph_terminal.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_graph_terminal.py index 8220500190..8235ca734e 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_graph_terminal.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_graph_terminal.py @@ -1071,6 +1071,9 @@ def _run_final_gate_kernel(monkeypatch, *, brma_row: bool = False, solved=None): "area_type": "constituency", "area_code": "E14000001", "metric": "households", + # A local row names its contract target (Vahid's third review + # of #1383, item 33); this one ties to no family. + "contract_target_id": "fixture.census_households", }, ), ] 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 89db02bc01..da01b8531d 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,321 @@ 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_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 +1391,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 +1503,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 +1517,14 @@ 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, gambling=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. + The uprating step needs the installed engine and is dropped; the QRF and + the gambling top-up's stake forest are shrunk to four trees. + ``household_columns(n)`` adds frame columns; with ``excise=False`` the + excise step is dropped, and with it the top-up that re-keys it; with + ``gambling=False`` the top-up alone. """ import dataclasses @@ -1165,6 +1538,15 @@ 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 == "top_up_gambling_participation": + if not (excise and gambling): + continue + operation = SourceOperationSpec( + kind=operation.kind, + parameters={**operation.parameters, "n_estimators": 4}, + ) if operation.kind == "fit_weighted_qrf_chain": operation = SourceOperationSpec( kind=operation.kind, @@ -1203,6 +1585,8 @@ def _synthetic_lcfs_stage(household_columns=None): "person_benunit_id": np.repeat(np.arange(1, n + 1), 2), "person_household_id": np.repeat(np.arange(1, n + 1), 2), "age": ages, + # As the spine spells it; the gambling top-up reads it. + "gender": np.where(np.arange(2 * n) % 2 == 0, "MALE", "FEMALE"), # The nts_bus_travel stage's cells: journeys per series and the # statutory concessionary eligibility (here, 66 and over). "bus_in_london_trips": np.where( @@ -1289,19 +1673,38 @@ 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 transform.fit_weight_records[-4].fit_name.endswith( - ":petrol_share_of_road_fuel" - ) - assert transform.fit_weight_records[-3].fit_name.endswith( - ":uses_energy_prepayment_meter" - ) - assert transform.fit_weight_records[-2].fit_name.endswith(":gas_payer") - assert transform.fit_weight_records[-1].fit_name.endswith(":gas_payer_amount") + # (microcosm#1110), the gas-payer classifier and amount model the + # connection walk reads (microcosm#1164), then each gambling key's + # propensity and stake model the participation walk reads (microcosm#1359). + assert len(transform.fit_weight_records) == 34 + 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 [ + record.fit_name.rsplit(":", 1)[1] + for record in transform.fit_weight_records[-8:] + ] == [ + "petrol_share_of_road_fuel", + "uses_energy_prepayment_meter", + "gas_payer", + "gas_payer_amount", + "national_lottery_participation", + "national_lottery_participation_stake", + "betting_and_gaming_participation", + "betting_and_gaming_participation_stake", + ] assert out["uses_energy_prepayment_meter"].dtype == bool from microcosm.build.uk_runtime.lcfs_consumption import ( UK_LCFS_CONSUMPTION_MASS_CONSERVATION_REASON, @@ -1328,6 +1731,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"] == ( @@ -3160,3 +3598,616 @@ 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_stage_tops_up_the_gambling_keys_when_declared(monkeypatch) -> None: + """End to end: the top-up re-keys the gambling bases and moves nothing else.""" + + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS, + 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, + patch_excise_facts, + ) + from test_support.microcosm_build.uk_gambling_participation_facts import ( + participation_declaration, + patch_gambling_participation_facts, + ) + + patch_excise_facts(monkeypatch, excise_declaration()) + plain = _synthetic_lcfs_stage(gambling=False) + before = plain.transform(plain.frame).table("household") + patch_gambling_participation_facts(monkeypatch, participation_declaration()) + synthetic = _synthetic_lcfs_stage() + result = synthetic.transform(synthetic.frame) + + out = result.table("household") + weights = result.weights_for("household").values + assert list(out.columns) == list(before.columns) + unchanged = [ + column + for column in before.columns + if column not in UK_LCFS_EXCISE_GAMBLING_OUTPUTS + ] + # The spend columns and the alcohol and tobacco inputs among them. + assert set(UK_LCFS_CONSUMPTION_OUTPUT_COLUMNS) & set(unchanged) + pd.testing.assert_frame_equal(out[unchanged], before[unchanged]) + evidence = synthetic.transform.checkpoint_metadata()["evidence"] + for column in UK_LCFS_EXCISE_GAMBLING_OUTPUTS: + level = evidence["excise_quantities"]["outputs"][column]["annual_level"] + assert weights @ out[column].to_numpy() == pytest.approx(level) + assert (out[column] > 0).mean() > (before[column] > 0).mean() + # The two gambling classifiers and stake models follow the gas payer's. + assert len(synthetic.transform.fit_weight_records) == 34 + assert synthetic.transform.fit_weight_records[-1].fit_name.endswith( + ":betting_and_gaming_participation_stake" + ) + for check, parameters in ( + ( + "gambling_participation", + { + "maximum_stratum_shortfall": 0.01, + "amount_scale_bounds": [0.5, 2.0], + "required_support_band": "30+", + }, + ), + ( + "excise_quantities", + {"maximum_parent_residual_share": 0.01, "required_support_band": "30+"}, + ), + ): + gate = uk_stage_health_gate( + evidence=evidence, + stage="lcfs_consumption", + check=check, + parameters={ + "stage": "lcfs_consumption", + "check": check, + "maximum_relative_deviation": 1e-9, + **parameters, + }, + ) + assert gate.passed, gate.failures + + +def test_gambling_participation_needs_the_excise_levelling(monkeypatch) -> None: + from test_support.microcosm_build.uk_gambling_participation_facts import ( + participation_declaration, + patch_gambling_participation_facts, + ) + + patch_gambling_participation_facts(monkeypatch, participation_declaration()) + synthetic = _synthetic_lcfs_stage(excise=False) + with pytest.raises(ValueError, match="re-keys level_excise_quantities"): + synthetic.transform(synthetic.frame) + + +def test_gambling_features_take_the_stakes_out_of_recreation() -> None: + # P609 holds the stakes, so a recorded stake would raise the recreation + # that predicts it (Vahid's review of microcosm#1381, round 4). + from microcosm.build.uk_runtime.lcfs_consumption import ( + UK_LCFS_GAMBLING_SHARE, + UK_LCFS_GAMBLING_SPENDING, + UK_LCFS_RECREATION_NET_OF_STAKES, + gambling_participation_features, + ) + + targets = UK_LCFS_CONSUMPTION_TARGET_COLUMNS + donor_encoded = pd.DataFrame( + { + "age": [30.0, 60.0], + "region": [1.0, 2.0], + **{c: [10.0 * (i + 1), 20.0 * (i + 1)] for i, c in enumerate(targets)}, + }, + index=[7, 9], + ) + donor_spending = pd.DataFrame({UK_LCFS_GAMBLING_SPENDING: [5.0, 0.0]}, index=[7, 9]) + recipient_encoded = pd.DataFrame( + {"age": [40.0, 50.0, 70.0], "region": [3.0, 1.0, 2.0]} + ) + drawn = pd.DataFrame( + { + **{c: [1.0, 2.0, 3.0] for c in targets}, + "recreation_consumption": [40.0, 8.0, 12.0], + UK_LCFS_GAMBLING_SHARE: [0.25, 0.0, 1.5], + } + ) + + donor, recipient = gambling_participation_features( + donor_encoded, + donor_spending, + recipient_encoded, + drawn, + predictors=["age", "region"], + ) + + # The fits read the columns by position, so both sides list them alike. + assert list(donor.columns) == list(recipient.columns) + assert "recreation_consumption" not in donor.columns + np.testing.assert_allclose( + donor[UK_LCFS_RECREATION_NET_OF_STAKES], + donor_encoded["recreation_consumption"].to_numpy() - [5.0, 0.0], + ) + # The frame's stakes are its drawn share of its drawn recreation, the + # share held to [0, 1]. + np.testing.assert_allclose( + recipient[UK_LCFS_RECREATION_NET_OF_STAKES], [30.0, 8.0, 0.0] + ) + np.testing.assert_allclose(recipient[targets[0]], [1.0, 2.0, 3.0]) + np.testing.assert_allclose(recipient["age"], [40.0, 50.0, 70.0]) + + +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 54f99c484e..29cd7abb77 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 @@ -672,6 +672,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 @@ -709,7 +717,8 @@ def test_packaged_exclusions_load(): # 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), and # obr.vat is held again as a diagnostic (Vahid's review of #1383, 10). - assert len(names) == len(set(names)) == 34 + # microcosm#1359 adds the five OBR excise rows, measured at FY2024-25. + assert len(names) == len(set(names)) == 39 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_orrery_contract.py b/packages/microcosm-build/tests/engine_free/uk/test_uk_orrery_contract.py index dcc13752d3..06770675d8 100644 --- a/packages/microcosm-build/tests/engine_free/uk/test_uk_orrery_contract.py +++ b/packages/microcosm-build/tests/engine_free/uk/test_uk_orrery_contract.py @@ -317,28 +317,26 @@ def _brma_problem(n: int = 12, level: str = "brma"): payload = encode_problem( build_constraint_matrix(frame, targets, weight_entity="household"), entity_ids=list(range(n)), + # A local row names its contract target (Vahid's third review of + # #1383, item 33); neither ties to a family. target_metadata=[ - {"geography_level": "constituency"}, - {"geography_level": level}, + { + "geography_level": "constituency", + "contract_target_id": "fixture.households", + }, + {"geography_level": level, "contract_target_id": "fixture.rent"}, ], bindings={}, ) return frame, decode_problem(payload), payload -def test_the_published_result_summary_withholds_a_thin_brma_row(): - """microcosm#1262: Orrery publishes no figure a build withholds. - - The BRMA row rests on four source households, so its summary row keeps - its target and loses its figures, and the final loss covers the - published row (María's rulings of 2026-10-17 and 2026-10-18). - """ +def _brma_summary(): + """A two-row result and its summary data: a published row and a thin BRMA row.""" from types import SimpleNamespace import numpy as np - from microcosm.build.uk_runtime.orrery_contract import _withhold_summary_rows - frame, ordered, _ = _brma_problem() def row(name, target, estimate): @@ -379,6 +377,19 @@ def row(name, target, estimate): ] }, } + return result, data, ordered + + +def test_the_published_result_summary_withholds_a_thin_brma_row(): + """microcosm#1262: Orrery publishes no figure a build withholds. + + The BRMA row rests on four source households, so its summary row keeps + its target and loses its figures, and the final loss covers the + published row (María's rulings of 2026-10-17 and 2026-10-18). + """ + from microcosm.build.uk_runtime.orrery_contract import _withhold_summary_rows + + result, data, ordered = _brma_summary() _withhold_summary_rows(data, result, ordered) published, withheld = data["tables"]["targets"] assert published["achieved"] == 4.0 @@ -394,6 +405,126 @@ def row(name, target, estimate): } +def _gate_context(names, nodes, predecessors): + """A summary context over node ``result``: gate receipts and their payloads. + + ``nodes`` maps a node to the output it recorded (``calibration_evidence`` + for the national gates, ``calibration_diagnostics`` for the full build's + terminal) and the rows it withheld. + """ + + from types import SimpleNamespace + + from microcosm.build.uk_runtime.graph_national import NATIONAL_EVIDENCE_TYPE + from microcosm.build.uk_runtime.graph_terminal import FULL_DIAGNOSTICS_TYPE + + types = { + "calibration_evidence": NATIONAL_EVIDENCE_TYPE, + "calibration_diagnostics": FULL_DIAGNOSTICS_TYPE, + } + payloads, receipts = {}, {} + for node, (output, withheld) in nodes.items(): + if output == "calibration_evidence": + rows = [{"name": n, "model_figures_withheld": n in withheld} for n in names] + payloads[node] = {"diagnostics": rows} + else: + rows = [ + {"name": n, "metadata": {"model_figures_withheld": "withheld"}} + if n in withheld + else {"name": n, "metadata": {}} + for n in names + ] + payloads[node] = {"targets": rows} + type_ = types[output] + receipts[node] = SimpleNamespace( + typed_artifacts={ + "outputs": { + output: { + "type": { + "name": type_.name, + "schema_version": type_.schema_version, + }, + "key": node, + } + } + }, + opaque_artifacts={output}, + ) + return SimpleNamespace( + node_id="result", + run=SimpleNamespace( + compiled=SimpleNamespace(predecessors={"result": (), **predecessors}), + manifest=SimpleNamespace(nodes=receipts), + ), + store=SimpleNamespace( + load_bytes=lambda key: json.dumps(payloads[key]).encode() + ), + ) + + +def test_the_summary_takes_the_rows_a_gate_on_its_result_withheld(monkeypatch): + """Vahid's third review of #1383, item 32: a build withholds once. + + A gate that reads the result directly recorded the rows it withheld; the + summary takes that set without counting again, and counts again only when + the gate did not see every summary row. + """ + + from microcosm.build.uk_runtime import diagnostics + from microcosm.build.uk_runtime.orrery_contract import ( + _recorded_withheld, + _withhold_summary_rows, + ) + + result, data, ordered = _brma_summary() + published, thin = ordered.problem.names + names = [published, thin] + for output in ("calibration_evidence", "calibration_diagnostics"): + context = _gate_context( + names, {"gates": (output, {thin})}, {"gates": ("problem", "result")} + ) + assert _recorded_withheld(context) == (frozenset(names), frozenset({thin})) + + def counted_again(*args, **kwargs): + raise AssertionError("the summary counted the withholding again") + + with monkeypatch.context() as patch: + patch.setattr(diagnostics, "uk_withheld_rows", counted_again) + _withhold_summary_rows(data, result, ordered, _recorded_withheld(context)) + first, second = data["tables"]["targets"] + assert first["achieved"] == 4.0 + assert second["model_figures_withheld"] is True and second["achieved"] is None + + # A gate that saw only the published row is not taken: the summary counts. + result, data, ordered = _brma_summary() + _withhold_summary_rows(data, result, ordered, (frozenset({published}), frozenset())) + assert data["tables"]["targets"][1]["model_figures_withheld"] is True + + +def test_only_a_gate_reading_the_result_directly_records_its_withheld_rows(): + """A gate on another node, or one that has not run, records nothing here.""" + + from microcosm.build.uk_runtime.orrery_contract import _recorded_withheld + + names = ["a", "b"] + elsewhere = _gate_context( + names, {"gates": ("calibration_evidence", {"a"})}, {"gates": ("other",)} + ) + assert _recorded_withheld(elsewhere) is None + not_run = _gate_context(names, {}, {"gates": ("result",)}) + assert _recorded_withheld(not_run) is None + disagreeing = _gate_context( + names, + { + "national": ("calibration_evidence", {"a"}), + "terminal": ("calibration_diagnostics", {"b"}), + }, + {"national": ("result",), "terminal": ("result",)}, + ) + with pytest.raises(ValueError, match="different withheld rows"): + _recorded_withheld(disagreeing) + + @pytest.mark.parametrize("level", ["brma", "statistical_scope"]) def test_a_size_summary_over_brma_rows_publishes_no_all_row_total(level): """Either spelling of the level is a BRMA row (the fourth review of #1305).""" 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..e6e8d5e63c 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,8 @@ def test_e3_operation_kinds_are_declared_in_order(self) -> None: "redraw_zero_road_fuel", "level_road_fuel", "recompose_from_remainder", + "top_up_gambling_participation", + "level_excise_quantities", "record_mass_conservation_receipt", ] assert [op.kind for op in stages["etb_vat"].operations] == [ @@ -817,6 +819,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 +892,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 @@ -1049,6 +1066,8 @@ def test_e6_declared_seed_lockstep(self) -> None: "redraw_zero_road_fuel": 0, # The prepayment-meter flag (microcosm#1110). "impute_prepayment_meter": 0, + # The gambling participation top-up (microcosm#1359). + "top_up_gambling_participation": 0, } assert stages["etb_vat"].operations[3].parameters["seed"] == 0 assert stages["etb_vat"].operations[3].parameters["salt"] == "etb_vat" 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..8bdb248900 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,293 @@ 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) + + +def test_gambling_participation_gate_recomputes_the_rates_and_checks_the_shares( + monkeypatch, +) -> None: + """The lcfs gambling_participation receipt is fact-checked at stage time (#1359).""" + + import copy + + from microcosm.build.uk_runtime.gambling_participation import ( + top_up_gambling_participation, + ) + from test_support.microcosm_build.uk_gambling_participation_facts import ( + participation_declaration, + participation_inputs, + patch_gambling_participation_facts, + ) + + patch_gambling_participation_facts(monkeypatch, participation_declaration()) + inputs = participation_inputs() + topped = top_up_gambling_participation(**inputs) + weights = inputs["weights"] + receipt = copy.deepcopy(dict(topped.receipt)) + # The levelling's keys, as level_excise_quantities reads them. + excise = { + "keys": { + key: {"positive_share": float(weights[values > 0].sum() / weights.sum())} + for key, values in topped.keys.items() + } + } + parameters = { + "stage": "lcfs_consumption", + "check": "gambling_participation", + "maximum_relative_deviation": 1e-9, + "maximum_stratum_shortfall": 0.01, + "amount_scale_bounds": [0.5, 2.0], + "required_support_band": "30+", + } + + def run(participation, levelled=excise): + return uk_stage_health_gate( + evidence={ + "stage": "lcfs_consumption", + "gambling_participation": participation, + "excise_quantities": levelled, + }, + stage="lcfs_consumption", + check="gambling_participation", + parameters=parameters, + ) + + def failing(change, fragment: str) -> None: + participation, levelled = copy.deepcopy(receipt), copy.deepcopy(excise) + change(participation, levelled) + result = run(participation, levelled) + 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 + lottery = lambda r, e: r["keys"]["national_lottery"] # noqa: E731 + shipped = next( + label + for label, entry in receipt["keys"]["national_lottery"]["strata"].items() + if entry != {"withheld": True} + ) + stratum = lambda r, e: lottery(r, e)["strata"][shipped] # noqa: E731 + failing( + lambda r, e: r["facts"]["rates"]["national_lottery"]["regular"].update( + {"MALE:18": 0.9} + ), + "not the vendored", + ) + failing(lambda r, e: r["facts"].update(rows_read=1), "rows_read") + failing( + lambda r, e: r["settings"]["theta"].update(national_lottery=0.5), + "not the declared", + ) + failing( + lambda r, e: stratum(r, e).update( + after_regular=stratum(r, e)["regular_target"] - 0.05 + ), + "more than 0.01", + ) + failing( + lambda r, e: stratum(r, e).update(before=1.0), + "but moved", + ) + failing(lambda r, e: stratum(r, e).pop("after_annual"), "no shares") + failing( + lambda r, e: lottery(r, e).update( + after_annual=lottery(r, e)["annual_target"] - 0.05 + ), + "falls short", + ) + failing( + lambda r, e: lottery(r, e)["stake_shares"].update(seen=0.9), + "do not split", + ) + # A stake draw far off the seen households' mean, which the anchoring + # would otherwise hide. + failing(lambda r, e: lottery(r, e).update(amount_scale=3.0), "amount scale") + failing(lambda r, e: lottery(r, e).update(added_without_stake="<10"), "no stake") + failing( + lambda r, e: lottery(r, e)["propensity"].update(positive_support="10-29"), + "rest on", + ) + failing( + lambda r, e: e["keys"]["national_lottery"].update(positive_share=0.1), + "excise levelling", + ) + failing( + lambda r, e: r["keys"].update(national_lottery={"withheld": True}), + "withholds", + ) + failing(lambda r, e: r["keys"].pop("betting_and_gaming"), "tops up no") + # A withheld stratum is counted, not checked. + withheld = copy.deepcopy(receipt) + withheld["keys"]["national_lottery"]["strata"][shipped] = {"withheld": True} + result = run(withheld) + assert result.passed + assert result.details["strata_withheld"] == passed.details["strata_withheld"] + 1 + with pytest.raises(ValueError, match="gambling_participation must be an object"): + run(None) + for bounds in (None, [0.5], [2.0, 0.5], [0.0, 2.0], [True, 2.0]): + parameters["amount_scale_bounds"] = bounds + with pytest.raises(ValueError, match="amount_scale_bounds"): + run(receipt) 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-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index a5d1c170da..b538a315b5 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" + "2501837a968eb1711a7f81d9807f163ac508aff22a724b3a910f35767d4caf3d" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "2437ef6c1e3ee2cd6a844c7d8dbca72c8ec7163199e03979295fc6ce0f486623" + "bfb0af58fd3ece15102875a18c4cb4e991ae16bf0f1dbffb7dd765dcf0ff9073" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "9b478f778c03838adc2aa2b769d8a3fbf21e6f8d776d318ff37d8db10c759e24" + "723bc27b25335ad3220647e78ec3cc4b1359cffa4407a946b1a9c1f2231e4a0f" ) #: 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,8 @@ 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_gambling_participation": ("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 +635,8 @@ 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_gambling_participation", "uk_stage_lcfs_consumption_basis", "uk_stage_etb_vat_support", "uk_stage_etb_services_support", @@ -886,6 +890,8 @@ 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_gambling_participation", "uk_stage_lcfs_consumption_recomposed_totals", "uk_stage_lcfs_consumption_road_fuel_incidence", "uk_stage_lcfs_consumption_road_fuel_level", @@ -946,10 +952,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" + "4957c10663ddca8aeea40646d9a48ab5dcc1a63ea004ce45810c5238dcca5847" ), "policy_sha256": ( - "00d01f3534e1c9c3effb1316f6b70c102854bcf0f991ebb5667bb0f1647c3485" + "3dbfb2c06c01c25967fae8998e7460d0ff2ecde4e440d66a7350d80e79560e16" ), }, "calibration_seam": { @@ -962,10 +968,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..ac36e779e4 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" + "2501837a968eb1711a7f81d9807f163ac508aff22a724b3a910f35767d4caf3d" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "2437ef6c1e3ee2cd6a844c7d8dbca72c8ec7163199e03979295fc6ce0f486623" + "bfb0af58fd3ece15102875a18c4cb4e991ae16bf0f1dbffb7dd765dcf0ff9073" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "9b478f778c03838adc2aa2b769d8a3fbf21e6f8d776d318ff37d8db10c759e24" + "723bc27b25335ad3220647e78ec3cc4b1359cffa4407a946b1a9c1f2231e4a0f" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "6a179222c6b6058ad9caacfd347f7bdb8cb98a62237b50d1fc1136df09337251" @@ -267,6 +267,16 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: "transferred", None, ), + "uk_stage_lcfs_consumption_excise_quantities": ( + "stage_health", + "transferred", + None, + ), + "uk_stage_lcfs_consumption_gambling_participation": ( + "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 +1396,8 @@ 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_gambling_participation": "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-graph/tests/fixtures/parity/uk_spine/sources/fixture.json b/packages/microcosm-graph/tests/fixtures/parity/uk_spine/sources/fixture.json index af275acbd0..e9c5d8b809 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,18 @@ "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" + }, + { + "format": "json", + "kind": "public_aggregate_reference", + "resource": "gambling_participation_facts.json", + "role": "gambling_participation" } ], "grain": "household", @@ -3965,9 +3977,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's drawn spend per household (a recomposed total's remainder, any other division's whole draw) is set against the donor's mean of the same spend (for housing and transport, the donor's total less the same parts, since the levelled parts keep their published levels and are no over-draw); a division above the divisions' shared ratio, measured once before any levelling, comes down to it (Mar\u00eda's rulings of 2026-10-23 and 2026-10-24, microcosm#1278; Vahid's review of microcosm#1383, item 9); the receipt records each division's ratio and factor and the shared ratio (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. The liquid fuels hold bottled gas (b018, c45222), which COICOP puts under 04.5.2 (gas) and ONS's 04.5.3 leaves out, so the receipt also gives the donor's liquid fuels without it; neither heating-fuel column is levelled to ONS: the donor's diary totals are about twice ONS's, and the frame's draws reach neither those nor ONS's, so a costing on either needs levelling to ONS first (Vahid's review of microcosm#1383, item 8).", + "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 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's drawn spend per household (a recomposed total's remainder, any other division's whole draw) is set against the donor's mean of the same spend (for housing and transport, the donor's total less the same parts, since the levelled parts keep their published levels and are no over-draw); a division above the divisions' shared ratio, measured once before any levelling, comes down to it (Mar\u00eda's rulings of 2026-10-23 and 2026-10-24, microcosm#1278; Vahid's review of microcosm#1383, item 9); the receipt records each division's ratio and factor and the shared ratio (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. The liquid fuels hold bottled gas (b018, c45222), which COICOP puts under 04.5.2 (gas) and ONS's 04.5.3 leaves out, so the receipt also gives the donor's liquid fuels without it; neither heating-fuel column is levelled to ONS: the donor's diary totals are about twice ONS's, and the frame's draws reach neither those nor ONS's, so a costing on either needs levelling to ONS first (Vahid's review of microcosm#1383, item 8). 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. Both keys are first brought to published participation by the declared top_up_gambling_participation step (microcosm#1359; Mar\u00eda's ruling of 2026-10-25). The diary records a stake for about a fifth of the households the Gambling Commission's Gambling Survey for Great Britain 2025 implies (PolicyEngine/chronicle#391), and under any steady rate of play a two-week diary sees at least half of the four-week players, so the gap is play the diary misses, not its window. Each adult's chance of playing in four weeks and in twelve months is GSGB's published rate for its sex and age band (tables B.1 and B.3), as the union of a key's activities (table B.9: the National Lottery's draws, scratchcards and online instant-win games; betting, bingo, casino games, fruit and slots, football pools, other online instant-win games and other gambling), taken as independent within the population that plays any of them (all gamblers, or those who play more than lottery draws). A household plays when any adult does, combined at theta: 1 - (1 - p_max) x prod(1 - p_other)^theta, where 0 is one player per household and 1 adults who play independently. Theta is fitted on the donor so that GSGB's rates, applied to the donors' own adults, give the diary's ratio of the two-adult to the one-adult household rate, in which under-recording cancels if it is the same for both: 0.9 for the National Lottery, whose couples mostly buy their own tickets, and 0.08 for betting and gaming, mostly one adult's. Within nine strata (one, two, or three or more adults, by the youngest adult's age band: 18 to 34, 35 to 54, 55 and over), households without a stake are added by the gas connection walk's weight-fitting rule, in an identity-keyed order drawn in proportion to a regularised donor propensity (on the chain's predictors and spend draws) times the household's published chance, first to the stratum's four-week share (regular players) and then on to its twelve-month share (occasional players); households the diary saw keep their stakes and count as regular. An added household's stake is a draw from the donor's positive stakes at a quantile keyed on its id, scaled so the added regular players' mean is the mean of the households the diary saw, and an occasional player's is a tenth of that, an assumption until GSGB publishes how often people play. The keys only re-share the bases: the stored spending stays the drawn one, so an added household's stakes are not in its recorded recreation spending. The gambling_participation gate recomputes the rates from the vendored rows and checks every stratum's shares. 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 alcohol or tobacco duty is one multiple of its own spending, the same for every household that carries it: at prior weights alcohol duty is about 0.41 times alcohol spending and tobacco duty about 2.2 times tobacco spending, since the diary records a fraction of what is bought; VAT on the same goods stays on the survey base. Tobacco duty also sits on fewer households than smoke: 8.2 percent of households carry it, against 11.9 percent of UK adults who smoked cigarettes in 2023 (ONS), while the share of households with a smoker is above the adult rate; the duty per carrying household is higher by the same factor. Part of the gap is the frame's: the chain's share draws come out zero more often than the donors' (10.3 percent of donors carry tobacco), mostly within households that carry the parent total. The gambling duties sit on the households the top-up brings to participation: 62.7 percent of households carry Lottery Duty and 29.8 percent the other gambling duties, against 10.7 and 2.0 percent on the diary's draws alone, and 47 percent of adults in Great Britain who gambled in the past four weeks of 2025 (27 percent once lottery-draw-only players are left out). The top-up's own biases: under-recording is taken as even across households, so the donor propensity carries the diary's income gradient (if the diary misses online play more, and online play rises with income, the top-up leans low in income); the activity unions take activities as independent within their population; theta is one per key and fits households of three or more adults less well; the occasional players' stake share is assumed; and GSGB covers adults in Great Britain in calendar 2025, so Northern Ireland's adults take its rates, against the FY2024-25 bases. 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 +4024,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" }, { @@ -4205,7 +4325,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 +4722,352 @@ "resource": "ons_household_expenditure_facts.json" } }, + { + "activity_dimensions": { + "regular": { + "source_sheet": "Table B.9" + } + }, + "age_bands": [ + [ + 18, + "age_18_to_24" + ], + [ + 25, + "age_25_to_34" + ], + [ + 35, + "age_35_to_44" + ], + [ + 45, + "age_45_to_54" + ], + [ + 55, + "age_55_to_64" + ], + [ + 65, + "age_65_to_74" + ], + [ + 75, + "age_75_plus" + ] + ], + "concept": "gambling_commission.gsgb.participation", + "dimensions": { + "age_band": "age_band", + "scope": "participation_scope", + "sex": "sex", + "window": "participation_window" + }, + "geography_id": "K03000001", + "keys": { + "betting_and_gaming": { + "activities": { + "another_form_of_gambling": { + "gambling_channel": "all" + }, + "betting": { + "gambling_channel": "all" + }, + "bingo": { + "gambling_channel": "all" + }, + "casino_games": { + "gambling_channel": "all" + }, + "football_pools": { + "gambling_channel": "all" + }, + "fruit_and_slots_games": { + "gambling_channel": "all" + }, + "other_online_instant_win_games": { + "gambling_channel": "online" + } + }, + "population": "excluding_lottery_draw_only", + "theta": 0.08 + }, + "national_lottery": { + "activities": { + "national_lottery_draws": { + "gambling_channel": "all" + }, + "national_lottery_online_instant_win_games": { + "gambling_channel": "online" + }, + "national_lottery_scratchcards": { + "gambling_channel": "all" + } + }, + "population": "any_gambling", + "theta": 0.9 + } + }, + "kind": "top_up_gambling_participation", + "n_estimators": 100, + "occasional_stake_share": 0.1, + "period_type": "calendar_year", + "period_value": 2025, + "population_dimensions": { + "occasional": { + "source_sheet": "Table B.1" + }, + "regular": { + "source_sheet": "Table B.3" + } + }, + "propensity": { + "l2_regularization": 1, + "max_leaf_nodes": 15, + "min_samples_leaf": 40, + "validation_fraction": 0.1 + }, + "resource": "gambling_participation_facts.json", + "salt": "lcfs_gambling_participation", + "seed": 0, + "sexes": { + "FEMALE": "female", + "MALE": "male", + "all": "all" + }, + "strata": { + "adults_cap": 3, + "youngest_adult_bounds": [ + 35, + 55 + ] + }, + "windows": { + "occasional": "past_12_months", + "regular": "past_4_weeks" + } + }, + { + "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 +5098,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 1918fbdd9c..3e3ab8fdf7 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":"937edbec02c73aa144424f03d1e828293477cbe3dae2a4d72f6c6d7739ab9d1c","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":"c94c2ddd548017a6e7f43e1da51d727601b3f323e20fe4ee6ed120fa0f0f6e41","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":"dcc0b5523c50de6360fbf0f0c6c585c38faa6c358098c4836280c641e6107b0a","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":"c243b6abba42bd6c7c0ef3714076fb4ff0135cac327507c5bc8a5fae1f770035","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":"937edbec02c73aa144424f03d1e828293477cbe3dae2a4d72f6c6d7739ab9d1c","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":"c94c2ddd548017a6e7f43e1da51d727601b3f323e20fe4ee6ed120fa0f0f6e41","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":"5fc311107a78562d5ceea294f16e85ffb5f43426fba0de2133a1cd92bf208eb9","time_period":"2024"},"population":"frs_brma.checkpoint","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage frs_annual_income_spells.","id":"frs_annual_income_spells","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["region"],"entity":"household","rows":"all"},{"columns":["age","employer_pension_contributions","employment_income","gender","self_employment_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.frs_annual_income_spells@1","mass":"conserve","outputs":[{"column":"employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"self_employment_income_other_spells","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"private_pension_income_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"},{"column":"contributory_benefits_annual_share","dtype":"float64","entity":"person","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.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":"ceb6b7f8ca1f46aa44198ff6ddc759f7f669a9c45d702ccd21a3b44b02759d3c","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":"e29d18a70a59fb2f1398bcfb21308ec8446a1cdd7cdc44fa030feacf01ef960a","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":"5c84a402f34dc5bfcfc0b3c3c7a5e57576cfd21e7bfdeba3e80dcaf4e9d478ba","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage property_purchases.","id":"property_purchases","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","non_residential_property_value","other_residential_property_value","region"],"entity":"household","rows":"all"},{"columns":["age","property_rental_income"],"entity":"person","rows":"all"}],"kernel":"uk.stage.property_purchases@1","mass":"conserve","outputs":[{"column":"additional_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"},{"column":"non_residential_property_purchased","dtype":"float64","entity":"household","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.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":"078a79ce6f8c768c06526f1c05288602ce781e30c77b575b0bdf3f5b7d16da1b","time_period":"2024"},"population":"high_value_home_support","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage nts_bus_travel.","id":"nts_bus_travel","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_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":"47923cdab67ba3df30f173dee6507e54f871f333e19a9e2fe1eb49c95a591284","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":"d4f686941f4bf13029e38b4d3723561cd5551bd5a1322ee4bb9afdaaade0b381","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":"06b646ce8c243dbbd17e6ff30bec4cabc27cae7b05dcca843c76d02ac79917eb","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":"9818609b1003442f197e99ca741dc8db658a82f36c67f35308ceef25537b739e","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":null,"citation":"","description":"Run UK spine stage uc_legacy_closure_take_up.","id":"uc_legacy_closure_take_up","inputs":[{"columns":["frs_benunit_capital","would_claim_uc"],"entity":"benunit","rows":"all"},{"columns":["household_source_id","region"],"entity":"household","rows":"all"},{"columns":["age","child_tax_credit_reported","esa_income_reported","housing_benefit_reported","income_support_reported","is_claimant_or_partner","jsa_income_reported","universal_credit_reported","working_tax_credit_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.uc_legacy_closure_take_up@1","mass":"conserve","outputs":[{"column":"would_claim_uc_at_legacy_closure","dtype":"bool","entity":"benunit","ownership":"produced","rows":"all"}],"params":{"numerical_dependencies":[["policyengine-uk","2.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":"0bf6d4151d9cbd32bde34c2538bf6142d458c8828cc698fa1a9aad0d9e432246","time_period":"2024"},"population":"uc_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"uc_take_up.boundary","citation":"","description":"Ownership boundary before pension_credit_take_up rewrites.","id":"pension_credit_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_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":"78c889ae5a4bd4c61b1e0b259e3fe3e805f76e12c952d0523c92969957db05d5","time_period":"2024"},"population":"child_benefit_take_up.boundary","sources":["frs"],"structural":"none","weights":null},{"base":"child_benefit_take_up.boundary","citation":"","description":"Ownership boundary before carers_allowance_take_up rewrites.","id":"carers_allowance_take_up.boundary","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_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":"d91faf93fc9fc0251b2165af1c79514dc5d942373bc8f13d8d7d5454e0fd931c","time_period":"2024"},"population":null,"sources":["frs"],"structural":"expand","weights":null},{"base":null,"citation":"","description":"Own the cells materialized by cgt_support_split.","id":"cgt_support_split.owned","inputs":[],"kernel":"uk.claim@1","mass":"conserve","outputs":[{"column":"household_is_cgt_support_copy","dtype":"bool","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copies","dtype":"int64","entity":"household","ownership":"produced","rows":"all"},{"column":"cgt_support_copy_index","dtype":"int64","entity":"household","ownership":"produced","rows":"all"}],"params":{"materialized_expand_outputs":["household.household_is_cgt_support_copy","household.cgt_support_copies","household.cgt_support_copy_index"]},"population":"cgt_support_split","sources":[],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"cgt_support_split","citation":"","description":"Run structural UK stage cgt_incidence_clone.","id":"cgt_incidence_clone","inputs":[{"columns":["frs_benunit_capital","is_married","dependent_children","liable_for_share_of_household_rent","would_claim_child_benefit","child_benefit_opts_out","would_claim_pc","would_claim_uc","would_claim_tfc","would_claim_extended_childcare","would_claim_universal_childcare","would_claim_targeted_childcare","would_claim_uc_childcare","maximum_extended_childcare_hours_usage","benunit_source_id","benunit_support_channel","benunit_support_clone_index","uc_reported_capital","pension_credit_reported_capital","would_claim_uc_at_legacy_closure","has_mixed_age_couple_pension_credit_saving","uc_deduction_random_draw","uc_deduction_type_random_draw","uc_latent_deduction_rate","uc_deduction_combination"],"entity":"benunit","rows":"all"},{"columns":["region","tenure_type","accommodation_type","num_bedrooms","council_tax_reported","council_tax_band","council_tax_rebate","council_tax_single_adult_raw","water_and_sewerage_charges","domestic_rates","rent","subrent","mortgage_interest_repayment","mortgage_capital_repayment","structural_insurance_payments","housing_service_charges","external_child_payments","ons_household_type","council_tax","household_owns_tv","would_evade_tv_licence_fee","main_residential_property_purchased_is_first_home","property_purchased","brma","source_household_id","source_year","source_household_key","household_source_id","household_support_channel","household_support_clone_index","household_is_spi_synthetic","household_is_spi_income_band_donor","spi_income_band_donor_lower_bound","owned_land","property_wealth","corporate_wealth","private_pension_wealth","gross_financial_wealth","net_financial_wealth","main_residence_value","other_residential_property_value","non_residential_property_value","savings","num_vehicles","cash_isa","stocks_and_shares_isa","mortgage_debt","consumer_debt","directly_held_shares","unit_and_investment_trusts","other_residential_property_secured_debt","non_residential_property_secured_debt","household_lifetime_isa_balance","household_is_high_value_support_copy","high_value_support_copies","high_value_support_copy_index","main_residence_value_rank_basis","additional_residential_property_purchased","non_residential_property_purchased","household_local_bus_trips","food_and_non_alcoholic_beverages_consumption","alcohol_and_tobacco_consumption","clothing_and_footwear_consumption","housing_water_and_electricity_consumption","household_furnishings_consumption","health_consumption","transport_consumption","communication_consumption","recreation_consumption","education_consumption","restaurants_and_hotels_consumption","miscellaneous_consumption","petrol_spending","diesel_spending","bus_fare_spending","domestic_energy_consumption","electricity_consumption","gas_consumption","liquid_fuel_consumption","solid_fuel_consumption","has_fuel_consumption","uses_energy_prepayment_meter","beer_litres","cider_litres","wine_litres","spirits_litres","other_fermented_litres","beer_draught_share","cider_draught_share","cigarettes_per_week","hand_rolling_tobacco_grams_per_week","cigars_grams_per_week","other_tobacco_grams_per_week","remote_gaming_net_losses","pool_betting_net_receipts","bingo_net_receipts","national_lottery_ticket_spending","land_based_casino_net_losses","machine_games_lower_rate_net_takings","machine_games_standard_rate_net_takings","machine_games_higher_rate_net_takings","land_based_fixed_odds_betting_net_losses","remote_uk_horseracing_betting_net_losses","remote_other_betting_net_losses","betting_exchange_commission","horse_and_dog_pool_betting_net_losses","full_rate_vat_expenditure_rate","dfe_education_spending","rail_subsidy_spending","bus_subsidy_spending","rail_usage","household_is_cgt_support_copy","cgt_support_copies","cgt_support_copy_index"],"entity":"household","rows":"all"},{"columns":["age","gender","months_since_last_birthday","marital_status","hours_worked","care_hours","is_household_head","is_benunit_head","is_parent","is_blind","is_uc_claimant","is_claimant_or_partner","is_hbai_dependent_child","uc_is_in_startup_period","uc_is_in_gainful_self_employment","rent_paid_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":"8400624c4efaf1ab36add705318f660bafff7b73b9770080b6950e50de231bb7","time_period":"2024"},"population":"hmrc_cgt_gains_spine.boundary","sources":["frs"],"structural":"none","weights":null},{"artifact_outputs":[{"name":"stage_evidence","type":{"name":"microcosm.stage-evidence","schema_version":1}}],"base":"hmrc_cgt_gains_spine.boundary","citation":"","description":"Run structural UK stage cgt_incidence_anchor.","id":"cgt_incidence_anchor","inputs":[{"columns":["frs_benunit_capital"],"entity":"benunit","rows":"all"},{"columns":["household_is_capital_gains_clone","region"],"entity":"household","rows":"all"},{"columns":["age","capital_gains","dividend_income","employment_income","miscellaneous_income","private_pension_income","property_income","savings_interest_income","self_employment_income","state_pension_reported"],"entity":"person","rows":"all"}],"kernel":"uk.stage.expand.cgt_incidence_anchor@1","mass":"conserve","outputs":[],"params":{"expand_cells":[],"expand_weight_entity":"household","expand_weight_kind":"importance","numerical_dependencies":[["policyengine-uk","2.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":"766d64ba3dc52a8557444ad5143183194a7aebe99afc684c82a8d88dfbdac3b4","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":"701bfb237c5dfe15f01b5d973a464d68a75b7e0d7f6055fc07dcc78451023b78","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":"8e53397a542fcde2a502873e2c5bfceef5696dc21093e720ddb73636152cc514","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/test_support/microcosm_build/uk_gambling_participation_facts.py b/test_support/microcosm_build/uk_gambling_participation_facts.py new file mode 100644 index 0000000000..e84dd19554 --- /dev/null +++ b/test_support/microcosm_build/uk_gambling_participation_facts.py @@ -0,0 +1,296 @@ +"""Synthetic gambling participation facts for the top-up 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 will come from the vendored Chronicle resource of the GSGB tables; the +layout follows that package's, down to the online sub-row an activity +carries beside its all-channels row. +""" + +from __future__ import annotations + +import copy +from typing import Any + +import numpy as np +import pandas as pd + +PARTICIPATION_RESOURCE = "gambling_participation_facts.json" +PARTICIPATION = "synthetic.gambling_participation" +FOUR_WEEKS = "past_4_weeks" +TWELVE_MONTHS = "past_12_months" +ANY = "any_gambling" +NON_DRAW = "excluding_lottery_draw_only" +BANDS = ("age_18_to_34", "age_35_to_54", "age_55_plus") + + +def _row( + window: str, scope: str, sex: str, band: str, value: float, **more: str +) -> dict[str, Any]: + dimensions = { + "participation_window": window, + "participation_scope": scope, + "sex": sex, + "age_band": band, + **more, + } + return { + "concept": PARTICIPATION, + "unit": "share", + "period": {"type": "calendar_year", "value": 2025}, + "period_coverage": {"start_date": "2025-01-13", "end_date": "2026-01-22"}, + "geography": {"id": "K03000001"}, + "dimensions": dimensions, + "value": value, + "source_record_id": f"{PARTICIPATION}.{'.'.join(dimensions.values())}.2025", + } + + +#: Four-week rates of the two populations by band, for men, women and all +#: adults, and the twelve-month rate as a multiple of each: round numbers no +#: publisher printed. +_POPULATIONS = { + ANY: ({"male": 0.4, "female": 0.3, "all": 0.35}, 1.3), + NON_DRAW: ({"male": 0.45, "female": 0.35, "all": 0.4}, 1.5), +} +_BAND_SCALE = {"age_18_to_34": 1.0, "age_35_to_54": 1.2, "age_55_plus": 0.8} +#: Four-week rates of each activity among all adults, by band: above the +#: synthetic donor's, so the step adds households. +ACTIVITIES = { + "national_lottery_draws": (0.1, 0.25, 0.2), + "national_lottery_scratchcards": (0.05, 0.04, 0.02), + "betting": (0.25, 0.2, 0.12), + "bingo": (0.05, 0.05, 0.06), + "casino_games": (0.1, 0.05, 0.02), + "other_online_instant_win_games": (0.03, 0.02, 0.01), +} +#: An activity played only online, which the activity table prints as an +#: online row alone. +ONLINE_ONLY = ("other_online_instant_win_games",) +#: The online part of any gambling and of two activities: a row of the +#: activity table beside the all-channels one (or, for any gambling, beside +#: the population table's row). +ONLINE = {ANY: 0.4, "national_lottery_draws": 0.6, "betting": 0.5} +#: The worksheet each window's population rates and the activities come from. +SHEETS = {FOUR_WEEKS: "Table B.3", TWELVE_MONTHS: "Table B.1"} +ACTIVITY_SHEET = "Table B.9" + +PARTICIPATION_FACT_ROWS: list[dict[str, Any]] = [ + *( + _row( + window, + scope, + sex, + band, + round(rate * _BAND_SCALE[band] * multiple, 6), + source_sheet=SHEETS[window], + ) + for scope, (rates, annual) in _POPULATIONS.items() + for window, multiple in ((FOUR_WEEKS, 1.0), (TWELVE_MONTHS, annual)) + for sex, rate in rates.items() + for band in BANDS + ), + *( + _row( + FOUR_WEEKS, + activity, + "all", + band, + value, + source_sheet=ACTIVITY_SHEET, + gambling_channel="online" if activity in ONLINE_ONLY else "all", + ) + for activity, values in ACTIVITIES.items() + for band, value in zip(BANDS, values, strict=True) + ), + *( + _row( + FOUR_WEEKS, + scope, + "all", + band, + round(value * share, 6), + source_sheet=ACTIVITY_SHEET, + gambling_channel="online", + ) + for scope, share in ONLINE.items() + for band, value in zip( + BANDS, + ACTIVITIES.get(scope) + or [_POPULATIONS[ANY][0]["all"] * _BAND_SCALE[band] for band in BANDS], + strict=True, + ) + ), +] + +PARTICIPATION_DECLARATION: dict[str, Any] = { + "kind": "top_up_gambling_participation", + "resource": PARTICIPATION_RESOURCE, + "concept": PARTICIPATION, + "period_type": "calendar_year", + "period_value": 2025, + "geography_id": "K03000001", + "dimensions": { + "window": "participation_window", + "scope": "participation_scope", + "sex": "sex", + "age_band": "age_band", + }, + "population_dimensions": { + "regular": {"source_sheet": SHEETS[FOUR_WEEKS]}, + "occasional": {"source_sheet": SHEETS[TWELVE_MONTHS]}, + }, + "activity_dimensions": {"regular": {"source_sheet": ACTIVITY_SHEET}}, + "windows": {"regular": FOUR_WEEKS, "occasional": TWELVE_MONTHS}, + "sexes": {"MALE": "male", "FEMALE": "female", "all": "all"}, + "age_bands": [[18, "age_18_to_34"], [35, "age_35_to_54"], [55, "age_55_plus"]], + "keys": { + "national_lottery": { + "population": ANY, + "activities": { + "national_lottery_draws": {"gambling_channel": "all"}, + "national_lottery_scratchcards": {"gambling_channel": "all"}, + }, + "theta": 0.9, + }, + "betting_and_gaming": { + "population": NON_DRAW, + "activities": { + "betting": {"gambling_channel": "all"}, + "bingo": {"gambling_channel": "all"}, + "casino_games": {"gambling_channel": "all"}, + "other_online_instant_win_games": {"gambling_channel": "online"}, + }, + "theta": 0.1, + }, + }, + "occasional_stake_share": 0.1, + "strata": {"adults_cap": 3, "youngest_adult_bounds": [35, 55]}, + "propensity": { + "max_leaf_nodes": 15, + "min_samples_leaf": 20, + "l2_regularization": 1.0, + "validation_fraction": 0.1, + }, + "n_estimators": 4, + "seed": 0, + "salt": "test_gambling_participation", +} + + +def participation_declaration(**changes: Any) -> dict[str, Any]: + """The synthetic declaration with top-level ``changes``.""" + + declaration = copy.deepcopy(PARTICIPATION_DECLARATION) + declaration.update(copy.deepcopy(changes)) + return declaration + + +def participation_inputs( + n: int = 2400, *, seed: int = 7, declaration: dict[str, Any] | None = None +) -> dict[str, Any]: + """Synthetic arguments for ``top_up_gambling_participation``, rows included. + + ``n`` households of one, two or three adults (a third each) and up to two + children, at weights between 0.5 and 2; a donor of ``n // 2`` households + recording each key's stakes on about a quarter, more often at higher + income; and drawn stakes on about one household in twelve. + """ + + rng = np.random.default_rng(seed) + ids = np.arange(1, n + 1) + adults = 1 + np.arange(n) % 3 + children = rng.integers(0, 3, n) + members = adults + children + household_of = np.repeat(ids, members) + is_adult = np.concatenate( + [ + np.r_[np.ones(a, dtype=bool), np.zeros(c, dtype=bool)] + for a, c in zip(adults, children, strict=True) + ] + ) + age = np.where( + is_adult, + rng.uniform(18.0, 90.0, len(is_adult)), + rng.uniform(0.0, 17.0, len(is_adult)), + ).round() + person = pd.DataFrame( + { + "person_household_id": household_of, + "age": age, + "gender": np.where(np.arange(len(age)) % 2 == 0, "MALE", "FEMALE"), + } + ) + + def features(rows: int) -> pd.DataFrame: + return pd.DataFrame( + { + "income": rng.lognormal(10.0, 0.6, rows), + "renting": (rng.random(rows) < 0.35).astype(float), + "recreation": rng.uniform(100.0, 3000.0, rows), + } + ) + + donors = n // 2 + donor_features = features(donors) + recipient_features = features(n) + lean = (np.log(donor_features["income"].to_numpy()) - 10.0) / 0.6 + + def stakes(rows: int, rate: np.ndarray | float) -> np.ndarray: + return np.where(rng.random(rows) < rate, rng.lognormal(3.0, 1.0, rows), 0.0) + + keys = ("national_lottery", "betting_and_gaming") + return { + "keys": {key: stakes(n, 1.0 / 12.0) for key in keys}, + "person": person, + "household_ids": ids, + "weights": rng.uniform(0.5, 2.0, n), + "sources": None, + "donor_features": donor_features, + "donor_keys": { + key: stakes(donors, 1.0 / (1.0 + np.exp(-(lean - 1.1)))) for key in keys + }, + "donor_weights": rng.uniform(0.5, 2.0, donors), + "recipient_features": recipient_features, + "parameters": copy.deepcopy(declaration or PARTICIPATION_DECLARATION), + "fit_name": "test", + "rows": serve_participation_rows, + } + + +def serve_participation_rows(name: str, **criteria: Any) -> list[dict[str, Any]]: + """The synthetic rows matching ``criteria``, as the vendored reader serves them.""" + + from microcosm.build.uk_runtime.ledger_fact_vendoring import rows_matching + + if name != PARTICIPATION_RESOURCE: + raise ValueError(f"no synthetic rows for {name!r}.") + return rows_matching({"rows": PARTICIPATION_FACT_ROWS}, **criteria) + + +def patch_gambling_participation_facts( + monkeypatch, declaration: dict[str, Any] | None = None +) -> None: + """Serve the synthetic rows for the participation resource, the real ones otherwise. + + With ``declaration`` the stage and the gate also read it as the declared + step, in place of the committed spec's. + """ + + from microcosm.build.uk_runtime import gambling_participation, lcfs_consumption + + real = gambling_participation.vendored_rows + + def vendored_rows(name, *, fiscal_start=None, **criteria): + if name != PARTICIPATION_RESOURCE: + return real(name, fiscal_start=fiscal_start, **criteria) + return serve_participation_rows(name, **criteria) + + monkeypatch.setattr(gambling_participation, "vendored_rows", vendored_rows) + if declaration is not None: + for module in (gambling_participation, lcfs_consumption): + monkeypatch.setattr( + module, + "gambling_participation_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),