Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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/claimant-not-own-child-or-qyp.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Stopped counting a benefit unit's own claimant or partner as its child or qualifying young person for Child Benefit, Child Tax Credit and Pension Credit (SSCBA 1992 ss.141 and 143 and Child Benefit (General) Regulations 2006 regs 12-13; CTC Regs 2002 reg. 3; SPC Regs 2002 Sch. IIA para. 3), so a lone 16- to 19-year-old no longer gets Child Benefit, a Child Tax Credit child element or a Pension Credit child addition for themselves.
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
# A benefit unit's claimant or partner is never its own child or qualifying
# young person for Child Benefit (SSCBA 1992 ss.141, 143(1); Child Benefit
# (General) Regulations 2006 regs 12-13), Child Tax Credit (CTC Regs 2002
# reg. 3(1) Rule 1, Cases G-H) or Pension Credit (SPC Regs 2002 Sch. IIA
# para. 3). Rates: Child Benefit eldest child £27.05 a week in 2026-27
# (gov/hmrc/child_benefit/amount/eldest.yaml); Pension Credit child addition
# £69.98 and first-child addition £81.07 a week in 2026-27
# (gov/dwp/pension_credit/guarantee_credit/child/addition.yaml,
# .../child/first/addition.yaml); CTC child element £3,455 a year in 2024-25
# (gov/dwp/tax_credits/child_tax_credit/elements/child_element.yaml).

- name: Case 1, a lone 17-year-old at school is a qualifying young person but not their own.
period: 2026
absolute_error_margin: 0.01
input:
people:
young_person:
age: 17
current_education: UPPER_SECONDARY
is_claimant_or_partner: true
benunits:
benunit:
members: [young_person]
output:
is_qualifying_young_person_for_child_benefit: true
is_qualifying_young_person_for_pension_credit: true
is_child_or_qualifying_young_person_for_child_benefit: false
is_child_or_qualifying_young_person_for_pension_credit: false
child_benefit_entitlement: 0
child_minimum_guarantee_addition: 0

- name: Case 2, a lone parent aged 17 at school gets Child Benefit and the Pension Credit child addition for the baby only.
period: 2026
absolute_error_margin: 0.01
input:
people:
parent:
age: 17
current_education: UPPER_SECONDARY
is_parent: true
is_claimant_or_partner: true
baby:
age: 1
is_claimant_or_partner: false
benunits:
benunit:
members: [parent, baby]
output:
is_child_or_qualifying_young_person_for_child_benefit: [false, true]
is_child_or_qualifying_young_person_for_pension_credit: [false, true]
# The baby is the only, so eldest, child: 27.05 * 52.
child_benefit_entitlement: 1_406.60
# Born after 6 April 2017, so the standard addition: 69.98 * 52.
child_minimum_guarantee_addition: 3_638.96

- name: Case 3, no Child Benefit or Pension Credit child addition for a partner aged 18 at school.
period: 2026
absolute_error_margin: 0.01
input:
people:
claimant:
age: 30
is_claimant_or_partner: true
partner:
age: 18
current_education: UPPER_SECONDARY
is_claimant_or_partner: true
benunits:
benunit:
members: [claimant, partner]
output:
is_qualifying_young_person_for_child_benefit: [false, true]
is_child_or_qualifying_young_person_for_child_benefit: [false, false]
is_child_or_qualifying_young_person_for_pension_credit: [false, false]
child_benefit_entitlement: 0
child_minimum_guarantee_addition: 0

- name: Case 4, a parent's 17-year-old at school stays the family's qualifying young person.
period: 2026
absolute_error_margin: 0.01
input:
people:
parent:
age: 40
is_parent: true
is_claimant_or_partner: true
young_person:
age: 17
current_education: UPPER_SECONDARY
is_claimant_or_partner: false
benunits:
benunit:
members: [parent, young_person]
output:
is_child_or_qualifying_young_person_for_child_benefit: [false, true]
is_child_or_qualifying_young_person_for_pension_credit: [false, true]
child_benefit_entitlement: 1_406.60
# Born before 6 April 2017 and the eldest: 81.07 * 52.
child_minimum_guarantee_addition: 4_215.64

