diff --git a/changelog.d/warm-home-discount.added.md b/changelog.d/warm-home-discount.added.md new file mode 100644 index 0000000000..2904004c88 --- /dev/null +++ b/changelog.d/warm-home-discount.added.md @@ -0,0 +1 @@ +- Added the Warm Home Discount in England and Wales (`warm_home_discount`) from winter 2025-26 to the end of the scheme period on 31 March 2031, with parameters for the rebate amount and the qualifying means-tested benefits, and its rebate counted as miscellaneous income in HBAI household net income. diff --git a/policyengine_uk/parameters/gov/ofgem/warm_home_discount/amount.yaml b/policyengine_uk/parameters/gov/ofgem/warm_home_discount/amount.yaml new file mode 100644 index 0000000000..d0c3ab8fde --- /dev/null +++ b/policyengine_uk/parameters/gov/ofgem/warm_home_discount/amount.yaml @@ -0,0 +1,18 @@ +description: Rebate that a scheme electricity supplier gives each eligible customer in England and Wales under the Warm Home Discount, once per scheme year. +values: + 2022-04-01: + value: 150 + metadata: + reference: + - title: The Warm Home Discount (England and Wales) Regulations 2022, reg. 3 ("prescribed rebate") + href: https://www.legislation.gov.uk/uksi/2022/772/regulation/3/made + 2026-04-01: + value: 150 + metadata: + reference: + - title: The Warm Home Discount (England and Wales) Regulations 2026, reg. 3 ("prescribed rebate") + href: https://www.legislation.gov.uk/uksi/2026/389/regulation/3/made +metadata: + unit: currency-GBP + period: year + label: Warm Home Discount amount diff --git a/policyengine_uk/parameters/gov/ofgem/warm_home_discount/index.yaml b/policyengine_uk/parameters/gov/ofgem/warm_home_discount/index.yaml new file mode 100644 index 0000000000..fc2c380aba --- /dev/null +++ b/policyengine_uk/parameters/gov/ofgem/warm_home_discount/index.yaml @@ -0,0 +1,3 @@ +description: The Warm Home Discount in England and Wales, a rebate that electricity suppliers in the scheme pay to eligible customers each winter. Suppliers fund it, and Ofgem administers it. Scotland runs a separate scheme with its own criteria, which the model doesn't calculate, and the scheme doesn't operate in Northern Ireland. +metadata: + label: Warm Home Discount diff --git a/policyengine_uk/parameters/gov/ofgem/warm_home_discount/qualifying_benefits.yaml b/policyengine_uk/parameters/gov/ofgem/warm_home_discount/qualifying_benefits.yaml new file mode 100644 index 0000000000..0318910b3b --- /dev/null +++ b/policyengine_uk/parameters/gov/ofgem/warm_home_discount/qualifying_benefits.yaml @@ -0,0 +1,40 @@ +description: Means-tested benefits whose receipt by a member of the household qualifies it for the Warm Home Discount in England and Wales. The Secretary of State sets them in the eligibility statement for each scheme year. In 2025-26, Core Group 1 covered Pension Credit Guarantee Credit and Core Group 2 the other benefits listed, including Pension Credit Savings Credit, so any Pension Credit qualifies. From 2026-27 a single core group covers both elements of Pension Credit. Before 2025-26, the low-income group also had to pass a high-cost-to-heat test on property data, which the model doesn't encode, so the list is empty and the model doesn't calculate the rebate for those years. The Warm Home Discount (England and Wales) Regulations 2026 set the scheme period to end on 31 March 2031, after scheme year 20 (2030-31), and an extension needs further regulations, so the list is empty from 2031-32. +values: + 2011-04-01: [] + 2025-04-01: + value: + - pension_credit + - universal_credit + - housing_benefit + - esa_income + - jsa_income + - income_support + metadata: + reference: + - title: "Warm Home Discount: eligibility statement, England and Wales, 2025 to 2026" + href: https://www.gov.uk/government/publications/warm-home-discount-eligibility-statement-england-and-wales-2025-to-2026-scheme-year/warm-home-discount-eligibility-statement-england-and-wales-2025-to-2026 + 2026-04-01: + value: + - pension_credit + - universal_credit + - housing_benefit + - esa_income + metadata: + reference: + - title: "Warm Home Discount: eligibility statement, England and Wales, 2026 to 2027" + href: https://www.gov.uk/government/publications/warm-home-discount-eligibility-statement-england-and-wales-2026-to-2027-scheme-year/warm-home-discount-eligibility-statement-england-and-wales-2026-to-2027 + 2031-04-01: + value: [] + metadata: + reference: + - title: The Warm Home Discount (England and Wales) Regulations 2026, reg. 4(2)(b) (scheme period ends 31 March 2031) + href: https://www.legislation.gov.uk/uksi/2026/389/regulation/4/made + - title: The Warm Home Discount (England and Wales) Regulations 2026, reg. 3 ("scheme year" 16 to 20) + href: https://www.legislation.gov.uk/uksi/2026/389/regulation/3/made +metadata: + unit: list + period: year + label: Warm Home Discount qualifying benefits + reference: + - title: The Warm Home Discount (England and Wales) Regulations 2026, reg. 10 (eligibility statement) + href: https://www.legislation.gov.uk/uksi/2026/389/regulation/10/made diff --git a/policyengine_uk/programs.yaml b/policyengine_uk/programs.yaml index 11657e674c..6bbc9cea10 100644 --- a/policyengine_uk/programs.yaml +++ b/policyengine_uk/programs.yaml @@ -553,6 +553,18 @@ programs: verified_end_year: 2024 notes: Temporary program, ended 31 March 2024 + - id: warm_home_discount + name: Warm Home Discount + full_name: Warm Home Discount (England and Wales) + category: Benefits + agency: Ofgem + status: partial + coverage: England and Wales + variable: warm_home_discount + parameter_prefix: gov.ofgem.warm_home_discount + verified_start_year: 2025 + notes: Supplier-funded bill rebate, outside household_net_income and gov_spending. Benefit-receipt rule from winter 2025-26; Scottish scheme not modelled + # --- Scotland programs --- - id: scottish_income_tax name: Scottish income tax diff --git a/policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/income/uc_statutory_pay.yaml b/policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/income/uc_statutory_pay.yaml index c7c8c2d29f..e3c887520e 100644 --- a/policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/income/uc_statutory_pay.yaml +++ b/policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/income/uc_statutory_pay.yaml @@ -250,5 +250,8 @@ # 400 of pay raises its income by 180. household_benefits: 5_278.80 household_net_income: 5_278.80 - hbai_household_net_income: 5_278.80 + # HBAI also counts the £150 Warm Home Discount the Universal Credit + # award brings in England, as miscellaneous income. + warm_home_discount: 150 + hbai_household_net_income: 5_428.80 gov_spending: 5_278.80 diff --git a/policyengine_uk/tests/policy/baseline/gov/ofgem/warm_home_discount.yaml b/policyengine_uk/tests/policy/baseline/gov/ofgem/warm_home_discount.yaml new file mode 100644 index 0000000000..39f563113d --- /dev/null +++ b/policyengine_uk/tests/policy/baseline/gov/ofgem/warm_home_discount.yaml @@ -0,0 +1,389 @@ +# Warm Home Discount (England and Wales). Each case sets every qualifying +# benefit explicitly so that only the named one is received. + +- name: Pension Credit recipient in England, 2026-27 + period: 2026 + input: + people: + person: + age: 70 + benunits: + benunit: + members: [person] + pension_credit: 1000 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: LONDON + output: + warm_home_discount: 150 + +- name: Universal Credit recipient in Wales, 2026-27 + period: 2026 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 1000 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: WALES + output: + warm_home_discount: 150 + +- name: Housing Benefit recipient in England, 2026-27 + period: 2026 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 0 + housing_benefit: 1000 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: NORTH_EAST + output: + warm_home_discount: 150 + +- name: Income-related ESA recipient in England, 2026-27 + period: 2026 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 0 + housing_benefit: 0 + esa_income: 1000 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: SOUTH_WEST + output: + warm_home_discount: 150 + +- name: Income-based JSA qualifies in 2025-26 + period: 2025 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 1000 + income_support: 0 + households: + household: + members: [person] + region: LONDON + output: + warm_home_discount: 150 + +- name: Income Support qualifies in 2025-26 + period: 2025 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 1000 + households: + household: + members: [person] + region: LONDON + output: + warm_home_discount: 150 + +- name: Income-based JSA no longer qualifies in 2026-27 + period: 2026 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 1000 + income_support: 0 + households: + household: + members: [person] + region: LONDON + output: + warm_home_discount: 0 + +- name: Income Support no longer qualifies in 2026-27 + period: 2026 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 1000 + households: + household: + members: [person] + region: LONDON + output: + warm_home_discount: 0 + +- name: No qualifying benefit, 2026-27 + period: 2026 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: LONDON + output: + warm_home_discount: 0 + +- name: Pension Credit recipient in Scotland is outside the England and Wales scheme + period: 2026 + input: + people: + person: + age: 70 + benunits: + benunit: + members: [person] + pension_credit: 1000 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: SCOTLAND + output: + warm_home_discount: 0 + +- name: Pension Credit recipient in Northern Ireland, where the scheme doesn't operate + period: 2026 + input: + people: + person: + age: 70 + benunits: + benunit: + members: [person] + pension_credit: 1000 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: NORTHERN_IRELAND + output: + warm_home_discount: 0 + +- name: Not calculated before 2025-26, when the high-cost-to-heat test applied + period: 2024 + input: + people: + person: + age: 70 + benunits: + benunit: + members: [person] + pension_credit: 1000 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: LONDON + output: + warm_home_discount: 0 + +# HBAI counts the Warm Home Discount as miscellaneous income (DWP, HBAI +# background information and methodology report FYE 2025). Council Tax is +# set to zero so HBAI income is the benefit plus the rebate. + +- name: Rebate counts in HBAI income for a Universal Credit recipient in England + period: 2026 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 1000 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: LONDON + council_tax: 0 + output: + warm_home_discount: 150 + hbai_household_net_income: 1150 + hbai_household_net_income_ahc: 1150 + +- name: No rebate in HBAI income for a Universal Credit recipient in Scotland + period: 2026 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 1000 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: SCOTLAND + council_tax: 0 + output: + warm_home_discount: 0 + hbai_household_net_income: 1000 + hbai_household_net_income_ahc: 1000 + +- name: No rebate in HBAI income for income-based JSA in 2026-27 + period: 2026 + input: + people: + person: + age: 40 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 0 + housing_benefit: 0 + esa_income: 0 + jsa_income: 1000 + income_support: 0 + households: + household: + members: [person] + region: LONDON + council_tax: 0 + output: + warm_home_discount: 0 + hbai_household_net_income: 1000 + hbai_household_net_income_ahc: 1000 + +- name: Universal Credit recipient in England, 2030-31, the last scheme year + period: 2030 + input: + people: + person: + age: 35 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 1000 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: LONDON + output: + warm_home_discount: 150 + +- name: No rebate in 2031-32, after the scheme period ends on 31 March 2031 + period: 2031 + input: + people: + person: + age: 35 + benunits: + benunit: + members: [person] + pension_credit: 0 + universal_credit: 1000 + housing_benefit: 0 + esa_income: 0 + jsa_income: 0 + income_support: 0 + households: + household: + members: [person] + region: LONDON + output: + warm_home_discount: 0 diff --git a/policyengine_uk/tests/test_trading_loss_properties.py b/policyengine_uk/tests/test_trading_loss_properties.py index 2b0c05f5b3..530980c84a 100644 --- a/policyengine_uk/tests/test_trading_loss_properties.py +++ b/policyengine_uk/tests/test_trading_loss_properties.py @@ -99,7 +99,8 @@ "universal_credit", ] # HBAI components the loss may move: the loss itself, taxes, and benefits -# that are means-tested or passported from a means-tested benefit. +# that are means-tested or passported from a means-tested benefit. The Warm +# Home Discount follows receipt of a qualifying means-tested benefit. HBAI_CHANNELS = { "trading_loss", "income_tax", @@ -122,6 +123,7 @@ "healthy_start_vouchers", "scottish_child_payment", "cost_of_living_support_payment", + "warm_home_discount", } diff --git a/policyengine_uk/variables/gov/ofgem/warm_home_discount.py b/policyengine_uk/variables/gov/ofgem/warm_home_discount.py new file mode 100644 index 0000000000..b482cae829 --- /dev/null +++ b/policyengine_uk/variables/gov/ofgem/warm_home_discount.py @@ -0,0 +1,37 @@ +from policyengine_uk.model_api import * + + +class warm_home_discount(Variable): + value_type = float + entity = Household + label = "Warm Home Discount" + documentation = ( + "Rebate an electricity supplier gives the household under the Warm " + "Home Discount scheme in England and Wales, in the year containing " + "the winter it is paid for. A household qualifies if any member " + "receives a qualifying means-tested benefit; the rebate is paid " + "without a claim. Suppliers fund the rebate from their customers' " + "bills, so it is not government spending, and it is not included in " + "household_benefits or household_net_income. HBAI counts it as " + "miscellaneous income, so it is included in " + "hbai_household_net_income; miscellaneous_income excludes it. The model doesn't check " + "the supplier, account-holder or property conditions, and doesn't " + "calculate the separate Scottish scheme." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/uksi/2026/389/contents/made", + "https://www.gov.uk/the-warm-home-discount-scheme", + ) + + def formula(household, period, parameters): + p = parameters(period).gov.ofgem.warm_home_discount + country = household("country", period) + countries = country.possible_values + in_scheme_area = (country == countries.ENGLAND) | (country == countries.WALES) + benefits = p.qualifying_benefits + if len(benefits) == 0: + return household.empty_array() + receives_benefit = add(household, period, benefits) > 0 + return in_scheme_area * receives_benefit * p.amount diff --git a/policyengine_uk/variables/household/income/hbai_household_net_income.py b/policyengine_uk/variables/household/income/hbai_household_net_income.py index ff1a8913f3..1bc061d8d5 100644 --- a/policyengine_uk/variables/household/income/hbai_household_net_income.py +++ b/policyengine_uk/variables/household/income/hbai_household_net_income.py @@ -56,6 +56,9 @@ "scottish_child_payment", "carer_support_payment", "scottish_carer_supplement", + # HBAI classifies the Warm Home Discount as miscellaneous income: + # https://www.gov.uk/government/statistics/households-below-average-income-for-financial-years-ending-1995-to-2025/households-below-average-income-background-information-and-methodology-report-fye-2025 + "warm_home_discount", # Reference for tax-free-childcare: https://assets.publishing.service.gov.uk/media/5e7b191886650c744175d08b/households-below-average-income-1994-1995-2018-2019.pdf ] diff --git a/policyengine_uk/variables/input/miscellaneous_income.py b/policyengine_uk/variables/input/miscellaneous_income.py index e0d3e72b24..5780911c84 100644 --- a/policyengine_uk/variables/input/miscellaneous_income.py +++ b/policyengine_uk/variables/input/miscellaneous_income.py @@ -5,7 +5,10 @@ class miscellaneous_income(Variable): value_type = float entity = Person label = "miscellaneous income" - documentation = "Income from any other source" + documentation = ( + "Income from any other source. Excludes the Warm Home Discount, " + "which is calculated as warm_home_discount." + ) definition_period = YEAR unit = GBP uprating = "gov.economic_assumptions.indices.obr.per_capita.gdp"