Skip to content

Autumn Budget 2026 measures in current law - #2719

Open
MaxGhenis wants to merge 32 commits into
mainfrom
ab26-autumn-budget-2026
Open

MaxGhenis wants to merge 32 commits into
mainfrom
ab26-autumn-budget-2026

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Ready for review. Don't merge yet: Budget week's merge rules and d2161 (no automatic agent merges in policyengine-uk until Max rules) both hold it.

This moves the Autumn Budget 2026 household measures from the dashboard repo's reforms (PolicyEngine/uk-autumn-budget-dashboard-2026#290) into current law. It is one PR so the merge queue runs once. It supersedes #2713, #2714, #2715 and #2718, none of which remains open.

Sources:

None of the measures is law yet; each parameter says so.

Measure Table 6.1 Commit Status
Trading allowance £3,000 from 6 April 2027 15 2d31a50 done
Savings and property rates +2pp from 6 April 2027 61, 62 e95275e done
Fuel duty: 5p cut to 1 July 2027 (60.59p), then RPI; LPG and natural gas too 3 8ee81b3, 064826e, 9521429, ab9d57b, ae88f0c, ce9b262 done
Electricity VAT 0% to 30 June 2027, NI from April 2027 2 66d0281 done
Household Energy Payment, £100, bands A–D, England 1 d4f803b, d43e015 done
Pension Tax Allowance 52 d6b3611, 7de3747, d436a27 done
Carer's Allowance 100% taper above the limit, within 2030-31 7 b5d2d77, 948d15d, 5bd68fd, 835a765, b1c4f95, d436a27, bffa9e8, 7279bfb, 8db87df, b428941, ab9d57b, ae88f0c, ce9b262, db33fab done
Older tests moved to the Budget rates n/a e5e8942 done
Review round 1 fixes n/a 805bf0e, 1386278 (and the commits above) done
Review round 2 fixes n/a 835a765 done
Review round 3 fixes n/a b1c4f95 done
Review round 4 fixes n/a d436a27 done
Main merged in; main's 2028 Pension Credit boundary test pinned with and without the allowance n/a 16497d7, f51c6dc done
Review round 5 fix n/a bffa9e8 done
Review round 6 fix n/a 7279bfb done
Review round 7 fixes n/a 8db87df done
Couple election under the taper (round 8 probe) n/a b428941 done
Review round 9 fixes; HM Treasury's 1 July 2027 natural gas rate; Budget paragraph citations n/a ab9d57b done
Review round 10 fixes n/a ae88f0c done
Review round 11 fixes: the couple election breaks a weekly tie by the award over the year; the fuel script checks every fuel before it writes n/a ce9b262 done
Review round 12 fixes (test comments) n/a db33fab done
OBR October 2026 EFO economic assumptions n/a #2717 (María), merged into main and into this branch at 9917bfa done

Trading allowance (item 15)

Paragraph 6.254 and costings p. 23 set the allowance at £3,000 from 6 April 2027. The parameter gets a new 2027-04-06: 3_000 value. trading_allowance_deduction already reads it, so Income Tax and Class 4 NI follow.

Known gap: the allowance also covers miscellaneous income (ITTOIA s. 783B), but the model applies it only to trading income. #290's review (issuecomment-6472453512) bounds the missing cost at about £71m in 2027-28.

Tests:

  • the £1,000 cases move to 2026;
  • new 2027-28 cases: full relief, the £3,001 cliff with unknown receipts, partial relief and expenses above £3,000;
  • the property tests now use £3,000.

Savings and property income rates (items 61, 62)

Paragraphs 6.246 and 6.247 set 24%, 44% and 49% from 6 April 2027. The property rates apply in England, Wales and Northern Ireland; the savings rates UK-wide. The existing formulas already do the rest:

  • Scottish taxpayers' property income stays on the Scottish rates (property_income_tax.formula_2027).
  • Finance cost relief reads rates.property.basic, so it becomes 24%, in line with costings p. 74.
  • The ISA cash-interest charge reads the savings basic rate (SI 2026/1018 reg. 22A(3)).

One consequence: under the model's reading of ITTOIA s. 274AA(5), Scottish landlords' relief also rises to 24%, while their property tax doesn't change.

Tests:

  • hard-coded 22/42/47% expectations, recomputed by hand at 24/44/49%;
  • new tests/policy/reforms/oct_2026_budget/savings_property_income_rates.yaml;
  • property tests in test_budget_2026_savings_property_rates_properties.py. Mutation check: with the higher property rate at 43%, invariant 1 fails.

The higher relief can also change the property allowance election. A Scottish landlord with £500 of rent and £435 of finance costs uses the £1,000 allowance at 22%, since the relief (£95.70) is worth less than the £100 of tax the allowance saves. At 24% the relief is £104.40, so the model drops the allowance: property income tax rises from £0 to £100 and income tax falls by £4.40. The model makes that choice only where it lowers the person's income tax (uses_property_allowance). The rate identities hold for people whose election doesn't change, and a worked test covers this case.

Fuel duty (item 3)

Paragraph 6.211 extends the 5p cut to 1 July 2027. Costings p. 13: "On 1 July 2027, fuel duty rates will increase by 5ppl and will be uprated in line with the Retail Prices Index (RPI). From 1 April 2028, fuel duty rates will be uprated annually in line with RPI." Other fuels get "a proportionate percentage cut (equivalent to 5ppl from the main fuel duty rate of 57.95 ppl)".

Changes:

  • petrol and diesel stay at 52.95p to 30 June 2027; SI 2026/164's January and March 2027 steps are gone;
  • on 1 July 2027, calculate_fuel_duty_rates.py uprates each full rate by RPI growth in the year to 2027 Q1 (4.5565%, economy Table 1.7). For petrol and diesel that is the OBR's 60.59p (October 2026 EFO ¶3.19: "from 52.95 pence per litre to 60.59 pence per litre"); the script refuses to write a different figure;
  • LPG and natural gas get the same uprating, at the rates HM Treasury publishes from 1 July 2027 (OOTLAR Annex A): 33.05p and 25.82p a kilogram. The uprating gives 25.83p for natural gas; the script writes HM Treasury's rates and refuses any more than a hundredth of a penny from the uprating;
  • all three then rise by the previous calendar year's RPI each 1 April from 2028, with RPI uprating metadata after 2031.

On #2717's October 2026 RPI forecast, now merged in, the April steps are 63.21p (2028), 65.13p, 67.07p and 68.61p (2031).

Day-weighted model-year rates (p/litre):

Model year Before (main, October 2026 EFO) After
2026-27 53.96 52.95
2027-28 60.07 58.83

Electricity VAT (item 2)

Paragraph 6.210 extends the zero rate "to 1 July 2027. This is expected to apply UK-wide from April 2027". The parameter changes:

  • Great Britain stays at 0% to 30 June 2027;
  • Northern Ireland is at 0% from 1 April to 30 June 2027 (paragraph 3.4: "Extended VAT relief is expected to apply in Northern Ireland from April 2027").

Day-weighted model years:

  • 2026-27: Great Britain 178 of 365 days at 5%, Northern Ireland 360 of 365;
  • 2027-28: 280 of 366 days at 5% in every nation.

The dashboard (#290, 5d18a5e2) weights 2027-28 differently. It uses April to June's share of a year's domestic electricity use (22.30%), where this PR uses the day share (86 of 366, 23.50%). For the dashboard's £1,040 electricity bill, the 2027-28 saving is £11.04 there and £11.64 here.

This PR doesn't change how the model projects electricity spending. uprate_energy moves it by headline CPI from the dataset's declared price basis (calendar 2024 for the managed Microcosm bundle) and holds it flat where a dataset declares none (Enhanced FRS, priced at April 2026 Ofgem rates). The Treasury costing (p. 12) grows "nominal consumer expenditure on electricity" instead, price and volume together. The OBR's Table 1.20 electricity series is a wholesale price in £/MWh, not a bill. Its nearest retail series, Table 1.19 "Utilities", covers more than electricity and is post-measures, so it already contains this VAT cut. On it, spending would be about 1.1% lower in 2026-27 and 1.4% lower in 2027-28 than on CPI: roughly £8m and £4m off the costing's £755m and £305m. A pre-measures retail electricity index would be a separate change.

Household Energy Payment (item 1)

Paragraph 6.24 and paragraph 3.5: £100 for households in council tax bands A to D in England, which local authorities pay from January 2027.

Changes:

  • new parameters gov.treasury.household_energy_payment.{amount, bands, countries} and variable household_energy_payment;
  • the payment counts in household_benefits, gov_spending and pre_budget_change_household_benefits, as the Energy Bills Rebate does;
  • it counts in HBAI income: DWP counted the 2022 £150 Council Tax Rebate and the Energy Bills Support Scheme as miscellaneous income (HBAI QMI FYE 2023). Round 1 of the review caught the earlier exclusion, which cited that rebate the wrong way round;
  • it has its own fiscal partition head and programme entry.

Not modelled:

  • the devolved governments' Barnett share;
  • the £100m local-authority fund;
  • liability: DESNZ pays the householder liable for council tax on their main home, most exempt households included. Survey data hold only main homes, but the model can't tell which households have a liable landlord, so it pays them. The variable and docs say so.

Fixture fallout: council_tax_band defaults to D, so 2026 England fixtures with no band now carry the £100. The PR updates seven tests' totals, each with a comment.

Pension Tax Allowance (item 52)

Sources:

The allowance is a non-refundable Step 6 reduction from 6 April 2027 to 5 April 2030:

  • Who: people over State Pension age, or reaching it within the tax year (by 5 April).
  • Full amount: 20% × (full new State Pension − Personal Allowance), rounded up to the pound. That is £94 in 2027-28.
  • Taper: £1 for every £3 of total income above the full new State Pension, so the allowance runs out at £13,318.98 (the threshold plus three times £94 is £13,318.973; the explainer's £13,319).
  • Threshold: the full annual value of the new State Pension, "the total income you are entitled to receive within the tax year" (explainer): 52 weeks at the weekly rate, read from gov.dwp.state_pension.new_state_pension.amount, so it follows any change to that rate, dated or undated. The model projects the April 2027 rate unrounded (241.30 × 1.039 = £250.711, from published inputs), so the threshold is £13,036.97, where the explainer gives £13,036.40, which is 52 × £250.70. Neither the explainer nor the Budget states the weekly rate, so the model doesn't enter £250.70; the gap closes when the uprating order sets the rate.
  • Scottish taxpayers: the model works it out at 20%, then caps it at their Step 5 tax (explainer FAQ).

Changes:

  • Parameters: gov.hmrc.income_tax.reliefs.pension_tax_allowance.{in_effect, rate, taper}. There is no threshold parameter: the formula reads the new State Pension rate (above). An earlier version kept the explainer's £13,036.40 uprated by the new State Pension amount, which divided by zero under a nil-rate reform (CI at 835a765); 7de3747 uprated it by the triple lock index instead, which round 4 showed cut it loose from rate reforms (a pensioner on £15,600 under a £300 rate paid £606).
  • Variable: a new pension_tax_allowance, last in income_tax_subtractions.
  • Step 6 cap: the tax the earlier reductions leave caps each one. A new helper, utils/income_tax_reductions.earlier_tax_reductions, gives that order. property_finance_cost_relief now uses the helper too, which avoids a dependency cycle.
  • Universal Credit: UC's deduction for tax on earnings (utils/uc_income_tax.py) takes the income_tax_subtractions entries off the tax on earnings. It handles finance cost relief separately, against the tax on property income first. So it picks up the allowance with no change of its own. This settles @PavelMakarchuk's point on Budget day: announced measures uk-autumn-budget-dashboard-2026#290 (issuecomment-6472987762). His mixed-age couple comes out at an allowance of £93.28, UC −£51.30 and net income +£41.97.
  • Fiscal partition: the partition records pension_tax_allowance as a component of income_tax.

Later years: the model recomputes the allowance each year as 20% × (threshold − Personal Allowance): £183 in 2028-29 and £250 in 2029-30 on the October 2026 forecast. Someone on exactly the full new State Pension and nothing else pays no Income Tax at any rate (a Hypothesis property over rates from £0 to £400 a week). Uprating the £94 instead would leave someone on exactly the full new State Pension owing about £85 in 2028-29, which breaks the guarantee in ¶3.19 and ¶6.182. ~/reviews/uk-hub/RULINGS.md logs the reading.

Conflict to watch: draft #2545 restructures Step 6. Whichever lands second moves pension_tax_allowance into the new structure.

Tests:

  • tests/policy/reforms/oct_2026_budget/pension_tax_allowance.yaml, 15 cases:
    • the explainer's five people on its inputs (Tom, Steph, Anne, Jonathan, Nadia; Nadia's income is all private pension, because the £166 the explainer quotes assumes no savings allowance). Jonathan gets £44.19, not the explainer's £44, because the threshold is 57p higher;
    • the end of the taper and one pound before it, on the model's threshold;
    • two Scottish cases;
    • under State Pension age;
    • reaching State Pension age on 5 April 2028 (qualifies) and on 6 April 2028 (doesn't);
    • 2026-27 and 2030-31, when there is no allowance;
    • 2028-29, which checks the recomputed threshold.
  • tests/test_pension_tax_allowance_properties.py. Mutation check: with a 20% taper in place of 1 in 3, the first property fails. The full new State Pension pays no Income Tax without a reform, with the rate at £300 for 2028-29 only (allowance £606), and at any undated rate from £0 to £400 a week; the dated and undated reform tests fail on both earlier threshold versions.
  • tests/test_pension_tax_allowance_universal_credit.py: Pavel's couple, and the same income as a private pension (UC unchanged).

Carer's Allowance taper (item 7)

Sources: paragraph 6.13 and costings p. 16. In England and Wales, the withdrawal of the allowance in full above the weekly earnings limit becomes a 100% taper on the earnings above it.

Start date: the costings say only "within the 2030-31 financial year, with a precise start date confirmed in due course". Until DWP confirms it, the model starts on 6 October 2030. applies is day-weighted (fiscal_year_blend), so 2030-31 carries 182 of 365 days. That is in line with Table 6.1's −£40m, then −£80m.

Changes:

  • Parameters: gov.dwp.carers_allowance.earnings_taper.{applies, rate, countries}.
  • Variable: a new carers_allowance_weekly_earnings_above_limit, using the existing pence rule. is_gainfully_employed_for_carers_allowance now reads it.
  • Entitlement: carers_allowance_pre_couple_limit pays rate − taper × excess, floored at zero, where the taper applies.
  • Downstream: carers_allowance_pre_overlap, and through it carers_allowance and UC unearned income (income_definitions/unearned.yaml), read the new amount.
  • Couples caring for the same person: only one of them has the allowance, and the law lets them elect which (SSCBA 1992 s.70(7ZA)). The model gave it by a fixed order (reported recipient, head, eldest; Limit same-person carer benefit awards within couples #2632), which cost nothing while every eligible partner had the same rate. The taper gives a partner over the limit a smaller award, and under the fixed order a head with a tapered award took the allowance from a partner with the full rate, so the taper left such couples worse off than the cliff edge. limit_carer_benefit_to_one_partner now gives the allowance to the partner with the larger award before overlap, and the fixed order breaks ties, in 2030-31 after the larger award over the year (logged in the UK hub's rulings under P4, the rule for elections that Autumn Budget 2026 measures in current law #2719 already applies to the property allowance). Before 2030-31 the model's own awards are equal, so nothing changes for them (round 9 compared 20,736 household-years from 2026 to 2029 on five carer benefits, and every value matched), though a supplied candidate award that differs decides the election in any year; on the Enhanced FRS 2024-25 no benefit unit has both partners caring 35 hours or more, so the change moves no aggregate in 2030-31 or 2031-32 either. It matters for households where both partners care for the same person.
  • 2030-31, the year the taper starts: the weeks before the taper (183 of 365) and the weeks under it (182) each get the couple restriction and the overlapping-benefit rule on their own weekly award, then count for their share of the year (utils/carers_allowance_taper.py, read by carers_allowance_pre_couple_limit, carers_allowance_pre_overlap and carers_allowance). Both rules work week by week:
    • a carer earning £250 a week with £40 a week of State Pension got £0 before round 1's fix; now £270.82 (182/365 × (rate − £46 − £40) × 52);
    • a couple caring for the same person, the head on £250 and the partner on £200, both with £40 of State Pension: before round 2's fix, the model withheld the partner's award for the weeks before the head becomes eligible; from round 2's fix until the election, the head got £270.82 for the weeks under the taper and the partner £1,471.59 for the weeks before it (on the October forecast), £1,742.41 in all; under the election the partner, with the full rate, has the award all year: £2,935.13 ((rate − £40) × 52), what the cliff edge gives;
    • a supplied carers_allowance_pre_overlap carries no dates, so it still meets the whole year's overlapping benefits (round 2 caught the earlier fix dropping the deduction there);
    • the parts of the year reach the payment as shares of the year: within the parts where a person's weekly award is positive it is the same amount, so carers_allowance_pre_overlap is carers_allowance_pre_couple_limit times the share of those parts the couple restriction keeps, and carers_allowance takes the overlapping benefits off for the share kept. A value supplied for either intermediate, or a reform that neutralizes one, therefore reaches the payment (round 3 caught the round 2 fix recomputing the award and bypassing both);
    • the shares describe an amount only where the model's own formulas calculate it from the parts of the year and, for every member of the benefit unit, it is the amount the parts give. An amount that an input supplies, or that a reform neutralizes or calculates with a formula of its own, carries no dates, even where it equals the model's, since a value can't show where it came from; nor does one that a reform changes while keeping the formula (with defined_for, say), since the formula can't show that. Such a carers_allowance_pre_couple_limit gets the whole-year couple restriction and the whole year's overlap, and such a carers_allowance_pre_overlap the whole year's overlap. Each stage asks two things of the stage before it (carries_parts_of_year in utils/carers_allowance_taper.py): whether the simulation calculates it with the model's formula (no input supplies it, no reform neutralizes it, and the formula's code is the model's, by calculated_by, now in utils/formula_origin.py), and whether, for every member of the benefit unit, it equals what the parts give, to half a penny and positive exactly where they give an award, since the couple restriction picks whoever has an award (calculated_by_model and matches_parts_of_year). The payment asks both of both stages, and reads carers_allowance_pre_couple_limit only where the model calculates carers_allowance_pre_overlap, so a supplied or reformed pre-overlap award needs nothing before it. Rounds 4 to 6 caught the earlier tests. On value alone, a reform giving the partner £1,000 paid £0, and a reform changing only the partner's award, or setting the model's own amount, took off half the head's State Pension (the model paid £200.55 too much). On formula alone, a reform that kept the formula but added defined_for: is_female left a female partner, whose male head has no award, with nothing in place of £4,542. Within half a penny alone, a mask that took away a male head's fraction of a penny still picked the head for the weeks under the taper, and the model paid the partner £2,301.24 too little (round 7). The sign check stays; under the election a fraction of a penny never outranks a full award, so that case now pays the partner in full with or without a mask, and a direct test of matches_parts_of_year covers the check, since no payment shows it. A reform that changes only a stage's label keeps the parts of the year. The formula test covers the whole variable, so a reform that wraps a stage's formula to change one person's amount moves every amount to the whole-year treatment; round 6 accepts this as a deliberate limitation, and the assumptions page states it;
    • less than half a penny for the year is nil. Where an overlapping benefit equals the weekly award, the float32 annual amounts left about a thousandth of a pound, which made receives_carers_allowance true (round 3). The model pays a penny left over: float32 stores £5,000.01 as £5,000.0098 (round 4 caught a £0.01 cutoff dropping it).
  • Annual flags: under the election, one partner has the award for the whole of 2030-31, at any taper rate of zero or more, so annual flags such as is_entitled_to_carer_benefit name one carer. The Pension Credit carer addition for the couple above is £2,793.27, the same as for a couple both within the limit. (Before the election, both partners of a couple straddling the limit counted as entitled for the year, and the addition came to £5,586.55.)
  • Not modelled: take-up among carers newly entitled above the limit. That comes from the data's would_claim_carers_allowance; there is no new draw.

Dependencies:

Tests: tests/test_carers_allowance_earnings_taper.py.

  • Examples: at the limit; £10 over the limit, in England and in Wales; a full weekly rate over the limit; Scotland and Northern Ireland; 2029-30; the 2030-31 share.
  • Properties: the allowance equals the rate less earnings above the limit; the taper never pays less than the cliff edge; weekly earnings plus the allowance never fall as earnings rise; the taper leaves Scotland and Northern Ireland as they were; in 2030-31 the final allowance is the weekly overlap rule over the paid weeks.
  • Overlap examples: the £250 / £40 case above, the same in 2031-32, and a carer below the limit in 2030-31.
  • Couples and supplied awards: the couple above (the partner under the limit has the award all year, and only the partner counts as entitled), couples both over the limit (the one with the larger tapered award, head or partner), a couple both under the limit (one award all year), and supplied pre-overlap awards in England and Northern Ireland (also in tests/policy/reforms/oct_2026_budget/carers_allowance_earnings_taper.yaml).
  • Election properties: for Hypothesis-drawn couples in 2030-31 and 2031-32, the taper never leaves a couple with less than the cliff edge, at most one partner has an award before overlap in the year, and in 2031-32 that award is the larger of the two candidates. The 2030-31 couples property now expects the larger award, then the larger award over the year, then the head's; the reform-award property, whose awards carry no parts of the year, the larger award, then the head's. A property at taper rates of 0 and 0.0001 checks that one partner has the award for 2030-31, and three examples (a zero taper rate, a supplied is_gainfully_employed_for_carers_allowance, an excess of a millionth of a pound) check that the partner under the limit keeps it and the couple get one Pension Credit carer addition; all four fail without round 11's tie-break. On 8db87df's rule, 9 tests fail: both new couple examples (one case of the over-the-limit pair), the fraction-of-a-penny case in both years, the pre-overlap mask in both years, and all three properties.
  • Intermediates and residue: the model pays a supplied carers_allowance_pre_couple_limit (£0 and £1,000), and neutralizing either intermediate pays nothing, in 2030-31 and 2031-32; a Hypothesis property that an overlapping benefit equal to the award leaves no payment or receipt; and the two 2030-31 properties also check anything paid is at least half a penny. The 10 new tests fail on 835a765. Round 4's: reforms replacing carers_allowance_pre_couple_limit (£1,000 to the partner) and carers_allowance_pre_overlap (£1,000 less £400 of State Pension for a head over the limit), and a penny left after overlap on £1,000.01 and £5,000.01; the 2030-31 replacement cases and the £5,000.01 cases fail on 7de3747. Round 5's: reforms that set the partner's award before the couple limit to nil, scale it by 1.0001 or add a penny, leaving the head's as the model's (the head gets the whole-year restriction and £400 off: the model's award less £400); a reform setting carers_allowance_pre_overlap to the model's own amounts (the whole year's £400 off each); a reform that relabels both stages, which keeps the model's parts-of-year payment; and a Hypothesis property that 2030-31 pays any award a reform sets before the couple limit as 2031-32 does, and as the whole-year rule gives (the partner with the larger award, the head on a tie, less the whole year's State Pension). The four 2030-31 partner and model's-own cases fail on f51c6dc; removing the payment's check of carers_allowance_pre_couple_limit fails the three partner cases and the property. Round 6's: a reform adding defined_for: is_female to carers_allowance_pre_couple_limit, for a couple with a male head and a female partner, leaves the partner's award to the overlap rule and pays it less £400 of State Pension; it fails on bffa9e8, and fails again without the value check, while removing the formula check fails the model's-own case. The relabelling test now subclasses both stages with a new label and keeps their formulas. Round 7's: a head £0.0001 a week inside the taper; a reform masking that fraction of a penny at either stage; and a reform deriving carers_allowance_pre_couple_limit from the payment, with carers_allowance_pre_overlap supplied, which pays £600 with no cycle. On 9917bfa the two 2030-31 mask cases and the 2030-31 cycle case fail; at 8db87df, removing the positive-award check fails both mask cases, and removing the payment's early origin check fails the cycle case. Under the election, the fraction-of-a-penny cases expect the partner's whole award, less £400, in both years, with or without the mask.

