Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
6af7019
Add the UC and Pension Credit qualifying young person route with no e…
MaxGhenis Oct 10, 2026
2ef1d8d
Place the property tests' 16-year-old outside the reg 5(1)(a) route
MaxGhenis Oct 11, 2026
b171ef7
Address review r1c: partial-input warning, two-child limit and mixed …
MaxGhenis Oct 11, 2026
addd127
Merge remote-tracking branch 'origin/main' into uc-pc-qyp-sixteen-route
MaxGhenis Oct 11, 2026
9d2fadb
Merge remote-tracking branch 'origin/main' into uc-pc-qyp-sixteen-route
MaxGhenis Oct 11, 2026
0b0d764
Merge remote-tracking branch 'origin/main' into uc-pc-qyp-sixteen-route
MaxGhenis Oct 22, 2026
16b5c56
Assert the UC benefit cap single rate by its name after #2089
MaxGhenis Oct 22, 2026
560005c
Place other_members_with_awards outside the reg 5(1)(a) route too
MaxGhenis Oct 22, 2026
68a1fd7
test: reproduce QYP exclusion for reported own awards
MaxGhenis Oct 29, 2026
cc4d3bb
test: correct household savings and cover QYP award boundaries
MaxGhenis Oct 29, 2026
d6bcbf8
fix: exclude reported own awards from UC and PC young persons
MaxGhenis Oct 29, 2026
781245d
refactor: name the statutory QYP birthday age
MaxGhenis Oct 29, 2026
34291de
Merge origin/main into uc-pc-qyp-sixteen-route
MaxGhenis Oct 29, 2026
4b09a36
test: cover own awards in young-single readers without route overrides
MaxGhenis Oct 29, 2026
33168cc
Exclude a young person's own Income Support from Pension Credit
MaxGhenis Oct 30, 2026
c5b9850
Read is_on_income_support in the Pension Credit young person test
MaxGhenis Oct 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/uc-pc-qyp-sixteen-route.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Counted a 16-year-old outside education as a Universal Credit and Pension Credit qualifying young person until the 1 September following their 16th birthday (UC Regs 2013 reg. 5(1)(a); SPC Regs 2002 reg. 4A(1)(a)), in any year that starts before that date. Excluded young people reporting their own Universal Credit, income-related or contributory ESA, or income-based or contribution-based JSA from both statuses, and those receiving Income Support from Pension Credit's (UC Regs 2013 reg. 5(5); SPC Regs 2002 reg. 4A(5)).
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
output:
is_uc_work_allowance_eligible: false

- name: Case 6, a nonqualifying 16-year-old does not create a work allowance.
- name: Case 6, a 16-year-old outside education past the reg. 5(1)(a) route does not create a work allowance.
period: 2025
input:
people:
Expand All @@ -91,13 +91,33 @@
age: 16
is_in_non_advanced_education: false
is_in_approved_training: false
is_before_first_september_following_16th_birthday: false
uc_limited_capability_for_WRA: false
benunits:
benunit:
members: [person1, person2]
output:
is_uc_work_allowance_eligible: false

- name: Case 6a, a 16-year-old outside education in the reg. 5(1)(a) route creates a work allowance.
period: 2025
input:
people:
person1:
age: 40
is_parent: true
uc_limited_capability_for_WRA: false
person2:
age: 16
is_in_non_advanced_education: false
is_in_approved_training: false
uc_limited_capability_for_WRA: false
benunits:
benunit:
members: [person1, person2]
output:
is_uc_work_allowance_eligible: true

- name: Case 7, a looked-after child does not create a work allowance.
period: 2025
input:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,335 @@
# UC Regs 2013 reg. 5(1)(a) and SPC Regs 2002 reg. 4A(1)(a): a person who has
# reached 16 is a qualifying young person "up to, but not including, the 1st
# September following" their 16th birthday, whatever their education. The
# model counts the route for a year that starts (6 April) before that date.
# Ages are ages on 6 October; with no date of birth, a whole age places the
# birthday on 6 April (months_since_last_birthday 6).

- name: A 16-year-old outside education is a qualifying young person for UC and Pension Credit.
# 16th birthday 6 April 2026; the route runs to 31 August 2026.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 16
current_education: NOT_IN_EDUCATION
benunits:
benunit:
members: [parent, young_person]
output:
is_in_non_advanced_education: [false, false]
is_before_first_september_following_16th_birthday: [false, true]
is_qualifying_young_person_for_universal_credit: [false, true]
is_child_or_qualifying_young_person_for_universal_credit: [false, true]
is_qualifying_young_person_for_pension_credit: [false, true]
is_child_or_qualifying_young_person_for_pension_credit: [false, true]

