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/council-tax-reduction-national.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Add national Council Tax Reduction support for Scotland, Wales, and English pensioner households, while preserving reported CTB/CTR for unsupported English working-age local schemes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Maximum share of eligible Council Tax liability covered for pensioner households under the England Council Tax Reduction scheme.
values:
2013-04-01: 1
metadata:
unit: /1
period: year
label: England Council Tax Reduction pensioner maximum support rate
reference:
- title: The Council Tax Reduction Schemes (Prescribed Requirements) (England) Regulations 2012
href: https://www.legislation.gov.uk/uksi/2012/2885/contents/made
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Capital limit for pensioner households under the England Council Tax Reduction scheme.
values:
2013-04-01: 16_000
metadata:
unit: currency-GBP
period: year
label: England Council Tax Reduction pensioner capital limit
reference:
- title: The Council Tax Reduction Schemes (Prescribed Requirements) (England) Regulations 2012
href: https://www.legislation.gov.uk/uksi/2012/2885/contents/made
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Withdrawal rate for pensioner households under the England Council Tax Reduction scheme.
values:
2013-04-01: 0.2
metadata:
unit: /1
period: year
label: England Council Tax Reduction pensioner withdrawal rate
reference:
- title: The Council Tax Reduction Schemes (Prescribed Requirements) (England) Regulations 2012
href: https://www.legislation.gov.uk/uksi/2012/2885/contents/made
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Maximum share of eligible Council Tax liability covered under the Scotland Council Tax Reduction scheme.
values:
2013-04-01: 1
metadata:
unit: /1
period: year
label: Scotland Council Tax Reduction maximum support rate
reference:
- title: The Council Tax Reduction (Scotland) Regulations 2012
href: https://www.legislation.gov.uk/ssi/2012/303/contents/made
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Capital limit under the Scotland Council Tax Reduction scheme.
values:
2013-04-01: 16_000
metadata:
unit: currency-GBP
period: year
label: Scotland Council Tax Reduction capital limit
reference:
- title: The Council Tax Reduction (Scotland) Regulations 2012
href: https://www.legislation.gov.uk/ssi/2012/303/contents/made
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Withdrawal rate under the Scotland Council Tax Reduction scheme.
values:
2013-04-01: 0.2
metadata:
unit: /1
period: year
label: Scotland Council Tax Reduction withdrawal rate
reference:
- title: The Council Tax Reduction (Scotland) Regulations 2012
href: https://www.legislation.gov.uk/ssi/2012/303/contents/made
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Maximum share of eligible Council Tax liability covered under the Wales Council Tax Reduction scheme.
values:
2013-04-01: 1
metadata:
unit: /1
period: year
label: Wales Council Tax Reduction maximum support rate
reference:
- title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2012
href: https://www.legislation.gov.uk/wsi/2012/3144/contents/made
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Capital limit under the Wales Council Tax Reduction scheme.
values:
2013-04-01: 16_000
metadata:
unit: currency-GBP
period: year
label: Wales Council Tax Reduction capital limit
reference:
- title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2012
href: https://www.legislation.gov.uk/wsi/2012/3144/contents/made
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Withdrawal rate under the Wales Council Tax Reduction scheme.
values:
2013-04-01: 0.2
metadata:
unit: /1
period: year
label: Wales Council Tax Reduction withdrawal rate
reference:
- title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2012
href: https://www.legislation.gov.uk/wsi/2012/3144/contents/made
12 changes: 12 additions & 0 deletions policyengine_uk/programs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,18 @@ programs:
variable: council_tax
verified_start_year: 2022

- id: council_tax_reduction
name: Council Tax Reduction
full_name: Council Tax Reduction
category: Benefits
agency: Local
status: partial
coverage: UK
variable: council_tax_reduction
parameter_prefix: gov.local_authorities
verified_start_year: 2013
notes: First-pass national support for Scotland, Wales, and England pensioner schemes, with reported CTB/CTR retained for unsupported English working-age local schemes.

# --- Treasury programs ---
- id: cost_of_living_support
name: Cost of Living Support
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
- name: Council Tax less reported fallback CTR is floored at zero
period: 2026
absolute_error_margin: 0
input:
people:
claimant:
age: 35
council_tax_benefit_reported: 2_500
employment_income: 10_000
benunits:
benunit:
members: [claimant]
households:
household:
members: [claimant]
country: ENGLAND
local_authority: MAIDSTONE
council_tax: 1_800
savings: 0
output:
council_tax_reduction: 2_500
council_tax_less_benefit: 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
- name: Unsupported English working-age schemes keep reported CTB
period: 2026
absolute_error_margin: 0
input:
people:
claimant:
age: 35
council_tax_benefit_reported: 500
benunits:
benunit:
members: [claimant]
would_claim_uc: false
households:
household:
members: [claimant]
country: ENGLAND
local_authority: MAIDSTONE
council_tax: 1_800
savings: 0
output:
council_tax_reduction_scheme_supported: false
simulated_council_tax_reduction_benunit: 0
council_tax_benefit: 500
council_tax_reduction: 500