OBR October 2026 EFO

María's #2717 moves the economic assumptions to the October EFO, so this PR doesn't. An independent import of the same tables agreed with #2717 on 122 changed values to 0.005pp; the rest differ only where #2717 makes a deliberate choice (2025 revised, smoothed 2032+ joins, OBR private rents, road fuel re-derived). GitHub records #2717's merge at 00:05Z on 29 October (1688f98), and 9917bfa merges main into this branch. The merge conflicted in four files:

  • the fuel duty schedule and its two tests: the merge keeps this PR's 1 July 2027 schedule, reruns calculate_fuel_duty_rates.py --update on the October RPI forecast (petrol and diesel 63.21p, 65.13p, 67.07p and 68.61p each April from 2028, in place of 62.41p to 67.54p; LPG and natural gas likewise), and recomputes the hand-worked rates in test_fuel_duty_schedule.py, petrol_and_diesel_schedule.yaml and road_fuel_gases.yaml. Update the economic assumptions to the October 2026 EFO #2717 derives road fuel volumes at the same 60.59p path;
  • main's Pension Credit boundary test: main re-based it on the October EFO (threshold £223.41, Housing Benefit allowance £274.66, a £0.87 step where guarantee credit ends). With the Pension Tax Allowance, the test's £5 grid of private pension now finds guarantee credit running out between £13,280 and £13,285, rather than between £13,460 and £13,465, and household net income gains £1.98 across that £5; the test pins both.

The October forecast also moves the Pension Tax Allowance after 2027-28 (£183 in 2028-29 and £250 in 2029-30, from £159 and £226): the threshold follows the new State Pension, which rises 3.4% in April 2028 on the October forecast, against 2.5% before. The 2028-29 YAML case moves with it: £300 over the £13,480.26 threshold leaves £83 of the £183.

Invariants

  • Trading allowance: relief is between 0 and min(allowance, profit); the allowance never stacks on actual deductions; Income Tax doesn't fall as profit rises.
  • Savings and property: the four identities in the section above.
  • Fuel duty:
    • each model-year rate equals the day-by-day average of the dated schedule (a differential test, 2015 to 2040);
    • it lies between the rates in force that year;
    • rates never fall after 2022;
    • the written steps match the RPI series they cite.
  • Electricity VAT: model-year rates equal the hand-counted day shares; with no reform, vat_change is zero.
  • Household Energy Payment: 0 or £100; zero outside England, outside bands A to D and outside 2026-27; it adds one for one to household benefits, government spending and hbai_household_net_income (tests/test_household_energy_payment_income_measures.py).
  • Pension Tax Allowance:
    • the threshold is 52 × the new State Pension weekly rate, so someone on the full new State Pension and nothing else pays no Income Tax at any rate;
    • 0 ≤ allowance ≤ max(0, full − excess / 3), so it is zero from three full allowances above the threshold;
    • nothing for anyone reaching State Pension age after the year;
    • Income Tax falls by exactly the allowance against the same law with it switched off, and never goes below zero;
    • each extra pound of income takes at most a third of a pound off the allowance, so there is no cliff edge.
  • Carer's Allowance taper:
    • the weekly award is max(0, rate − (earnings − limit)) above the limit, in England and Wales from 2031-32;
    • it is never below the cliff-edge award;
    • earnings plus the allowance never fall;
    • the taper leaves Scotland and Northern Ireland as they were;
    • in 2030-31, the final allowance is the sum over the two parts of the year of share × 52 × max(0, weekly award − weekly overlapping benefits), where the couple restriction keeps the larger award in that part, then the larger award over the year, then the head's (Hypothesis tests for single carers and couples);
    • for a couple caring for the same person, the taper never pays less than the cliff edge, one partner has the award in a year at any taper rate of zero or more, and in 2031-32 it is the larger candidate award;
    • a supplied or neutralized intermediate award is what reaches the payment;
    • the payment is 0 or at least half a penny, an overlapping benefit equal to the award leaves 0, not received, and the model pays a penny left over;
    • an amount that an input supplies, or that a reform neutralizes, calculates with a formula of its own or otherwise changes, at either intermediate reaches the payment with the whole year's treatment for the remaining stages, even where it equals the model's; 2030-31 pays such an award as 2031-32 does (differential property); a reform that changes only a label keeps the parts of the year.
  • Finance cost relief: never falls; rises by at most 2% of the costs relieved wherever the Budget 2025 relief had no cap and the property allowance election stays the same. Where the tax left capped it, the rise can be larger (worked test: £86 to £240); where the election changes, see the savings and property section (worked test: £4.40 less income tax). A Hypothesis example on all four rate properties pins review round 2's counterexample.
  • LPG and natural gas: the 1 July 2027 rate is HM Treasury's, within 0.01p of the full rate × 1.045565 rounded to 0.01p, and each April step applies the previous calendar year's RPI (test_road_fuel_gases_get_the_same_rpi_uprating).

Review

Round 1 (GPT-6.1 Sol, at e5e8942) requested changes on nine findings. Here is where each stands:

# Finding Status
1 Carer's Allowance: full-year overlap taken off the part-year taper amount fixed (5bd68fd)
2 Household Energy Payment ignores council-tax liability documented as a data limitation (d43e015)
3 LPG and natural gas miss the RPI uprating fixed (9521429)
4 Household Energy Payment left out of HBAI on a misread precedent fixed (d43e015)
5 Trading allowance doesn't reach miscellaneous income pre-existing; separate PR
6 Finance cost relief bound claimed for every input fixed (805bf0e)
7 float32 rounding can drop a penny of weekly earnings pre-existing on main (is_gainfully_employed_for_carers_allowance); #2543 (draft) fixes it, storing the limit in pence
8 2030 YAML case still expected the cliff edge fixed (948d15d)
9 Pending-law wording missing fixed (1386278)

Round 2 (GPT-6.1 Sol, at 1386278) confirmed findings 1, 3, 4, 8 and 9 resolved and 2, 5 and 7 deliberately deferred, and requested changes on four more:

# Finding Status
1 Couple restriction applied to the whole of 2030-31, suppressing a partner below the limit before the taper starts fixed (835a765)
2 The overlap fix dropped the deduction for a supplied pre-overlap award fixed (835a765)
3 Round 1 finding 6's bound still fails when the property allowance election changes fixed (835a765)
4 Excise docs still described flat gas rates and the old July uprating fixed (835a765)

Round 3 (GPT-6.1 Sol, at 835a765) confirmed all four round 2 findings resolved and requested changes on three more:

# Finding Status
1 The 2030-31 calculation recomputed the award, so a supplied or neutralized carers_allowance_pre_couple_limit or carers_allowance_pre_overlap no longer reached the payment fixed (b1c4f95)
2 Float32 residue where an overlapping benefit equals the award left a fraction of a penny and made receives_carers_allowance true fixed (b1c4f95)
3 A fixture comment gave household income without pay as £5,098.80, not £5,198.80 with the Household Energy Payment fixed (b1c4f95)

It also measured the annual-flag limitation; the Carer's Allowance section now gives its effects as measured.

CI at 835a765 also failed two of main's State Pension tests on the merge ref: 835a765 uprated the Pension Tax Allowance threshold by the new State Pension amount, so a reform setting that amount to nil divided by zero. 7de3747 uprated it by the triple lock index instead.

CI at 7de3747 failed one of main's tests on the merge ref: test_guarantee_credit_boundary_matches_main froze a £1.01 step in household net income where guarantee credit ends in 2028, for an 85-year-old on private pension. The Pension Tax Allowance takes them out of Income Tax at that point, and Pension Credit counts income net of tax (pension_credit_income.py), so guarantee credit ends at £13,165 of private pension rather than £13,315 and the step is £1.61. With the allowance off it is main's £1.01. f51c6dc merges main and pins both cases.

Round 4 (GPT-6.1 Sol, at 7de3747) confirmed round 3's findings 2 and 3 resolved and finding 1 partly, and requested changes on three:

# Finding Status
1 A reform replacing carers_allowance_pre_couple_limit with positive amounts still lost the award in 2030-31: the shares rebuilt eligibility from the original rules fixed (d436a27)
2 7de3747's threshold no longer followed dated new State Pension rate reforms: £606 of tax on the full new State Pension at £300 a week fixed (d436a27): the threshold is 52 × the weekly rate
3 The £0.01 cutoff dropped a real penny (£5,000.01 stored as £5,000.0098) fixed (d436a27): the cutoff is half a penny

It also flagged two wording points: the assumptions page implied the couple restriction applies to a supplied carers_allowance_pre_overlap, and this body still named the old uprater. The round 4 fixes answer both.

