Skip to content

Count 16-year-olds outside education as UC and Pension Credit qualifying young persons until the 1 September after their 16th birthday - #2279

Open
MaxGhenis wants to merge 8 commits into
mainfrom
uc-pc-qyp-sixteen-route
Open

MaxGhenis wants to merge 8 commits into
mainfrom
uc-pc-qyp-sixteen-route

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 10, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

UC Regs 2013 reg 5(1) makes a person who has reached 16 but not 20 a qualifying young person:

(a) up to, but not including, the 1st September following their 16th birthday; and
(b) up to, but not including, the 1st September following their 19th birthday, if they are enrolled on, or accepted for, approved training or a course of education [...]

SPC Regs 2002 reg 4A(1) is the same. Route (a) has no education condition. The model encoded only route (b), so a 16-year-old outside education was not a UC or Pension Credit qualifying young person (QYP), and nothing that reads QYP status counted them: the UC child element, the two-child limit order, the work allowance, UC responsibility, and the Pension Credit child addition. The benefit cap and LHA family rules already counted every 16-year-old non-claimant through a separate stand-in on main, so there the change reaches only 17-year-olds born from 1 September to 6 October.

  • New date fact. is_before_first_september_following_16th_birthday (Person, year) is true when the fiscal year starts (6 April) before the 1 September following the person's 16th birthday. It places the date from date_of_birth, or from age and months_since_last_birthday, as the model's other date-of-birth rules do, and a user can set it directly. It mirrors the Day-level input current_day_is_before_first_september_following_16th_birthday in rulespec-uk's uk/regulations/uksi/2013/376/5.yaml.
  • Both QYP variables now read: age condition AND (that fact OR the education route) AND NOT own-right benefits. Reg 5(5) and reg 4A(5) apply to both routes. Reg 5(3)'s contract-of-employment exclusion applies to route (b) only, so a 16-year-old apprentice qualifies through route (a).
  • Docstring only: is_responsible_for_child_or_young_person_for_uc_or_housing_benefit said "the UC child element does not yet model reg 5(1)(a)". It now says the UC test includes it. Its separate count of any 16-year-old non-claimant stays for Housing Benefit, whose young person follows Child Benefit's unmodelled school-leaver rules (Child Benefit (General) Regulations 2006 regs 4, 5 and 7).

The annual approximation

The route ends on a fixed 1 September; the model's year runs from 6 April, and its age is the age on 6 October. A year counts in the route if any of it falls in the route, which is the same as the year starting before that 1 September. This follows the rule that main already applies to this route for the benefit cap and LHA family rates (is_responsible_for_child_or_young_person_for_uc_or_housing_benefit, and has_sixteen_year_old_dependant in #2089), so UC's child element, work allowance, cap and LHA tests all agree on who is a QYP. It is also the approximation the task suggested ("treat age 16 as within the route for the part-year").

Who it covers:

  • Every annual age of 16. The 16th birthday falls between 7 October of the year before and 6 October, so the following 1 September is in the year or the next, always after 6 April.
  • A 17-year-old born from 1 September to 6 October. Their route runs to 1 September of the year.
  • Nobody older. Below 16 the person is a child anyway.

Bias, computed by calendar arithmetic over every birthday (date arithmetic, ages on 6 October, fiscal year 2026-27, birthdays equally likely). It compares the share of the year a person outside education is a child or in the route with what each rule counts:

Annual age True share of the year This PR (year starts before the date) Status on 6 October Status quo (route omitted)
16 0.464 1.000 0.099 0
17 0.040 0.099 0 0
Sum 0.504 1.099 (+0.595) 0.099 (−0.405) 0 (−0.504)

No annual boolean is unbiased. A status-on-6-October rule is less biased in aggregate, but it would count about one 16-year-old outside education in ten. It would also disagree with the cap and LHA family rules, which count all of them. Switching to it is one character in the new variable: year_of_first_september >= period.start.year becomes >, since 6 October falls before the 1 September of a later year only. With no date of birth, a household calculation places the birthday on 6 April, so a 16-year-old outside education is a QYP for the year and a 17-year-old is not.

Tests

YAML, hand-computed from the regulations: new qualifying_young_person_no_education_route.yaml, 14 cases (2026-27 unless stated):

Case Facts Expected
1 16, outside education UC and PC QYP; child or QYP for both
2 16, apprentice QYP: reg 5(3) excludes employment contracts from route (b) only
3 16, outside education, route set false not a QYP
4 16, upper secondary, route set false QYP through route (b)
5 17, born 15 September 2009 in the route until 31 August 2026: QYP
6 17, born 1 September 2009 16th birthday on 1 September runs the route to the 17th birthday: QYP
7 17, born 31 August 2009 the route ended on 31 August 2025: not a QYP
8 16, receiving UC in own right not a QYP (reg 5(5), reg 4A(5))
9 16, looked after QYP, but not the family's child or QYP
10 15 and 18, outside education neither is a QYP; the 15-year-old is a child
11 lone parent 40 + 16-year-old outside education first-child higher amount £351.88 × 12 = £4,222.56; work allowance (reg 22(1)(b)) £710 × 12 = £8,520; maximum amount £424.90 × 12 + £4,222.56 = £9,321.36; not the cap's single rate
12 pensioner 70 + 16-year-old outside education first child addition (Sch IIA para 10, born before 6 April 2017) £81.07 × 52 = £4,215.64; minimum guarantee £238.00 × 52 + £4,215.64 = £16,591.64
13 2025-26: lone parent, 16-year-old outside education, children 7 and 5 the 16-year-old ranks first: £339 × 12 = £4,068; the 7-year-old £292.81 × 12 = £3,513.72; the 5-year-old (born after 6 April 2017) is the third child under reg 24A: £0, limit-affected; total £7,581.72
14 a 17-year-old with date_of_birth 15 September 2009 beside another household's 16-year-old with none both in the route and QYPs: a date of birth given for one person leaves the other's age-placed date