- name: A 16-year-old apprentice qualifies through reg. 5(1)(a), which has no contract-of-employment exclusion.
# Reg. 5(3) excludes training under a contract of employment from the
# education route (b) only.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 16
current_education: POST_SECONDARY
is_apprentice: true
benunits:
benunit:
members: [parent, young_person]
output:
is_in_non_advanced_education: [false, false]
is_qualifying_young_person_for_universal_credit: [false, true]
is_qualifying_young_person_for_pension_credit: [false, true]

- name: A 16-year-old outside education whose route has ended for the year is not a qualifying young person.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 16
current_education: NOT_IN_EDUCATION
is_before_first_september_following_16th_birthday: false
benunits:
benunit:
members: [parent, young_person]
output:
is_qualifying_young_person_for_universal_credit: [false, false]
is_child_or_qualifying_young_person_for_universal_credit: [false, false]
is_qualifying_young_person_for_pension_credit: [false, false]
is_child_or_qualifying_young_person_for_pension_credit: [false, false]

- name: The education route still applies after the 1 September following the 16th birthday.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 16
current_education: UPPER_SECONDARY
is_before_first_september_following_16th_birthday: false
benunits:
benunit:
members: [parent, young_person]
output:
is_qualifying_young_person_for_universal_credit: [false, true]
is_qualifying_young_person_for_pension_credit: [false, true]

- name: A 17-year-old with a 16th birthday on 15 September 2025 is in the route until 31 August 2026.
# Born 15 September 2009: aged 17 on 6 October 2026. The 1 September
# following the 16th birthday is 1 September 2026, after 6 April 2026.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 17
date_of_birth: 20090915
current_education: NOT_IN_EDUCATION
benunits:
benunit:
members: [parent, young_person]
output:
is_before_first_september_following_16th_birthday: [false, true]
is_qualifying_young_person_for_universal_credit: [false, true]
is_qualifying_young_person_for_pension_credit: [false, true]

- name: A 16th birthday on 1 September runs the route to the 17th birthday.
# Born 1 September 2009: the 1 September following the 16th birthday (1
# September 2025) is 1 September 2026, after 6 April 2026.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 17
date_of_birth: 20090901
current_education: NOT_IN_EDUCATION
benunits:
benunit:
members: [parent, young_person]
output:
is_before_first_september_following_16th_birthday: [false, true]
is_qualifying_young_person_for_universal_credit: [false, true]

- name: A 16th birthday on 31 August ends the route that day.
# Born 31 August 2009: the route ran only on 31 August 2025, before the
# 2026-27 fiscal year starts.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 17
date_of_birth: 20090831
current_education: NOT_IN_EDUCATION
benunits:
benunit:
members: [parent, young_person]
output:
is_before_first_september_following_16th_birthday: [false, false]
is_qualifying_young_person_for_universal_credit: [false, false]
is_qualifying_young_person_for_pension_credit: [false, false]

- name: A 16-year-old receiving Universal Credit in their own right is not a qualifying young person.
# Reg. 5(5) and reg. 4A(5) apply to both routes.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 16
current_education: NOT_IN_EDUCATION
receives_benefits_in_own_right: true
benunits:
benunit:
members: [parent, young_person]
output:
is_qualifying_young_person_for_universal_credit: [false, false]
is_qualifying_young_person_for_pension_credit: [false, false]

- name: A looked-after 16-year-old is a qualifying young person but not the family's.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 16
current_education: NOT_IN_EDUCATION
is_looked_after_by_local_authority: true
benunits:
benunit:
members: [parent, young_person]
output:
is_qualifying_young_person_for_universal_credit: [false, true]
is_child_or_qualifying_young_person_for_universal_credit: [false, false]
is_qualifying_young_person_for_pension_credit: [false, true]
is_child_or_qualifying_young_person_for_pension_credit: [false, false]