Round 5 (GPT-6.1 Sol, at f51c6dc) confirmed round 4's findings 2 and 3 resolved, checked the £1.61 Pension Credit step (£5 less £2 of Pension Credit, £1.06 of Housing Benefit and £0.33 of Council Tax Reduction; £1.01 with the allowance off), found no deleted-parameter readers, and requested changes on one:

# Finding Status
1 Telling the model's amounts from a reform's by value fails: a reform changing only the partner's award before the couple limit, or setting carers_allowance_pre_overlap to the model's own amounts, took off only the taper share of the head's State Pension (the model paid £200.55 too much) fixed (bffa9e8): each stage checks the earlier stage's formula, not its value, and the payment checks both

It also noted that #2726 leaves round 1's finding 7 to #2543; the round 1 table now says so. And £13,318.97 leaves a fraction of a penny (the end is £13,318.973), so the taper line now says £13,318.98.

Round 6 (GPT-6.1 Sol, at bffa9e8) confirmed round 5's finding resolved (the four 2030-31 cases pass, and fail on the round 5 formulas), matched baseline Carer's Allowance to round 5 exactly on 792 household-years, found every variable registered once after the calculated_by move, and requested changes on one:

# Finding Status
1 A reform can keep the model's formula and add defined_for, which changes the amount but not the formula, so the formula test alone trusted the parts of the year: a female partner whose male head has no award lost their whole £4,942 before overlap fixed (7279bfb): a stage carries the parts of the year only if the model's formula calculates it and, for every member of the benefit unit, it equals what the parts give

It also asked for four wording fixes: "the remaining stages" in the changelog and invariants, "the model paid £200.55 too much", a passive in formula_origin.py, and the stale round line below. 7279bfb fixes all four. It accepted, as a deliberate limitation, that a reform wrapping a stage's formula moves untouched people to the whole-year treatment too; the assumptions page now says so.

9917bfa then merges main, which now has #2717's October 2026 EFO (see that section).

Round 7 (GPT-6.1 Sol, at 9917bfa) confirmed round 6's reproducer and four wording notes resolved, matched baseline Carer's Allowance to bffa9e8 on 792 household-years on the same economic assumptions, checked the merge, and requested changes on two:

# Finding Status
1 Half a penny treats a fraction of a penny as nil, but the couple restriction picks whoever has an award: a reform masking a male head's £0.0026 kept the head picked for the weeks under the taper, and the model paid the partner £2,301.24 too little fixed (8db87df): an amount matches the parts of the year only where it is positive exactly where they give an award
2 The payment read carers_allowance_pre_couple_limit before checking carers_allowance_pre_overlap, so a reform deriving the earlier stage from the payment, which a supplied pre-overlap award had kept calculable, raised a cycle fixed (8db87df): the payment reads the earlier stage only where the model calculates the pre-overlap award
3 This body's Carer's Allowance examples kept pre-merge figures fixed: £270.82, £1,471.59, and £5,586.55 against £2,793.27 (the October forecast raises the 2030-31 rate)

It also listed passives in this PR's text, written before round 6: 8db87df rewrites them in the helper, the changelog, the Household Energy Payment docs and variable, the parameter descriptions and comments, and this body. And it noted that axiom: queued needs a rulespec-uk issue.

A second GPT-6.1 Sol review checked only the merge and approved it: all 59 main-only files match main, the fuel generator reproduces all three forecast blocks, and the £1.98 decomposes into £3 less Guarantee Credit, £1 more Savings Credit, £0.78 less Housing Benefit and £0.24 less Council Tax Reduction. It asked for four wording fixes, all in 8db87df: the boundary is a £5 grid point, not an exact cutoff; road_fuel_gases.yaml's header kept March rates; the road fuel volume comment in yoy_growth.yaml called the Budget 2026 schedule future law; and the merge date (the merge commit carries 22:22Z on 28 October, GitHub's merge record 00:05Z on 29 October).