is_uc_work_allowance_eligible.yaml Case 6 expected no work allowance for "a nonqualifying 16-year-old" outside education, which reg 5(1)(a) contradicts. It now sets the route false, and a new Case 6a asserts the default.

Fail on base (for the first 12 cases). With main's two QYP formulas restored, the new variable removed and its output lines stripped, the 10 cases that do not set the new input run: 7 fail and 3 pass. Cases 1, 2, 5, 6 and 9 fail on is_qualifying_young_person_for_universal_credit ([0, 0] for [0, 1]), case 11 on uc_individual_child_element (£0 for £4,222.56) and case 12 on child_minimum_guarantee_addition (£0 for £4,215.64). Cases 7, 8 and 10, where the route does not apply, pass on both.

Properties (test_child_and_adult_definitions_properties.py, new invariant 5):

  1. Calendar differential, exhaustive. For every date of birth from 2008 to 2011 (1,461 people, ages 14 to 18 on 6 October 2026), the new variable equals date(2026, 4, 6) < first 1 September after the 16th birthday, computed with Python date arithmetic, which shares no code with the model's month grid.
  2. Calendar differential, generated. Hypothesis draws dates of birth from 1990 to 2031 and years from 2013 to 2031.
  3. Route properties over a grid. Ages 14 to 21, every education value, own-right benefits, approved training, apprenticeship and looked-after status, with the route off and on (2,048 families). For UC and PC: switching the route on never removes QYP status; with it on, exactly ages 16 to 19 without own-right benefits qualify, whatever the education inputs; own-right benefits exclude both routes; UC and PC agree below 19.
  4. The existing oracle (qualifying_young_person) gains the route for UC and PC, and the module docstring drops the route from its list of omissions.

Mutation checks. Each mutation below was applied alone, and in each case a new test failed:

  • reading the raw date_of_birth input instead of birth_day (killed by case 14);
  • >= 901 to > 901 (1 September birthdays);
  • >= to > on the year;
  • dropping the route from UC;
  • dropping it from PC;
  • applying the own-right exclusion to route (b) only.

Two property tests elsewhere built "a member outside every programme's family" as a 16 to 19 year old not in education (test_means_test_income_properties.py, test_legacy_award_readers_properties.py). At 16 that member is now a UC QYP, so the family gains a child element (£4,068 in 2025-26) and the premise fails. CI on 6af701944 failed on exactly these two tests, with 3,618 passed and the YAML suite at 2,972 passed. Their generators now set the route false for that member (2ef1d8dbf). The test functions are unchanged, so Hypothesis draws the same examples as on main.

Run locally at 6af701944, plus the two modules above at 2ef1d8dbf (test_legacy_award_readers_properties.py 11 passed; test_means_test_income_properties.py passed):

  • pytest policyengine_uk/tests/test_child_and_adult_definitions_properties.py: 15 passed (12 existing, 3 new).
  • policyengine-core test on the new YAML, the work allowance, QYP and benefit cap files: 44 passed.
  • ruff format and ruff check: clean.

The full suites run in CI, because the host was over its memory threshold for a full local run.

Review

Independent review r1c (Opus 5.5, Subfleet job 20261010-204535-qyp16-review-r1c; the Codex lanes had no capacity) APPROVED 2ef1d8dbf and rulespec-uk#446 at 15f391e, with seven P2 findings, all addressed in b171ef789:

  • P2-1: the route variable's docs now warn that setting it for some people gives everyone else false (verified: it zeroes another household's 16-year-old), and point to date_of_birth.
  • P2-2: merge rulespec-uk#446 first so the axiom: line's companion case is on main.
  • P2-3: case 13 (two-child limit order).
  • P2-4: case 14 (mixed date-of-birth inputs).
  • P2-5: the docs state the departure from the 6 October reading that is_SP_age uses.
  • P2-6: the fail-on-base note says the outputs were stripped.
  • P2-7: the summary is qualified for the cap and LHA.

The review is in ~/reviews/pe-uk-qyp-sixteen-route-2026-10-10/review_r1c.md. A delta review (GPT-6.1 Sol, 20261011-085419-qyp16-review-delta, review_delta.md) APPROVED b171ef789 with no new defects. rulespec-uk#446 merged first, as P2-2 asked (c65fd7dfb).

addd1270d merges main (43 commits), including the claimant-or-partner filter for PC and the move of Scottish CTR to the UC definition. Run on the merged tree: 66 YAML cases (this PR's file, the work allowance, benefit cap and means-test files, and main's new claimant and CTR young-person files) and 34 property tests (the child and adult definitions, CTR young person, legacy award readers and means-test income modules) all pass.

Microsimulation impact

These are real Microsimulation runs on the Enhanced FRS 2024-25 (uk-data release 1.57.4, SHA-256 03fe15e4…8d4), run one at a time, each in its own venv, for 2025-26 to 2030-31:

Each run saved 38 arrays a year (microsim_dump.py):

  • per person: the QYP and child-or-QYP flags for UC and PC, the council tax reduction young-person flag, uc_individual_child_element, is_uc_claimant, and BHC/AHC poverty;
  • per benefit unit: UC (before and after the cap), the child element, maximum amount, work allowance, both responsibility tests, the cap rate and reduction, the LHA shared-rate test, HB, PC, the PC child addition, the Scottish two-child limit payment, council tax benefit, the CTR lone-parent test and applicable amount;
  • per household: household_net_income, council_tax_reduction and council_tax_less_benefit.

Ids and weights were checked identical, and the arrays were compared exactly, with no tolerance.