- name: Case 5, Child Tax Credit counts no child element for a lone 17-year-old at school.
period: 2024
absolute_error_margin: 0.01
input:
people:
young_person:
age: 17
current_education: UPPER_SECONDARY
is_claimant_or_partner: true
benunits:
benunit:
members: [young_person]
output:
is_qualifying_young_person_for_child_tax_credit: true
is_child_or_qualifying_young_person_for_child_tax_credit: false
is_responsible_for_child_or_qualifying_young_person_for_child_tax_credit: false
CTC_child_element: 0

- name: Case 6, Child Tax Credit counts one child element for a parent's 17-year-old at school.
period: 2024
absolute_error_margin: 0.01
input:
people:
parent:
age: 40
is_parent: true
is_claimant_or_partner: true
young_person:
age: 17
current_education: UPPER_SECONDARY
is_claimant_or_partner: false
benunits:
benunit:
members: [parent, young_person]
output:
is_child_or_qualifying_young_person_for_child_tax_credit: [false, true]
is_responsible_for_child_or_qualifying_young_person_for_child_tax_credit: true
CTC_child_element: 3_455

- name: Case 7, Child Tax Credit counts the baby but not the parent aged 17 at school.
period: 2024
absolute_error_margin: 0.01
input:
people:
parent:
age: 17
current_education: UPPER_SECONDARY
is_parent: true
is_claimant_or_partner: true
baby:
age: 1
is_claimant_or_partner: false
benunits:
benunit:
members: [parent, baby]
output:
is_child_or_qualifying_young_person_for_child_tax_credit: [false, true]
CTC_child_element: 3_455

- name: Case 8, Child Tax Credit counts no child element for a partner aged 18 at school (Case H).
period: 2024
absolute_error_margin: 0.01
input:
people:
claimant:
age: 30
is_claimant_or_partner: true
partner:
age: 18
current_education: UPPER_SECONDARY
is_claimant_or_partner: true
benunits:
benunit:
members: [claimant, partner]
output:
is_qualifying_young_person_for_child_tax_credit: [false, true]
is_child_or_qualifying_young_person_for_child_tax_credit: [false, false]
CTC_child_element: 0

# Known limitation, not a rule of law. When a household is entered with no
# roles, is_claimant_or_partner reads an 18- or 19-year-old at school as the
# head's partner unless the head is at least 16 years older or someone is
# flagged a parent. The model then treats the two as a couple everywhere,
# and so pays no Child Benefit for the 18-year-old. Supplying the roles, or
# flagging the parent, restores it. In law the head can claim for a young
# person who lives with them and is not their partner (SSCBA 1992
# s.143(1)(a); Child Benefit (General) Regulations 2006 regs 12-13).
- name: Case 9, with no roles supplied an 18-year-old at school 15 years younger than the head is read as their partner.
period: 2026
absolute_error_margin: 0.01
input:
people:
head:
age: 33
student:
age: 18
current_education: UPPER_SECONDARY
benunits:
benunit:
members: [head, student]
output:
is_claimant_or_partner: [true, true]
is_couple: true
is_child_or_qualifying_young_person_for_child_benefit: [false, false]
child_benefit_entitlement: 0

- name: Case 10, the same family with the head flagged a parent gets Child Benefit for the 18-year-old.
period: 2026
absolute_error_margin: 0.01
input:
people:
head:
age: 33
is_parent: true
student:
age: 18
current_education: UPPER_SECONDARY
benunits:
benunit:
members: [head, student]
output:
is_claimant_or_partner: [true, false]
is_couple: false
is_child_or_qualifying_young_person_for_child_benefit: [false, true]
child_benefit_entitlement: 1_406.60

