Repository navigation
Hold NICs thresholds at 2026-27 levels through 2030-31 - #1959
Conversation
Budget 2025 keeps the Class 1 primary threshold, upper earnings limit and secondary threshold, and the Class 4 lower and upper profits limits, at their current levels until 5 April 2031 (Red Book paras 4.111-4.112; HMRC policy paper of 26 November 2025). The model CPI-uprated LPL and UPL from 2027-28 and PT and UEL from 2028-29, earlier than even the Autumn Statement 2022 freeze allowed. Add an explicit value with references for every year 2026-27 to 2030-31: SI 2001/1004 regs 10-11 as amended by SI 2026/231 for 2026-27; the Autumn Statement 2022 and Autumn Budget 2024 policy papers for 2027-28; Budget 2025 and the SI 2026/231 Explanatory Memorandum for 2028-29 to 2030-31; SSCBA 1992 s.15(3) for the Class 4 limits. CPI uprating resumes from the frozen level in 2031-32, matching the personal allowance. Each file records which years are law and which are announced policy. Also correct the 2025-26 lower earnings limit from £123 to £125 a week (SI 2025/288 reg 5(2)(b)), and move the secondary threshold's misplaced reference keys under metadata. Tests: YAML cases for 2027-28 and 2030-31, and property and differential tests for the statute table, the cash freeze, resumed indexation, alignment with the income tax thresholds, no cash cuts and frozen liabilities. Fixes #1879 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Cite SI 2001/1004 reg 10 and the specific reg 11 paragraph for the 2026-27 Class 1 values, at the 6 April 2026 point-in-time text. SI 2026/231 reg 5 sets reg 10's tax year; it does not amend reg 11. - Date the £96 secondary threshold from 6 April 2025, when NICA 2025 s.2 applies, not 1 January (values unchanged: the model samples each fiscal year at 30 April). - Say exactly what the stored PT and UEL give over 52 weeks (£12,569.96 and £50,269.96), and that the model annualises the ST as 52 x £96 = £4,992 where reg 11(3A)(b) gives £5,000 (#1967). The docs now say the same. - Test the 2025-26 lower earnings limit (£125) and its reference, and mark the ST annualisation gap with a strict xfail so the fix for #1967 has to remove it. Refs #1879 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review pass (Claude Code, on Vahid's behalf) at Short version: nothing blocking, and I'd approve. The parameter values, dates and legal sources all check out against the primary texts, the CPI restart is one year's CPI from the frozen level, and the new tests pass locally. Three small nits below; none needs to hold the merge. What I checkedValues, by evaluating the parameters at each model year (the system samples each fiscal year at 30 April,
Legal sources, opened this session:
The legal-status comments in each file (law for 2026-27, announced policy after) match these texts. Tests, run locally on the branch:
Impact, sense check: the signs are right. Freezing the PT and LPL raises NI between the thresholds; freezing the UEL and UPL below their CPI path moves earnings from the main rate to the 2% rate above them, so higher earners pay less; and lower net earnings raise UC. The 2030-31 total of +£495m is in the range of the OBR's £533m for the measure, allowing for the differences you list. Nits
Question (no change needed)On the OBR comparison: is the Secondary Threshold freeze part of the OBR's £533m (measure 46)? If it is, it's an employer-NI amount that this PR can't reproduce, because the model's ST was already frozen in the baseline. That would make the comparison even less like-for-like than the body says. It doesn't affect anything in the PR. |
|
Merged at
|
#1959 holds the PT, UEL, LPL and UPL through 2030-31 and corrects the 2025-26 LEL to £125, but left the notebook's saved chart on the old CPI-uprated values. Only the chart's y values change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-capital-derived-income Resolve the four means-test income formulas: keep #1896's claimant/partner member filter and this branch's income-from-capital rules (no property income, legacy_means_test_income_tax in the tax line, home-letting income). Keep #1952's Pension Credit references and this branch's Sch IV para 18 reference, and #1926's HB docs with this branch's sentence. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes #1879
What was wrong
Budget 2025 holds the NICs thresholds at their 2026-27 levels until 5 April 2031. On
main(44240bd), four of them were CPI-uprated early:The LPL and UPL rose a year before even the Autumn Statement 2022 freeze ended. The ST and the personal allowance were already held through 2030 (#1381, #1396).
The 2025-26 lower earnings limit was also wrong: it was £123 a week, but the law says £125.
What the law and announced policy say
Everything in this table was read from the primary source this session.
How the freezes are being legislated:
The model's weekly PT and UEL (12,570 / 52 and 50,270 / 52) are the reg 11(3)(c) and 11(2A)(c) equivalents for an earnings period of 52 weeks. The statutory weekly amounts are £242 and £967.
Sources:
Changes
Parameters (
gov.hmrc.national_insurance.*):2027-04-01entry, which cited Spring Statement 2022, and the ST's OBR EFO citation.referencekeys that sat outsidemetadata(so they were not read as references) intometadata.Other files:
docs/book/policy/model-baseline.md: new "Announced policy to 2030-31" section.changelog.d/1879.fixed.md.Invariants
These hold for model years Y (the fiscal year starting 6 April Y):
ni_class_1_employee_primaryni_class_1_employee_additionalni_class_1_employerni_class_4(sole trader)Intended exception: after 2030, the UEL/UPL and the higher-rate threshold drift apart. The model uprates the NI limits and the personal allowance by the OBR CPI index, but the basic rate limit by
gov.benefit_uprating_cpi. That split is older than this PR.Tests
policyengine_uk/tests/policy/baseline/gov/hmrc/national_insurance/ni_threshold_freeze.yaml: 12 cases for 2027-28 and 2030-31. They check employee Class 1 at the PT, between the PT and UEL, and above the UEL; employer Class 1; and Class 4 at the LPL, between the limits, and above the UPL.main, 6 of the 12 fail: 2027-28 Class 4 between and above the limits, and 2030-31 employee Class 1 and Class 4 between and above the thresholds. Checked by running this file against origin/main 44240bd.policyengine_uk/tests/test_ni_threshold_freeze.py: 49 tests covering invariants 1-7, including the 2025-26 LEL (£125) and its reference. Five strict xfails mark the ST annualisation gap (Employer NI annualises the secondary threshold as 52 × £96 = £4,992, not the statutory £5,000 #1967), so the fix for that issue has to remove them.ni_class_1_income. From 2029 the salary sacrifice broad-base haircut trimsemployment_income, which would otherwise break invariant 7 for reasons unrelated to thresholds.main, 25 of the 49 fail: 23 parameter-level tests and both liability tests.Enhanced FRS impact (branch minus main)
Each figure below comes from a real
Microsimulationper package state, run on a private copy of the Enhanced FRS 2024-25 (sha256e433e532…). Nothing is scaled or interpolated. Two runs back every figure:main44240bd, whose only tracked difference was the self-version line inuv.lock, and this branch at 73c0459 with a clean tree. The later commit c23b9a1 changes only comments, citations and the ST's effective date (1 January to 6 April 2025). No processed value changes in any model year: the model samples each fiscal year at 30 April. £m, weighted UK totals for each fiscal year:What drives these figures:
Unchanged items: employer NI, income tax and Pension Credit do not change in any year. The ST was already frozen, and NI does not feed income tax. Housing Benefit and Council Tax Reduction rise by less than £0.1m a year, because their applicable income subtracts
national_insurance.2031-32 onward: the effect persists, because indexation restarts from the frozen level.
Class 1, 2030-31: employees earning between the frozen PT and UEL (£12,570-£50,270) pay +£1,218m. Employees above £50,270 pay −£835m, because a lower UEL moves part of their earnings from the 8% band to the 2% band. People at or below £12,570 see no change.
Class 4, 2030-31: +£141m for profits of £12,570-£50,270, and −£29m above £50,270.
By decile, 2030-31: the average household change runs from −£12 (decile 1) to −£47 and −£48 (deciles 5 and 6). Decile 9 gains £31 and decile 10 gains £77, because of the UEL and UPL.
Poverty, percentage points:
These are discrete flags, so a few households near the line drive them. The 2030-31 spike comes from one sample household crossing the AHC line. It accounts for +0.181pp of the +0.189pp child change and all of the all-person change. Without it, child AHC poverty rises by 0.008pp, in line with the neighbouring years.
Context only, not a like-for-like check: the OBR scorecard (November 2025 EFO policy tables, sheet 2.1, measure 46) puts the NICs receipts from the Budget 2025 freeze at £156m, £329m and £533m in 2028-29 to 2030-31. Those figures are post-behavioural and include the UST and AUST, which PolicyEngine does not model. The OBR baseline also already froze the LPL and UPL for 2027-28.
Scripts and outputs are in
~/reviews/ni-thresholds-freeze-2031-2026-09-30/impact/(dataset_impact.py,compare_impact.py,branch_vs_main.json).Not in this PR
start_instantof 2022-04-06, giving 7,396 in 2024 and 7,980 in 2027 (the law says £6,725 for 2024-25). Draft Fix Class 2 NICs: 2023-24 rate, the 2022-23 lower profits threshold, and the small profits threshold #1888 already fixes this, so the file is left alone here to avoid a conflict. It has no effect on liabilities, because the compulsory Class 2 rate is 0.Axiom parity
axiom:
uk:statutes/ukpga/1992/4/15#lower_profits_limit,#upper_profits_limitencoded-correct (uk/statutes/ukpga/1992/4/15.test.yaml:profits_limits_unaltered_in_2027_28_non_round_profits_above_upper_limit,profits_limits_unaltered_in_2030_31_*) | TheAxiomFoundation/rulespec-uk#351 queued (SI 2001/1004 reg 10: PT, UEL, ST, LEL, UST, AUST)What each item covers:
pe-parity, and holds the verbatim law and areview_finding. Its companion tests include policy-aligned 2027-28 and 2030-31 employer cases that mirror the YAML tests here. The Class 1 pilot already has passing 2027-28 and 2030-31 cases through the frozen personal allowance and basic rate limit.Commands run
ruff formatandruff checkon the changed Python file: clean.policyengine-core test policyengine_uk/tests/policy -c policyengine_uk: 1,299 passed.pytestontest_ni_threshold_freeze.py,test_ni_class_1_age_properties.py,test_ni_class_4_properties.py,test_ni_class_4_maximum.py,test_parameter_metadata.py,test_parameter_descriptions.py,test_fiscal_year_parameters.pyandtest_build_metadata.py: 88 passed, 1 skipped at 73c0459. At c23b9a1:test_ni_threshold_freeze.pyand the parameter metadata and description tests gave 48 passed and 5 xfailed with the two slow liability tests deselected; the national_insurance YAML suite passed 61 of 61.make documentation. CI runs both.Independent review
Four independent reviewers, one per lens, checked this PR, and a separate adversarial verifier re-checked each finding before it was accepted. Full results:
~/reviews/ni-thresholds-freeze-2031-2026-09-30/review_result.json.2027-04-01and ST2027-01-01entries breaks nothing.Confirmed findings, all fixed in c23b9a1 or in this description:
🤖 Generated with Claude Code