What people receive: no change in any year. These differ in 0 records in every year from 2025 to 2030:

  • UC: universal_credit and universal_credit_pre_benefit_cap;
  • benefit_cap_reduction, housing_benefit and pension_credit;
  • council tax: council_tax_reduction, council_tax_benefit and council_tax_less_benefit;
  • two_child_limit_payment, household_net_income, in_poverty_bhc and in_poverty_ahc.

So do the cap's single rate, the LHA shared-rate test, and the CTR lone-parent test and applicable amount.

What changes:

Year New UC and PC QYPs (people) UC child element (£m) UC work allowance (£m) UC maximum amount (£m) PC child addition, intermediate (£m) Scottish CTR young persons (people)
2025-26 +240,663 +27.1 +19.7 +3.0 +27.1 +137
2026-27 +241,578 +28.3 +20.5 +3.1 +28.2 +138
2027-28 +242,471 +29.0 +21.1 +3.2 +29.2 +138
2028-29 +243,441 +29.9 +21.6 +3.3 +30.1 +139
2029-30 +244,512 +30.9 +22.1 +3.3 +31.2 +139
2030-31 +245,613 +33.3 +22.7 +4.0 +33.9 +140

Why the money doesn't move (2026-27):

  • Who the new QYPs are. 101 records hold all of them: 196,728 people aged 16 and 44,850 aged 17. The 17-year-olds are those whose imputed birthdays fall from 1 September to 6 October.
  • Most head their own benefit unit. 234,205 of them are the claimant of their own unit, apart from their parents, as the FRS records them. The UC consumers exclude claimants from the child index, the child element and the responsibility test. Since 9d3a9be5a, the PC child-or-QYP flag and Scottish CTR also exclude the benefit unit's claimant and partner, so only 7,372 of the new QYPs (the dependants) change the PC flag.
  • The rest are dependants in units that don't receive UC. The 7,372 dependants are in 22 benefit units, where the UC child element rises by £28.3m, but none of those units receives UC in either run.
  • The higher maximum amounts don't reach UC. Four of those units are UC-eligible, so their maximum amount rises (+£3.1m). Their UC is £0 before and after, because the take-up draw (would_claim_uc, verified false for all four) has them not claiming.
  • The PC child addition is an ungated intermediate. It is computed for every benefit unit with a child or QYP (£62.0bn on main in 2026-27), and only units eligible for Pension Credit receive it. The +£28.2m sits in the same 22 units, none of which receives pension_credit.
  • Scottish working-age CTR now reads the UC definition (SSI 2021/249 reg 6, on main since that scheme moved to it). Two records (138 people) become young persons for it, and no CTR amount changes.

An earlier run against 3173baa89 (main before 9d3a9be5a) gave the same paid outputs (all £0). Its PC child-addition intermediate rose by £1.0bn, because own-unit heads then counted as their own QYPs; 9d3a9be5a removed that.

The route would reach the parents' claims only if the data put these 16- and 17-year-olds in their parents' benefit units. The uk-data investigation the UK hub started measured that on this branch against 3173baa89, with uk-data 1.58.0:

Whether to re-form those units is the open question in PolicyEngine/policyengine-uk-data#562.

Follow-ups (not in this PR; queued with the UK hub)

  • Child Benefit regs 4, 5 and 7 (school leavers), and through them Housing Benefit and legacy young persons, are not modelled. Nor is CTC Regs 2002 reg 4 (up to 2024-25).
  • Pension Credit reg 4A(1)(b)'s 1 September after the 19th birthday is not modelled. Reg 4A(5)'s income support exclusion is also missing: receives_benefits_in_own_right covers UC, ESA and JSA.
  • After Give Universal Credit and Housing Benefit their own benefit cap and LHA shared-accommodation rules #2089 lands, has_sixteen_year_old_dependant in the UC cap's single rate is redundant with UC responsibility, except for 16-year-olds receiving benefits in their own right or looked after.
  • Already done on main since this PR opened: Scottish working-age CTR reads the UC definition, and the PC child-or-QYP flag excludes the benefit unit's claimant and partner (9d3a9be5a).

axiom: uk:regulations/uksi/2013/376/5#qualifying_young_person encoded-correct, companion case aged_16_before_first_september_following_16th_birthday_without_education_or_training_qualifies in uk/regulations/uksi/2013/376/5.test.yaml (TheAxiomFoundation/rulespec-uk#446, merged c65fd7dfb); uk/regulation/uksi/2002/1792/4A TheAxiomFoundation/rulespec-uk#360 queued (corpus scope in TheAxiomFoundation/axiom-corpus#765 not yet released)

🤖 Generated with Claude Code

Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/qualifying_young_person_no_education_route.yaml::A 16-year-old outside education is a qualifying young person for UC and Pension Credit.

…ducation condition

UC Regs 2013 reg. 5(1)(a) and SPC Regs 2002 reg. 4A(1)(a) make a person who
has reached 16 a qualifying young person up to the 1 September following
their 16th birthday, whatever their education. The model encoded only the
education route, so a 16-year-old outside education was not a UC or PC
qualifying young person.

is_before_first_september_following_16th_birthday places that date from the
date of birth and counts the route for a year that starts (6 April) before
it: every annual age of 16, and a 17-year-old born from 1 September to 6
October. Both QYP variables OR it with the education route, under the same
age band and own-right benefits exclusion. Tests: YAML cases hand-computed
from the regulations (flags, date edges, UC child element and work
allowance, PC child addition), the property-test oracle, a calendar
differential over every birth date in 2008-2011 and across years, and a
grid test of sufficiency, monotonicity, exclusion and UC/PC agreement.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 10, 2026
Two property tests build a member who is outside every programme's family
as a 16 to 19 year old not in education. At 16 that member is now a UC
qualifying young person under reg 5(1)(a), so the family's UC gains a child
element and the tests' premise no longer holds. Their generators now set
is_before_first_september_following_16th_birthday false for that member.
The test functions are unchanged, so Hypothesis draws the same examples.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 11, 2026
…nefit reg. 4 period