- name: Wales CTR simulates full support for a no-income claimant
period: 2026
absolute_error_margin: 0.01
input:
people:
claimant:
age: 35
council_tax_benefit_reported: 500
benunits:
benunit:
members: [claimant]
would_claim_uc: false
households:
household:
members: [claimant]
country: WALES
local_authority: CARDIFF
council_tax: 1_800
savings: 0
output:
council_tax_reduction_scheme_supported: true
simulated_council_tax_reduction_benunit: 1_800
council_tax_benefit: 1_800
council_tax_reduction: 1_800

- name: Wales CTR applies the capital limit
period: 2026
absolute_error_margin: 0
input:
people:
claimant:
age: 35
council_tax_benefit_reported: 500
benunits:
benunit:
members: [claimant]
households:
household:
members: [claimant]
country: WALES
local_authority: CARDIFF
council_tax: 1_800
savings: 16_001
output:
council_tax_reduction_scheme_supported: true
simulated_council_tax_reduction_benunit: 0
council_tax_benefit: 0
council_tax_reduction: 0

- name: England pensioner CTR is supported nationally
period: 2026
absolute_error_margin: 0.01
input:
people:
claimant:
age: 70
benunits:
benunit:
members: [claimant]
households:
household:
members: [claimant]
country: ENGLAND
local_authority: MAIDSTONE
council_tax: 1_800
savings: 0
output:
council_tax_reduction_scheme_supported: true
simulated_council_tax_reduction_benunit: 1_800
council_tax_reduction: 1_800
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@
universal_credit: 0
housing_benefit: 0
pension_credit: 3_607.72
council_tax_reduction: 1_800
council_tax_less_benefit: 0
winter_fuel_allowance: 200
income_tax: 0
national_insurance: 0
household_net_income: 15_833.18
household_net_income: 17_633.18
6 changes: 5 additions & 1 deletion policyengine_uk/variables/gov/dwp/council_tax_benefit.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ class council_tax_benefit(Variable):
definition_period = YEAR
unit = GBP

adds = ["council_tax_benefit_reported"]
def formula(benunit, period, parameters):
supported = benunit.household("council_tax_reduction_scheme_supported", period)
simulated = benunit("simulated_council_tax_reduction_benunit", period)
reported = benunit("council_tax_benefit_reported", period)
return where(supported, simulated, reported)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from policyengine_uk.model_api import *


class benunit_contains_household_head(Variable):
value_type = bool
entity = BenUnit
label = "Benefit unit contains the oldest adult in the household"
definition_period = YEAR

def formula(benunit, period, parameters):
person = benunit.members
household = person.household
benunit_max_age = benunit.max(person("age", period))
household_max_age = benunit.max(household.max(person("age", period)))
return benunit_max_age == household_max_age
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from policyengine_uk.model_api import *
from policyengine_uk.variables.household.demographic.country import Country


def is_england_pensioner_scheme(country, has_pensioner):
return (country == Country.ENGLAND) & has_pensioner


def is_scotland_scheme(country):
return country == Country.SCOTLAND


def is_wales_scheme(country):
return country == Country.WALES


def is_supported_scheme(country, has_pensioner):
return (
is_england_pensioner_scheme(country, has_pensioner)
| is_scotland_scheme(country)
| is_wales_scheme(country)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from policyengine_uk.model_api import *


class council_tax_reduction(Variable):
value_type = float
entity = Household
label = "Council Tax Reduction"
definition_period = YEAR
unit = GBP

def formula(household, period, parameters):
person = household.members
return household.sum(
person.benunit("council_tax_benefit", period)
* person("is_benunit_head", period)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from policyengine_uk.model_api import *


class council_tax_reduction_applicable_amount(Variable):
value_type = float
entity = BenUnit
label = "applicable Council Tax Reduction amount"
definition_period = YEAR
unit = GBP

def formula(benunit, period, parameters):
p = parameters(period).gov.dwp.housing_benefit.allowances
any_over_SP_age = benunit.any(benunit.members("is_SP_age", period))
eldest_age = benunit("eldest_adult_age", period)
older_age_threshold = p.age_threshold.older
younger_age_threshold = p.age_threshold.younger
u_18 = eldest_age < younger_age_threshold
u_25 = eldest_age < older_age_threshold
o_25 = (eldest_age >= older_age_threshold) & ~any_over_SP_age
o_18 = (eldest_age >= younger_age_threshold) & ~any_over_SP_age
single = benunit("is_single_person", period)
couple = benunit("is_couple", period)
lone_parent = benunit("is_lone_parent", period)
single_personal_allowance = (
u_25 * p.single.younger
+ o_25 * p.single.older
+ any_over_SP_age * p.single.aged
)
couple_personal_allowance = (
u_18 * p.couple.younger
+ o_18 * p.couple.older
+ any_over_SP_age * p.couple.aged
)
lone_parent_personal_allowance = (
u_18 * p.lone_parent.younger
+ o_18 * p.lone_parent.older
+ any_over_SP_age * p.lone_parent.aged
)
personal_allowance = (
single * single_personal_allowance
+ couple * couple_personal_allowance
+ lone_parent * lone_parent_personal_allowance
) * WEEKS_IN_YEAR
premiums = benunit("benefits_premiums", period)
return personal_allowance + premiums
Loading