Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
bd9a5a7
Give Universal Credit and Housing Benefit their own benefit cap and L…
MaxGhenis Oct 2, 2026
e0d8b24
Add hand-computed YAML tests for each scheme's cap exceptions, reduct…
MaxGhenis Oct 2, 2026
b6d61ef
Add differential and property tests for the split; HB tests pin the H…
MaxGhenis Oct 2, 2026
c7bd4c0
Exercise the HB reg 75D(2) minimum in the split property examples
MaxGhenis Oct 2, 2026
12ac785
Format the HB LHA order property test
MaxGhenis Oct 2, 2026
c8fd1c9
Address review r1: registry, AFIP cap exception, bedroom-correct LHA …
MaxGhenis Oct 3, 2026
f4aa92b
Merge origin/main (88ecf58b8) into uc-hb-split-shared-cap-lha-rules
MaxGhenis Oct 9, 2026
965bbad
Point two YAML cases at main's HB non-dependant rule and the UC reduc…
MaxGhenis Oct 9, 2026
1f9a71a
Name the UC reduction in the Housing Benefit passport's circularity note
MaxGhenis Oct 9, 2026
5366f04
Compare HB LHA categories with the old shared one only where the bedr…
MaxGhenis Oct 10, 2026
b2a3389
Merge origin/main (e89b8abcf) into uc-hb-split-shared-cap-lha-rules
MaxGhenis Oct 10, 2026
9e9c461
Count only the claimants in the UC reg 60C age exception
MaxGhenis Oct 10, 2026
b432452
Merge origin/main (f7e5745bd) into uc-hb-split-shared-cap-lha-rules
MaxGhenis Oct 10, 2026
04ac713
Merge origin/main (a3752304e) into uc-hb-split-shared-cap-lha-rules
MaxGhenis Oct 10, 2026
cbe143b
Merge remote-tracking branch 'origin/main' into uc-hb-split-shared-ca…
MaxGhenis Oct 11, 2026
61b4127
Hold each scheme's benefit cap reduction in the legacy readers property
MaxGhenis Oct 11, 2026
b156c1c
Merge remote-tracking branch 'origin/main' into uc-hb-split-shared-ca…
MaxGhenis Oct 11, 2026
a49194f
Merge remote-tracking branch 'origin/main' into uc-hb-split-shared-ca…
MaxGhenis Oct 13, 2026
d7697ed
Read the LCWRA element in the award for the UC cap exception
MaxGhenis Oct 13, 2026
2391f94
Revert "Read the LCWRA element in the award for the UC cap exception"
MaxGhenis Oct 13, 2026
b7e0b23
Restore main's claimants() and update docs after #2119 (review of d76…
MaxGhenis Oct 13, 2026
270bfaa
Merge origin/main a98f8f084 (#2076 and others) into uc-hb-split-share…
MaxGhenis Oct 15, 2026
85d9be9
Merge origin/main cb1770774 (#2399, #2085 and others) into uc-hb-spli…
MaxGhenis Oct 15, 2026
5f7a7d1
Merge origin/main 7e10ccd98 (#2391, #2402, #2405, #2418, #2419, #2420…
MaxGhenis Oct 15, 2026
ea04882
Describe the callers of the UC-or-HB responsibility helper correctly
MaxGhenis Oct 15, 2026
ea46f7c
Cap a family paid both UC and HB once, through UC (UC reg 80(2A), HB …
MaxGhenis Oct 15, 2026
4cfc373
Merge origin/main a94c65df9 (#2398, #2240, #2428, #2437, #2284, #2241…
MaxGhenis Oct 16, 2026
ab514f5
Answer the 4cfc373c4 delta review's P3s in docs and the changelog
MaxGhenis Oct 16, 2026
e640e0a
Merge origin/main e7610ac52 (#2242) into uc-hb-split-shared-cap-lha-r…
MaxGhenis Oct 16, 2026
e82c4ac
Say which 16-year-olds the HB young person leaves out: approved train…
MaxGhenis Oct 16, 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-hb-split-shared-cap-lha-rules.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Per-scheme benefit cap variables (`uc_benefit_cap`, `is_uc_benefit_cap_single_claimant_rate`, `is_uc_benefit_cap_exempt`, `is_uc_benefit_cap_exempt_earnings`, `is_uc_benefit_cap_exempt_specified_benefit`, `is_uc_benefit_cap_exempt_qualifying_age`, `uc_benefit_cap_reduction`; `housing_benefit_benefit_cap`, `is_housing_benefit_benefit_cap_single_claimant_rate`, `is_housing_benefit_benefit_cap_exempt`, `is_housing_benefit_benefit_cap_exempt_working_tax_credit`, `is_housing_benefit_benefit_cap_exempt_specified_benefit`, `housing_benefit_benefit_cap_reduction`; `benefit_cap_welfare_benefits`), with the parameter `gov.dwp.housing_benefit.minimum_weekly_amount`.
1 change: 1 addition & 0 deletions changelog.d/uc-hb-split-shared-cap-lha-rules.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Universal Credit and Housing Benefit each apply their own benefit cap. The UC cap (UC Regs 2013 regs 79-83) treats a member of a couple claiming as a single person (reg 3(3)) as a single claimant, lifts the cap for earnings and the LCWRA and carer elements but not for working tax credit, lifts it on age only where the single claimant or both joint claimants have reached the qualifying age for State Pension Credit (SI 2014/1230 reg 60C), and takes the childcare costs element off the reduction (reg 81). The HB cap (HB Regs 2006 Part 8A) treats that couple as a couple, lifts the cap for working tax credit and the benefits in reg 75F (the partner's included) but not for earnings or UC elements, does not reach pension-age claims (reg 5), and leaves at least 50 pence a week of HB (reg 75D(2)). A family paid both (Housing Benefit for specified or temporary accommodation alongside UC, which the model gives only when both are supplied) is capped once, through UC: UC counts the Housing Benefit as nil (reg 80(2A)) and the HB cap does not apply to a claimant receiving UC (reg 75F(1)(g)). The UC shared accommodation test (`is_lha_shared_accommodation_rate_specified_renter`, UC Sch 4 paras 27-29) applies reg 3(3) whatever legacy benefits the family reports, and armed forces independence payment now excepts a renter under 35 from it (UC reg 2). Armed forces independence payment lifts the UC cap only when a claimant receives it (UC reg 83(1)(c) with reg 2), no longer when a young person does, and lifts the HB cap when the claimant, the partner or a young person they are responsible for receives it (HB reg 75F(1)(ea)). The shared-rules stopgap for reg 3(3) single claims (`stays_on_legacy_benefits` and the two helpers built on it) is gone.
1 change: 1 addition & 0 deletions changelog.d/uc-hb-split-shared-cap-lha-rules.removed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The shared benefit cap variables `benefit_cap`, `is_benefit_cap_exempt`, `is_benefit_cap_exempt_earnings`, `is_benefit_cap_exempt_health_disability`, `is_benefit_cap_exempt_other` and `is_benefit_cap_single_claimant_rate`, replaced by each scheme's own. `benefit_cap_reduction` remains as the sum of the Universal Credit and Housing Benefit reductions.
4 changes: 2 additions & 2 deletions docs/book/programs/gov/dwp/housing-benefit.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@
"\n",
"The award is computed in four stages:\n",
"\n",
"1. **Eligible rent**: the rent the benunit is liable for (`benunit_rent`). Where the Local Housing Allowance applies (`LHA_eligible`: renting, and no member in social housing), the eligible rent is the maximum rent (LHA), which is the LHA rate or, where the rent is lower, the rent (`LHA_cap`; SI 2006/213 regs [12D(2)(a)](https://www.legislation.gov.uk/uksi/2006/213/regulation/12D) and [13D(5)](https://www.legislation.gov.uk/uksi/2006/213/regulation/13D)).\n",
"1. **Eligible rent**: the rent the benunit is liable for (`benunit_rent`). Where the Local Housing Allowance applies (`LHA_eligible`: renting, and no member in social housing), the eligible rent is the maximum rent (LHA), which is the LHA rate for the Housing Benefit category of dwelling (`housing_benefit_LHA_category`: the shared accommodation rate for a young individual with no non-dependant, or a claimant entitled to one bedroom who lacks exclusive use of self-contained accommodation, unless the severe disability premium applies, reg 13D(2)) or, where the rent is lower, the rent (`LHA_cap`; SI 2006/213 regs [12D(2)(a)](https://www.legislation.gov.uk/uksi/2006/213/regulation/12D) and [13D(5)](https://www.legislation.gov.uk/uksi/2006/213/regulation/13D)).\n",
"2. **Applicable amount** (`housing_benefit_applicable_amount`): a personal allowance derived from the benunit's composition (single, couple, lone parent) and age, plus any disability/carer premiums. This is the \"minimum income\" the household needs before HB tapers begin.\n",
"3. **Means test** (`housing_benefit_entitlement`): the appropriate maximum Housing Benefit is the eligible rent less `housing_benefit_non_dep_deductions` for any non-dependant adults living in the household ([reg. 70](https://www.legislation.gov.uk/uksi/2006/213/regulation/70)). The published `withdrawal_rate` (currently 0.65) of the benunit's `housing_benefit_applicable_income` in excess of the applicable amount is deducted from that maximum ([SSCBA 1992 s. 130(3)(b)](https://www.legislation.gov.uk/ukpga/1992/4/section/130), [reg. 71](https://www.legislation.gov.uk/uksi/2006/213/regulation/71)). Because the LHA caps the eligible rent, the taper comes off the LHA: a private tenant with rent above the LHA and income above the applicable amount receives the LHA less the taper, not the lower of the LHA and the rent less the taper. The pension-age regulations (SI 2006/214) have the same rules at regs 12D, 13D, 50 and 51, and the Northern Ireland regulations at SR 2006/405 regs 13C, 14D, 68 and 69 and SR 2006/406 regs 13C, 14D, 48 and 49.\n",
" If the claimant or partner is on Universal Credit, Income Support, income-based Jobseeker's Allowance or income-related Employment and Support Allowance (`housing_benefit_on_passporting_benefit`), the whole of the family's earnings, other income and capital is disregarded ([SI 2006/213 Sch. 4 para. 12](https://www.legislation.gov.uk/uksi/2006/213/schedule/4/paragraph/12), [Sch. 5 para. 4](https://www.legislation.gov.uk/uksi/2006/213/schedule/5/paragraph/4) and [Sch. 6 para. 5](https://www.legislation.gov.uk/uksi/2006/213/schedule/6/paragraph/5); Northern Ireland: [SR 2006/405 Sch. 5 para. 12](https://www.legislation.gov.uk/nisr/2006/405/schedule/5/paragraph/12), [Sch. 6 para. 4](https://www.legislation.gov.uk/nisr/2006/405/schedule/6/paragraph/4) and [Sch. 7 para. 5](https://www.legislation.gov.uk/nisr/2006/405/schedule/7/paragraph/5)). `housing_benefit_applicable_income` and `housing_benefit_assessable_capital` are then zero, so the award is that maximum. This applies at any age: a mixed-age couple whose younger member is on one of these benefits is assessed under the working-age regulations ([SI 2006/213 reg. 5(1)(b)](https://www.legislation.gov.uk/uksi/2006/213/regulation/5)). Income Support, income-based Jobseeker's Allowance and income-related Employment and Support Allowance count when a positive amount is paid on the claimant's or partner's award (`in_receipt_of_income_support_jsa_ib_or_esa_ir`, which reads `claimant_or_partner_jsa_income` and `claimant_or_partner_esa_income`). Another member's own award, such as a non-dependant's, is payable to them and does not passport the claimant. A person is on Universal Credit on any day they are entitled to it, whether it is in payment or not ([reg. 2(3B)](https://www.legislation.gov.uk/uksi/2006/213/regulation/2)); PolicyEngine reads that as Universal Credit above nil before the benefit cap and deductions (`is_uc_entitled`), for a family that claims it, so the passport adds no circular dependency through the benefit cap. The universal credit limb applies from 28 October 2013 in Great Britain and 8 May 2018 in Northern Ireland (`gov.dwp.housing_benefit.means_test.universal_credit_passport`). It matters only where Housing Benefit is paid alongside Universal Credit, for specified or temporary accommodation, which the eligibility rules above do not yet model.\n",
"4. **Benefit cap** (`housing_benefit`): the post-means-test award is finally reduced by `benefit_cap_reduction` if the household's total benefit income exceeds the cap and no cap exemption applies.\n",
"4. **Benefit cap** (`housing_benefit`): the post-means-test award is finally reduced by `housing_benefit_benefit_cap_reduction`, the excess of the family's welfare benefits over the Housing Benefit cap (`housing_benefit_benefit_cap`, SI 2006/213 reg 75CA), leaving at least 50 pence a week (reg 75D). The cap does not apply where the claimant or couple is entitled to working tax credit (reg 75E), the claimant or partner receives a benefit listed in reg 75F, or the claim is under the pension-age regulations (reg 5). Universal Credit has its own cap.\n",
"\n",
"The take-up gate (`would_claim_housing_benefit`) is applied inside `housing_benefit_pre_benefit_cap`."
]
Expand Down
2 changes: 1 addition & 1 deletion docs/book/programs/gov/dwp/universal-credit.ipynb

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/book/usage/scenarios.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,8 +272,8 @@ baseline_sim = Simulation(situation=benefit_cap_family)
reformed_sim = Simulation(situation=benefit_cap_family, scenario=reindex_benefit_cap)

# Compare the benefit cap levels
baseline_cap = baseline_sim.calculate("benefit_cap", 2026).mean()
reformed_cap = reformed_sim.calculate("benefit_cap", 2026).mean()
baseline_cap = baseline_sim.calculate("uc_benefit_cap", 2026).mean()
reformed_cap = reformed_sim.calculate("uc_benefit_cap", 2026).mean()

print(
f"Benefit cap - frozen: £{baseline_cap:.0f}/year, indexed: £{reformed_cap:.0f}/year"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ metadata:
unit: year
label: Lha shared accommodation age threshold
reference:
- title: The Housing Benefit Regulations 2006 - Schedule 4 - Paragraph 28
- title: Universal Credit Regulations 2013 Sch 4 para 28(2)(a)
href: https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/28
- title: Housing Benefit Regulations 2006 reg 2(1) ("young individual")
href: https://www.legislation.gov.uk/uksi/2006/213/regulation/2
- title: LHA shared accommodation rate guidance
href: https://www.gov.uk/government/publications/local-housing-allowance-rates-applicable-from-april-2013
href: https://www.gov.uk/government/publications/local-housing-allowance-rates-applicable-from-april-2013
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
description: Disability benefits whose recipients under 35 are excepted from the shared accommodation rate.
description: Disability benefits whose recipients under 35 are excepted from the Universal Credit shared accommodation rate.
values:
2013-04-29:
- attendance_allowance
- dla_sc_middle_plus
- pip_dl
- armed_forces_independence_payment
metadata:
unit: list
label: shared accommodation rate disability exceptions
label: Universal Credit shared accommodation rate disability exceptions
reference:
- title: Universal Credit Regulations 2013 Sch 4 para 29(5)
href: https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/29
- title: Universal Credit Regulations 2013 reg 2 ("attendance allowance" includes armed forces independence payment)
href: https://www.legislation.gov.uk/uksi/2013/376/regulation/2
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: Housing Benefit is not payable where the weekly amount would be less than this; where the benefit cap would reduce Housing Benefit below it, the reduction leaves this amount.
values:
2006-03-06: 0.5
metadata:
unit: currency-GBP
period: week
label: Housing Benefit minimum weekly amount
reference:
- title: Housing Benefit Regulations 2006 reg. 75 (minimum housing benefit)
href: https://www.legislation.gov.uk/uksi/2006/213/regulation/75
- title: Housing Benefit Regulations 2006 reg. 75D(2) (reduction of housing benefit)
href: https://www.legislation.gov.uk/uksi/2006/213/regulation/75D
3 changes: 2 additions & 1 deletion policyengine_uk/programs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -318,9 +318,10 @@ programs:
agency: DWP
status: complete
coverage: UK
variable: benefit_cap
variable: benefit_cap_reduction
parameter_prefix: gov.dwp
verified_start_year: 2022
notes: Universal Credit (uc_benefit_cap) and Housing Benefit (housing_benefit_benefit_cap) each apply their own cap; benefit_cap_reduction is the sum of their reductions

- id: tax_credits
name: Tax credits
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
# UC Regulations 2013, Schedule 4 paragraphs 9 and 27-28:
# UC Regulations 2013, Schedule 4 paragraphs 9 and 27-29 (LHA_category):
# https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/28
# HB Regulations 2006 reg 13D(2)(a)(i) and reg 2(1) "young individual"
# (housing_benefit_LHA_category):
# https://www.legislation.gov.uk/uksi/2006/213/regulation/13D
# The existing bedroom calculation is unchanged: B = 1 bedroom, C = 2;
# A is the shared accommodation rate, overriding the bedroom calculation.
# Where the schemes agree, each case asserts both categories.
- name: Single 17-year-old renter is not their own dependent child
period: 2025
input:
Expand All @@ -13,6 +17,7 @@
is_lha_shared_accommodation_rate_specified_renter: true
# Single; 17 < 35; no dependant or non-dependant: A (previously B).
LHA_category: A
housing_benefit_LHA_category: A

- name: Single 30-year-old renter remains subject to the shared rate
period: 2025
Expand All @@ -23,6 +28,7 @@
is_lha_shared_accommodation_rate_specified_renter: true
# Single; 30 < 35; no other occupants: A.
LHA_category: A
housing_benefit_LHA_category: A

- name: Single renter immediately below the shared rate age threshold
period: 2025
Expand All @@ -32,6 +38,7 @@
is_lha_shared_accommodation_rate_specified_renter: true
# 34 < 35: A.
LHA_category: A
housing_benefit_LHA_category: A

- name: Single renter at the shared rate age threshold
period: 2025
Expand All @@ -41,6 +48,7 @@
is_lha_shared_accommodation_rate_specified_renter: false
# 35 is not below 35; 1 bedroom: B.
LHA_category: B
housing_benefit_LHA_category: B

- name: A 17-year-old apprentice in the renter's benefit unit is a non-dependant
period: 2025
Expand All @@ -65,6 +73,9 @@
is_lha_shared_accommodation_rate_specified_renter: false
# No UC QYP, but a non-dependant blocks A. Existing bedroom formula = 1: B.
LHA_category: B
# HB reg 13D(3)(a)-(b): a bedroom for the renter and one for the
# 17-year-old, who is not a child (reg 2(1): under 16): 2 bedrooms, C.
housing_benefit_LHA_category: C

- name: Lone parent with an 18-year-old qualifying young person
period: 2025
Expand All @@ -89,8 +100,11 @@
is_lha_shared_accommodation_rate_specified_renter: false
# Responsibility for a UC QYP blocks A. Existing bedroom formula = 1: B.
LHA_category: B
# HB reg 13D(3)(a)-(b): a bedroom for the renter and one for the
# 18-year-old, who is not a child (reg 2(1): under 16): 2 bedrooms, C.
housing_benefit_LHA_category: C

- name: Renter aged 30 whose partner is 17 claims as a single person and is a specified renter
- name: Renter aged 30 whose partner is 17 claims UC as a single person and is a specified renter; for HB they are a couple
period: 2025
input:
people:
Expand Down Expand Up @@ -118,6 +132,11 @@
uc_member_of_couple_claims_as_single_person: true
is_lha_shared_accommodation_rate_specified_renter: true
LHA_category: A
# HB has no single claim by a member of a couple: a claimant with a
# partner is not a "single claimant", so not a young individual (HB reg
# 2(1)); the couple's one bedroom (reg 13D(3)(a)) gives B.
is_housing_benefit_young_individual: false
housing_benefit_LHA_category: B

- name: Couple aged 30 and 17 where the partner is within reg. 8 is not a specified renter
period: 2025
Expand All @@ -143,6 +162,7 @@
is_lha_shared_accommodation_rate_specified_renter: false
# Joint renters have one bedroom (Sch 4 para 10(1)(a)): B.
LHA_category: B
housing_benefit_LHA_category: B

- name: A 17-year-old in another family is a non-dependant of the household head only
period: 2025
Expand Down Expand Up @@ -246,6 +266,7 @@
# Single, 30 < 35, nobody else in this household: A.
# Other renter 40 >= 35; 1 bedroom: B.
LHA_category: [A, B]
housing_benefit_LHA_category: [A, B]

- name: Actual shared accommodation gives the shared rate for Housing Benefit only
period: 2025
Expand All @@ -271,6 +292,7 @@
output:
is_lha_shared_accommodation_rate_specified_renter: false
LHA_category: B
housing_benefit_LHA_category: B

- name: A disabled 16-year-old renter is excepted from the shared accommodation rate
# UC Sch 4 para 29(5)(a): the DLA care component at the middle or highest
Expand All @@ -282,6 +304,7 @@
output:
is_lha_shared_accommodation_rate_specified_renter: false
LHA_category: B
housing_benefit_LHA_category: B

- name: A 16-year-old renter without a disability benefit gets the shared rate
period: 2025
Expand All @@ -290,6 +313,7 @@
output:
is_lha_shared_accommodation_rate_specified_renter: true
LHA_category: A
housing_benefit_LHA_category: A

- name: A renter under 35 on attendance allowance is excepted from the shared rate
period: 2025
Expand All @@ -299,3 +323,4 @@
output:
is_lha_shared_accommodation_rate_specified_renter: false
LHA_category: B
housing_benefit_LHA_category: B
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
absolute_error_margin: 100
input:
housing_benefit_pre_benefit_cap: 1_000
benefit_cap_reduction: 400
housing_benefit_benefit_cap_reduction: 400
would_claim_housing_benefit: true
output:
housing_benefit: 600
Expand All @@ -13,7 +13,7 @@
absolute_error_margin: 100
input:
housing_benefit_pre_benefit_cap: 1_000
benefit_cap_reduction: 3_000
housing_benefit_benefit_cap_reduction: 3_000
would_claim_housing_benefit: true
output:
housing_benefit: 0
Loading
Loading