test_excluded_member_never_changes_is_eligibility adds a member aged 16 or over who is not in education, on the premise that they are not a qualifying young person. With reg. 4 a 16-year-old who has left education is one until the 31 August after their 16th birthday, so the generator now puts the member past that date, as #2279 does for the same reason in two other property tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 11, 2026 08:53
…date-of-birth tests

- The route variable's docs now warn that setting it for some people gives
  everyone else false, and point to date_of_birth for placing one person.
  They also state that the rule departs from the 6 October reading that
  is_SP_age uses.
- YAML: a 2025-26 case where the 16-year-old ranks first under the
  two-child limit and the youngest child loses the element (GBP 7,581.72),
  and a case mixing a person with date_of_birth and one without (both in
  the route). The second kills a mutant that reads the raw date_of_birth
  input instead of birth_day.
- means_test_income_members.yaml: the 17-year-old case's name says why they
  are outside the route.

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

Copy link
Copy Markdown
Collaborator Author

PE-UK main fix landed (UK hub, 2026-10-11 21:42Z): #2349 merged as ed7b42f9. It fixes test_dataframe_dataset.py::test_an_exported_frame_loads_back_and_exports_itself, which failed on every PR after #2251. Merge main into this branch and push once; don't re-run an old run, because re-runs use the original commit. If this PR's only Test failure was that test, the next run should be green.

MaxGhenis added a commit that referenced this pull request Oct 12, 2026
Brings in #2279's head 9d2fadb.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 12, 2026
…outes

Brings in #2299's round 1 fixes, #2387 and #2279's head 9d2fadb.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 12, 2026
Brings in #2279's head 9d2fadb and main e01f2f5 with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 12, 2026
…lusion

Brings in #2301 and #2299's round 1 fixes, #2387 and #2279's head. The
one conflict, the CTC QYP docstring, keeps both changes: the ceased-
education wording and the Income Support own-right input.

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

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs changes before merge. The law and the new date fact are right. But once the branch is rebased on main, a property on main fails on a real reg 5(5) gap that this PR opens.