Round 8 (at 8db87df) approved provisionally, but its lane had no shell, so it read the code and ran nothing. Its read-through found round 7's findings resolved and raised P3s: a 2031-32 mask case that couldn't fail, a wrong count of round 7's failing cases in this body, passives in the test module, the payment's documentation, the Household Energy Payment docs and this body, and two consistency notes (the HALF_PENNY comment, and the assumptions page's paragraph on maximising). b428941 fixes them all, and I ran the checks it couldn't:

  • round 7's reproducers at 8db87df: the masked couple pays the partner £4,615.13 (£2,114.44 when the mask is at the pre-overlap stage), and the cycle case pays £600 in 2030-31 and 2031-32;
  • the probe it suggested, a head whose weekly earnings exceed the limit by exactly the rate: the head's award is exactly £0, so no residue arises.

The same probe found a larger problem. With the head's excess at the rate rounded to the penny (£96.44), the head keeps £0.0048 a week, and the old order picked the head: the couple got £2,313.89 in 2030-31 and nothing in 2031-32, where the partner alone would get £4,615.13 and £4,715.42. That led to the couple election above (b428941).

Round 9 (at b428941) had a shell and approved. It reran the taper module (63 passed; on 8db87df's rule 9 fail and 3 pass, the 9 that the test list above names), compared 20,736 household-years from 2026 to 2029 under both rules on Carer's Allowance, Carer Support Payment, the carer premium, the UC carer element and the Pension Credit carer addition (all 145,152 values matched), and reproduced the £1,742.41 couple against £2,935.13 and the Pension Credit addition of £5,586.55 against £2,793.27. It raised four P3s, which ab9d57b fixes:

  • one partner has the award for the year where the model reads earnings itself: it reads them in whole pence against a limit in whole pence (£204 in every year to 2035), so a tapered award falls about a penny short of the full rate. An input that supplies the earnings above the limit bypasses that reader; round 9 supplied a weekly excess of £0.000001, which leaves the tapered award within float32 rounding of the full rate, and both partners came out entitled, as under the old rule. A carers_allowance_pre_couple_limit that an input supplies carries no dates, so the restriction keeps one recipient for the whole year (round 10 checked both). The assumptions page, the pre-overlap documentation and the changelog now say so (round 10 asked for this boundary in place of ab9d57b's "awards the model calculates"; round 11 found it still incomplete, and the tie-break below replaces it);
  • nothing changes before 2030-31 only for the model's own awards: a supplied candidate award that differs decides the election in any year, Carer Support Payment included. The helper, the assumptions page and this body now say so;
  • under the election, the fraction-of-a-penny and mask cases pass without the sign check in matches_parts_of_year. A direct test of the function now fails without the check, while the six payment cases still pass;
  • passives in the test module ("allowance paid"), on the assumptions page ("if chosen") and here ("not neutralized"), and this body's head-first account of the reform-award oracle.

Round 9 also showed the cost of comparing awards before overlap, which the assumptions page states. Take a couple on £250 and £200 a week where only the partner has £100 a week of State Pension. The election picks the partner, whose pension takes the whole 2030-31 payment, where the head would get £1,307.97 (I reproduced both figures). An election on the payment after overlap would pick the head, but it would also change #2632's convention before 2030-31, where a head whose State Pension exceeds the rate keeps the entitlement unpaid today, so it goes to a follow-up. On the Enhanced FRS no couple has both partners caring 35 hours or more, so neither rule moves an aggregate.

ab9d57b also takes two notes from the rulespec-uk parity issues:

  • natural gas fuel duty from 1 July 2027 is HM Treasury's published 25.82p a kilogram (OOTLAR Annex A), a hundredth of a penny below the uprating's 25.83p. calculate_fuel_duty_rates.py now writes the published rates for all three fuels, and stops if one is more than a hundredth of a penny from the uprating; the natural gas April steps follow (26.94p, 27.76p, 28.59p and 29.24p);
  • the Northern Ireland electricity VAT and Household Energy Payment parameters cite Budget paragraphs 3.4 and 3.5, which hold the text, in place of a "section 4.3".

Round 10 (executed, at ab9d57b) approved. It ran 139 Python tests, mutated the sign check out (only the new direct test failed), checked 160 household-years across four regions, Carer's Allowance and Carer Support Payment from 2026 to 2035 and 150,003 earnings amounts a year from 2030 to 2035 without a selection collision (the closest tapered award sits 1,310 float32 steps below the full rate), matched the three July 2027 rates to Annex A and all 15 written steps to the script, and confirmed paragraph 3.4 on PDF page 49 and paragraph 3.5 from page 49 to page 50. It raised three P3s, which ae88f0c fixes:

  • the qualification belongs on the earnings reader, not on "awards the model calculates": an input that supplies the earnings above the limit leaves both stages the model's own and can still tie the awards (round 10 got pre-overlap awards of £2,500.69 and £2,514.44 and two entitlement flags), while a supplied carers_allowance_pre_couple_limit gets the whole-year restriction and one recipient;
  • the fuel script's refresh instructions now name PUBLISHED_RATES, and its petrol and diesel check tests the OBR's uprating and HM Treasury's rate separately, so each error names the constant at fault (round 10 got an error blaming RPI growth for a published rate);
  • passives in the generator and its notes, the excise docs, the fuel test, this body and the rulings.

Round 11 (at ae88f0c) ran twice, as an in-session Opus review and as GPT-6.1 Sol on Subfleet, and both requested changes on the same finding. The model's own earnings reader keeps a tapered award about a penny below the full rate, but a reform setting the taper rate to zero gave a head over the limit the full rate under the taper. The awards then tied, the tie order picked the head for the taper weeks and the partner for the weeks before, both partners counted as entitled, and the Pension Credit carer addition doubled (£5,586.55 against £2,793.27). On Sol's grid of 2,374 couples, 2,273 split at a taper rate of zero, 381 at 0.000001, 3 at 0.0001, 1 at 0.0003 and none from 0.001. Setting is_gainfully_employed_for_carers_allowance by input or reform, or replacing the formula for the earnings above the limit, did the same. ce9b262 fixes it as both reviews proposed: where the two partners' awards for a part of the year are equal, the couple elect the one with the larger award over the year, then #2632's order. A partner below the limit then keeps the award all year at any taper rate of zero or more. Sol ran the same fix in memory and found no split couple at eight taper rates from 0 to 2, with the 64 taper tests and 21 other carer property tests passing. At the Budget's taper rate, with the model's own earnings, partners on either side of the limit never tie (round 10's closest tapered award sat 1,310 float32 steps below the full rate), and where partners on the same side have the same positive award for a part of the year, their awards over the year tie as well, so the tie-break changes nothing there. ce9b262 also:

  • names the stage in "a supplied award keeps one recipient": a carers_allowance_pre_couple_limit that an input supplies, since the restriction comes before carers_allowance_pre_overlap, and the model takes a value that an input supplies there as it stands;
  • drops the assumptions page's float32 account of the boundary, which the tie-break makes moot (round 11 also corrected it: float32 keeps the excess, and the tapered award rounds to the full rate);
  • makes the fuel script check all three fuels before it writes any file (with an RPI change and a stale LPG rate, the old loop rewrote petrol and diesel and then stopped), says what to do when HM Treasury's rates no longer match a new forecast, and states that petrol and diesel's published rate must equal both the uprating and CUT_END_RATE;
  • fixes reduced passives in the excise docs, the fuel duty comments, the changelog and this body, this body's page reference for paragraph 3.5, and the rulings entry's account of the routes.

Round 12 (GPT-6.1 Sol, executed, at ce9b262) approved. It reran both round 11 reports' route tables: every route that gave the head the full rate under the taper now keeps one recipient, a carers_allowance_pre_couple_limit that an input supplies or a reform changes keeps the whole-year selection, and a carers_allowance_pre_overlap that an input supplies or a reform changes still stands as the input or reform gives it, by design. It found no split couple on Sol's 2,374-couple grid at eight taper rates from 0 to 2, nor in either 3,195-couple float32 sweep, and 48 further route and rate combinations passed. At the Budget's taper rate, Carer's Allowance, Carer Support Payment, the carer premium, the UC carer element and the Pension Credit carer addition matched ae88f0c exactly across 34,560 household-years (2026 to 2035, four nations). The taper module passed (68); on ae88f0c's rule exactly the four new tests fail. The fuel script passed its 75 tests, regenerated all three files byte for byte, and left all three unchanged when a bad LPG or natural gas rate followed a consistent RPI refresh. It judged the annual award before the reported recipient defensible: a reported head £50 over the limit at a zero taper rate now leaves the partner the year and one £2,793.27 addition, where the old rule split it and paid £5,586.55. A negative taper rate can still split the year (at −1, £3,797.13 and £2,514.44, two entitlement flags); the text claims only rates of zero or more. Its three P3s:

  • this body's claim that same-side partners have equal awards over the year holds only where their positive weekly awards tie (£214 and £224 a week give £2,241.41 and £1,982.12); the body now says so;
  • two test comments said float32 loses a millionth of a pound; float32 keeps the excess, and the tapered award rounds to the full rate. db33fab rewords both (comments only);
  • two reduced passives in this body; the body now uses the active voice.

Round 13 (GPT-6.1 Sol, executed, at db33fab) approved. It confirmed that the delta changes comments only (the syntax trees and the non-comment tokens match), ran both comments' claims (at a taper rate of 0.0001, £204.01 a week gives the full float32 rate of £96.4448; float32 keeps an excess of 1e-6 as 9.999999974752427e-07, and the award stays the full rate), matched this body's round 12 numbers to its report, and passed the taper module (68). Its two P3s touch only this body: a "positive" missing from the same-side tie, and four reduced passives. The body now answers both.

Differences from the dashboard

The dashboard (#290) carries its own copies of these measures. They differ from this PR in:

  • the 2030-31 Carer's Allowance overlap (finding 1 applies there too);
  • the Household Energy Payment in HBAI;
  • the PTA's State Pension age test (the dashboard's is_SP_age asks whether a person reaches it by 6 October; this PR and the explainer use the tax year);
  • LPG and natural gas, which the dashboard doesn't change;
  • the electricity VAT April to June weighting (above).

A list with effects goes to #290 separately.

Impact

CI's aggregate impact report at db33fab (run, comment) compares main (2d437eb) with the merge of this PR into main, on the Enhanced FRS 2024-25 (policyengine-uk-data 1.58.1), for 2025-26 to 2031-32. Every figure matches the run at 8db87df, so rounds 11 to 13 change no result at the Budget's taper rate. No check breaks. One check, sign:vat (76 records with negative VAT), fails on main too. The report flags 134 moves for review; a flag doesn't fail the job. 2025-26 doesn't change.

Change from main:

2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Income tax 0 +£1.82bn +£1.83bn +£1.86bn +£2.19bn +£2.29bn
Fuel duties −£458.8m −£545.6m +£250.4m +£248.3m +£242.1m +£233.4m
VAT, excluding private school fees −£19.0m −£326.9m 0 0 0 0
Household Energy Payment +£2.11bn 0 0 0 0 0
Carer's Allowance 0 0 0 0 +£20.0m +£36.8m
Universal Credit 0 −£0.7m −£0.8m −£2.0m −£21.5m −£36.6m
Pension Credit 0 −£10.8m −£27.7m −£43.8m under £0.1m under £0.1m
Housing Benefit 0 −£15.9m −£18.0m −£20.2m under £0.1m under £0.1m
Tax-Free Childcare 0 0 0 +£19.9m +£20.3m +£20.5m
Government balance −£2.58bn +£0.98bn +£2.13bn +£2.15bn +£2.41bn +£2.50bn
  • Income tax combines the savings and property rates, the trading allowance, the Pension Tax Allowance and, from 2030-31, the extra Carer's Allowance, which counts as taxable income. Its step up in 2030-31 comes in the first year after the Pension Tax Allowance ends (5 April 2030).
  • Fuel duties, VAT, the Household Energy Payment: each moves with one measure. The payment reaches 21.07 million households in 2026-27. The report's one new warning, inert:household_energy_payment, concerns the new payment, which pays only in 2026-27. It lists 2025-26, 2027-28 and 2028-29 as zero for every unit.
  • Carer's Allowance: 15.1k more claimants from 2030-31, under the taper. On its own, with everything else in this PR in place, the taper raises Carer's Allowance by £20.0m in 2030-31 and £36.8m in 2031-32. Universal Credit counts Carer's Allowance as unearned income and falls by £19.4m and £36.0m, and Income Tax rises by £4.0m and £7.4m, so the taper improves the government balance by £3.4m and £6.6m. Table 6.1 instead shows a net cost of £40m and £80m. That costing allows for Universal Credit interactions and for carers who earn more or enter work, and it counts take-up among newly eligible carers who earn above the limit (costings p. 16). The model draws no new take-up for them (taper section above).
  • Pension Credit, Housing Benefit and Council Tax Reduction fall only in 2027-28 to 2029-30, the years the Pension Tax Allowance applies.
  • Tax-Free Childcare (+£19.9m to +£20.5m a year from 2029-30) and the Universal Credit caseload (−6.0k from 2029-30) come from the trading allowance in 2029-30, the year this check covers: on this branch, setting the allowance back to £1,000 removes both moves exactly. Two survey records produce them. In each, the £3,000 allowance covers a parent's small self-employment income in full and cuts their Income Tax. Universal Credit counts earnings after Income Tax, so the family's small award stops, and with no Universal Credit the family qualifies for Tax-Free Childcare (disqualifying_benefits). Both parents' adjusted net income stays far below the £100,000 limit either way. On main the family keeps the small award and gets no Tax-Free Childcare worth more: A small Universal Credit award ends Tax-Free Childcare worth more, so removing the two-child limit leaves some families worse off #2689 already reports that limitation, which predates this PR.

Distribution, with each household in its decile on main (mean change per household):

Decile 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
1 +£77 +£13 −£1 +£3 −£10 −£10
2 +£89 +£21 −£7 −£3 −£11 −£11
3 +£85 +£12 −£3 +£2 −£7 −£7
4 +£89 +£11 −£13 −£11 −£8 −£7
5 +£93 +£23 −£10 −£9 −£15 −£15
6 +£88 +£1 −£9 −£7 −£16 −£16
7 +£86 +£4 −£24 −£25 −£28 −£29
8 +£80 −£29 −£60 −£56 −£59 −£61
9 +£74 −£83 −£89 −£94 −£102 −£111
10 +£66 −£376 −£452 −£472 −£488 −£499
All +£82 −£42 −£68 −£69 −£77 −£80

In 2026-27, 84.1% of people gain more than £1 and 0.0% lose more than £1; from 2028-29, about 57% lose more than £1. The Gini coefficient (equivalised HBAI income before housing costs) falls by 0.0005 to 0.0006 in every year from 2026-27. The report's flags on deciles 9 and 10 (−£2,046 and +£2,521 in 2027-28) come from its other decile table, which ranks households on each side separately, so a household that crosses a decile boundary moves both deciles' means. On main's deciles the two lose £83 and £376.

Poverty:

  • 2026-27: relative poverty before housing costs falls by 247.9k people, 80.8k of them children and 76.3k pensioners; absolute poverty before housing costs falls by 58.6k.
  • Later years: absolute poverty, before and after housing costs, moves by under 10k people a year.
  • Relative poverty before housing costs rises by 52.7k in 2029-30 and falls by 59.1k in 2031-32 (31.8k and 31.9k children). Moves in the poverty line drive most of both swings. Running main (2d437eb) and this branch on the same data reproduces both figures. The measures raise the line by £22.65 in 2029-30 and lower it by £23.43 in 2031-32. In 2031-32 every household that crosses it has the same income on both sides. In 2029-30, households with unchanged incomes account for +59.0k, and households whose incomes change for −6.3k. One survey household with a large weight, close to the line, carries most of each move.

Checks

  • Trading allowance, savings and property, fuel duty, electricity VAT, Household Energy Payment: run locally per measure (YAML and Python tests listed in the closed PRs)
  • Pension Tax Allowance, Carer's Allowance taper: YAML suites for income tax, UC, benefit cap, Pension Credit, Treasury and the Budget reforms (1,547 passed), plus the Python files listed
  • CI at d4f803b failed in six older test files that pinned pre-Budget values: the 22% property and savings rates (property rate reforms, finance cost relief accounting, the savings starting rate path, the ISA cash interest charge), the £1,000 trading allowance in pension relief, and household_benefits without the Household Energy Payment. e5e8942 moves them to the Budget values; the six files pass locally (137 tests)
  • Review round 1 fixes: Carer's Allowance taper (16 passed), savings and property properties (5), fuel duty and excise (84 Python, 18 YAML), HBAI and Household Energy Payment lists (39 Python), DWP and Treasury YAML (813)
  • EFO update: Update the economic assumptions to the October 2026 EFO #2717, merged into main on 29 October (1688f98) and into this branch at 9917bfa
  • CI green: at db33fab (below)
  • CI at 1386278: the YAML job failed 8 cases in 4 files (uc_statutory_pay, warm_home_discount, hbai_property_income, trading_loss_household_income). Each pinned 2026 HBAI income for a band D household in England without the £100 Household Energy Payment, which round 1 moved into HBAI; 835a765 adds it and fixes the comments that said HBAI leaves it out
  • Review round 2 fixes: carer, savings and property, and fuel duty Python tests (439 passed); full YAML suite (5,177 passed); carer YAML (778 passed)
  • Review round 3 fixes: carer taper Python tests (31 passed; the 10 new ones fail on 835a765); full YAML suite (5,177 passed)
  • CI at 835a765: Python shards 2 and 4 failed test_state_pension_components.py (a nil new State Pension rate divided by zero in the Pension Tax Allowance threshold's uprating); 7de3747 fixes it, and on a local merge with main that file and the PTA properties pass (38 tests)
  • Review round 4 fixes: carer taper Python tests (39 passed; the 2030-31 replacement cases and the £5,000.01 cases fail on 7de3747), PTA Python tests (11 passed; the dated-reform and any-rate cases fail on 7de3747), PTA YAML (15 passed), full YAML suite (5,177 passed); on a local merge with main, the carer, PTA, State Pension and triple lock Python tests (272 passed)
  • CI at 7de3747: Python shard 6 failed main's test_guarantee_credit_boundary_matches_main (the 2028 step where guarantee credit ends moves from £1.01 to £1.61 under the allowance); f51c6dc merges main and pins both cases, which pass locally (3 tests)
  • CI at f51c6dc: every check passed
  • Review round 5 fix: every Python test file that reads Carer's Allowance or calculated_by (31 files, 588 passed); the four 2030-31 partner and model's-own cases fail on f51c6dc; removing the payment's check of carers_allowance_pre_couple_limit fails the three partner cases and the 2030-31 v 2031-32 property fail
  • Review round 6 fix: every Python test file that reads Carer's Allowance or calculated_by (31 files, 590 passed); the defined_for case fails on bffa9e8, and again when the value check goes; removing the formula check fails the model's-own case
  • Merge of main (Update the economic assumptions to the October 2026 EFO #2717), resolved in a scratch tree before the round 6 commit: full YAML suite 5,282 passed and 1 failed, the 2028-29 Pension Tax Allowance case on the old forecast; re-pinned, its file passes (15)
  • Final tree at 9917bfa: full YAML suite (5,283 passed)
  • At 8db87df: full YAML suite (5,283 passed) and the 63 Python test files that this PR or Update the economic assumptions to the October 2026 EFO #2717 touched, or that read Carer's Allowance (1,628 passed)
  • CI at 8db87df: every check passed, after a rerun of the YAML job, which had printed "5283 passed" and then hung until the 45-minute limit cancelled it (the hang the workflow's comment describes); Result failed only because it found no test list from the cancelled job
  • Couple election (b428941): every carer YAML file (878 passed), every Python test file that reads a carer benefit (38 files, 556 passed), and the taper module against 8db87df's rule (the 9 that the test list above names fail); Enhanced FRS 2024-25 Carer's Allowance under both rules in 2030-31 and 2031-32 (identical)
  • At b428941: full YAML suite (5,283 passed) and the 63 Python files (1,632 passed)
  • CI at b428941 and ab9d57b: each push cancelled the run before it, so CI at ae88f0c stands for both
  • Independent review round 9 (executed, at b428941): APPROVE with four P3s, fixed in ab9d57b
  • rulespec-uk parity issues: new Add takeup to reweighting routine #506, Add caseloads to validation page #507 and Average by epoch in validation graph to avoid oscillation #508, and comments on Add reference for CPI uprating values for quarters within 2021 #348, Move tools/parameters.py to openfisca-tools #349, Tax Credits #454 and Parents' Learning Allowance #467
  • At ab9d57b, before commit: the taper module and electricity VAT tests (95 passed; the new matches_parts_of_year test fails without the sign check), fuel duty schedule (75), fuel duty and excise YAML (18), Treasury and VAT YAML (56)
  • At ab9d57b: full YAML suite (5,283 passed); the Python run moved to ae88f0c
  • Independent review round 10 (executed, at ab9d57b): APPROVE with three P3s, fixed in ae88f0c
  • At ae88f0c, before commit: fuel duty schedule and taper module (139 passed), fuel duty YAML (16)
  • At ae88f0c: full YAML suite (5,283 passed) and the 63 Python files (1,633 passed)
  • CI at ae88f0c: the YAML job passed; the ce9b262 push cancelled the run while the Python shards and the impact report ran
  • Independent review round 11 (at ae88f0c): Opus and GPT-6.1 Sol both REQUEST_CHANGES on one P2 (the taper-rate tie) and P3s, and ce9b262 fixes them all
  • At ce9b262, before commit: taper module and fuel schedule (143 passed); without the annual tie-break the four new tests fail and 64 pass; the fuel script regenerates all three files byte for byte, and with a bad LPG rate after an RPI change it leaves all three as they were
  • At ce9b262: full YAML suite (5,283 passed) and the 63 Python files (1,637 passed)
  • CI at ce9b262: the YAML job, Lint, smoke imports, docs and changelog passed; the db33fab push cancelled the run while the Python shards and the impact report ran
  • Independent review round 12 (GPT-6.1 Sol, executed, at ce9b262): APPROVE with three wording P3s; db33fab and this body fix them
  • At db33fab (test comments only, against ce9b262): taper module (68 passed)
  • CI at db33fab: every check passed, after a rerun of the YAML job, which had printed "5283 passed" at 08:58Z and then hung until the 45-minute limit cancelled it; the rerun passed. The aggregate impact report matches 8db87df's (Impact, above)
  • Independent review round 13 (GPT-6.1 Sol, executed, at db33fab): APPROVE; its two wording P3s touch only this body, which now answers them
  • Independent review round 14 (GPT-6.1 Sol, with runs) of the Impact section and the hand-off comment: every report figure matched; REQUEST_CHANGES on four attribution and wording points, which the Impact section and the hand-off comment now answer. A taper-only run reproduces its figures for the Table 6.1 comparison (~/reviews/ab26-baseline/impact-trace/taper_only.py)
  • Delta check round 14b (GPT-6.1 Sol, with runs): it confirmed round 14's fixes, reran the taper-only figures, and asked for three wording fixes, now in

Reproducer: policyengine_uk/tests/policy/reforms/oct_2026_budget/savings_property_income_rates.yaml; policyengine_uk/tests/policy/reforms/oct_2026_budget/pension_tax_allowance.yaml; policyengine_uk/tests/test_carers_allowance_earnings_taper.py::test_ten_pounds_over_the_limit_takes_ten_pounds_off; policyengine_uk/tests/test_fuel_duty_schedule.py::test_scheduled_rate_on_each_date; policyengine_uk/tests/test_domestic_electricity_vat.py::test_rates_change_on_each_scheduled_date; policyengine_uk/tests/policy/baseline/gov/treasury/household_energy_payment/household_energy_payment.yaml; policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/allowances/trading_allowance_deduction.yaml

axiom: TheAxiomFoundation/rulespec-uk#507 queued (Pension Tax Allowance) | TheAxiomFoundation/rulespec-uk#454 queued (Carer's Allowance taper) | TheAxiomFoundation/rulespec-uk#349 queued (fuel duty) | TheAxiomFoundation/rulespec-uk#467 queued (electricity VAT) | TheAxiomFoundation/rulespec-uk#508 queued (Household Energy Payment) | TheAxiomFoundation/rulespec-uk#506 queued (savings and property rates) | TheAxiomFoundation/rulespec-uk#348 queued (trading allowance)

🤖 Generated with Claude Code

MaxGhenis and others added 5 commits October 28, 2026 11:18
Budget 2026 paragraph 6.254 and the policy costings (page 23) raise the
Income Tax trading allowance from £1,000 to £3,000 from 6 April 2027,
to be legislated in Finance Bill 2026-27 (Table 6.1, item 15).

The £1,000 YAML cases move to 2026-27; new 2027-28 cases cover full
relief at £3,000, the cliff just above it, partial relief and expenses
above the allowance. The property test's allowance and boundary draws
move to £3,000.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…7-28

Budget 2026 paragraphs 6.246 and 6.247 add 2 percentage points to the
savings and property rates from 6 April 2027, on top of Budget 2025's
22%, 42% and 47%: 24%, 44% and 49% (Table 6.1, items 61 and 62).
Property rates apply in England, Wales and Northern Ireland, which the
model already does (Scottish taxpayers' property income stays on the
Scottish rates); savings rates apply UK-wide.

Finance cost relief reads the property basic rate, so it rises to 24%,
as the costing note says. The ISA cash-interest charge reads the
savings basic rate (SI 2026/1018 reg. 22A(3)), so it rises too.

Tests: hard-coded 22/42/47% expectations recomputed at 24/44/49%; new
Budget 2026 YAML cases for each band and country; property tests for
the exact 2-point rise, Scotland's exclusion from property rates,
UK-wide savings rates and the finance cost relief bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Budget 2026 (paragraph 6.211; policy costings page 13) extends the 5p cut
from 1 January 2027 to 1 July 2027. On that date rates rise by 5p and are
uprated by RPI, then by RPI each 1 April from 2028. Other road fuels keep a
proportionate cut to the same date.

- petrol_and_diesel.yaml: 52.95p to 30 June 2027; the January and March
  2027 steps are gone. The generator now uprates the 57.95p pre-cut rate by
  2026 RPI on 1 July 2027, then each 1 April from 2028.
- lpg.yaml, natural_gas.yaml: full rates from 1 July 2027.
- Tests and the excise duty engineering note follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Budget 2026)

Budget 2026 (paragraph 6.210; policy costings page 12) extends the
temporary 0% rate from 31 March 2027 to 1 July 2027, and expects it to
apply UK-wide from April 2027 (section 4.3: "Extended VAT relief is
expected to apply in Northern Ireland from April 2027").

- great_britain.yaml: 5% returns on 1 July 2027, not 1 April.
- northern_ireland.yaml: 0% from 1 April to 30 June 2027.
- Tests follow the new day weights: FY 2026-27 GB 178/365 at 5%, NI
  360/365; FY 2027-28 280/366 at 5% in every nation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Budget 2026 (paragraph 6.24; section 4.3; Table 6.1 item 1) gives £100 to
households in council tax bands A to D in England, delivered by local
authorities from January 2027. The devolved governments get a Barnett
share instead, which the model does not allocate.

- Parameters gov.treasury.household_energy_payment.{amount, bands,
  countries}: £100 in model year 2026 only, bands A to D, England.
- Variable household_energy_payment, counted in household_benefits,
  gov_spending and pre_budget_change_household_benefits as the Energy
  Bills Rebate is, with its own fiscal partition head and programme entry.
- council_tax_band defaults to D, so 2026 England fixtures with no band
  now carry the £100; their expected totals are updated and say so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 28, 2026 12:13
From 6 April 2027 to 5 April 2030, people over State Pension age, or
reaching it within the tax year, get a non-refundable Step 6 Income Tax
reduction of 20% of the full new State Pension above the Personal
Allowance, rounded up to the pound (£94 in 2027-28), tapered by £1 for
every £3 of total income above the full new State Pension (Budget 2026
paragraph 6.182, policy costings p. 63, HM Treasury explainer).

Each Step 6 reduction is capped at the tax the earlier ones leave
(utils/income_tax_reductions.py); finance cost relief now uses the same
helper. Universal Credit's deduction for tax on earnings reads
income_tax_subtractions, so it sees the allowance.

Also pins the Household Energy Payment outside HBAI income, as the 2022
council tax rebate is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Budget 2026 (paragraph 6.13, costings p. 16) replaces the withdrawal of
Carer's Allowance in full above the weekly earnings limit with a 100%
taper on the earnings above it, in England and Wales, from a date within
2030-31. Until DWP confirms the date the taper starts on 6 October 2030;
the day-weighted share gives 2030-31 182 of its 365 days.

The weekly excess over the limit is a variable of its own, which the
gainful-employment test now reads.

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

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base daec84d5b6 against head dce9871148, both on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.1, sha256 056e80fd8e91), fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

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

Workflow run and full report

New warnings

  • Household Energy Payment is not zero for every unit (inert:household_energy_payment): 2025-26: zero for every unit; 2027-28: zero for every unit; 2028-29: zero for every unit

Notes

  • This change edits the fiscal partition; review the partition diff alongside the moves it explains.
  • In the years a figure from fewer than 10 records is suppressed (spending.disabled_students_allowance), 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.
  • Household Energy Payment (spending.household_energy_payment) is measured on the head only.
  • Household Energy Payment (caseloads.household_energy_payment) is measured on the head only.

Moves flagged for review

Measure Year Base Head Change
Decile 9: mean household_net_income per household 2027-28 £82,907 £80,861 -£2,046
Decile 10: mean household_net_income per household 2027-28 £122,221 £124,742 +£2,521
Decile 9: mean household_net_income per household 2028-29 £84,246 £82,646 -£1,600
Decile 10: mean household_net_income per household 2028-29 £124,681 £126,632 +£1,951
Decile 6: mean household_net_income per household 2031-32 £55,195 £54,687 -£508
Relative poverty, before housing costs: pensioners 2026-27 1,724k 1,648k -76.3k
Decile 4: mean household_net_income per household 2030-31 £43,928 £44,267 +£338
Decile 7: mean household_net_income per household 2030-31 £59,211 £59,654 +£443
Decile 7: mean household_net_income per household 2031-32 £60,667 £61,087 +£421
Government balance, each receipt once 2026-27 £391.59bn £389.00bn -£2.58bn
gov_balance 2026-27 £391.59bn £389.00bn -£2.58bn
Decile 6: mean household_net_income per household 2029-30 £52,600 £52,943 +£343
Relative poverty, before housing costs: pensioners 2026-27 14.7% 14.0% -0.65pp
Decile 5: mean household_net_income per household 2030-31 £48,921 £48,605 -£316
Decile 10: mean household_net_income per household 2029-30 £126,775 £125,973 -£802
Decile 7: mean household_net_income per household 2029-30 £59,083 £58,734 -£349
Income tax 2031-32 £397.71bn £399.99bn +£2.29bn
Income tax 2030-31 £383.16bn £385.35bn +£2.19bn
Decile 1: mean household_net_income per household 2026-27 £17,895 £17,997 +£102
Income tax 2027-28 £334.00bn £335.83bn +£1.82bn
Fuel duties 2027-28 £26.54bn £26.00bn -£545.6m
Relative poverty, before housing costs: children 2026-27 23.4% 22.9% -0.54pp
Income tax 2028-29 £349.45bn £351.28bn +£1.83bn
Decile 2: mean household_net_income per household 2026-27 £28,874 £29,023 +£149
Income tax 2029-30 £365.10bn £366.96bn +£1.86bn
Decile 5: mean household_net_income per household 2027-28 £45,787 £46,017 +£230
Decile 7: mean household_net_income per household 2028-29 £57,966 £57,678 -£288
Decile 6: mean household_net_income per household 2030-31 £54,202 £53,947 -£255
Government balance, each receipt once 2030-31 £512.85bn £515.26bn +£2.41bn
gov_balance 2030-31 £512.85bn £515.26bn +£2.41bn
Government balance, each receipt once 2028-29 £454.08bn £456.22bn +£2.13bn
gov_balance 2028-29 £454.08bn £456.22bn +£2.13bn
Government balance, each receipt once 2031-32 £538.35bn £540.85bn +£2.50bn
gov_balance 2031-32 £538.35bn £540.85bn +£2.50bn
Relative poverty, before housing costs: children 2026-27 3,504k 3,423k -80.8k
Fuel duties 2026-27 £24.59bn £24.13bn -£458.8m
Decile 6: mean household_net_income per household 2028-29 £51,727 £51,962 +£235
Government balance, each receipt once 2029-30 £484.61bn £486.77bn +£2.15bn
gov_balance 2029-30 £484.61bn £486.77bn +£2.15bn
Relative poverty, before housing costs: everyone 2026-27 11,332k 11,084k -247.9k

94 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 0 0 +£1.82bn +£1.83bn +£1.86bn +£2.19bn +£2.29bn
Capital gains tax 0 0 -£18,969 -£17,391 -£16,133 -£14,967 -£16,452
VAT excluding private school fees 0 -£19.0m -£326.9m 0 0 0 0
VAT on private school fees 0 +£0.9m +£3.4m +£3.0m +£95,825 -£0.3m +£1.7m
Fuel duties 0 -£458.8m -£545.6m +£250.4m +£248.3m +£242.1m +£233.4m
TV licence fee 0 0 0 +£75,071 +£0.1m -£27,851 -£27,918

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Pension Credit 0 0 -£10.8m -£27.7m -£43.8m +£62,235 +£88,133
Universal Credit 0 0 -£0.7m -£0.8m -£2.0m -£21.5m -£36.6m
Housing Benefit 0 0 -£15.9m -£18.0m -£20.2m +£566 +£593
Council Tax Reduction 0 0 -£76,811 -£0.3m -£0.5m +£27,725 +£32,521
Carer's Allowance 0 0 0 0 0 +£20.0m +£36.8m
Tax-Free Childcare 0 0 0 0 +£19.9m +£20.3m +£20.5m
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Household Energy Payment (new: head levels) £0.00bn £2.11bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Pension Credit 0 0 -1.6k -3.1k -3.5k +155 +155
Universal Credit 0 0 0 0 -6.0k -6.0k -6.0k
Housing Benefit 0 0 -1.6k -1.6k -1.6k 0 0
Council Tax Reduction 0 0 0 -614 -697 0 0
Carer's Allowance 0 0 0 0 0 +15.1k +15.1k
Tax-Free Childcare 0 0 0 0 +18.0k +18.0k +18.1k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
Household Energy Payment (new: head levels) 0k 21,065k 0k 0k 0k 0k 0k

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 0 -£476.9m +£953.4m +£2.09bn +£2.11bn +£2.43bn +£2.52bn
Government spending 0 † +£2.11bn † -£27.6m † -£46.7m † -£46.6m † +£18.9m † +£20.8m †
Government balance, each receipt once 0 † -£2.58bn † +£981.0m † +£2.13bn † +£2.15bn † +£2.41bn † +£2.50bn †

Model totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax 0 -£476.9m +£953.4m +£2.09bn +£2.11bn +£2.43bn +£2.52bn
household_tax 0 -£458.8m +£1.28bn +£2.08bn +£2.11bn +£2.43bn +£2.52bn
pre_budget_change_household_tax 0 -£458.8m +£1.28bn +£2.08bn +£2.11bn +£2.43bn +£2.52bn
gov_spending 0 † +£2.11bn † -£27.6m † -£46.7m † -£46.6m † +£18.9m † +£20.8m †
household_benefits 0 † +£2.11bn † -£27.6m † -£46.7m † -£46.6m † +£18.9m † +£20.8m †
gov_balance 0 † -£2.58bn † +£981.0m † +£2.13bn † +£2.15bn † +£2.41bn † +£2.50bn †

Household income totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household net income 0 † +£2.57bn † -£1.30bn † -£2.13bn † -£2.15bn † -£2.41bn † -£2.50bn †
Household net income (HBAI definition) 0 +£2.10bn -£1.85bn -£1.88bn -£1.91bn -£2.17bn -£2.26bn

Poverty rates

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 0 -0.08pp -0.00pp -0.01pp -0.01pp +0.00pp 0
Absolute poverty, before housing costs: children 0 -0.12pp 0 0 0 0 0
Absolute poverty, before housing costs: working-age adults 0 -0.07pp 0 +0.00pp -0.00pp +0.00pp 0
Absolute poverty, before housing costs: pensioners 0 -0.10pp -0.01pp -0.08pp -0.07pp 0 0
Absolute poverty, after housing costs: everyone 0 -0.09pp +0.01pp +0.00pp -0.00pp +0.00pp +0.01pp
Absolute poverty, after housing costs: children 0 -0.05pp +0.01pp +0.01pp +0.00pp +0.01pp +0.01pp
Absolute poverty, after housing costs: working-age adults 0 -0.07pp +0.00pp +0.00pp +0.00pp +0.00pp +0.01pp
Absolute poverty, after housing costs: pensioners 0 -0.22pp +0.01pp -0.01pp -0.04pp 0 0
Relative poverty, before housing costs: everyone 0 -0.36pp -0.00pp +0.00pp +0.08pp -0.00pp -0.08pp
Relative poverty, before housing costs: children 0 -0.54pp 0 +0.02pp +0.21pp -0.00pp -0.21pp
Relative poverty, before housing costs: working-age adults 0 -0.21pp 0 +0.01pp +0.05pp -0.00pp -0.05pp
Relative poverty, before housing costs: pensioners 0 -0.65pp -0.02pp -0.06pp -0.01pp +0.01pp -0.04pp
Relative poverty, after housing costs: everyone 0 -0.04pp +0.07pp +0.00pp -0.02pp -0.00pp -0.00pp
Relative poverty, after housing costs: children 0 -0.03pp +0.09pp -0.00pp -0.02pp -0.01pp 0
Relative poverty, after housing costs: working-age adults 0 -0.05pp +0.07pp +0.00pp -0.01pp -0.00pp 0
Relative poverty, after housing costs: pensioners 0 -0.06pp +0.01pp -0.02pp -0.05pp -0.01pp -0.00pp

People in poverty

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 0 -58.6k -1.3k -8.8k -8.5k +920 0
Absolute poverty, before housing costs: children 0 -18.7k 0 0 0 0 0
Absolute poverty, before housing costs: working-age adults 0 -27.8k 0 +435 -600 +920 0
Absolute poverty, before housing costs: pensioners 0 -12.1k -1.3k -9.2k -7.9k 0 0
Absolute poverty, after housing costs: everyone 0 -62.6k +5.8k +754 -3.4k +2.2k +3.7k
Absolute poverty, after housing costs: children 0 -7.2k +2.1k +1.1k +549 +1.1k +1.1k
Absolute poverty, after housing costs: working-age adults 0 -29.7k +2.1k +1.1k +423 +1.1k +2.6k
Absolute poverty, after housing costs: pensioners 0 -25.7k +1.6k -1.4k -4.4k 0 0
Relative poverty, before housing costs: everyone 0 -247.9k -1.7k +811 +52.7k -885 -59.1k
Relative poverty, before housing costs: children 0 -80.8k 0 +2.5k +31.8k -593 -31.9k
Relative poverty, before housing costs: working-age adults 0 -90.7k 0 +5.4k +22.2k -1.5k -22.6k
Relative poverty, before housing costs: pensioners 0 -76.3k -1.7k -7.2k -1.3k +1.2k -4.6k
Relative poverty, after housing costs: everyone 0 -30.9k +46.5k +195 -11.4k -3.0k -318
Relative poverty, after housing costs: children 0 -4.6k +13.0k -75 -2.4k -1.3k 0
Relative poverty, after housing costs: working-age adults 0 -19.7k +32.1k +2.0k -3.8k -875 0
Relative poverty, after housing costs: pensioners 0 -6.6k +1.4k -1.8k -5.3k -827 -318

Inequality

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

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 0 † +£102 † +£16 † -£1.29 † +£2.25 † -£11 † -£9.85 †
Decile 2: mean household_net_income per household 0 † +£149 † +£29 † -£31 † -£43 † +£7.58 † -£11 †
Decile 3: mean household_net_income per household 0 † +£29 † -£13 † +£22 † -£7.05 † -£12 † -£8.46 †
Decile 4: mean household_net_income per household 0 † +£84 † -£144 † -£55 † -£44 † +£338 † -£9.23 †
Decile 5: mean household_net_income per household 0 † +£125 † +£230 † -£8.78 † +£0.15 † -£316 † +£70 †
Decile 6: mean household_net_income per household 0 † +£84 † +£7.92 † +£235 † +£343 † -£255 † -£508 †
Decile 7: mean household_net_income per household 0 † +£62 † -£0.50 † -£288 † -£349 † +£443 † +£421 †
Decile 8: mean household_net_income per household 0 † +£99 † +£80 † +£111 † -£63 † -£35 † -£60 †
Decile 9: mean household_net_income per household 0 † +£21 † -£2,046 † -£1,600 † -£120 † -£224 † -£89 †
Decile 10: mean household_net_income per household 0 † +£77 † +£2,521 † +£1,951 † -£802 † -£507 † -£548 †

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 0 +£0.5m -£8.3m -£24.2m +£14.0m +£17.9m +£30.4m
Raise higher rate by 1pp 0 +£2,516 -£0.6m -£17.0m +£23.7m +£21.7m -£0.8m
Raise personal allowance by ~800GBP/year 0 +£0.3m +£3.7m +£52.3m +£70.3m -£15.6m +£14.1m
Raise child benefit by 25GBP/week per additional child 0 -£0.9m -£0.2m +£3.8m -£0.5m +£0.2m -£0.5m
Reduce Universal Credit taper rate to 20% 0 -£0.9m +£47.5m +£46.4m +£73.1m +£71.2m +£71.1m
Raise Class 1 main employee NICs rate to 10% 0 -£1.5m -£22.1m -£0.2m +£22.6m suppressed suppressed
Raise VAT standard rate by 2pp 0 +£90,924 +£0.3m +£0.3m +£11,829 -£25,791 +£0.2m
Raise additional rate by 3pp 0 +£164 -£3.9m -£3.1m -£0.2m suppressed suppressed
Raise the Universal Credit standard allowance by 10% 0 -£0.8m -£18.0m +£2.7m +£21.6m +£21.0m +£22.7m
Raise the State Pension by 10% 0 -£0.9m -£254.5m -£332.1m -£392.9m -£1.7m -£1.6m

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 0 0 -£5.1m -£7.0m -£7.8m -£4.2m -£4.2m
Raise higher rate by 1pp: change in income_tax 0 0 -£1.0m -£1.1m -£1.2m -£0.9m -£1.0m
Raise personal allowance by ~800GBP/year: change in income_tax 0 0 +£29.6m +£65.7m +£94.2m -£14.7m -£6.2m
Reduce Universal Credit taper rate to 20%: change in universal_credit 0 0 -£0.7m -£0.9m +£0.3m +£0.5m -£1.1m
Raise Class 1 main employee NICs rate to 10%: change in national_insurance 0 0 0 0 0 suppressed suppressed
Raise VAT standard rate by 2pp: change in vat 0 -£144 +£203 0 0 0 0
Raise additional rate by 3pp: change in income_tax 0 0 -£0.1m -£0.1m -£0.1m suppressed suppressed
Raise the Universal Credit standard allowance by 10%: change in universal_credit 0 0 -£0.6m -£2.1m -£1.1m -£0.6m -£2.2m

Household net income by decile

Mean change in household net income per household, and as a share of the decile's base income; households stay in the base run's deciles.

Base decile 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1 0 +£77 (+0.4%) +£13 (+0.1%) -£1 (-0.0%) +£3 (+0.0%) -£10 (-0.1%) -£10 (-0.1%)
Decile 2 0 +£89 (+0.3%) +£21 (+0.1%) -£7 (-0.0%) -£3 (-0.0%) -£11 (-0.0%) -£11 (-0.0%)
Decile 3 0 +£85 (+0.2%) +£12 (+0.0%) -£3 (-0.0%) +£2 (+0.0%) -£7 (-0.0%) -£7 (-0.0%)
Decile 4 0 +£89 (+0.2%) +£11 (+0.0%) -£13 (-0.0%) -£11 (-0.0%) -£8 (-0.0%) -£7 (-0.0%)
Decile 5 0 +£93 (+0.2%) +£23 (+0.0%) -£10 (-0.0%) -£9 (-0.0%) -£15 (-0.0%) -£15 (-0.0%)
Decile 6 0 +£88 (+0.2%) +£1 (+0.0%) -£9 (-0.0%) -£7 (-0.0%) -£16 (-0.0%) -£16 (-0.0%)
Decile 7 0 +£86 (+0.2%) +£4 (+0.0%) -£24 (-0.0%) -£25 (-0.0%) -£28 (-0.0%) -£29 (-0.0%)
Decile 8 0 +£80 (+0.1%) -£29 (-0.0%) -£60 (-0.1%) -£56 (-0.1%) -£59 (-0.1%) -£61 (-0.1%)
Decile 9 0 +£74 (+0.1%) -£83 (-0.1%) -£89 (-0.1%) -£94 (-0.1%) -£102 (-0.1%) -£111 (-0.1%)
Decile 10 0 +£66 (+0.1%) -£376 (-0.3%) -£452 (-0.4%) -£472 (-0.4%) -£488 (-0.4%) -£499 (-0.4%)
all 0 +£82 (+0.2%) -£42 (-0.1%) -£68 (-0.1%) -£69 (-0.1%) -£77 (-0.1%) -£80 (-0.1%)
Year People gaining over £1 People losing over £1
2025-26 0.0% 0.0%
2026-27 84.1% 0.0%
2027-28 45.3% 13.9%
2028-29 2.8% 57.0%
2029-30 3.3% 56.7%
2030-31 0.9% 57.7%
2031-32 0.9% 57.8%

No change in any year: population.

Checks failing on both base and head (1)
  • VAT excluding private school fees is never negative (sign:vat): 2025-26: 76 units below zero, a weighted £-53,888,684 in total; 2026-27: 76 units below zero, a weighted £-55,777,260 in total; 2027-28: 76 units below zero, a weighted £-57,727,917 in total
Counted-once check

Each of 92 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped.

  • widowed_parents_allowance: pension_credit responds only through other heads in fewer than 10 households (other heads that moved there: carers_allowance; gov_spending; not a failure)
  • widowed_parents_allowance: pension_credit responds only through other heads in fewer than 10 households (other heads that moved there: carers_allowance; household_benefits; not a failure)
Provenance
Side Commit Runtime Environment hash Partition hash Time
base main daec84d5b6 uk 2.164.4 (files db016dc3f222), core 3.33.12, py 3.13.18 aarch64 aa8e73e3b48d 1eac2ca06b91 2020.19s
head #2719 merged into main dce9871148 uk 2.164.4 (files eddf71a4e2dc), core 3.33.12, py 3.13.18 aarch64 aa8e73e3b48d beb7035bea19 2089.4s

Dataset: hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@2526edbbb687a3b54dbb11272e5389e4b62d2ac2, sha256 056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784 (verified on both sides), policyengine-uk-data 1.58.1.

Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Final charge on cash interest in non-cash ISAs £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Lifetime ISA withdrawal charge £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Income tax £294.46bn £315.23bn £335.83bn £351.28bn £366.96bn £385.35bn £399.99bn
National Insurance (employee and self-employed) £51.70bn £54.14bn £56.13bn £57.73bn £59.76bn £61.64bn £63.51bn
National Insurance (employer) £148.71bn £155.37bn £160.88bn £165.09bn £172.06bn £177.36bn £182.57bn
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 £12.60bn £13.15bn £13.60bn £14.11bn £14.67bn £15.24bn £15.80bn
Student loan repayments £7.82bn £8.13bn £8.39bn £8.58bn £8.79bn £9.04bn £9.29bn
VAT excluding private school fees £249.37bn £256.87bn £266.33bn £272.70bn £278.97bn £285.24bn £291.59bn
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 £1.95bn £2.01bn £2.09bn £2.14bn £2.21bn £2.27bn £2.31bn
Change in private school VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.71bn £24.13bn £26.00bn £26.83bn £26.51bn £25.78bn £24.63bn
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
Betting and gaming duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.26bn £4.40bn £4.41bn £4.42bn £4.43bn £4.44bn £4.45bn
Council tax £49.21bn £52.16bn £54.89bn £57.95bn £61.16bn £64.47bn £67.91bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.48bn £0.49bn £0.50bn £0.51bn
Northern Ireland domestic rates £0.55bn £0.58bn £0.60bn £0.63bn £0.66bn £0.69bn £0.72bn
Business rates £34.68bn £36.20bn £38.00bn £39.46bn £42.27bn £43.25bn £44.29bn
Stamp duty land tax on the household's own purchases £6.88bn £7.32bn £7.66bn £8.06bn £8.47bn £8.91bn £9.35bn
Stamp duty land tax paid by companies £4.72bn £4.57bn £5.29bn £6.03bn £6.37bn £6.92bn £7.45bn
Land transaction tax (Wales) £0.07bn £0.08bn £0.08bn £0.09bn £0.10bn £0.10bn £0.11bn
Land and buildings transaction tax (Scotland) £0.31bn £0.32bn £0.33bn £0.35bn £0.36bn £0.38bn £0.40bn
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
Lifetime ISA bonus £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
State Pension £121.68bn £125.92bn £126.73bn £129.50bn £132.99bn £136.66bn £140.43bn
Pension Credit £6.66bn £7.03bn £7.29bn £7.48bn £7.60bn £7.84bn £8.03bn
Winter Fuel Payment £1.86bn £1.85bn £1.79bn £1.77bn £1.78bn £1.78bn £1.78bn
Pension Age Winter Heating Payment (Scotland) £0.19bn £0.20bn £0.20bn £0.21bn £0.21bn £0.22bn £0.22bn
Universal Credit £75.48bn £80.52bn £83.04bn £85.11bn £86.31bn £87.88bn £88.55bn
Housing Benefit £8.56bn £8.89bn £9.23bn £9.46bn £9.69bn £9.99bn £10.27bn
Council Tax Reduction £2.07bn £2.20bn £2.31bn £2.45bn £2.58bn £2.72bn £2.86bn
Employment and Support Allowance (income-related) £0.79bn £0.82bn £0.84bn £0.86bn £0.88bn £0.90bn £0.92bn
Employment and Support Allowance (contribution-based) £5.20bn £5.37bn £5.56bn £5.69bn £5.82bn £5.95bn £6.09bn
Jobseeker's Allowance (income-based) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.29bn £0.30bn £0.31bn £0.31bn £0.32bn £0.33bn £0.34bn
Income Support £0.11bn £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 £26.95bn £28.03bn £29.05bn £30.09bn £30.75bn £31.51bn £32.21bn
Disability Living Allowance £7.49bn £7.79bn £8.07bn £8.36bn £8.55bn £8.76bn £8.95bn
Attendance Allowance £8.68bn £9.03bn £9.36bn £9.69bn £9.90bn £10.15bn £10.38bn
Carer's Allowance £4.48bn £4.66bn £4.83bn £5.00bn £5.11bn £5.25bn £5.39bn
Carer Support Payment (Scotland) £0.31bn £0.32bn £0.33bn £0.34bn £0.35bn £0.36bn £0.37bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.04bn £0.04bn £0.05bn £0.05bn £0.05bn £0.05bn
Severe Disablement Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
Industrial Injuries Disablement Benefit £0.50bn £0.52bn £0.54bn £0.55bn £0.56bn £0.58bn £0.59bn
Armed Forces Compensation Scheme £0.61bn £0.63bn £0.65bn £0.66bn £0.68bn £0.69bn £0.71bn
War Widow's or Widower's Pension £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Benefit £16.19bn £16.82bn £17.39bn £18.00bn £18.39bn £18.84bn £19.25bn
Scottish Child Payment £0.49bn £0.52bn £0.53bn £0.56bn £0.57bn £0.57bn £0.57bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.30bn £3.41bn £3.54bn £3.62bn £3.70bn £3.78bn £3.87bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £1.12bn £1.16bn £1.20bn £1.23bn £1.26bn £1.29bn £1.32bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £0.67bn £0.69bn £0.71bn £0.73bn £0.75bn £0.76bn £0.78bn
Widowed Parent's Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tax-Free Childcare £0.55bn £0.56bn £0.58bn £0.59bn £0.61bn £0.61bn £0.59bn
Extended childcare entitlement £2.99bn £3.50bn £3.62bn £3.75bn £3.83bn £3.92bn £4.01bn
Universal childcare entitlement £2.06bn £2.22bn £2.29bn £2.38bn £2.44bn £2.51bn £2.56bn
Targeted childcare entitlement £0.50bn £0.51bn £0.52bn £0.54bn £0.55bn £0.57bn £0.56bn
Childcare Offer for Wales £0.26bn £0.28bn £0.28bn £0.29bn £0.30bn £0.31bn £0.32bn
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.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn
Adult Dependants' Grant £0.06bn £0.06bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
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 £203.89bn £204.30bn £204.56bn £204.91bn £205.34bn £205.85bn £206.35bn
State education spending £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Transport subsidy spending £25.05bn £25.10bn £25.14bn £25.18bn £25.23bn £25.30bn £25.36bn
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
Household Energy Payment £0.00bn £2.11bn £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
Lifetime ISA bonus 0k 0k 0k 0k 0k 0k 0k
State Pension 11,264k 11,145k 10,819k 10,700k 10,723k 10,750k 10,776k
Pension Credit 1,486k 1,480k 1,472k 1,452k 1,450k 1,455k 1,464k
Winter Fuel Payment 7,844k 7,783k 7,473k 7,375k 7,391k 7,409k 7,427k
Pension Age Winter Heating Payment (Scotland) 803k 802k 800k 797k 799k 801k 802k
Universal Credit 6,357k 6,349k 6,350k 6,318k 6,301k 6,293k 6,247k
Housing Benefit 1,249k 1,245k 1,244k 1,227k 1,227k 1,229k 1,232k
Council Tax Reduction 3,176k 3,195k 3,200k 3,214k 3,224k 3,235k 3,242k
Employment and Support Allowance (income-related) 71k 71k 71k 71k 71k 71k 71k
Employment and Support Allowance (contribution-based) 719k 720k 721k 722k 724k 726k 728k
Jobseeker's Allowance (income-based) 0k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 67k 67k 67k 67k 67k 68k 68k
Income Support 25k 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 3,567k 3,575k 3,579k 3,585k 3,593k 3,602k 3,611k
Disability Living Allowance 1,291k 1,294k 1,296k 1,298k 1,300k 1,304k 1,307k
Attendance Allowance 1,695k 1,698k 1,700k 1,703k 1,707k 1,711k 1,715k
Carer's Allowance 1,034k 1,037k 1,038k 1,040k 1,042k 1,059k 1,061k
Carer Support Payment (Scotland) 71k 71k 71k 72k 72k 72k 72k
Carer's Allowance Supplement (Scotland) 0k 71k 71k 72k 72k 72k 72k
Severe Disablement Allowance 4k 4k 4k 4k 4k 4k 4k
Industrial Injuries Disablement Benefit 137k 137k 137k 138k 138k 138k 139k
Armed Forces Compensation Scheme 93k 93k 94k 94k 94k 94k 94k
War Widow's or Widower's Pension 0k 0k 0k 0k 0k 0k 0k
Child Benefit 8,123k 8,120k 8,120k 8,130k 8,145k 8,161k 8,178k
Scottish Child Payment 351k 352k 352k 355k 353k 351k 340k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 200k 200k 200k 201k 201k 201k 202k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 333k 333k 334k 334k 335k 336k 337k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 181k 182k 182k 182k 182k 183k 183k
Sure Start Maternity Grant 26k 26k 26k 26k 26k 26k 26k
Bereavement Support Payment 98k 98k 98k 98k 98k 99k 99k
Widowed Parent's Allowance 0k 0k 0k 0k 0k 0k 0k
Tax-Free Childcare 1,014k 1,025k 1,021k 1,022k 1,026k 1,023k 1,009k
Extended childcare entitlement 795k 800k 804k 806k 809k 814k 814k
Universal childcare entitlement 1,071k 1,072k 1,074k 1,076k 1,079k 1,089k 1,090k
Targeted childcare entitlement 165k 156k 154k 154k 155k 155k 150k
Childcare Offer for Wales 39k 39k 39k 39k 39k 39k 39k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 98k 98k 98k 99k 99k 99k 99k
Adult Dependants' Grant 18k 18k 12k 12k 12k 12k 12k
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
Household Energy Payment 0k 21,065k 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 £892.00bn £934.66bn £980.51bn £1,015.93bn £1,054.24bn £1,091.56bn £1,124.89bn
Government spending £529.37bn † £545.66bn † £550.90bn † £559.72bn † £567.48bn † £576.30bn † £584.04bn †
Government balance, each receipt once £362.63bn † £389.00bn † £429.60bn † £456.22bn † £486.77bn † £515.26bn † £540.85bn †
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 £892.00bn £934.66bn £980.51bn £1,015.93bn £1,054.24bn £1,091.56bn £1,124.89bn
household_tax £491.97bn £520.41bn £551.21bn £576.01bn £601.00bn £626.69bn £648.41bn
pre_budget_change_household_tax £484.15bn £512.28bn £542.82bn £566.95bn £591.72bn £617.16bn £638.61bn
gov_spending £529.37bn † £545.66bn † £550.90bn † £559.72bn † £567.48bn † £576.30bn † £584.04bn †
household_benefits £529.37bn † £545.66bn † £550.90bn † £559.72bn † £567.48bn † £576.30bn † £584.04bn †
gov_balance £362.63bn † £389.00bn † £429.60bn † £456.22bn † £486.77bn † £515.26bn † £540.85bn †
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,637.96bn £1,702.77bn £1,757.35bn £1,806.41bn £1,855.97bn £1,912.43bn £1,970.44bn
Household net income £1,636.68bn † £1,687.82bn † £1,715.59bn † £1,747.70bn † £1,778.97bn † £1,817.37bn † £1,860.13bn †
Household net income (HBAI definition) £1,449.57bn £1,499.83bn £1,530.96bn £1,565.33bn £1,598.10bn £1,635.87bn £1,676.94bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,245k 69,383k 69,473k 69,592k 69,738k 69,912k 70,080k
Benefit units 35,110k 35,181k 35,226k 35,286k 35,360k 35,449k 35,534k
Households 31,046k 31,108k 31,149k 31,201k 31,267k 31,345k 31,420k
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 16.3% 15.5% 16.4% 16.3% 16.4% 16.5% 16.6%
Absolute poverty, before housing costs: children 24.7% 22.1% 23.3% 22.9% 23.1% 23.2% 23.4%
Absolute poverty, before housing costs: working-age adults 14.1% 13.8% 14.7% 14.7% 14.8% 14.8% 14.9%
Absolute poverty, before housing costs: pensioners 13.7% 13.4% 14.0% 13.8% 13.9% 13.9% 13.9%
Absolute poverty, after housing costs: everyone 21.6% 21.0% 22.0% 22.5% 22.7% 23.0% 23.3%
Absolute poverty, after housing costs: children 33.3% 31.3% 32.2% 32.4% 32.5% 33.0% 33.9%
Absolute poverty, after housing costs: working-age adults 19.9% 19.8% 20.8% 21.5% 21.8% 22.0% 22.2%
Absolute poverty, after housing costs: pensioners 12.7% 12.4% 13.2% 13.2% 13.2% 13.4% 13.5%
Relative poverty, before housing costs: everyone 17.0% 16.0% 16.4% 16.3% 16.4% 16.3% 16.6%
Relative poverty, before housing costs: children 25.9% 22.9% 23.3% 22.9% 23.0% 22.9% 23.4%
Relative poverty, before housing costs: working-age adults 14.5% 14.1% 14.6% 14.7% 14.7% 14.7% 14.9%
Relative poverty, before housing costs: pensioners 14.5% 14.0% 13.9% 13.8% 13.8% 13.9% 13.9%
Relative poverty, after housing costs: everyone 21.4% 21.0% 21.3% 21.3% 21.3% 21.5% 21.7%
Relative poverty, after housing costs: children 33.1% 31.1% 31.2% 31.0% 31.1% 31.2% 31.7%
Relative poverty, after housing costs: working-age adults 19.9% 19.8% 20.2% 20.4% 20.5% 20.6% 20.8%
Relative poverty, after housing costs: pensioners 12.5% 12.4% 12.2% 11.7% 11.7% 11.8% 12.0%
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 11,278k 10,779k 11,402k 11,350k 11,469k 11,507k 11,643k
Absolute poverty, before housing costs: children 3,688k 3,314k 3,496k 3,437k 3,477k 3,499k 3,545k
Absolute poverty, before housing costs: working-age adults 5,965k 5,893k 6,308k 6,354k 6,417k 6,427k 6,517k
Absolute poverty, before housing costs: pensioners 1,624k 1,572k 1,598k 1,559k 1,575k 1,580k 1,581k
Absolute poverty, after housing costs: everyone 14,944k 14,600k 15,302k 15,680k 15,859k 16,049k 16,335k
Absolute poverty, after housing costs: children 4,975k 4,682k 4,834k 4,864k 4,899k 4,987k 5,126k
Absolute poverty, after housing costs: working-age adults 8,463k 8,461k 8,967k 9,326k 9,464k 9,550k 9,672k
Absolute poverty, after housing costs: pensioners 1,506k 1,457k 1,502k 1,490k 1,496k 1,513k 1,537k
Relative poverty, before housing costs: everyone 11,750k 11,084k 11,388k 11,349k 11,410k 11,409k 11,643k
Relative poverty, before housing costs: children 3,872k 3,423k 3,496k 3,437k 3,463k 3,451k 3,545k
Relative poverty, before housing costs: working-age adults 6,159k 6,013k 6,301k 6,354k 6,386k 6,386k 6,517k
Relative poverty, before housing costs: pensioners 1,720k 1,648k 1,590k 1,558k 1,562k 1,572k 1,581k
Relative poverty, after housing costs: everyone 14,849k 14,552k 14,774k 14,809k 14,873k 15,002k 15,219k
Relative poverty, after housing costs: children 4,942k 4,660k 4,673k 4,663k 4,678k 4,700k 4,798k
Relative poverty, after housing costs: working-age adults 8,426k 8,440k 8,711k 8,823k 8,873k 8,963k 9,056k
Relative poverty, after housing costs: pensioners 1,482k 1,452k 1,390k 1,323k 1,322k 1,339k 1,365k
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 0.3080 0.3052 0.3058 0.3057 0.3062 0.3067 0.3083
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 £17,681 † £17,997 † £17,920 † £18,144 † £18,310 † £18,570 † £18,729 †
Decile 2: mean household_net_income per household £27,939 † £29,023 † £28,712 † £29,052 † £29,311 † £29,687 † £30,154 †
Decile 3: mean household_net_income per household £34,320 † £35,485 † £36,096 † £36,649 † £37,211 † £37,710 † £38,211 †
Decile 4: mean household_net_income per household £38,933 † £40,687 † £41,729 † £42,728 † £43,379 † £44,267 † £44,539 †
Decile 5: mean household_net_income per household £43,240 † £45,567 † £46,017 † £46,986 † £47,729 † £48,605 † £50,299 †
Decile 6: mean household_net_income per household £47,900 † £49,209 † £50,895 † £51,962 † £52,943 † £53,947 † £54,687 †
Decile 7: mean household_net_income per household £55,684 † £56,571 † £57,442 † £57,678 † £58,734 † £59,654 † £61,087 †
Decile 8: mean household_net_income per household £68,789 † £70,803 † £71,859 † £73,467 † £73,882 † £75,320 † £77,182 †
Decile 9: mean household_net_income per household £78,890 † £81,013 † £80,861 † £82,646 † £85,464 † £86,945 † £89,508 †
Decile 10: mean household_net_income per household £117,005 † £120,339 † £124,742 † £126,632 † £125,973 † £128,600 † £130,938 †
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.41bn £6.66bn £6.63bn £6.85bn £7.05bn £7.27bn £7.51bn
Raise higher rate by 1pp £3.61bn £3.87bn £4.00bn £4.22bn £4.46bn £4.73bn £4.83bn
Raise personal allowance by ~800GBP/year £-3.80bn £-3.92bn £-3.98bn £-4.04bn £-4.10bn £-4.23bn £-1.95bn
Raise child benefit by 25GBP/week per additional child £-1.99bn £-1.75bn £-1.55bn £-1.38bn £-1.30bn £-1.17bn £-1.06bn
Reduce Universal Credit taper rate to 20% £-20.37bn £-20.88bn £-21.27bn £-21.47bn £-21.79bn £-22.18bn £-22.35bn
Raise Class 1 main employee NICs rate to 10% £10.89bn £11.30bn £11.71bn £12.03bn £12.33bn suppressed suppressed
Raise VAT standard rate by 2pp £24.89bn £25.71bn £26.63bn £27.24bn £27.87bn £28.50bn £29.14bn
Raise additional rate by 3pp £2.90bn £3.15bn £3.22bn £3.41bn £3.61bn suppressed suppressed
Raise the Universal Credit standard allowance by 10% £-3.06bn £-3.18bn £-3.26bn £-3.33bn £-3.42bn £-3.46bn £-3.48bn
Raise the State Pension by 10% £-7.78bn £-8.01bn £-8.24bn £-8.47bn £-8.82bn £-8.55bn £-8.89bn
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.55bn £6.86bn £6.79bn £7.00bn £7.20bn £7.44bn £7.66bn
Raise higher rate by 1pp: change in income_tax £3.61bn £3.92bn £4.01bn £4.23bn £4.45bn £4.72bn £4.84bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.93bn £-4.07bn £-4.13bn £-4.18bn £-4.22bn £-4.40bn £-1.75bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.33bn £2.14bn £1.94bn £1.76bn £1.65bn £1.52bn £1.40bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £20.34bn £20.87bn £21.30bn £21.52bn £21.81bn £22.20bn £22.40bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £11.15bn £11.63bn £12.00bn £12.29bn £12.61bn suppressed suppressed
Raise VAT standard rate by 2pp: change in vat £24.69bn £25.51bn £26.42bn £27.03bn £27.65bn £28.28bn £28.91bn
Raise additional rate by 3pp: change in income_tax £2.90bn £3.15bn £3.22bn £3.42bn £3.62bn suppressed suppressed
Raise the Universal Credit standard allowance by 10%: change in universal_credit £3.06bn £3.18bn £3.28bn £3.37bn £3.44bn £3.50bn £3.53bn
Raise the State Pension by 10%: change in state_pension £10.68bn £11.17bn £11.28bn £11.60bn £12.04bn £12.47bn £12.97bn

Five existing test files pinned values that Budget 2026 changes in
current law:

- the property basic rate and the savings rates from 2027-28 are 24%,
  not 22% (property income rate reforms, finance cost relief accounting,
  the savings starting rate path, and the ISA cash interest charge,
  which is at the savings basic rate in force for the year under
  SI 2026/1018 reg. 15);
- the trading allowance is £3,000 from 2027-28, which sets relevant UK
  earnings for pension relief;
- the Household Energy Payment is in household_benefits in 2026-27 but
  not in HBAI income.

The finance cost relief bound now reads the property basic rate from the
parameters and pins the uncapped case Hypothesis found.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From 6 October 2030 the Budget 2026 taper pays the rate less the earnings
above the limit in England and Wales, so a carer £1 over it keeps most of
the allowance. The case now checks only that the earnings count as gainful
employment; test_carers_allowance_earnings_taper.py checks the amounts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 6 commits October 28, 2026 14:28
The October 2026 EFO (paragraph 3.19) forecasts the 1 July 2027 rate at
60.59p: the 57.95p pre-cut rate uprated by RPI growth in the year to 2027
Q1. calculate_fuel_duty_rates.py now starts the schedule there
(CUT_END_RATE) instead of uprating 57.95p by calendar 2026 RPI, which gave
59.75p on the March EFO and would give 60.03p on the October one. Each
1 April step from 2028 still applies the previous calendar year's RPI.
This matches the duty path #2717 uses to derive road fuel volumes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…per pays

In 2030-31 the taper covers 182 of the year's 365 days, so a carer over
the earnings limit is paid in those weeks only. carers_allowance took a
full year of overlapping benefits off that part-year amount: a carer
earning £250 a week with £40 a week of State Pension got £0 instead of
182/365 x (rate - £46 - £40) x 52 = £234.54. The new
carers_allowance_share_of_year_payable gives the share of the year the
earnings condition lets the allowance be paid; the taper and the overlap
deduction both use it. Adds the worked case, full-year and below-limit
checks, and a property test of the weekly overlap rule over the paid
weeks.

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

The relief is limited to the tax left after earlier reductions. Where that
capped the Budget 2025 relief, the 2-point rise in the rates raises the
cap too, so the relief can rise by more than 2% of the costs: with £7,800
of other tax credits it goes from £86 to £240. The property test now
applies the 2-point bound only where the old relief was its full 22%, and
a worked test pins the capped case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
HBAI counted the 2022 £150 Council Tax Rebate and the Energy Bills Support
Scheme as miscellaneous income (HBAI quality and methodology report FYE
2023), so the tests' premise that the rebate stayed out of HBAI was
wrong. The payment is the same kind of support to the same bands, so it
now raises hbai_household_net_income by £100. The variable and docs also
say who it goes to (the householder liable for council tax on their main
home, most exempt households included) and what the model cannot see:
households whose landlord is liable are paid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Budget 2026 restores fuel duty on 1 July 2027 "uprated in line with
RPI", then each 1 April from 2028 (costings page 13), and LPG and natural
gas take the proportionate cut to the same date. Their full rates came
back unuprated. calculate_fuel_duty_rates.py now writes all three
schedules: the full rate times RPI growth to 2027 Q1 (4.5565%, which gives
the OBR's 60.59p for petrol and diesel) on 1 July 2027, then the previous
calendar year's RPI each April, with RPI uprating metadata after 2031. LPG
is 33.05p and natural gas 25.83p from 1 July 2027. Also corrects the
petrol schedule's comment, which still described the calendar-2026 step.

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

Copy link
Copy Markdown
Collaborator

Checked against what Microcosm needs to score the Budget measures (PolicyEngine/microcosm#1418). This PR covers most of the engine side. Three things look missing:

  1. Machine Games Duty (Table 6.1 line 56).
    • OOTLAR para 1.50: from 1 April 2027, machines with a maximum charge to play above £1, or a maximum prize above £100, move to the higher rate of 25%.
    • machine_games_duty has only the lower, standard and higher net-takings inputs, so the change can't be expressed.
    • It needs an input for the standard-class takings of those machines (Category B), taxed at the standard rate to 31 March 2027 and at the higher rate after. Microcosm will write it from the Gambling Commission's machine yield by category.
  2. Savings income growth (line 62).
    • The costing grows its base "using the OBR's forecast for growth in savings income" (costings p. 75).
    • Project savings interest by interest received per person #2638 moves savings_interest_income to interest received per person, but leaves other_investment_income on per_capita.gdp. That input is taxed as savings income too, through taxable_savings_interest_income, so it should follow the same series.
    • Microcosm will also fill it from the FRS's NS&I bond and gilt accounts, beside the SPI's (microcosm#1418).
  3. Trading allowance on miscellaneous income (line 15). Round 1's finding 5 leaves it to a separate PR. Update and add PolicyEngine metadata to UC work allowances #290's review puts it at about £71m in 2027-28, beside a costing of −£165m to −£180m in its mature years. Microcosm already writes miscellaneous_income, so that PR would score as soon as it lands. It's worth having in the same release.

For the Carer's Allowance taper, the newly entitled carers come from the data's would_claim_carers_allowance, as the PR says. Microcosm is restricting that pool to carers of someone receiving a qualifying benefit (microcosm#1418).

The next Microcosm national and local-area pair waits for this PR's release, with #2712.

MaxGhenis and others added 2 commits October 28, 2026 19:05
…ax Allowance

Main's cliff probe froze a £1.01 step for current law in 2028. The Budget
2026 Pension Tax Allowance takes the claimant out of Income Tax at the
boundary, and Pension Credit counts income net of tax, so guarantee
credit now ends at £13,165 of private pension rather than £13,315 and the
step is £1.61. Main's value is kept as the case with the allowance off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In 2030-31 an amount before the couple restriction or the overlap rule
carries the parts of the year only where the simulation calculates it with
the model's own formula: no input supplies it, and no reform neutralizes it
or puts a formula of its own in its place. The payment takes the same
decision from both stages, so a reform that changes only the partner's
award before the couple limit gets the whole year's restriction and the
whole year's overlap for both partners, and a reform amount equal to the
model's no longer passes as the model's. A reform that updates a stage but
keeps its formula keeps the parts of the year.

calculated_by moves from the benefit cap variable to utils/formula_origin.py
so both can use it. The Pension Tax Allowance YAML header gives the
taper's end unrounded (13,318.973), so 13,318.98 in whole pence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 28, 2026 21:19
…match

Review round 6 found that a reform can keep the model's formula and add
defined_for, which changes the amount but not the formula. The formula test
alone then trusted the parts of the year and erased an eligible partner's
award before the overlap rule. carries_parts_of_year now asks both: does the
simulation calculate the stage with the model's formula, and does it equal,
for every member of the benefit unit, what the parts of the year give, to
half a penny. The masking case is a regression test.

Also answers round 6's wording notes: the changelog says the remaining stages
get the whole year's treatment, the assumptions page states the value
condition and the per-variable limitation, and formula_origin's docstring is
active.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Four files conflicted:
- the petrol and diesel schedule and its two tests: keep the Budget 2026
  schedule (60.59p on 1 July 2027) and rerun calculate_fuel_duty_rates.py
  --update on the October RPI forecast, which moves the April steps to
  63.21p, 65.13p, 67.07p and 68.61p (2028-31) and regenerates LPG and
  natural gas; the hand-computed rates in test_fuel_duty_schedule.py,
  petrol_and_diesel_schedule.yaml and road_fuel_gases.yaml follow;
- main's re-based Pension Credit boundary test: keep main's threshold,
  allowance and £0.87 step with the Pension Tax Allowance off, and pin £1.98
  with it on (guarantee credit now ends at £13,280 of private pension).

The October forecast raises the April 2028 new State Pension by 3.4%, so the
2028-29 Pension Tax Allowance case moves to a £13,480.26 threshold and a
full allowance of £183.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 7 found two gaps in round 6's check of a Carer's Allowance stage.

Half a penny treated a fraction of a penny as nil, but the couple restriction
picks whoever has an award. A reform masking a male head's £0.0026 under the
taper kept him picked for those weeks and took £2,301.24 from the partner.
matches_parts_of_year now also requires the amount to be positive exactly
where the parts of the year give an award.

The payment read carers_allowance_pre_couple_limit before checking
carers_allowance_pre_overlap, so a reform deriving the earlier stage from the
payment, which a supplied pre-overlap award had kept calculable, raised a
cycle. The payment now reads the earlier stage only where the model
calculates the pre-overlap award (calculated_by_model).

Tests: the no-reform fraction of a penny keeps the parts of the year; masking
it at either stage gives the whole year; the cycle case pays £600.

Also: the merge review's wording fixes (the Pension Credit boundary is a £5
grid point, road_fuel_gases.yaml's header and the road fuel volume comment
carry the October rates and the Budget 2026 schedule), and active voice in
the PR's docs, descriptions and comments.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 5 commits October 29, 2026 01:44
A couple caring for the same person jointly elect which of them has the
entitlement (SSCBA 1992 s.70(7ZA)(a)). The data don't record the election,
so the couple restriction now keeps the partner with the larger candidate
award and breaks ties in #2632's order (reported recipient, head, eldest).
Before 2030-31 every positive award is the same rate, so nothing changes.
Under the 2030-31 taper the old head-first order could pay a couple less
than the cliff edge (head £250/wk, partner £200/wk, £40 State Pension each:
£1,742.41 against £2,935.13), and a fraction of a penny for the head took
the whole 2031-32 award from the partner. Now one partner holds the award
for the year, which also ends the Pension Credit carer addition counting
two carers. Enhanced FRS 2024-25 Carer's Allowance totals don't change
(£5,260.2m in 2030, £5,396.34m in 2031).

Also answers round 8's P3s: a 2031-32 mask case that couldn't fail now
asserts the partner's award, passives in the test module and the payment's
documentation, the HALF_PENNY comment, the maximising paragraph, and the
council tax band sentence.

Tests: the taper module (63 passed; 9 fail on 8db87df's rule), with a new
property that the taper never leaves a couple below the cliff edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 9 approved the couple election with four P3s:
- "one partner has the award for the year" holds for the awards the model
  calculates (earnings and the limit in whole pence put a tapered award at
  least a penny below the full rate); a supplied award within a few
  millionths of a pound can tie in float32, and the docs now say so;
- "nothing changes before 2030-31" holds for the model's own awards; a
  supplied candidate that differs decides the election in any year;
- under the election no payment shows the sign check in
  matches_parts_of_year, so a direct test now covers it (it fails without
  the check; the six payment cases pass either way);
- passives in the test module and the assumptions page.

From the rulespec-uk parity notes: natural gas fuel duty from 1 July 2027
is HM Treasury's published 25.82p a kilogram (OOTLAR Annex A), a hundredth
of a penny below the RPI uprating's 25.83p. calculate_fuel_duty_rates.py
now writes the published rates and stops if one is more than a hundredth
of a penny from the uprating; the April steps follow (26.94p, 27.76p,
28.59p, 29.24p). The Northern Ireland electricity VAT and Household Energy
Payment parameters now cite paragraphs 3.4 and 3.5 of the Budget.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…'s checks

Round 10 approved with three P3s:
- one partner has the award for the year where the model reads earnings
  itself, in whole pence against a whole-pence limit. An input that
  supplies the earnings above the limit bypasses that reader and can tie
  the two awards in float32 (round 10: both stages still count as the
  model's), while a supplied award gets the whole-year restriction and one
  recipient. The assumptions page, the pre-overlap documentation and the
  changelog now name that boundary;
- calculate_fuel_duty_rates.py's refresh instructions now include
  PUBLISHED_RATES, and main() checks the OBR's uprating and HM Treasury's
  published petrol and diesel rate separately, so each error names the
  constant at fault;
- passives in the generator and its notes, the excise docs, the fuel test
  and the carer test docstring.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In 2030-31 the couple election runs on the weeks before the taper and the
weeks under it separately. Where a head over the earnings limit had the
full rate under the taper (a reform setting the taper rate to zero, an
input or reform setting is_gainfully_employed_for_carers_allowance, or an
excess of a millionth of a pound), the two awards tied, the tie order gave
the head the taper weeks and the partner the weeks before, both partners
counted as entitled, and the Pension Credit carer addition doubled.

Where both partners have the same award for a part of the year, the
couple now elect the one with the larger award over the year, then
#2632's order. A partner below the limit keeps the award all year at any
taper rate of zero or more. At the Budget's taper rate, with the model's
own earnings, partners on either side of the limit never tie and partners
on the same side have equal annual awards, so nothing changes there.

Tests: a property at taper rates of 0 and 0.0001, and three examples
(zero taper rate, supplied gainful-employment flag, a millionth over the
limit) checking the partner keeps the award with one carer addition. All
four fail without the tie-break.

Also: the fuel duty script checks all three fuels before writing any
file, says what to do when HM Treasury's rates no longer match a new
forecast, and states that petrol and diesel's published rate must equal
the uprating; the assumptions page names the stage whose supplied value
keeps one recipient and drops the float32 account; reduced passives in
the excise docs, fuel duty comments and changelog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Float32 keeps a millionth of a pound of excess; it is the tapered award
that rounds to the full rate when float32 takes the excess from it. The
two test comments now say so, and name the case a 0.0001 taper rate
covers (a head a penny over the limit). Comments only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 29, 2026 10:35
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Hand-off to the UK hub

Head: db33fab (ready for review, mergeable).

Independent review: 14 rounds. The code rounds approve this head. Round 14 requested changes to the body's Impact section and this comment; a delta check (r14b) confirmed those fixes, and asked for three more wording fixes, now in.

  • r1 to r10 (GPT-6.1 Sol): the commits in the body's table fix each finding, or the body says why the PR leaves it out (round 1's council tax liability, miscellaneous income and earnings-limit pence). r9 and r10 ran their reproductions and approved.
  • r11 at ae88f0c (Sol and, separately, Opus): both REQUEST_CHANGES on one P2. A zero taper rate, an input or reform that sets the gainful-employment flag, a reform that replaces the excess formula, or an input that supplies an excess of 1e-6 gave an over-limit head the full rate under the taper; the tie order then split the 2030-31 award between the partners, and the Pension Credit carer addition doubled. ce9b262 breaks a weekly tie by the award over the year, and one partner now has the award for the year at any taper rate of zero or more.
  • r12 at ce9b262 (Sol, with runs): APPROVE. It found no change from ae88f0c at the Budget's taper rate on 34,560 household-years, and no split at taper rates from 0 to 2. db33fab and the body fix its three wording points.
  • r13 at db33fab (Sol, with runs): APPROVE. Its two wording points touched only the body, which now answers them.
  • r14 (Sol, with runs) audited the Impact section and this comment: every report figure matched, and its reruns confirmed the Tax-Free Childcare trace exactly. It asked for four corrections, all now in: set the taper's net fiscal effect, not its gross spending, against Table 6.1; count taxable Carer's Allowance in Income Tax; credit the 2029-30 poverty swing mostly, not wholly, to the line; and say that some round 1 findings sit outside the PR.
  • r14b (Sol, with runs): REQUEST_CHANGES on three wording points of its own (this comment's account of round 14, "nearly all" where the offsets exceed the extra Carer's Allowance, and which draft answers round 14's review-history point). It reproduced the taper-only figures and the −6.3k, and confirmed Table 6.1 and p. 16. All three fixes are in.
  • Reports: ~/reviews/ab26-baseline/review-2719*/out.md (r7 also has out-merge.md, r11 out-opus.md). The impact traces, their scripts and logs: ~/reviews/ab26-baseline/impact-trace/.

Passed locally:

CI at db33fab: every check passed (gh pr checks exits 0; GitHub shows MERGEABLE). The YAML job printed "5283 passed" and then hung until the 45-minute limit cancelled it, as at 8db87df; its rerun passed.

Depends on: nothing open. #2717 (October EFO) is in main, and 9917bfa merges it into this branch.

Holds:

  • The Budget-week merge hold.
  • d2161: no automatic agent merges in policyengine-uk until Max rules (Vahid, 28 Oct).

What this changes beyond the Budget measures:

  • Limit same-person carer benefit awards within couples #2632's couple order (the recipient the data report, then the head, then the eldest) now breaks ties only. The couple elect the partner with the larger award before overlap, and in 2030-31, where the weekly awards tie, the one with the larger award over the year. The model's own awards are equal before 2030-31, so nothing changes there; where an input supplies a candidate award that differs, it decides the election in any year. ~/reviews/uk-hub/RULINGS.md logs the reading (29 Oct, under P4).

Conflicts to watch:

Impact (CI report, matches 8db87df):

  • Income tax +£1.82bn in 2027-28, rising to +£2.29bn in 2031-32.
  • Fuel duties −£458.8m and −£545.6m in 2026-27 and 2027-28, then +£233m to +£250m a year.
  • The Household Energy Payment, £2.11bn in 2026-27.
  • Government balance −£2.58bn in 2026-27, then +£0.98bn to +£2.50bn.
  • The body's Impact section traces the report's two odd moves. Tax-Free Childcare +£20m a year from 2029-30 comes from the trading allowance (two survey records; A small Universal Credit award ends Tax-Free Childcare worth more, so removing the two-child limit leaves some families worse off #2689 describes the limitation behind it). Moves in the poverty line drive most of the later relative poverty swings (+52.7k, −59.1k).
  • Worth a look: on its own, the taper improves the government balance by £3.4m in 2030-31 and £6.6m in 2031-32 (Universal Credit and Income Tax more than offset the extra Carer's Allowance), where Table 6.1 shows a cost of £40m and £80m. That costing counts take-up among newly eligible carers above the limit, which the model doesn't draw.

Follow-ups still to do (not in this PR):

  • The couple election on the payment after overlap. Round 9's case, in 2030-31: the head earns £250 a week and the partner £200, and only the partner has £100 a week of State Pension. The election picks the partner, whose pension takes the whole payment, so the couple get £0, where electing the head pays £1,307.97. It changes Limit same-person carer benefit awards within couples #2632's result before 2030-31 too, so it needs its own PR, which stacks on this one. Brief: ~/reviews/ab26-baseline/followup-post-overlap-election.md.
  • d2154 (Max, low, parks after 2 Nov): posting the pe-uk and dashboard differences (~/reviews/ab26-baseline/dashboard-divergence.md) on the dashboard repo. After this releases, the dashboard can switch its copies of these measures off; this PR doesn't touch the dashboard repo.

Axiom parity: TheAxiomFoundation/rulespec-uk#507, #454, #349, #467, #508, #506 and #348, all in the queue.

@juaristi22
juaristi22 added this pull request to the merge queue Oct 29, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 29, 2026
juaristi22 and others added 2 commits October 29, 2026 15:47
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The test came from #2746 after this branch's CI ran. Its default band D
household in England now gets the £100 payment in 2026, so gross, net and
HBAI income each rise by 100.

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

Copy link
Copy Markdown
Collaborator Author

Interaction with #2751 (State Pension rates rounded to the nearest 5p)

#2751 (draft, held under d2161 like this PR) rounds each projected State Pension weekly rate to the nearest 5p, as each Up-rating Order does. The full new State Pension becomes £250.70, £259.20 and £265.70 for 2027-28 to 2029-30, where the unrounded projection gave £250.71, £259.24 and £265.72. This PR's Pension Tax Allowance threshold is 52 × that rate, so it becomes £13,036.40, the explainer's figure, and the 2028-29 full allowance falls from £183 to £182.

Merged together, 4 of the 15 cases in tests/policy/reforms/oct_2026_budget/pension_tax_allowance.yaml fail on their old numbers:

  • Jonathan: £44.19 → £44, the explainer's own figure.
  • The Scottish taper case: £44.19 → £44.
  • A pound before the end of the taper: the inputs move to the new end point, £13,318.40.
  • The 2028-29 case: full allowance £183 → £182.

The variable's documentation also mentions the unrounded £13,036.97. The patch below makes all 15 cases pass on a local merge of this head (c086c49) with #2751. Whichever PR lands second should apply it.

National effect on this PR's allowance (certified Enhanced FRS 2024-25, this head vs the local merge):

2027-28 2028-29 2029-30
Cost £43.6m → £43.6m £127.4m → £126.5m £215.3m → £215.1m
Gainers no change no change to the nearest thousand no change
Patch for this PR after #2751
diff --git a/policyengine_uk/tests/policy/reforms/oct_2026_budget/pension_tax_allowance.yaml b/policyengine_uk/tests/policy/reforms/oct_2026_budget/pension_tax_allowance.yaml
index 11fd8f44b..1dff6ea74 100644
--- a/policyengine_uk/tests/policy/reforms/oct_2026_budget/pension_tax_allowance.yaml
+++ b/policyengine_uk/tests/policy/reforms/oct_2026_budget/pension_tax_allowance.yaml
@@ -7,16 +7,14 @@
 # above the full new State Pension.
 #
 # The full new State Pension is 52 weeks at the weekly rate. The model
-# projects the April 2027 rate unrounded, 241.30 x 1.039 = 250.71, so the
-# threshold is 13,036.97, where HM Treasury's explainer gives 13,036.40
-# (250.70 a week). The full allowance is 94 on either: 20% x (13,036.97 -
-# 12,570) = 93.39. The allowance runs out at 13,036.973 + 3 x 94 =
-# 13,318.973, so 13,318.98 is the first income in whole pence with none (the
-# explainer's "13,319 or more").
+# projects the April 2027 rate as the Up-rating Order rounds it, 241.30 x
+# 1.039 = 250.7107 to the nearest 5p, 250.70, so the threshold is 13,036.40,
+# as in HM Treasury's explainer. The full allowance is 94: 20% x (13,036.40 -
+# 12,570) = 93.28, rounded up. The allowance runs out at 13,036.40 + 3 x 94 =
+# 13,318.40 (the explainer's "13,319 or more" in whole pounds).
 #
 # The first five cases are the worked examples in HM Treasury's Pension Tax
-# Allowance explainer, on its inputs. Jonathan's allowance is 19p more than
-# the explainer's 44 because the threshold is 57p higher.
+# Allowance explainer, on its inputs.
 
 - name: Tom, below the Personal Allowance, has no tax to remove
   period: 2027
@@ -53,7 +51,7 @@
     pension_tax_allowance: 80
     income_tax: 0
 
-- name: Jonathan, deferring his pension with income in the taper, gets 44.19
+- name: Jonathan, deferring his pension with income in the taper, gets 44
   period: 2027
   absolute_error_margin: 0.01
   input:
@@ -62,12 +60,12 @@
     property_income: 1_186.40
   output:
     total_income: 13_186.40
-    # 94 - (13,186.40 - 13,036.97) / 3; the explainer, on 13,036.40, gives 44
-    pension_tax_allowance: 44.19
+    # 94 - (13,186.40 - 13,036.40) / 3
+    pension_tax_allowance: 44
     # The Personal Allowance covers the salary and 570 of the property
     # profit; 616.40 x 24% (the Budget 2026 property basic rate) = 147.94
     income_tax_pre_charges: 147.94
-    income_tax: 103.75
+    income_tax: 103.94
 
 - name: Nadia, above 13,319, gets no allowance
   period: 2027
@@ -89,24 +87,24 @@
   absolute_error_margin: 0.01
   input:
     age: 70
-    # Just above 13,036.97 + 3 x 94
-    state_pension: 13_318.98
+    # 13,036.40 + 3 x 94
+    state_pension: 13_318.40
   output:
     pension_tax_allowance: 0
-    # 748.98 x 20%
-    income_tax: 149.80
+    # 748.40 x 20%
+    income_tax: 149.68
 
 - name: A pound before the end of the taper leaves a third of a pound
   period: 2027
   absolute_error_margin: 0.01
   input:
     age: 70
-    state_pension: 13_317.98
+    state_pension: 13_317.40
   output:
-    # 94 - (13,317.98 - 13,036.97) / 3
+    # 94 - (13,317.40 - 13,036.40) / 3
     pension_tax_allowance: 0.33
-    # 747.98 x 20% = 149.60, less the allowance
-    income_tax: 149.27
+    # 747.40 x 20% = 149.48, less the allowance
+    income_tax: 149.15
 
 - name: Scottish taxpayers get the allowance at 20%, capped at their starter-rate tax
   period: 2027
@@ -130,11 +128,11 @@
     private_pension_income: 13_186.40
     region: SCOTLAND
   output:
-    # 94 - 149.43 / 3; at the 19% starter rate the full allowance would have
-    # been 89, leaving 39.19
-    pension_tax_allowance: 44.19
+    # 94 - 150 / 3; at the 19% starter rate the full allowance would have
+    # been 89, leaving 39
+    pension_tax_allowance: 44
     # 616.40 x 19% = 117.12
-    income_tax: 72.93
+    income_tax: 73.12
 
 - name: Someone under State Pension age with the same income gets nothing
   period: 2027
@@ -197,11 +195,12 @@
   absolute_error_margin: 0.01
   input:
     age: 70
-    # The threshold is 52 weeks of the April 2028 new State Pension: 13,480.26
-    # on the October 2026 forecast, so 20% x (13,480.26 - 12,570) = 182.05 and
-    # the full allowance is 183. 300 above the threshold takes 100 off it.
-    private_pension_income: 13_780.26
+    # The threshold is 52 weeks of the April 2028 new State Pension: 13,478.40
+    # (259.20 a week) on the October 2026 forecast, so 20% x (13,478.40 -
+    # 12,570) = 181.68 and the full allowance is 182. 300 above the threshold
+    # takes 100 off it.
+    private_pension_income: 13_778.40
   output:
-    pension_tax_allowance: 83
-    # 1,210.26 x 20% = 242.05, less the allowance
-    income_tax: 159.05
+    pension_tax_allowance: 82
+    # 1,208.40 x 20% = 241.68, less the allowance
+    income_tax: 159.68
diff --git a/policyengine_uk/variables/gov/hmrc/income_tax/reliefs/pension_tax_allowance.py b/policyengine_uk/variables/gov/hmrc/income_tax/reliefs/pension_tax_allowance.py
index ed73da7ef..163b8b068 100644
--- a/policyengine_uk/variables/gov/hmrc/income_tax/reliefs/pension_tax_allowance.py
+++ b/policyengine_uk/variables/gov/hmrc/income_tax/reliefs/pension_tax_allowance.py
@@ -13,9 +13,8 @@ class pension_tax_allowance(Variable):
         "the full new State Pension above the Personal Allowance, rounded up to "
         "the pound (£94 in 2027-28). It falls by £1 for every £3 of total "
         "income above the full new State Pension, which is the tax year's 52 "
-        "weeks at the weekly rate, so it follows any change to that rate. The "
-        "model projects the rate unrounded, so the threshold is £13,036.97 in "
-        "2027-28 where HM Treasury's explainer gives £13,036.40. It is "
+        "weeks at the weekly rate, so it follows any change to that rate "
+        "(£13,036.40 in 2027-28, as in HM Treasury's explainer). It is "
         "non-refundable: it is "
         "deducted at Step 6 after the reductions listed before it in "
         "income_tax_subtractions, only so far as there is Step 5 tax left, "

@juaristi22

Copy link
Copy Markdown
Collaborator

Okay, I'll leave the merge call to you for when everything is ready.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Sync after the current queue. This PR merges cleanly with main today, but not after the queue lands. A local merge of main 648b11244 with #2723, #2726, #2545, #2234, #2727, #2731, #2700 and #2735 conflicts here in four files:

One more needs fixing with no conflict to flag it: utils/income_tax_reductions.py, new here, reads the income_tax_subtractions parameter that #2545 deletes.

The UK hub is rehearsing that merge locally now and will push the sync once main holds those PRs, so nobody needs to merge main here in the meantime. The result will follow in a comment on this PR.

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.

2 participants