Skip to content

Set income_not_otherwise_charged to FRS odd-job income - #641

Draft
MaxGhenis wants to merge 4 commits into
mainfrom
income-not-otherwise-charged
Draft

MaxGhenis wants to merge 4 commits into
mainfrom
income-not-otherwise-charged

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

PolicyEngine/policyengine-uk#2726 gives the trading allowance its relief on income charged under ITTOIA 2005 Part 5 Chapter 8 (s. 783AB), and reads that income from a new person input, income_not_otherwise_charged, the Chapter 8 part of miscellaneous_income. It defaults to zero, so the relief has no aggregate effect until the data sets it. This PR sets it.

Draft until #2726 merges and ships in a release. uk-data PRs land in the batch on Max's go (d833).

What changes

  • datasets/frs.py: a new frs_miscellaneous_income(person, oddjob) returns (miscellaneous_income, income_not_otherwise_charged). create_frs calls it in place of the old inline block. The second output is the FRS odd-job income, the part of the first that stands in for Chapter 8 income.
  • datasets/imputations/income.py: clear_income_not_otherwise_charged sets the input to zero on the SPI-synthetic copy, next to clear_frs_reported_capital.
  • New tests in tests/test_income_not_otherwise_charged.py. tests/test_non_negative_incomes.py now lists the variable and reports a count of negative values instead of the smallest one.
  • tests/record_safe.py: counts_or_fail runs a test's reduction of a dataset to counts and turns any error inside it into a failure that names only the function and the error's type. It discards the error's own traceback, chains no exception and suppresses pytest's usual traceback; --full-trace overrides that suppression, but the frames it then shows hold no record. The data tests in both files reduce through it; tests/test_record_safe.py checks it.

miscellaneous_income itself does not change (see the differential below).

Why only odd-job income

miscellaneous_income sums the ODDJOB amount and six person-table fields. FRS 2024-25 (UKDA SN 9563) data dictionary and question instructions:

Field FRS definition Taken as Chapter 8 income?
ODDJOB.OJAMT (OJNOW = 1) Money received in the last 4 weeks from babysitting, mail-order agency, or an odd job, occasional work or professional advice (ODDTYPE 1–3) that the employment and self-employment questions have not covered. The FRS defines an odd job as one "undertaken once only at one specific point in time". OJNOW: did the work in the last 7 days Yes, as a proxy: casual income that no other provision charges falls under s. 687, and GOV.UK lists "casual services, for example, babysitting or gardening" under the allowance. The survey does not say how HMRC would treat each job: casual work that amounts to a trade gets the allowance as trade receipts instead
ALLPAY2 Amount of allowance: organisation No: a transfer, which private_transfer_income also counts (#627)
ROYYR2 Royalties No: Part 5 Chapter 2
ROYYR3 Income as a sleeping partner No: partnership trading income
ROYYR4 Overseas pension No: pension income (ITEPA 2003 Part 9)
CHAMTERN (child table) Earnings received from spare time job No: employment income
CHAMTTST (child table) Income received from a Trust No: an annual payment (Part 5 Chapter 7) or keeps its source

The build keeps the existing odd-job rule: jobs from the last 7 days count, as weekly amounts. That rule undercounts and misannualises odd-job income; #640 reports it and leaves the fix to its own PR, so this one changes neither total.

Negative OJAMT values are FRS missing-value codes (−1 to −9). The new function counts them as zero; the old block added them as negative pounds. No OJNOW = 1 row in the 2024-25 FRS carries a code, so the built data does not change.

SPI-synthetic rows hold none

The SPI-synthetic copy's trading profits are SPI PROFITS, which datasets/spi.py takes to be after the trading allowance, while its miscellaneous income stays its FRS donor's (neither imputation stage replaces it). policyengine-uk gives a person's trades the allowance first and their income not otherwise charged what is left. On these rows the donor's odd-job income would take an allowance the SPI profit may already have used, so the build sets the input to zero there. The sensitivity run below (variant C) shows what keeping the donors' values would add.

Invariants

For any person table and ODDJOB table, including FRS missing-value codes and blanks:

  1. Both outputs are non-negative, and income_not_otherwise_charged never exceeds miscellaneous_income.
  2. Conservation: miscellaneous_income − income_not_otherwise_charged equals the annualised floored sum of the six other fields, and income_not_otherwise_charged equals the annualised odd-job income from jobs in the last 7 days.
  3. Raising an odd-job amount never lowers either output; the six other fields never change income_not_otherwise_charged.
  4. Differential: miscellaneous_income equals the 1.59.1 formula whenever no odd-job amount carries a missing-value code.

For the built datasets:

  1. The FRS and the enhanced FRS keep invariant 1 on every row: both columns finite and non-negative, and the input within miscellaneous_income.
  2. SPI-donor rows of the enhanced FRS hold none.
  3. The uprating table moves the input exactly as miscellaneous_income, so invariant 1 holds in every year once policyengine-uk reads it.

Invariants 1–4 run as Hypothesis property tests (300 examples each, derandomised). Invariants 5–6 run on the built datasets: counts_or_fail reduces each dataset to counts, and the tests assert only on those counts, so neither a failed assertion nor an error inside the reduction prints a record. A parametrised test checks that the bound check counts each kind of violation, a NaN miscellaneous_income among them. Invariant 7 skips until the lock reads the variable.

Evidence

CI (run 40804946941, at 4e6d10f): the Test job builds the FRS and the enhanced FRS from this branch and runs the whole suite on them, invariants 5 and 6 included: 2,672 passed, 5 skipped (the uprating check among them), 1 xfailed. Later pushes changed only tests, docstrings and the changelog.

Local runs (my own, at ff0ccc3; I keep the aggregate logs with the review):

  • Tests. The whole suite: 2,566 passed, 110 skipped (most need the enhanced FRS, which I did not build), 1 xfailed, and 11 errors, all in the fixture of test_energy_calibration.py, which reads WAS round 8 microdata this machine lacks. test_income_not_otherwise_charged.py passes 13 tests and skips 2 (the enhanced-FRS check, and the uprating check until the relock); test_record_safe.py passes 4.
  • Leak check. Synthetic records with sentinel amounts break every data check in three ways: values that fail the bounds, missing columns, and amounts stored as text that cannot convert. Under pytest -v, -vv -l --tb=long, -vv -l --full-trace and -vv -l --tb=long -W error, the 12 failing checks print no sentinel amount in any of the 12 runs. The round-2 tests (3088545) printed none on bound failures but up to 49 lines on missing columns and up to 291 on text; the round-1 tests (4e6d10f) printed some in every run, up to 161 lines.
  • Mutation check. The property and unit tests catch all 8 mutants of the new code: no OJNOW filter; no floor; other fields included; odd jobs left out of miscellaneous_income; ×52 on the input; OJNOW = 2; a no-op clear; the floor on the sum instead of each job. The unmutated control passes.
  • Real-data differential. I built the base FRS 2024-25 from main (e1acdf9) and from this branch. Every person, benefit-unit and household column matches (34,966 / 18,850 / 16,288 rows) apart from the new one. Matched on person_id, the branch build's miscellaneous_income also equals the released 1.59.1 base's (the impact run's checks).
  • Relock rehearsal. With policyengine-uk main merged with #2726 (merge tree 289f6fc, 2.164.1), build_uprating_factors_table() runs and gives income_not_otherwise_charged the same row as miscellaneous_income. #2726's branch alone lists cash_isa twice in uprating_indices.yaml, which the generator rejects; main lists it once, and the rehearsed merge tree holds no duplicate entry.

Aggregate impact

I ran policyengine-uk at #2726's head (9d4f7591b) on the released 1.59.1 enhanced FRS, holding its calibrated weights fixed. A sets the input to zero everywhere (what the model reads today); B is this PR. Rows map to their FRS source person through source_household_id and position in the household (0 unmatched rows; age and sex match on every row; miscellaneous_income matches to within 2.2e-16 relative). Counts rest on at least 44 FRS households.

B − A 2025-26 2026-27 2030-31
income_not_otherwise_charged (total) £640m £661m £758m
Trading allowance relief on it £91m £92m £95m
Income tax −£11.6m −£15.1m −£20.7m
Class 4 NICs £0 £0 £0
All NICs £0 £0 £0
Universal Credit −£0.20m −£0.21m −£0.28m
All household benefits −£0.21m −£0.22m −£0.30m
HBAI household net income +£11.4m +£14.8m +£20.4m
People with the input 111,000 111,000 113,000
People with relief 106,000 106,000 107,000
People paying less income tax 79,000 78,000 80,000
People paying more income tax 0 0 0
  • Class 4 and all NICs: the per-person arrays match A's exactly in every year. The input holds no trading profit. The relief on it does count towards the allowance's saving, which trading_allowance_reliefs weighs against a current trading loss, so it could change a trade's relief and Class 4 for someone with a supplied loss; in this data it changed no one's.
  • Pension Credit, Housing Benefit, Child Tax Credit and Working Tax Credit: arrays identical to A's.
  • Poverty: no household with positive weight changes BHC or AHC poverty status.
  • Universal Credit falls. In #2726, uc_individual_earned_income_before_mif counts miscellaneous_income_before_trading_allowance as earnings and deducts uc_income_tax_on_earnings: the model's income tax on those earnings, taken as the lowest slice of the person's non-savings income (UC Regulations 2013 reg. 55(5)(b)). The relief cuts that tax, so the deduction shrinks and UC falls slightly.

Sensitivity (C): SPI-donor rows keep their FRS donor's odd-job income. Income tax falls by £15.5m, £19.2m and £25.1m in the three years, and UC by £0.32m, £0.35m and £0.51m.

Calibration: this run keeps the calibrated weights fixed. CI builds both sides with the locked policyengine-uk 2.122.2, which does not read the new column. Its fit comparison at 4e6d10f put 64.6% of national targets within 10% on the head against 64.8% on the base, and moved 11 national targets to a worse error band and 9 to a better one; builds of the same code move 2 to 12 national targets to a worse band (#598). No run here measures the calibration's response to the input; paired builds on the same relocked model and uprating factors will.

Merge order

  1. policyengine-uk #2726 merges and ships in a release.
  2. This PR merges in the uk-data batch (d833). Until the relock, the locked model skips the column.
  3. The uk-data relock to a release with #2726 bumps policyengine-uk>= and regenerates uprating_factors.csv and uprating_growth_factors.csv; test_uprated_exactly_as_miscellaneous_income then runs. That relock carries a much larger change on its own (the rehearsal adds 40 rows and moves 82 of the 84 existing rows by more than 1e-6, diesel spending's factor by up to 0.40), so it belongs in its own PR.

Follow-ups

axiom: n/a: data change

🤖 Generated with Claude Code

policyengine-uk's trading allowance relieves income charged under ITTOIA
2005 Part 5 Chapter 8 (s. 783AB) and reads it from
income_not_otherwise_charged (PolicyEngine/policyengine-uk#2726). Of the
fields the build sums into miscellaneous_income, only the FRS odd-job
amount (ODDJOB.OJAMT) records casual income that Chapter 8 charges, so
the build now returns it alongside miscellaneous_income.

The SPI-synthetic copy keeps none: its trading profits are SPI PROFITS,
which may already have used the allowance.

miscellaneous_income itself stays bitwise unchanged whenever no odd-job
amount carries an FRS missing-value code; a code now counts as zero.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Calibration fit against the base build: pass

Targets within 10% (those both builds have) Base Head Change
National (647) 64.3% 64.6% +0.3pp
Local (11,228) 75.1% 75.0% -0.1pp

A drop of more than 2.0% fails.

Notes

  • 12 national targets are in a better band on the head.

National targets in a worse error band on the head (9)

Target Base Head
dwp/uc/claimants_with_5+_children within 10% 25-50%
dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000 within 10% 10-25%
dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600 10-25% 25-50%
hmrc/dividend_income_count_income_band_50_000_to_70_000 10-25% 25-50%
hmrc/property_income_count_income_band_500_000_to_1_000_000 within 10% 10-25%
hmrc/property_income_income_band_15_000_to_20_000 within 10% 10-25%
hmrc/self_employment_income_count_income_band_1_000_000_to_inf within 10% 10-25%
hmrc/state_pension_count_income_band_500_000_to_1_000_000 within 10% 10-25%
ons/north_east_age_10_19 within 10% 10-25%

Flags are for review: builds of the same code move 2 to 12 national targets to a worse band (#598). Bands are of |estimate / target - 1|; no target's estimate or error is published.

Workflow run

Income distribution and single ages against the base build: pass

HBAI FYE 2025 (DWP), period 2024: equivalised income in £ a week, rates and Gini in per cent. A value outside HBAI's 95% interval is marked (outside).

Measure Base Head HBAI 95% interval
median_bhc 678.42 (outside) 678.78 (outside) 719.48 703.57 to 735.58
median_ahc 584.31 (outside) 584.46 (outside) 623.14 605.21 to 637.07
mean_bhc 800.00 (outside) 802.36 (outside) 854.98 836.37 to 870.35
mean_ahc 691.40 (outside) 693.62 (outside) 749.82 732.33 to 764.50
gini_bhc 33.13 33.21 32.74 31.89 to 33.98
gini_ahc 38.43 (outside) 38.48 (outside) 36.78 35.90 to 38.29
relative_low_income_bhc_all 18.20 (outside) 17.94 (outside) 15.91 14.45 to 17.64
relative_low_income_bhc_children 23.87 23.19 20.52 17.36 to 23.96
relative_low_income_bhc_working_age 17.47 (outside) 17.22 (outside) 14.28 12.91 to 16.02
relative_low_income_bhc_pensioners 13.78 14.01 15.90 13.69 to 17.99
relative_low_income_ahc_all 23.47 (outside) 23.12 (outside) 19.64 17.99 to 21.27
relative_low_income_ahc_children 33.52 (outside) 32.55 (outside) 27.41 23.49 to 30.64
relative_low_income_ahc_working_age 23.16 (outside) 22.85 (outside) 18.58 17.01 to 20.34
relative_low_income_ahc_pensioners 12.07 12.37 13.87 11.62 to 15.90
Single ages against the ONS projection Base Head
Mean error, ages 0 to 79 11.0% 11.0%
Largest error, ages 0 to 79 43.8% 44.1%
Largest error, ages 15 to 19 36.9% 37.7%

Flags

None.

These measures report and flag but do not fail yet: their same-code spread is unmeasured (#598).

Aggregate impact of the data change: pass

Base dataset enhanced_frs_2024_25.h5 (the base's build, sha256 357218922676) against head dataset enhanced_frs_2024_25.h5 (this pull request's build, sha256 eea55bb7058a), both measured with policyengine-uk 2.122.2, fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

Checks: 0 broken by this change, 4 failing on both sides, 0 fixed. Moves flagged for review: 173 (thresholds in report_spec.yaml; a flag does not fail the job).

Workflow run and full report

Notes

  • In the years a figure from fewer than 10 records is suppressed (spending.dfe_education_spending, spending.disabled_students_allowance, spending.sda), every total containing it, and the decile incomes, are rebuilt from their other components, so no published total includes it. Those totals are marked †. A change is withheld where the two sides leave out different figures and can't be lined up.

Moves flagged for review

Measure Year Base Head Change
Extended childcare entitlement 2030-31 837k 805k -31.9k
Disability Living Allowance 2031-32 1,404k 1,364k -39.9k
Disability Living Allowance 2028-29 1,386k 1,347k -39.4k
Disability Living Allowance 2025-26 1,370k 1,331k -38.9k
Disability Living Allowance 2030-31 1,398k 1,359k -39.7k
Disability Living Allowance 2029-30 1,392k 1,352k -39.5k
Disability Living Allowance 2026-27 1,375k 1,336k -39.1k
Disability Living Allowance 2027-28 1,380k 1,341k -39.2k
Income tax 2025-26 £297.08bn £298.52bn +£1.44bn
Income tax 2026-27 £316.51bn £318.01bn +£1.50bn
Income tax 2027-28 £332.43bn £333.97bn +£1.54bn
Income tax 2028-29 £346.78bn £348.38bn +£1.60bn
Income tax 2029-30 £362.71bn £364.34bn +£1.64bn
Income tax 2030-31 £380.06bn £381.74bn +£1.68bn
Personal Independence Payment 2031-32 £35.43bn £35.86bn +£436.8m
Income tax 2031-32 £399.88bn £401.62bn +£1.74bn
Personal Independence Payment 2030-31 £34.58bn £35.01bn +£426.4m
Personal Independence Payment 2029-30 £33.75bn £34.17bn +£416.1m
Personal Independence Payment 2028-29 £32.95bn £33.35bn +£406.2m
Personal Independence Payment 2027-28 £32.17bn £32.57bn +£396.6m
Personal Independence Payment 2026-27 £31.33bn £31.72bn +£386.3m
Personal Independence Payment 2025-26 £30.07bn £30.44bn +£370.7m
National Insurance (employer) 2025-26 £150.82bn £151.30bn +£483.7m
National Insurance (employer) 2026-27 £157.25bn £157.75bn +£502.4m
National Insurance (employer) 2027-28 £162.12bn £162.64bn +£516.7m
National Insurance (employer) 2029-30 £173.34bn £173.89bn +£552.4m
National Insurance (employer) 2028-29 £166.64bn £167.17bn +£530.0m
National Insurance (employer) 2030-31 £178.76bn £179.33bn +£568.3m
National Insurance (employer) 2031-32 £185.80bn £186.39bn +£590.3m
Government balance, each receipt once 2025-26 £432.00bn £433.32bn +£1.32bn
gov_balance 2025-26 £435.13bn £436.45bn +£1.32bn
Government balance, each receipt once 2026-27 £459.29bn £460.65bn +£1.37bn
gov_balance 2026-27 £462.42bn £463.78bn +£1.37bn
Carer's Allowance 2031-32 924k 939k +14.5k
Carer's Allowance 2030-31 920k 935k +14.4k
Carer's Allowance 2029-30 916k 931k +14.3k
Carer's Allowance 2028-29 912k 926k +14.3k
Government balance, each receipt once 2027-28 £489.78bn £491.17bn +£1.39bn
Carer's Allowance 2027-28 909k 923k +14.2k
Carer's Allowance 2026-27 905k 919k +14.2k

133 more flags are in the report artifact.

Receipts by tax head

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Income tax +£1.44bn +£1.50bn +£1.54bn +£1.60bn +£1.64bn +£1.68bn +£1.74bn
National Insurance (employee and self-employed) +£123.8m +£126.3m +£130.1m +£132.3m +£138.8m +£140.9m +£145.4m
National Insurance (employer) +£483.7m +£502.4m +£516.7m +£530.0m +£552.4m +£568.3m +£590.3m
Capital gains tax -£57.0m -£58.7m -£60.6m -£62.8m -£64.9m -£67.2m -£69.7m
Student loan repayments +£18.2m +£18.9m +£19.4m +£19.9m +£20.4m +£21.0m +£25.5m
VAT -£35.4m -£36.3m -£37.2m -£38.1m -£39.0m -£40.0m -£41.0m
Fuel duties -£249 -£142 -£369 -£72 -£148 +£261 +£964
TV licence fee -£2.6m -£3.7m -£3.0m -£2.9m -£3.0m -£3.2m -£2.9m
Council tax +£37.2m +£39.8m +£42.7m +£45.8m +£49.0m +£52.4m +£52.6m
High value council tax surcharge 0 0 0 -£3.2m -£3.3m -£3.4m -£3.5m
Northern Ireland domestic rates -£1.3m -£1.4m -£1.5m -£1.5m -£1.6m -£1.7m -£1.7m
Business rates +£348 +£2,368 +£1,269 +£5,972 +£1,442 -£2,210 +£3,534
Stamp duty land tax (own purchases, and corporate until the -£144.2m -£152.5m -£160.2m -£167.6m -£175.4m -£183.0m -£190.8m
Land transaction tax (Wales) -£0.4m -£0.4m -£0.4m -£0.5m -£0.5m -£0.5m -£0.6m
Land and buildings transaction tax (Scotland) +£47,305 +£47,451 +£55,125 +£63,344 +£71,225 +£78,810 +£84,975

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension +£317.4m +£321.5m +£331.3m +£334.9m +£344.8m +£355.0m +£365.5m
Pension Credit -£1.6m -£0.5m -£4.9m -£3.9m -£5.6m -£6.9m -£13.5m
Winter Fuel Payment +£4.2m +£5.8m +£3.5m +£2.9m +£2.9m +£3.6m +£3.7m
Pension Age Winter Heating Payment (Scotland) -£0.4m -£0.3m -£0.4m -£0.4m -£0.4m -£0.4m -£0.4m
Universal Credit -£37.3m -£9.4m +£5.6m +£46.9m +£69.4m +£3.6m -£6.7m
Housing Benefit +£9.9m +£10.2m +£7.9m +£8.1m +£8.2m +£8.3m +£9.3m
Council Tax Reduction -£16.2m -£15.7m -£17.5m -£18.8m -£19.3m -£16.1m -£15.6m
Employment and Support Allowance (income-related) -£6.6m -£6.8m -£7.0m -£7.1m -£7.3m -£7.5m -£7.7m
Employment and Support Allowance (contribution-based) -£5.4m -£5.5m -£5.7m -£5.8m -£5.9m -£6.1m -£6.2m
Jobseeker's Allowance (income-based) +£1.4m 0 0 0 0 0 0
Jobseeker's Allowance (contribution-based) -£2.5m -£2.5m -£2.6m -£2.6m -£2.7m -£2.8m -£2.8m
Income Support +£6.7m 0 0 0 0 0 0
Personal Independence Payment +£370.7m +£386.3m +£396.6m +£406.2m +£416.1m +£426.4m +£436.8m
Disability Living Allowance -£220.4m -£229.6m -£235.8m -£241.5m -£247.4m -£253.5m -£259.6m
Attendance Allowance +£77.0m +£80.2m +£82.4m +£84.3m +£86.4m +£88.5m +£90.7m
Carer's Allowance +£61.1m +£63.6m +£65.3m +£66.9m +£68.6m +£70.2m +£72.0m
Carer Support Payment (Scotland) -£9.1m -£9.5m -£9.7m -£10.0m -£10.2m -£10.5m -£10.7m
Carer's Allowance Supplement (Scotland) 0 -£1.3m -£1.3m -£1.3m -£1.3m -£1.3m -£1.3m
Severe Disablement Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Industrial Injuries Disablement Benefit -£3.3m -£3.4m -£3.4m -£3.5m -£3.6m -£3.7m -£3.8m
Armed Forces Compensation Scheme +£46.7m +£47.9m +£49.1m +£50.3m +£51.5m +£52.8m +£54.0m
Child Benefit -£25.6m -£25.7m -£28.3m -£28.9m -£29.7m -£30.2m -£30.4m
Scottish Child Payment +£6.1m +£6.1m +£6.3m +£6.4m +£6.5m +£6.7m +£7.2m
Healthy Start vouchers -£1.5m -£1.5m -£1.5m -£1.5m -£1.5m -£1.5m -£1.5m
Statutory Maternity Pay +£8.4m +£8.7m +£8.9m +£9.1m +£9.3m +£9.5m +£9.8m
Statutory Sick Pay -£23.0m -£23.6m -£24.2m -£24.8m -£25.4m -£26.0m -£26.7m
Sure Start Maternity Grant +£0.1m +£0.1m +£0.1m +£0.1m +£0.1m +£0.1m +£0.1m
Bereavement Support Payment -£27.2m -£27.9m -£28.6m -£29.3m -£30.0m -£30.7m -£31.5m
Tax-Free Childcare +£2.2m -£3.5m -£3.3m -£3.4m -£3.7m -£10.6m -£10.7m
Extended childcare entitlement -£43.2m -£53.9m -£45.6m -£52.5m -£53.2m -£107.5m -£61.4m
Universal childcare entitlement -£15.3m -£11.3m -£11.6m -£10.8m -£11.1m -£11.4m -£11.7m
Targeted childcare entitlement -£7.2m -£7.5m -£7.7m -£7.9m -£8.1m -£7.8m +£4.1m
Parents' Learning Allowance +£0.3m +£0.3m +£0.3m +£0.3m +£0.3m +£0.3m +£0.3m
Adult Dependants' Grant +£0.1m +£0.1m -£0.3m -£0.3m -£0.3m -£0.3m -£0.4m
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
NHS spending +£78.0m +£78.3m +£78.6m +£78.9m +£79.3m +£79.7m +£80.0m
State education spending suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Transport subsidy spending -£38 -£12 -£28 -£29 -£56 -£13 +£96

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension +12.1k +11.1k +11.7k +11.9k +11.9k +12.0k +12.0k
Pension Credit +3.3k +9.4k +4.0k +3.2k +3.8k +4.7k +3.5k
Winter Fuel Payment +19.1k +25.4k +16.5k +12.7k +12.6k +16.5k +18.0k
Pension Age Winter Heating Payment (Scotland) +347 +519 -76 -209 -210 -211 -212
Universal Credit -11.2k -9.7k -7.5k -9.6k -9.3k -6.3k -9.1k
Housing Benefit +757 +693 +514 +514 +518 +528 +653
Council Tax Reduction -2.3k -333 -4.5k -6.9k -3.0k -884 +6.8k
Employment and Support Allowance (income-related) +596 +598 +600 +605 +607 +610 +613
Employment and Support Allowance (contribution-based) -823 -826 -829 -832 -836 -839 -843
Jobseeker's Allowance (income-based) +352 0 0 0 0 0 0
Jobseeker's Allowance (contribution-based) -460 -462 -463 -465 -467 -469 -471
Income Support +337 0 0 0 0 0 0
Personal Independence Payment +50.4k +50.6k +50.8k +51.0k +51.2k +51.5k +51.7k
Disability Living Allowance -38.9k -39.1k -39.2k -39.4k -39.5k -39.7k -39.9k
Attendance Allowance +12.5k +12.6k +12.6k +12.7k +12.7k +12.8k +12.8k
Carer's Allowance +14.1k +14.2k +14.2k +14.3k +14.3k +14.4k +14.5k
Carer Support Payment (Scotland) -2.1k -2.1k -2.1k -2.1k -2.1k -2.1k -2.2k
Carer's Allowance Supplement (Scotland) 0 -2.1k -2.1k -2.1k -2.1k -2.1k -2.2k
Severe Disablement Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Industrial Injuries Disablement Benefit +333 +335 +336 +337 +339 +340 +342
Armed Forces Compensation Scheme +5.6k +5.6k +5.7k +5.7k +5.7k +5.7k +5.8k
Child Benefit -21.5k -21.3k -22.0k -22.1k -22.2k -22.2k -22.1k
Scottish Child Payment +4.3k +4.2k +4.2k +4.2k +4.2k +4.2k +4.4k
Healthy Start vouchers -7.3k -7.4k -7.4k -7.4k -7.5k -7.5k -7.5k
Statutory Maternity Pay -1.1k -1.1k -1.1k -1.1k -1.1k -1.1k -1.1k
Statutory Sick Pay -4.6k -4.7k -4.7k -4.7k -4.7k -4.7k -4.8k
Sure Start Maternity Grant +248 +249 +249 +250 +252 +253 +254
Bereavement Support Payment -3.3k -3.4k -3.4k -3.4k -3.4k -3.4k -3.4k
Tax-Free Childcare +1.6k -3.2k -4.2k -4.4k -5.0k -10.8k -10.0k
Extended childcare entitlement -10.5k -11.9k -10.0k -11.0k -11.0k -31.9k -11.7k
Universal childcare entitlement -4.5k -3.2k -3.2k -2.9k -2.9k -3.0k -3.0k
Targeted childcare entitlement -1.5k -1.5k -1.5k -1.5k -1.5k -1.4k +732
Parents' Learning Allowance +168 +169 +169 +170 +171 +171 +172
Adult Dependants' Grant +41 +42 -96 -96 -97 -97 -107
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Government balance, each component counted once

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once +£1.86bn +£1.94bn +£1.99bn +£2.05bn +£2.11bn +£2.16bn +£2.24bn
Government spending +£544.6m † +£569.9m † +£596.5m † +£641.2m † +£676.6m † +£569.9m † +£630.7m †
Government balance, each receipt once +£1.32bn † +£1.37bn † +£1.39bn † +£1.41bn † +£1.43bn † +£1.59bn † +£1.61bn †

Model totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax +£1.86bn +£1.94bn +£1.99bn +£2.05bn +£2.11bn +£2.16bn +£2.24bn
household_tax +£1.41bn +£1.47bn +£1.51bn +£1.56bn +£1.60bn +£1.63bn +£1.69bn
pre_budget_change_household_tax +£1.39bn +£1.45bn +£1.49bn +£1.54bn +£1.58bn +£1.61bn +£1.67bn
gov_spending +£544.6m † +£569.9m † +£596.5m † +£641.2m † +£676.6m † +£569.9m † +£630.7m †
household_benefits +£544.6m † +£569.9m † +£596.5m † +£641.2m † +£676.6m † +£569.9m † +£630.7m †
gov_balance +£1.32bn † +£1.37bn † +£1.39bn † +£1.41bn † +£1.43bn † +£1.59bn † +£1.61bn †

Components the model counts twice

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
corporate_sdlt, counted again inside expected_sdlt +£38 +£230 +£132 +£581 +£158 -£180 +£326

Household income totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income +£3.86bn +£4.01bn +£4.13bn +£4.24bn +£4.42bn +£4.55bn +£4.72bn
Household net income +£3.79bn † +£3.94bn † +£4.06bn † +£4.19bn † +£4.32bn † +£4.34bn † +£4.54bn †
Household net income (HBAI definition) suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Population

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People +7.2k +7.2k +7.3k +7.3k +7.3k +7.4k +7.4k
Benefit units -15.4k -15.5k -15.5k -15.6k -15.7k -15.7k -15.8k
Households -268 -269 -270 -271 -272 -274 -275

Poverty rates

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed

People in poverty

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Inequality

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Mean household net income in each side's own deciles

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 2: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 3: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 4: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 5: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 6: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 7: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 8: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 9: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 10: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Standard reform costings (change in gov_balance)

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp +£16.3m +£16.1m +£16.2m +£16.3m +£16.1m +£16.2m +£17.6m
Raise higher rate by 1pp +£29.7m +£31.8m +£33.5m +£34.9m +£36.6m +£38.2m +£39.8m
Raise personal allowance by ~800GBP/year -£10.3m -£3.5m -£2.7m -£5.1m -£1.6m -£2.5m -£1.2m
Raise child benefit by 25GBP/week per additional child -£18.7m -£16.3m -£16.5m -£18.2m -£17.4m -£17.1m -£16.5m
Reduce Universal Credit taper rate to 20% -£27.2m -£24.8m -£30.9m -£28.3m -£46.5m -£49.5m -£69.2m
Raise Class 1 main employee NICs rate to 10% +£20.3m +£20.8m +£21.4m +£19.6m +£20.1m +£19.6m +£22.4m
Raise VAT standard rate by 2pp -£3.7m -£3.7m -£3.8m -£3.9m -£4.0m -£4.1m -£4.2m
Raise additional rate by 3pp +£33.6m +£34.7m +£35.6m +£37.2m +£37.2m +£37.2m +£38.8m
Raise the Universal Credit standard allowance by 10% -£4.4m -£4.1m -£7.5m -£11.8m -£14.5m -£14.9m -£15.5m
Raise the State Pension by 10% -£35.6m -£29.3m -£36.6m -£40.6m -£40.9m -£41.9m -£45.4m

Standard reforms: change in each reform's target

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax +£14.8m +£15.1m +£14.9m +£14.6m +£15.0m +£15.2m +£15.5m
Raise higher rate by 1pp: change in income_tax +£29.8m +£32.0m +£33.7m +£34.9m +£36.6m +£38.3m +£39.6m
Raise personal allowance by ~800GBP/year: change in income_tax -£10.0m -£3.5m -£2.7m -£5.2m -£2.0m -£3.0m -£1.4m
Raise child benefit by 25GBP/week per additional child: change in child_benefit +£1.6m +£1.7m +£1.2m +£1.2m +£1.1m +£1.1m +£1.0m
Reduce Universal Credit taper rate to 20%: change in universal_credit +£27.4m +£24.9m +£30.9m +£28.5m +£46.8m +£49.9m +£69.4m
Raise Class 1 main employee NICs rate to 10%: change in national_insurance +£18.5m +£18.5m +£18.9m +£19.2m +£20.3m +£20.2m +£20.6m
Raise VAT standard rate by 2pp: change in vat -£3.7m -£3.7m -£3.8m -£3.9m -£4.0m -£4.1m -£4.2m
Raise additional rate by 3pp: change in income_tax +£33.6m +£34.7m +£35.6m +£37.2m +£37.2m +£37.2m +£38.8m
Raise the Universal Credit standard allowance by 10%: change in universal_credit +£4.7m +£4.5m +£7.8m +£12.2m +£14.9m +£15.4m +£16.0m
Raise the State Pension by 10%: change in state_pension +£31.7m +£32.1m +£33.1m +£33.5m +£34.5m +£35.5m +£36.5m

Household net income by decile

The datasets hold different households, so households are not matched; compare the mean income in each side's own deciles.

Checks failing on both base and head (4)
  • Each model total's components are exactly the partition's heads and declared double counts (closure): gov_spending: the partition puts 'healthy_start_vouchers' in this total, but the model does not add it; gov_spending: the partition puts 'scottish_child_payment' in this total, but the model does not add it; gov_spending: the partition puts 'statutory_paternity_pay' in this total, but the model does not add it
  • VAT is never negative (sign:vat): 2025-26: 67 units below zero, a weighted £-81,374,588 in total; 2026-27: 67 units below zero, a weighted £-83,562,545 in total; 2027-28: 67 units below zero, a weighted £-85,549,159 in total
  • The partition's heads and declared double counts add up to gov_spending (identity:gov_spending): 2025-26: 358 households differ, by a weighted £537,916,296 in total (households holding a figure from fewer than 10 records aren't checked this year); 2026-27: 360 households differ, by a weighted £559,009,281 in total (households holding a figure from fewer than 10 records aren't checked this year); 2027-28: 360 households differ, by a weighted £572,632,041 in total (households holding a figure from fewer than 10 records aren't checked this year)
  • The partition's heads and declared double counts add up to household_benefits (identity:household_benefits): 2025-26: 1,819 households differ, by a weighted £92,221,725 in total (households holding a figure from fewer than 10 records aren't checked this year); 2026-27: 1,791 households differ, by a weighted £94,163,936 in total (households holding a figure from fewer than 10 records aren't checked this year); 2027-28: 1,739 households differ, by a weighted £94,527,260 in total (households holding a figure from fewer than 10 records aren't checked this year)
Counted-once check

Counted-once check not run: not requested.

Provenance
Side Commit Runtime Environment hash Partition hash Time
base policyengi uk 2.122.2 (files 0cb87d75a516), core 3.32.13, py 3.13.17 x86_64 a9ab0df50691 e8ea8a019873 208.95s
head policyengi uk 2.122.2 (files 0cb87d75a516), core 3.32.13, py 3.13.17 x86_64 a9ab0df50691 e8ea8a019873 193.24s

Base dataset: enhanced_frs_2024_25.h5, sha256 357218922676c2eb7eced692226def7d4cff5ddea24ebfd57424170ad4e878ad, the base's build.

Head dataset: enhanced_frs_2024_25.h5, sha256 eea55bb7058a259f1cb76ba9eef7541fd4d289b97a8235d71ed1627174cc6041, this pull request's build.

Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Income tax £298.52bn £318.01bn £333.97bn £348.38bn £364.34bn £381.74bn £401.62bn
National Insurance (employee and self-employed) £51.19bn £53.40bn £55.15bn £56.73bn £58.64bn £60.46bn £62.79bn
National Insurance (employer) £151.30bn £157.75bn £162.64bn £167.17bn £173.89bn £179.33bn £186.39bn
Employer NI change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employer NI change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Capital gains tax £25.17bn £26.03bn £26.98bn £27.95bn £28.92bn £29.98bn £31.07bn
Student loan repayments £7.71bn £8.01bn £8.23bn £8.43bn £8.66bn £8.91bn £8.29bn
VAT £323.94bn £332.65bn £340.56bn £348.76bn £357.30bn £366.08bn £375.01bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.04bn £24.14bn £26.10bn £26.16bn £25.89bn £25.24bn £25.82bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.51bn £4.66bn £4.68bn £4.70bn £4.72bn £4.75bn £4.77bn
Council tax £48.73bn £51.56bn £54.83bn £58.36bn £61.89bn £65.57bn £65.85bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.69bn £0.71bn £0.73bn £0.74bn
Northern Ireland domestic rates £1.12bn £1.18bn £1.23bn £1.29bn £1.35bn £1.42bn £1.42bn
Business rates £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn
Stamp duty land tax (own purchases, and corporate until the £19.48bn £20.35bn £21.32bn £22.28bn £23.28bn £24.38bn £25.57bn
Land transaction tax (Wales) £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Land and buildings transaction tax (Scotland) £0.06bn £0.06bn £0.06bn £0.07bn £0.07bn £0.07bn £0.08bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension £133.46bn £138.54bn £140.79bn £143.16bn £147.39bn £151.75bn £156.21bn
Pension Credit £6.53bn £7.14bn £7.02bn £7.07bn £7.18bn £7.29bn £7.30bn
Winter Fuel Payment £1.69bn £1.66bn £1.62bn £1.59bn £1.58bn £1.58bn £1.57bn
Pension Age Winter Heating Payment (Scotland) £0.09bn £0.09bn £0.09bn £0.10bn £0.10bn £0.10bn £0.10bn
Universal Credit £78.87bn £83.09bn £84.91bn £86.46bn £87.38bn £84.59bn £85.08bn
Housing Benefit £8.34bn £8.67bn £8.86bn £9.06bn £9.34bn £9.58bn £9.54bn
Council Tax Reduction £2.17bn £2.23bn £2.30bn £2.36bn £2.42bn £2.49bn £2.46bn
Employment and Support Allowance (income-related) £3.20bn £3.28bn £3.36bn £3.43bn £3.51bn £3.60bn £3.68bn
Employment and Support Allowance (contribution-based) £4.74bn £4.86bn £4.98bn £5.10bn £5.22bn £5.35bn £5.48bn
Jobseeker's Allowance (income-based) £0.05bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.29bn £0.29bn £0.30bn £0.31bn £0.32bn £0.32bn £0.33bn
Income Support £0.17bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Working Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Incapacity Benefit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Personal Independence Payment £30.44bn £31.72bn £32.57bn £33.35bn £34.17bn £35.01bn £35.86bn
Disability Living Allowance £8.11bn £8.45bn £8.68bn £8.89bn £9.11bn £9.33bn £9.56bn
Attendance Allowance £7.78bn £8.11bn £8.33bn £8.53bn £8.74bn £8.95bn £9.17bn
Carer's Allowance £3.97bn £4.13bn £4.24bn £4.35bn £4.45bn £4.56bn £4.67bn
Carer Support Payment (Scotland) £0.31bn £0.32bn £0.33bn £0.34bn £0.35bn £0.35bn £0.36bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Severe Disablement Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Industrial Injuries Disablement Benefit £0.62bn £0.64bn £0.65bn £0.67bn £0.69bn £0.70bn £0.72bn
Armed Forces Compensation Scheme £0.59bn £0.61bn £0.62bn £0.64bn £0.65bn £0.67bn £0.69bn
Child Benefit £16.35bn £17.00bn £17.42bn £17.82bn £18.24bn £18.67bn £19.08bn
Scottish Child Payment £0.48bn £0.50bn £0.51bn £0.53bn £0.53bn £0.55bn £0.56bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.06bn £0.06bn £0.06bn £0.06bn £0.06bn £0.06bn £0.06bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.84bn £3.95bn £4.04bn £4.14bn £4.24bn £4.34bn £4.45bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £0.97bn £1.00bn £1.02bn £1.05bn £1.07bn £1.10bn £1.12bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £1.13bn £1.16bn £1.18bn £1.21bn £1.24bn £1.27bn £1.30bn
Tax-Free Childcare £0.45bn £0.44bn £0.44bn £0.46bn £0.46bn £0.47bn £0.47bn
Extended childcare entitlement £3.77bn £4.17bn £4.30bn £4.41bn £4.52bn £4.69bn £4.83bn
Universal childcare entitlement £1.51bn £1.59bn £1.64bn £1.68bn £1.72bn £1.75bn £1.79bn
Targeted childcare entitlement £0.37bn £0.38bn £0.39bn £0.40bn £0.41bn £0.41bn £0.41bn
Care to Learn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Childcare Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Parents' Learning Allowance £0.19bn £0.19bn £0.19bn £0.19bn £0.19bn £0.20bn £0.20bn
Adult Dependants' Grant £0.06bn £0.06bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Travel Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
NHS spending £208.45bn £209.24bn £210.02bn £210.86bn £211.78bn £212.74bn £213.65bn
State education spending suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Transport subsidy spending £25.15bn £25.25bn £25.34bn £25.44bn £25.55bn £25.67bn £30.94bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension 11,748k 11,642k 11,394k 11,306k 11,355k 11,407k 11,456k
Pension Credit 1,368k 1,391k 1,345k 1,328k 1,327k 1,325k 1,306k
Winter Fuel Payment 7,151k 7,029k 6,806k 6,671k 6,648k 6,617k 6,606k
Pension Age Winter Heating Payment (Scotland) 709k 702k 690k 683k 686k 689k 692k
Universal Credit 6,373k 6,403k 6,429k 6,431k 6,406k 6,395k 6,372k
Housing Benefit 1,210k 1,207k 1,201k 1,198k 1,203k 1,203k 1,200k
Council Tax Reduction 3,611k 3,638k 3,681k 3,704k 3,726k 3,747k 3,721k
Employment and Support Allowance (income-related) 310k 311k 312k 313k 314k 316k 317k
Employment and Support Allowance (contribution-based) 667k 669k 672k 674k 677k 680k 683k
Jobseeker's Allowance (income-based) 9k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 60k 60k 60k 60k 61k 61k 61k
Income Support 26k 0k 0k 0k 0k 0k 0k
Working Tax Credit 0k 0k 0k 0k 0k 0k 0k
Child Tax Credit 0k 0k 0k 0k 0k 0k 0k
Incapacity Benefit 0k 0k 0k 0k 0k 0k 0k
Personal Independence Payment 4,134k 4,150k 4,165k 4,182k 4,201k 4,219k 4,238k
Disability Living Allowance 1,331k 1,336k 1,341k 1,347k 1,352k 1,359k 1,364k
Attendance Allowance 1,538k 1,544k 1,550k 1,556k 1,563k 1,570k 1,576k
Carer's Allowance 916k 919k 923k 926k 931k 935k 939k
Carer Support Payment (Scotland) 71k 71k 72k 72k 72k 72k 73k
Carer's Allowance Supplement (Scotland) 0k 71k 72k 72k 72k 72k 73k
Severe Disablement Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Industrial Injuries Disablement Benefit 158k 159k 159k 160k 161k 161k 162k
Armed Forces Compensation Scheme 66k 67k 67k 67k 68k 68k 68k
Child Benefit 7,957k 7,971k 7,985k 8,011k 8,038k 8,069k 8,082k
Scottish Child Payment 339k 341k 342k 343k 341k 343k 342k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 231k 232k 232k 233k 234k 235k 236k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 304k 305k 306k 307k 309k 310k 312k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 152k 152k 153k 154k 154k 155k 156k
Sure Start Maternity Grant 22k 22k 23k 23k 23k 23k 23k
Bereavement Support Payment 182k 183k 184k 185k 185k 186k 187k
Tax-Free Childcare 966k 951k 952k 958k 934k 945k 934k
Extended childcare entitlement 793k 783k 790k 794k 795k 805k 823k
Universal childcare entitlement 438k 449k 451k 453k 454k 453k 456k
Targeted childcare entitlement 76k 77k 77k 77k 78k 76k 75k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 95k 95k 95k 96k 96k 97k 97k
Adult Dependants' Grant 17k 17k 14k 15k 15k 15k 14k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £987.52bn £1,029.54bn £1,067.49bn £1,102.71bn £1,141.41bn £1,180.40bn £1,221.18bn
Government spending £554.20bn † £568.88bn † £576.32bn † £583.74bn † £592.73bn † £598.26bn † £611.79bn †
Government balance, each receipt once £433.32bn † £460.65bn † £491.17bn † £518.97bn † £548.68bn † £582.14bn † £609.39bn †
Benefits in household_benefits but not in gov_spending £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Model totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax £990.65bn £1,032.67bn £1,070.62bn £1,105.84bn £1,144.54bn £1,183.53bn £1,224.31bn
household_tax £515.40bn £542.27bn £567.43bn £589.92bn £613.35bn £638.11bn £662.90bn
pre_budget_change_household_tax £507.69bn £534.26bn £559.20bn £580.79bn £603.98bn £628.48bn £653.87bn
gov_spending £554.20bn † £568.88bn † £576.32bn † £583.74bn † £592.73bn † £598.26bn † £611.79bn †
household_benefits £554.20bn † £568.88bn † £576.32bn † £583.74bn † £592.73bn † £598.26bn † £611.79bn †
gov_balance £436.45bn † £463.78bn † £494.30bn † £522.10bn † £551.81bn † £585.27bn † £612.52bn †
Components the model counts twice: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
corporate_sdlt, counted again inside expected_sdlt £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,663.07bn £1,725.37bn £1,778.20bn £1,828.94bn £1,894.51bn £1,953.12bn £2,025.18bn
Household net income £1,661.40bn † £1,709.99bn † £1,743.93bn † £1,778.52bn † £1,814.23bn † £1,852.24bn † £1,910.53bn †
Household net income (HBAI definition) suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 70,748k 71,017k 71,280k 71,565k 71,880k 72,203k 72,514k
Benefit units 38,926k 39,074k 39,219k 39,375k 39,549k 39,727k 39,897k
Households 32,064k 32,186k 32,305k 32,434k 32,577k 32,723k 32,864k
Poverty rates: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
People in poverty: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, before housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Absolute poverty, after housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, before housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: everyone suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: children suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: working-age adults suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Relative poverty, after housing costs: pensioners suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Inequality: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Mean household net income in each side's own deciles: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 2: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 3: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 4: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 5: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 6: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 7: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 8: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 9: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Decile 10: mean household_net_income per household suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Standard reform costings (change in gov_balance): head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp £6.04bn £6.32bn £6.52bn £6.71bn £6.91bn £7.14bn £7.40bn
Raise higher rate by 1pp £3.77bn £4.06bn £4.30bn £4.53bn £4.79bn £5.07bn £5.29bn
Raise personal allowance by ~800GBP/year £-3.59bn £-3.70bn £-3.80bn £-3.86bn £-3.91bn £-3.98bn £-1.67bn
Raise child benefit by 25GBP/week per additional child £-2.06bn £-1.82bn £-1.70bn £-1.59bn £-1.48bn £-1.37bn £-1.27bn
Reduce Universal Credit taper rate to 20% £-16.79bn £-17.43bn £-17.67bn £-17.87bn £-17.92bn £-18.13bn £-18.16bn
Raise Class 1 main employee NICs rate to 10% £10.63bn £11.04bn £11.35bn £11.60bn £11.89bn £12.20bn £12.64bn
Raise VAT standard rate by 2pp £31.94bn £32.80bn £33.58bn £34.39bn £35.23bn £36.10bn £36.98bn
Raise additional rate by 3pp £3.29bn £3.54bn £3.75bn £3.96bn £4.20bn £4.45bn £4.81bn
Raise the Universal Credit standard allowance by 10% £-2.97bn £-3.12bn £-3.17bn £-3.22bn £-3.24bn £-3.28bn £-3.33bn
Raise the State Pension by 10% £-9.77bn £-10.02bn £-10.10bn £-10.20bn £-10.43bn £-10.69bn £-10.97bn
Standard reforms: change in each reform's target: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax £6.16bn £6.43bn £6.65bn £6.84bn £7.05bn £7.28bn £7.54bn
Raise higher rate by 1pp: change in income_tax £3.77bn £4.07bn £4.31bn £4.53bn £4.80bn £5.08bn £5.30bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.69bn £-3.81bn £-3.91bn £-3.98bn £-4.03bn £-4.11bn £-1.73bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.50bn £2.29bn £2.17bn £2.05bn £1.94bn £1.82bn £1.70bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £16.83bn £17.47bn £17.71bn £17.91bn £17.96bn £18.18bn £18.21bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £10.82bn £11.23bn £11.55bn £11.82bn £12.12bn £12.43bn £12.87bn
Raise VAT standard rate by 2pp: change in vat £31.94bn £32.80bn £33.58bn £34.39bn £35.23bn £36.10bn £36.98bn
Raise additional rate by 3pp: change in income_tax £3.29bn £3.54bn £3.75bn £3.96bn £4.20bn £4.45bn £4.81bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £2.97bn £3.12bn £3.17bn £3.22bn £3.25bn £3.29bn £3.33bn
Raise the State Pension by 10%: change in state_pension £13.35bn £13.85bn £14.08bn £14.32bn £14.74bn £15.18bn £15.62bn

MaxGhenis and others added 3 commits October 29, 2026 00:40
The data checks now reduce each dataset to counts in helper functions and
assert only on those counts. Pytest's assertion rewriting printed the
DataFrame argument of an assertion that failed, and the non-negative income
test printed the smallest value: a single record's amount. The bound check
now also counts negative and non-finite miscellaneous income, so a NaN
there no longer passes, and a parametrised test covers each violation.

The frs.py docstring now calls odd-job income a stand-in for Chapter 8
income: the FRS records it outside the employment and self-employment
questions, but it does not say how HMRC would treat each job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An error inside a data test's reduction could still print records: pandas
quotes an unconvertible value in its message, and under -l the traceback
shows the DataFrame and arrays the reduction holds. counts_or_fail runs the
reduction and turns any error into a failure that names only the function
and the error's type, with no traceback, no chained exception and no
record-bearing locals, even under --full-trace -l. Both data tests in
test_income_not_otherwise_charged.py and the non-negative income test now
reduce through it; test_record_safe.py checks it, warnings raised as errors
included.

The test module's summary and the changelog now call odd-job income a proxy
for Chapter 8 income.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pytrace=False suppresses pytest's usual traceback, but --full-trace
overrides it; the docstring now says so, and that the frames it then shows
hold only the function, the dataset, the arguments and the error type's name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Status at 30e9cc5 (29 Oct, 05:3xZ):

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant