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/lha-hb-category-followups.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Document which Local Housing Allowance category and determination Housing Benefit and Universal Credit each read, and drop Universal Credit test inputs that the published rates no longer use.
2 changes: 1 addition & 1 deletion docs/book/programs/gov/dwp/housing-benefit.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
"source": [
"## Local Housing Allowance rates\n",
"\n",
"A private renter's eligible rent is capped at the Local Housing Allowance (LHA) for their Broad Rental Market Area (BRMA) and LHA category: shared accommodation, or one to four bedrooms (`LHA_category`). Rent officers determine the rates each January for the year from April. In England this is the Valuation Office Agency, in Wales Rent Officers Wales, in Scotland Rent Service Scotland, and in Northern Ireland the Northern Ireland Housing Executive.\n",
"A private renter's eligible rent is capped at the Local Housing Allowance (LHA) for their Broad Rental Market Area (BRMA) and category of dwelling: shared accommodation, or one to four bedrooms. Housing Benefit has its own category (`housing_benefit_LHA_category`, [reg 13D](https://www.legislation.gov.uk/uksi/2006/213/regulation/13D) of the Housing Benefit Regulations 2006), and its rate is `housing_benefit_LHA_rate`; Universal Credit's category is `LHA_category`. Rent officers determine the rates each January for the year from April. In England this is the Valuation Office Agency, in Wales Rent Officers Wales, in Scotland Rent Service Scotland, and in Northern Ireland the Northern Ireland Housing Executive.\n",
"\n",
"PolicyEngine reads the published determinations from `parameters/gov/dwp/LHA/lha_published_rates.csv.gz`. `scripts/build_lha_published_rates.py` builds that table from the source files listed, with their hashes, in `lha_published_rates_sources.csv`. For each determination from April 2020, the rate is recomputed from the published 30th percentile rents, following [Schedule 3B](https://www.legislation.gov.uk/uksi/1997/1984/schedule/3B) to the Rent Officers (Housing Benefit Functions) Order 1997:\n",
"\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,14 @@
boarder_family:
members: [boarder]
meals_included_in_rent: AT_LEAST_THREE_A_DAY
uncapped_BRMA_LHA_rate: 9_000
households:
home:
members: [householder, boarder]
tenure_type: OWNED_OUTRIGHT
brma: MAIDSTONE
output:
# UC excludes food from service charges only in the social rented
# sector and for owner-occupiers (UC Sch 1 para 8(1), (6)(c)); a private
# renter's whole payment is core rent: min(6,000, 9,000) = 6,000.
# renter's whole payment is core rent: min(6,000, Maidstone one-bedroom
# rate 750 a month = 9,000) = 6,000.
uc_housing_costs_element: [0, 6_000]
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,18 @@
BRMA_LHA_rate: 10_830.04
uc_LHA_cap: 10_860

- name: Maidstone one bedroom, April 2025, held at April 2024 (SI 2025/5)
period: 2025
absolute_error_margin: 0.01
input:
brma: MAIDSTONE
LHA_category: B
benunit_rent: 100_000
output:
# VOA: 172.60 a week x 52; DWP: 750.00 a month x 12.
BRMA_LHA_rate: 8_975.20
uc_LHA_cap: 9_000

- name: Maidstone two bedrooms, April 2026, held at April 2024 (SI 2026/5)
period: 2026
absolute_error_margin: 0.01
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,15 +135,16 @@
members: [householder]
lodger_family:
members: [lodger]
uncapped_BRMA_LHA_rate: 6_000
households:
home:
members: [householder, lodger]
tenure_type: OWNED_OUTRIGHT
brma: MAIDSTONE
output:
benunit_rent: [0, 5_200]
benunit_tenure_type: [OWNED_OUTRIGHT, RENT_PRIVATELY]
# UC: single, 40 >= 35, 1 bedroom: B. Cap = min(rent 5,200, rate 6,000).
# UC: single, 40 >= 35, 1 bedroom: B. Cap = min(rent 5,200, Maidstone
# one-bedroom rate 750 a month = 9,000).
LHA_category: B
uc_LHA_cap: [0, 5_200]
uc_housing_costs_element: [0, 5_200]
Expand All @@ -164,17 +165,16 @@
benunits:
householder_family:
members: [householder]
uncapped_BRMA_LHA_rate: 12_000
daughter:
members: [adult_daughter]
lodger_family:
members: [lodger]
uncapped_BRMA_LHA_rate: 6_000
households:
home:
members: [householder, adult_daughter, lodger]
rent: 10_000
tenure_type: RENT_PRIVATELY
brma: MAIDSTONE
output:
# The daughter is the householder's non-dependant; the lodger is no one's
# (UC Sch 4 para 9(2)(d)), and the householder's household is not the
Expand All @@ -183,8 +183,9 @@
# One housing cost contribution, £93.02 a month for 2025-26 (Sch 4 para
# 14): 93.02 x 12 = 1,116.24.
uc_non_dep_deductions: [1_116.24, 0, 0]
# Householder: min(10,000, 12,000) - 1,116.24 = 8,883.76. The lodger's
# element is not reduced: min(5,200, 6,000) = 5,200.
# Householder (two bedrooms, C): min(10,000, Maidstone two-bedroom rate
# 905 a month = 10,860) - 1,116.24 = 8,883.76. The lodger's element is
# not reduced: min(5,200, one-bedroom rate 9,000) = 5,200.
uc_housing_costs_element: [8_883.76, 0, 5_200]
# UC bedrooms: householder 1 + daughter 1 = 2 (the lodger adds none).
LHA_allowed_bedrooms: [2, 1, 1]
Expand Down Expand Up @@ -359,8 +360,8 @@
# The pensioner head is not eligible for UC, so no other UC claim has
# treated the non-dependant as one (UC Sch 4 para 9(2)(f)): they count
# in the co-tenant's claim. Bedrooms 1 + 1 = 2: C. Core rent 18,000 / 2
# = 9,000, below the Maidstone two-bedroom rate (11,892.40); less one
# contribution of 93.02 x 12 = 1,116.24: 7,883.76.
# = 9,000, below the Maidstone two-bedroom rate (905 a month = 10,860);
# less one contribution of 93.02 x 12 = 1,116.24: 7,883.76.
uc_non_dependants_counted: [false, true, false]
LHA_allowed_bedrooms: [1, 2, 1]
LHA_category: [B, C, A]
Expand Down
9 changes: 8 additions & 1 deletion policyengine_uk/tests/test_mixed_age_couple_properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@
]
MIXED_AGE_COUPLE_SHAPES = {"mixed", "mixed_with_dependant"}
TENURES = ["RENT_FROM_COUNCIL", "RENT_PRIVATELY", "OWNED_OUTRIGHT"]
NORTH_WEST_BRMAS = [
"CENTRAL_GREATER_MANCHESTER",
"GREATER_LIVERPOOL",
"EAST_CHESHIRE",
"WEST_CUMBRIA",
]


# The three eligibility formulas as they were before the mixed-age couple
Expand Down Expand Up @@ -179,13 +185,14 @@ def cases(draw):
"benunit": {
"would_claim_uc": draw(st.booleans()),
"would_claim_pc": draw(st.booleans()),
"BRMA_LHA_rate": draw(st.integers(4_000, 12_000)),
},
"household": {
"tenure_type": tenure,
"rent": 0 if tenure == "OWNED_OUTRIGHT" else draw(st.integers(0, 12_000)),
"savings": draw(st.sampled_from([0, 5_000, 20_000])),
"region": "NORTH_WEST",
# The LHA varies with the BRMA's published rates.
"brma": draw(st.sampled_from(NORTH_WEST_BRMAS)),
"council_tax": 1_500,
},
}
Expand Down
14 changes: 10 additions & 4 deletions policyengine_uk/utils/lha.py
Original file line number Diff line number Diff line change
Expand Up @@ -420,10 +420,16 @@ def benunit_lha(
):
"""Look up an LHA measure for each benefit unit's BRMA and category.

``category_variable`` names the category of accommodation: the Universal
Credit one by default, or ``housing_benefit_LHA_category``. Rent officers
determine one rate per BRMA and category, so the two benefits read the
same table; they differ only in which category applies to the renter.
``universal_credit`` picks the determination: the weekly one under the
Rent Officers (Housing Benefit Functions) Order 1997, or the monthly one
under the Rent Officers (Universal Credit Functions) Order 2013.
``category_variable`` names the category of accommodation to read it
for: the Universal Credit one by default, or
``housing_benefit_LHA_category``. Each determination has one rate per
BRMA and category, so the benefits differ only in which determination
and which category they read: Housing Benefit the weekly table through
its own category (``housing_benefit_LHA_rate``), Universal Credit the
monthly table through ``LHA_category`` (``uc_LHA_cap``).
"""
parameters = benunit.simulation.tax_benefit_system.parameters
table = lha_rates(parameters, period.start.year, universal_credit)
Expand Down
12 changes: 8 additions & 4 deletions policyengine_uk/variables/gov/dwp/BRMA_LHA_rate.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@
class BRMA_LHA_rate(Variable):
value_type = float
entity = BenUnit
label = "LHA rate"
label = "LHA rate (weekly determination, Universal Credit category)"
documentation = (
"Weekly Housing Benefit Local Housing Allowance for the benefit unit's "
"Broad Rental Market Area and LHA category, annualised over 52 weeks"
"The weekly Local Housing Allowance determined for the benefit unit's "
"Broad Rental Market Area, read for its Universal Credit category "
"(LHA_category) and annualised over 52 weeks. Housing Benefit reads "
"the same weekly determination for its own category: see "
"housing_benefit_LHA_rate. Universal Credit uses the monthly "
"determination: see uc_LHA_cap."
)
definition_period = YEAR
unit = GBP
Expand All @@ -18,7 +22,7 @@ class BRMA_LHA_rate(Variable):
]

def formula(benunit, period, parameters):
"""The determined Housing Benefit rate.
"""The weekly determination, read for the Universal Credit category.

The lower of the BRMA percentile rent and the weekly national maximum,
raised to the rate of any smaller category and, from April 2024, to the
Expand Down
12 changes: 6 additions & 6 deletions policyengine_uk/variables/gov/dwp/housing_benefit_LHA_rate.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ class housing_benefit_LHA_rate(Variable):
def formula(benunit, period, parameters):
"""The determined Housing Benefit rate for the HB category.

The same determination as ``BRMA_LHA_rate`` (the lower of the BRMA
percentile rent and the weekly national maximum, the anomalous-rate
rule and, from April 2024, the 31 March 2020 minimum: Rent Officers
(Housing Benefit Functions) Order 1997, Schedule 3B paragraphs 2, 3
and 3A), read for the category in HB Regulations 2006 reg 13D rather
than the Universal Credit one.
The weekly determination that ``BRMA_LHA_rate`` reads (the lower of
the BRMA percentile rent and the weekly national maximum, the
anomalous-rate rule and, from April 2024, the 31 March 2020 minimum:
Rent Officers (Housing Benefit Functions) Order 1997, Schedule 3B
paragraphs 2, 3 and 3A), read for the category in HB Regulations 2006
reg 13D rather than the Universal Credit one.
"""
return (
benunit_lha(
Expand Down
Loading