@MaxGhenis

  1. must, is_qualifying_young_person_for_universal_credit.py:48 (and is_qualifying_young_person_for_pension_credit.py:43): with the new route, a 16-year-old outside education who reports their own ESA or JSA counts as a qualifying young person. Reg 5(5) and reg 4A(5) say a person receiving ESA or JSA is not one. The exclusion reads only receives_benefits_in_own_right, a bare input that defaults to false and ignores the person's own award reports (esa_income_reported, jsa_income_reported). Before this PR the education condition hid the gap, because no 16-year-old outside education qualified.

    • It shows up on main's test_other_members_awards_never_change_the_readers_for_young_singles (added since this branch's base). On a local merge with main, Hypothesis finds this case: a single claimant aged 18 in Scotland, plus a non-dependant aged 16, outside education, reporting £5,000 of ESA.
    • On the merge, the 16-year-old is a UC QYP, so the 18-year-old gains a £4,068 child element and an £8,208 work allowance. UC goes from £3,803.76 to £7,871.76, and the CTR applicable income moves with it. On main the 16-year-old is not a QYP and nothing moves.
    • The generator patches in test_legacy_award_readers_properties.py:194 and test_means_test_income_properties.py:77 set the route false for the outside member. That hides the same interaction rather than testing it.
      Please make the own-right exclusion also read the person's own reported UC, ESA and JSA awards (or derive receives_benefits_in_own_right from them), and add a YAML case for a 16-year-old outside education reporting ESA.
  2. must: the branch conflicts with main in test_legacy_award_readers_properties.py (other_members(): main added **draw(work()) beside this PR's route line). Keep both lines. With that resolution, the rest of the related suites pass on the merge (below).

  3. nit, is_before_first_september_following_16th_birthday.py:42-44: the 16 in + 16 is the statutory age in reg 5(1)(a) and reg 4A(1)(a). Reading it from a parameter, or at least a named constant with the citation, would follow the no-hard-coded-values rule. 901 and 10_000 are date-encoding constants and are fine with a comment.

  4. nit, overlaps: the drafts #2299, #2300, #2301 and #2302 carry this PR's commits, so they need rebasing once this lands. #2398 edits a different part of test_legacy_award_readers_properties.py and merges cleanly with main.

The annual approximation ("the year starts before the 1 September") is clearly stated, with its bias table, and matches the cap and LHA rules already on main. I have no objection to it.

What I checked

  • Read the full diff and PR body. Read UC Regs 2013 reg 5 and SPC Regs 2002 reg 4A on legislation.gov.uk. Route (a) has no education condition, and the (5) exclusions apply to both routes. Reg 4A(5) also lists income support, which the PR documents as not modelled.
  • Checked the date logic by hand. A birthday on 1 September moves the route to the next year. A birthday on 31 August ends it that day. With no date of birth, the birthday is placed on 6 April.
  • Hand-checked YAML cases 11 and 12. Case 11: £351.88 × 12 = £4,222.56, and £424.90 × 12 + £4,222.56 = £9,321.36. Case 12: £78.10 × 1.038 = £81.07, × 52 = £4,215.64, and £238.00 × 52 = £12,376.
  • On the PR head (9d2fadb): the new YAML file, the work allowance file and means_test_income_members.yaml give 29 passed. test_child_and_adult_definitions_properties.py gives 15 passed. ruff check and ruff format --check on the changed Python files pass.
  • Local merge with main 714b143 (not pushed), resolved as in finding 2:
    • 754 YAML cases pass (UC, benefit cap, legacy award readers, the ESA and JSA remunerative-work files, and the new file);
    • the property run (-x) stopped on the young-singles failure in finding 1, after 59 passed;
    • I re-ran that test alone and it failed the same way, then probed the case on the merge and on main.
  • CI was green at 9d2fadb, but that run predates main's new property test.
  • Not run: the microsimulation tables. They need the Enhanced FRS, which I did not download.

🤖 Generated with Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

UK hub takeover for the Budget fix sprint (Max, 21 Oct). The owner session local_6b7a5349 has been idle since mid-October. The hub woke it on 21 Oct at 23:58Z, and it did not start. To land this before the Budget model locks (the first pe-uk release cut by about 12:00Z Thu 22 Oct), the hub has taken it over as build 20261021-211253-sprint-2279, which merges main, re-tests, pushes as a fast-forward and marks it ready. The hub then reviews it and lands it through the merge queue.

If the owner session wakes, please don't push to this branch; comment here instead, so there's only one writer.

🤖 Generated with Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

UK hub: takeover withdrawn. The owner session has been woken (22 Oct 01:25Z) and is finishing this PR itself, so the hub's build is cancelled. One writer: the owner session.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 21, 2026 21:18
# Conflicts:
#	policyengine_uk/tests/test_legacy_award_readers_properties.py
#2089 replaced the shared is_benefit_cap_single_claimant_rate with
is_uc_benefit_cap_single_claimant_rate and its Housing Benefit counterpart.
The lone-parent case asserts the UC rate, which is still false: the
16-year-old outside education is a qualifying young person the claimant is
responsible for.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 22, 2026
…routes

Brings in #2387 at 78a8cca, which carries main. The one conflict, the
legacy readers property test, takes #2279's current version: this PR's
own commits do not touch it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 22, 2026
…outes

Brings in #2299 on main with #2279 and #2387.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 22, 2026
…lusion

Brings in #2301's apprentice fix and the restack on main with #2279,
apprentice-on-a-course wording and this PR's Income Support input.

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

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base 582b86315c against head 753fb39fe6, 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: 0 (thresholds in report_spec.yaml; a flag does not fail the job).

Workflow run and full report

Notes

  • In the years a figure from fewer than 10 records is suppressed (spending.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.

Moves flagged for review

None.

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Standard reform costings (change in gov_balance)

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Reduce Universal Credit taper rate to 20% -£1.6m -£1.6m -£1.7m -£1.7m -£2.1m -£2.1m -£2.2m

Standard reforms: change in each reform's target

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Reduce Universal Credit taper rate to 20%: change in universal_credit +£1.6m +£1.6m +£1.7m +£1.7m +£2.1m +£2.1m +£2.2m

Household net income by decile

No household's net income changes in any year.

No change in any year: receipts by tax head; government balance, each component counted once; model totals; components the model counts twice; household income totals; population; poverty rates; people in poverty; inequality; mean household net income in each side's own deciles.

Checks failing on both base and head (1)
  • VAT is never negative (sign:vat): 2025-26: 76 units below zero, a weighted £-54,797,972 in total; 2026-27: 76 units below zero, a weighted £-56,271,349 in total; 2027-28: 76 units below zero, a weighted £-57,609,146 in total
Counted-once check

Each of 84 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.

Provenance
Side Commit Runtime Environment hash Partition hash Time
base main 582b86315c uk 2.146.1 (files 792e7aaf1a15), core 3.33.2, py 3.13.16 aarch64 5d40da9d9749 f210f83d5be4 1435.93s
head #2279 merged into main 753fb39fe6 uk 2.146.1 (files e63dcb1b8661), core 3.33.2, py 3.13.16 aarch64 5d40da9d9749 f210f83d5be4 1464.85s

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
Income tax £299.29bn £319.01bn £336.47bn £351.62bn £367.17bn £385.29bn £403.59bn
National Insurance (employee and self-employed) £52.58bn £54.94bn £56.75bn £58.48bn £60.62bn £62.57bn £65.03bn
National Insurance (employer) £152.64bn £159.18bn £164.14bn £168.73bn £176.11bn £181.72bn £188.90bn
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.62bn £13.06bn £13.55bn £14.04bn £14.54bn £15.09bn £15.65bn
Student loan repayments £7.83bn £8.12bn £8.35bn £8.56bn £8.79bn £9.04bn £9.38bn
VAT £253.71bn £260.53bn £266.72bn £273.14bn £279.83bn £286.71bn £293.71bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.53bn £24.64bn £26.64bn £26.69bn £26.42bn £25.76bn £26.35bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.28bn £4.43bn £4.44bn £4.46bn £4.48bn £4.51bn £4.53bn
Council tax £49.56bn £52.45bn £55.78bn £59.39bn £62.98bn £66.74bn £70.70bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.48bn £0.49bn £0.51bn £0.52bn
Northern Ireland domestic rates £0.55bn £0.58bn £0.61bn £0.63bn £0.67bn £0.70bn £0.73bn
Business rates £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn
Stamp duty land tax (own purchases, and corporate until the £10.06bn £10.56bn £10.98bn £11.40bn £11.81bn £12.23bn £12.64bn
Land transaction tax (Wales) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land and buildings transaction tax (Scotland) £0.01bn £0.01bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension £122.15bn £126.64bn £127.57bn £129.47bn £133.29bn £137.24bn £141.32bn
Pension Credit £6.68bn £7.07bn £7.06bn £7.13bn £7.26bn £7.39bn £7.49bn
Winter Fuel Payment £1.70bn £1.68bn £1.59bn £1.58bn £1.57bn £1.55bn £1.52bn
Pension Age Winter Heating Payment (Scotland) £0.19bn £0.20bn £0.20bn £0.21bn £0.21bn £0.22bn £0.22bn
Universal Credit £78.81bn £83.11bn £84.93bn £86.69bn £87.61bn £89.03bn £90.35bn
Housing Benefit £8.59bn £8.93bn £9.19bn £9.34bn £9.61bn £9.87bn £10.15bn
Council Tax Reduction £1.99bn £2.03bn £2.08bn £2.13bn £2.18bn £2.23bn £2.29bn
Employment and Support Allowance (income-related) £2.12bn £2.18bn £2.23bn £2.28bn £2.33bn £2.39bn £2.45bn
Employment and Support Allowance (contribution-based) £5.22bn £5.36bn £5.49bn £5.62bn £5.76bn £5.90bn £6.04bn
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.30bn £0.31bn £0.32bn £0.33bn £0.33bn
Income Support £0.12bn £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 £27.05bn £28.19bn £28.94bn £29.64bn £30.37bn £31.11bn £31.87bn
Disability Living Allowance £7.52bn £7.83bn £8.04bn £8.24bn £8.44bn £8.65bn £8.86bn
Attendance Allowance £8.71bn £9.08bn £9.32bn £9.55bn £9.78bn £10.02bn £10.26bn
Carer's Allowance £4.50bn £4.69bn £4.81bn £4.93bn £5.05bn £5.17bn £5.29bn
Carer Support Payment (Scotland) £0.31bn £0.32bn £0.33bn £0.34bn £0.35bn £0.36bn £0.36bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Severe Disablement Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
Industrial Injuries Disablement Benefit £0.51bn £0.52bn £0.53bn £0.54bn £0.56bn £0.57bn £0.59bn
Armed Forces Compensation Scheme £0.61bn £0.62bn £0.64bn £0.65bn £0.67bn £0.69bn £0.70bn
War Widow's or Widower's Pension £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Benefit £16.23bn £16.91bn £17.32bn £17.73bn £18.16bn £18.60bn £19.04bn
Scottish Child Payment £0.50bn £0.52bn £0.53bn £0.55bn £0.56bn £0.57bn £0.58bn
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.32bn £3.41bn £3.49bn £3.57bn £3.66bn £3.75bn £3.84bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £1.13bn £1.16bn £1.19bn £1.22bn £1.25bn £1.28bn £1.31bn
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.70bn £0.72bn £0.74bn £0.76bn £0.78bn
Tax-Free Childcare £0.55bn £0.56bn £0.57bn £0.58bn £0.60bn £0.61bn £0.59bn
Extended childcare entitlement £2.66bn £3.14bn £3.23bn £3.30bn £3.38bn £3.47bn £3.55bn
Universal childcare entitlement £3.32bn £3.59bn £3.69bn £3.78bn £3.88bn £3.99bn £4.08bn
Targeted childcare entitlement £0.57bn £0.60bn £0.62bn £0.63bn £0.65bn £0.66bn £0.67bn
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 £204.68bn £205.46bn £206.22bn £207.04bn £207.96bn £208.89bn £209.79bn
State education spending £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Transport subsidy spending £25.15bn £25.25bn £25.34bn £25.44bn £25.55bn £25.67bn £25.78bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension 11,308k 11,208k 10,906k 10,812k 10,860k 10,908k 10,955k
Pension Credit 1,491k 1,489k 1,478k 1,459k 1,459k 1,457k 1,453k
Winter Fuel Payment 7,092k 7,011k 6,601k 6,517k 6,493k 6,381k 6,254k
Pension Age Winter Heating Payment (Scotland) 806k 807k 807k 805k 809k 812k 816k
Universal Credit 6,371k 6,379k 6,409k 6,420k 6,395k 6,387k 6,371k
Housing Benefit 1,254k 1,252k 1,254k 1,240k 1,245k 1,247k 1,249k
Council Tax Reduction 3,186k 3,211k 3,224k 3,245k 3,264k 3,280k 3,293k
Employment and Support Allowance (income-related) 187k 188k 188k 189k 190k 190k 191k
Employment and Support Allowance (contribution-based) 722k 724k 727k 730k 733k 737k 740k
Jobseeker's Allowance (income-based) 0k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 67k 67k 68k 68k 68k 69k 69k
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,581k 3,595k 3,608k 3,623k 3,639k 3,655k 3,671k
Disability Living Allowance 1,296k 1,301k 1,306k 1,311k 1,317k 1,323k 1,329k
Attendance Allowance 1,701k 1,708k 1,714k 1,721k 1,729k 1,736k 1,744k
Carer's Allowance 1,038k 1,042k 1,046k 1,050k 1,055k 1,059k 1,064k
Carer Support Payment (Scotland) 71k 72k 72k 72k 73k 73k 73k
Carer's Allowance Supplement (Scotland) 0k 72k 72k 72k 73k 73k 73k
Severe Disablement Allowance 4k 4k 4k 4k 4k 4k 4k
Industrial Injuries Disablement Benefit 137k 138k 139k 139k 140k 140k 141k
Armed Forces Compensation Scheme 94k 94k 94k 95k 95k 95k 96k
War Widow's or Widower's Pension 0k 0k 0k 0k 0k 0k 0k
Child Benefit 8,136k 8,165k 8,185k 8,215k 8,249k 8,282k 8,314k
Scottish Child Payment 352k 354k 355k 356k 357k 358k 357k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 200k 201k 202k 203k 204k 204k 205k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 334k 335k 336k 338k 339k 341k 342k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 182k 183k 183k 184k 185k 186k 186k
Sure Start Maternity Grant 26k 26k 26k 27k 27k 27k 27k
Bereavement Support Payment 98k 98k 99k 99k 100k 100k 101k
Tax-Free Childcare 1,017k 1,028k 1,028k 1,033k 1,034k 1,038k 1,023k
Extended childcare entitlement 665k 671k 675k 677k 682k 686k 687k
Universal childcare entitlement 986k 989k 992k 997k 1,002k 1,013k 1,015k
Targeted childcare entitlement 119k 120k 120k 121k 121k 122k 121k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 98k 99k 99k 100k 100k 100k 101k
Adult Dependants' Grant 18k 18k 12k 13k 13k 13k 13k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £899.38bn £939.24bn £976.18bn £1,009.38bn £1,045.66bn £1,082.60bn £1,123.48bn
Government spending £536.24bn † £550.45bn † £556.57bn † £563.61bn † £572.15bn † £581.38bn † £590.55bn †
Government balance, each receipt once £363.15bn † £388.79bn † £419.61bn † £445.77bn † £473.51bn † £501.23bn † £532.93bn †
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 £902.51bn £942.37bn £979.31bn £1,012.51bn £1,048.79bn £1,085.73bn £1,126.61bn
household_tax £496.17bn £522.66bn £548.45bn £570.64bn £592.85bn £617.30bn £644.01bn
pre_budget_change_household_tax £488.34bn £514.54bn £540.10bn £561.60bn £583.57bn £607.75bn £634.11bn
gov_spending £536.24bn † £550.45bn † £556.57bn † £563.61bn † £572.15bn † £581.38bn † £590.55bn †
household_benefits £536.24bn † £550.45bn † £556.57bn † £563.61bn † £572.15bn † £581.38bn † £590.55bn †
gov_balance £366.28bn † £391.92bn † £422.74bn † £448.90bn † £476.64bn † £504.36bn † £536.06bn †
Components the model counts twice: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
corporate_sdlt, counted again inside expected_sdlt £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,657.06bn £1,719.25bn £1,771.68bn £1,821.99bn £1,872.88bn £1,930.99bn £2,001.98bn
Household net income £1,657.86bn † £1,706.28bn † £1,737.92bn † £1,772.02bn † £1,808.10bn † £1,849.73bn † £1,901.48bn †
Household net income (HBAI definition) £1,466.42bn £1,513.06bn £1,545.11bn £1,578.08bn £1,612.09bn £1,651.13bn £1,701.58bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,514k 69,778k 70,036k 70,316k 70,626k 70,944k 71,249k
Benefit units 35,247k 35,381k 35,512k 35,654k 35,811k 35,972k 36,127k
Households 31,167k 31,285k 31,401k 31,526k 31,665k 31,808k 31,944k
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 15.9% 15.0% 15.5% 15.6% 15.7% 15.8% 15.8%
Absolute poverty, before housing costs: children 23.7% 20.9% 21.6% 21.4% 21.6% 21.8% 21.7%
Absolute poverty, before housing costs: working-age adults 13.8% 13.4% 14.0% 14.1% 14.2% 14.3% 14.3%
Absolute poverty, before housing costs: pensioners 13.7% 13.2% 13.3% 13.5% 13.6% 13.7% 13.7%
Absolute poverty, after housing costs: everyone 21.1% 20.6% 21.3% 21.5% 21.9% 22.2% 22.3%
Absolute poverty, after housing costs: children 32.1% 30.3% 30.9% 31.1% 31.7% 32.3% 32.5%
Absolute poverty, after housing costs: working-age adults 19.6% 19.4% 20.2% 20.4% 20.8% 21.0% 21.0%
Absolute poverty, after housing costs: pensioners 12.8% 12.6% 12.6% 13.1% 13.4% 13.4% 13.4%
Relative poverty, before housing costs: everyone 16.9% 16.4% 16.5% 16.6% 16.6% 16.7% 16.7%
Relative poverty, before housing costs: children 25.6% 23.5% 23.2% 23.2% 23.2% 23.2% 23.2%
Relative poverty, before housing costs: working-age adults 14.4% 14.4% 14.6% 14.8% 14.9% 15.0% 15.0%
Relative poverty, before housing costs: pensioners 15.0% 14.9% 14.4% 14.7% 14.3% 14.3% 14.6%
Relative poverty, after housing costs: everyone 21.7% 21.3% 21.4% 21.5% 21.6% 21.9% 22.0%
Relative poverty, after housing costs: children 33.0% 31.6% 31.0% 31.1% 31.3% 31.6% 32.0%
Relative poverty, after housing costs: working-age adults 20.0% 20.0% 20.3% 20.4% 20.6% 20.8% 20.9%
Relative poverty, after housing costs: pensioners 13.7% 13.1% 12.8% 13.0% 12.7% 12.9% 13.2%
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,056k 10,435k 10,856k 10,960k 11,091k 11,220k 11,234k
Absolute poverty, before housing costs: children 3,560k 3,141k 3,261k 3,253k 3,298k 3,334k 3,335k
Absolute poverty, before housing costs: working-age adults 5,862k 5,735k 6,068k 6,164k 6,235k 6,314k 6,321k
Absolute poverty, before housing costs: pensioners 1,634k 1,559k 1,527k 1,543k 1,558k 1,572k 1,579k
Absolute poverty, after housing costs: everyone 14,663k 14,366k 14,907k 15,144k 15,491k 15,755k 15,874k
Absolute poverty, after housing costs: children 4,809k 4,556k 4,676k 4,719k 4,835k 4,939k 4,994k
Absolute poverty, after housing costs: working-age adults 8,333k 8,326k 8,775k 8,931k 9,122k 9,275k 9,329k
Absolute poverty, after housing costs: pensioners 1,521k 1,484k 1,456k 1,493k 1,533k 1,541k 1,551k
Relative poverty, before housing costs: everyone 11,780k 11,464k 11,523k 11,660k 11,708k 11,832k 11,879k
Relative poverty, before housing costs: children 3,840k 3,538k 3,506k 3,524k 3,542k 3,554k 3,565k
Relative poverty, before housing costs: working-age adults 6,154k 6,160k 6,356k 6,464k 6,530k 6,636k 6,628k
Relative poverty, before housing costs: pensioners 1,786k 1,766k 1,661k 1,673k 1,636k 1,643k 1,686k
Relative poverty, after housing costs: everyone 15,110k 14,866k 14,956k 15,109k 15,281k 15,513k 15,696k
Relative poverty, after housing costs: children 4,948k 4,756k 4,684k 4,715k 4,771k 4,840k 4,916k
Relative poverty, after housing costs: working-age adults 8,531k 8,560k 8,793k 8,917k 9,054k 9,187k 9,257k
Relative poverty, after housing costs: pensioners 1,631k 1,551k 1,479k 1,477k 1,456k 1,486k 1,523k
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.3074 0.3052 0.3066 0.3072 0.3078 0.3084 0.3095
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,700 † £17,996 † £17,934 † £17,991 † £18,328 † £18,506 † £18,680 †
Decile 2: mean household_net_income per household £28,323 † £29,102 † £28,705 † £28,983 † £29,330 † £29,734 † £30,317 †
Decile 3: mean household_net_income per household £34,629 † £35,807 † £36,445 † £37,019 † £37,221 † £37,811 † £38,492 †
Decile 4: mean household_net_income per household £39,334 † £40,803 † £41,758 † £42,693 † £43,435 † £44,025 † £44,926 †
Decile 5: mean household_net_income per household £44,856 † £46,150 † £47,077 † £47,439 † £48,027 † £49,181 † £50,036 †
Decile 6: mean household_net_income per household £47,930 † £49,334 † £50,290 † £51,174 † £52,167 † £52,953 † £54,205 †
Decile 7: mean household_net_income per household £56,319 † £57,568 † £58,473 † £59,423 † £60,149 † £61,621 † £62,893 †
Decile 8: mean household_net_income per household £69,267 † £70,356 † £71,672 † £72,810 † £74,351 † £75,797 † £77,578 †
Decile 9: mean household_net_income per household £79,648 † £81,992 † £83,192 † £84,486 † £86,056 † £87,570 † £90,645 †
Decile 10: mean household_net_income per household £117,618 † £120,489 † £122,421 † £124,552 † £126,802 † £129,073 † £131,887 †
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.21bn £6.50bn £6.70bn £6.90bn £7.11bn £7.34bn £7.62bn
Raise higher rate by 1pp £3.54bn £3.82bn £4.05bn £4.27bn £4.49bn £4.76bn £4.96bn
Raise personal allowance by ~800GBP/year £-3.83bn £-3.96bn £-4.03bn £-4.10bn £-4.19bn £-4.29bn £-2.02bn
Raise child benefit by 25GBP/week per additional child £-2.00bn £-1.76bn £-1.64bn £-1.54bn £-1.44bn £-1.34bn £-1.24bn
Reduce Universal Credit taper rate to 20% £-20.54bn £-21.10bn £-21.45bn £-21.88bn £-21.96bn £-22.33bn £-22.79bn
Raise Class 1 main employee NICs rate to 10% £11.06bn £11.51bn £11.83bn £12.14bn £12.47bn £12.81bn £13.29bn
Raise VAT standard rate by 2pp £25.01bn £25.68bn £26.29bn £26.92bn £27.58bn £28.26bn £28.95bn
Raise additional rate by 3pp £2.83bn £3.07bn £3.27bn £3.47bn £3.67bn £3.91bn £4.23bn
Raise the Universal Credit standard allowance by 10% £-3.04bn £-3.17bn £-3.24bn £-3.32bn £-3.37bn £-3.42bn £-3.47bn
Raise the State Pension by 10% £-7.81bn £-8.07bn £-7.99bn £-8.11bn £-8.36bn £-8.66bn £-9.02bn
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.36bn £6.65bn £6.86bn £7.07bn £7.28bn £7.52bn £7.80bn
Raise higher rate by 1pp: change in income_tax £3.55bn £3.83bn £4.06bn £4.28bn £4.50bn £4.77bn £4.97bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.96bn £-4.10bn £-4.19bn £-4.26bn £-4.36bn £-4.47bn £-1.77bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.34bn £2.15bn £2.03bn £1.92bn £1.82bn £1.71bn £1.59bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £20.53bn £21.09bn £21.44bn £21.87bn £21.95bn £22.32bn £22.78bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £11.33bn £11.79bn £12.13bn £12.44bn £12.78bn £13.13bn £13.62bn
Raise VAT standard rate by 2pp: change in vat £25.01bn £25.68bn £26.29bn £26.92bn £27.58bn £28.26bn £28.95bn
Raise additional rate by 3pp: change in income_tax £2.83bn £3.07bn £3.27bn £3.47bn £3.67bn £3.91bn £4.23bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £3.04bn £3.17bn £3.25bn £3.32bn £3.37bn £3.43bn £3.47bn
Raise the State Pension by 10%: change in state_pension £10.72bn £11.23bn £11.37bn £11.62bn £12.08bn £12.54bn £13.07bn

#2549 added other_members_with_awards ("As other_members") for the young
singles and working parents properties. It draws a 16-60-year-old outside
education, but unlike other_members it did not set
is_before_first_september_following_16th_birthday false. A drawn
16-year-old was therefore a UC qualifying young person, so the family
changed. In the shrunk case, a single 19-year-old in Wales with GBP 12,000
earnings, housing_benefit_applicable_income went from GBP 11,740 to 0, and
the two properties failed.

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

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