- name: Neither 15- nor 18-year-olds outside education are qualifying young persons.
# A 15-year-old is a child (Welfare Reform Act 2012 s. 40); an 18-year-old's
# 1 September following their 16th birthday has passed.
period: 2026
input:
people:
parent:
age: 45
is_parent: true
child:
age: 15
current_education: NOT_IN_EDUCATION
adult_child:
age: 18
current_education: NOT_IN_EDUCATION
benunits:
benunit:
members: [parent, child, adult_child]
output:
is_before_first_september_following_16th_birthday: [false, true, false]
is_qualifying_young_person_for_universal_credit: [false, false, false]
is_child_or_qualifying_young_person_for_universal_credit: [false, true, false]
is_qualifying_young_person_for_pension_credit: [false, false, false]

- name: A lone parent with a 16-year-old outside education gets the child element and a work allowance.
# 2026-27: born 6 April 2010, before 6 April 2017, so the higher first-child
# amount: GBP 351.88 a month x 12 = GBP 4,222.56. Responsibility for a
# qualifying young person gives the work allowance (reg. 22(1)(b)): no
# housing element, so GBP 710 a month x 12 = GBP 8,520. Maximum amount: the
# single 25-or-over standard allowance GBP 424.90 x 12 = GBP 5,098.80, plus
# the child element, = GBP 9,321.36.
period: 2026
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 16
current_education: NOT_IN_EDUCATION
benunits:
benunit:
members: [parent, young_person]
households:
household:
members: [parent, young_person]
output:
uc_individual_child_element: [0, 4_222.56]
uc_child_element: 4_222.56
is_responsible_for_child_or_qualifying_young_person_for_universal_credit: true
is_uc_work_allowance_eligible: true
uc_work_allowance: 8_520
uc_maximum_amount: 9_321.36
is_uc_benefit_cap_single_claimant_rate: false

- name: A pensioner with a 16-year-old outside education gets the Pension Credit child addition.
# 2026-27: born 6 April 2010, before 6 April 2017, so the first child
# addition (Sch. IIA para. 10): GBP 81.07 a week x 52 = GBP 4,215.64. The
# single standard minimum guarantee is GBP 238.00 x 52 = GBP 12,376, so the
# minimum guarantee is GBP 16,591.64.
period: 2026
input:
people:
pensioner:
age: 70
is_SP_age: true
young_person:
age: 16
current_education: NOT_IN_EDUCATION
benunits:
benunit:
members: [pensioner, young_person]
households:
household:
members: [pensioner, young_person]
output:
child_minimum_guarantee_addition: 4_215.64
standard_minimum_guarantee: 12_376
minimum_guarantee: 16_591.64

- name: In 2025-26 the 16-year-old counts first under the two-child limit, and the youngest child loses the element.
# 2025-26: the 16-year-old (born 6 April 2009) is a qualifying young person
# through reg. 5(1)(a), so the eldest of three. The higher first-child
# amount: GBP 339 a month x 12 = GBP 4,068. The 7-year-old (born 6 April
# 2018): GBP 292.81 x 12 = GBP 3,513.72. The 5-year-old (born 6 April 2020,
# after 6 April 2017) is the third child, so no element (reg. 24A). Total
# GBP 7,581.72.
period: 2025
input:
people:
parent:
age: 40
is_parent: true
young_person:
age: 16
current_education: NOT_IN_EDUCATION
child_7:
age: 7
child_5:
age: 5
benunits:
benunit:
members: [parent, young_person, child_7, child_5]
households:
household:
members: [parent, young_person, child_7, child_5]
output:
uc_child_index: [-1, 1, 2, 3]
uc_individual_child_element: [0, 4_068, 3_513.72, 0]
uc_is_child_limit_affected: [false, false, false, true]
uc_child_element: 7_581.72

- name: A date of birth given for one person leaves another's age-placed date unchanged.
# The 17-year-old's date of birth (15 September 2009) puts them in the
# route; the 16-year-old elsewhere has none, so age places their birthday
# on 6 April 2010 and they are in it too.
period: 2026
input:
people:
parent_1:
age: 34
is_parent: true
young_person_17:
age: 17
date_of_birth: 20090915
current_education: NOT_IN_EDUCATION
parent_2:
age: 40
is_parent: true
young_person_16:
age: 16
current_education: NOT_IN_EDUCATION
benunits:
benunit_1:
members: [parent_1, young_person_17]
benunit_2:
members: [parent_2, young_person_16]
households:
household_1:
members: [parent_1, young_person_17]
household_2:
members: [parent_2, young_person_16]
output:
is_before_first_september_following_16th_birthday: [false, true, false, true]
is_qualifying_young_person_for_universal_credit: [false, true, false, true]
is_qualifying_young_person_for_pension_credit: [false, true, false, true]
Loading
Loading