- name: Case 11, the same family with the roles supplied gets Child Benefit for the 18-year-old.
period: 2026
absolute_error_margin: 0.01
input:
people:
head:
age: 33
is_claimant_or_partner: true
student:
age: 18
current_education: UPPER_SECONDARY
is_claimant_or_partner: false
benunits:
benunit:
members: [head, student]
output:
is_child_or_qualifying_young_person_for_child_benefit: [false, true]
child_benefit_entitlement: 1_406.60
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@
age: 14
output:
is_child_or_qualifying_young_person_for_child_benefit: true
- name: Child Benefit child or qualifying young person for student in FE
- name: A student in FE is a Child Benefit qualifying young person, but alone is their own claimant, not their own qualifying young person
period: 2020
absolute_error_margin: 0
input:
age: 17
current_education: POST_SECONDARY
output:
is_child_or_qualifying_young_person_for_child_benefit: true
is_qualifying_young_person_for_child_benefit: true
is_claimant_or_partner: true
is_child_or_qualifying_young_person_for_child_benefit: false
- name: Benefits premiums summed
period: 2020
absolute_error_margin: 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
approved training, own-benefit receipt and looked-after status, the four
programmes' child predicates mean under 16. Their young-person predicates
agree with the statutory age/education/entry conditions the model encodes.
Legacy children are Child Benefit children/QYPs other than claimants,
partners and children placed by a local authority; the HBAI fallback and
Child Benefit, Child Tax Credit and Pension Credit children/QYPs exclude
the benefit unit's claimant and partner, as do legacy children, which are
Child Benefit children/QYPs other than children placed by a local
authority; UC's consumers apply their own claimant filter. The HBAI fallback and
the claimant-or-partner presumption follow their documented assumptions.
An unflagged member at least 16 years younger than a claimant flagged as
a parent is never their partner, at any age, unless a member under 20 and
Expand Down Expand Up @@ -196,12 +198,18 @@ def qualifying_young_person(p, programme):
return True


def child_or_young_person(p, programme):
def child_or_young_person(p, programme, claimant=False):
# Encoded responsibility filters, without their statutory exceptions:
# https://www.legislation.gov.uk/uksi/2013/376/regulation/4
# https://www.legislation.gov.uk/uksi/2002/2007/regulation/3
# https://www.legislation.gov.uk/uksi/2002/1792/schedule/IIA
# No one is responsible for themselves or their partner (SSCBA s.143;
# CTC reg 3 Rule 1 and Cases G-H; SPC Sch IIA para 3). UC's flag keeps the
# claimant and its consumers filter them (UC reg 4).
# https://www.legislation.gov.uk/ukpga/1992/4/section/143
eligible = statutory_child(p["age"]) or qualifying_young_person(p, programme)
if programme != "universal_credit" and claimant:
return False
if programme != "child_benefit" and p["is_looked_after_by_local_authority"]:
return False
return eligible
Expand Down Expand Up @@ -267,10 +275,8 @@ def legacy_child_or_young_person(p, claimant):
# anyone placed by a local authority (IS reg16(4), HB reg21(3)):
# https://www.legislation.gov.uk/uksi/1987/1967/regulation/16
# https://www.legislation.gov.uk/uksi/2006/213/regulation/21
return (
not claimant
and not p["is_looked_after_by_local_authority"]
and child_or_young_person(p, "child_benefit")
return not p["is_looked_after_by_local_authority"] and child_or_young_person(
p, "child_benefit", claimant
)


Expand Down Expand Up @@ -310,6 +316,11 @@ def assert_definitions(families, year=YEAR):
[non_advanced_education(p) for p in people],
year,
)
hbai = [hbai_dependent_child(p, family) for family in families for p in family]
assert_values(sim, "is_hbai_dependent_child", hbai, year)
assert_values(sim, "is_hbai_adult", [not child for child in hbai], year)
claimants = [c for family in families for c in claimants_or_partners(family)]
assert_values(sim, "is_claimant_or_partner", claimants, year)
for programme in PROGRAMMES:
assert_values(sim, f"is_child_for_{programme}", children, year)
assert_values(
Expand All @@ -321,14 +332,9 @@ def assert_definitions(families, year=YEAR):
assert_values(
sim,
f"is_child_or_qualifying_young_person_for_{programme}",
[child_or_young_person(p, programme) for p in people],
[child_or_young_person(p, programme, c) for p, c in zip(people, claimants)],
year,
)
hbai = [hbai_dependent_child(p, family) for family in families for p in family]
assert_values(sim, "is_hbai_dependent_child", hbai, year)
assert_values(sim, "is_hbai_adult", [not child for child in hbai], year)
claimants = [c for family in families for c in claimants_or_partners(family)]
assert_values(sim, "is_claimant_or_partner", claimants, year)
# SSCBA s137 and IS reg14 / HB reg19, projected to the encoded family:
# https://www.legislation.gov.uk/ukpga/1992/4/section/137
# https://www.legislation.gov.uk/uksi/1987/1967/regulation/14
Expand Down
Loading
Loading