From a74c68e2b70e25d6597f226b56ecf0b44fe8f595 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Wed, 27 May 2026 09:34:39 +0200 Subject: [PATCH] Exclude high-value council tax surcharge under abolish_council_tax (#1670) The surcharge is defined on top of council tax bands, so when council tax is abolished it should drop out of household_tax and gov_tax alongside the council_tax line. Filter both aggregates accordingly and add a YAML case. --- changelog.d/1670.md | 1 + .../high_value_council_tax_surcharge.yaml | 14 ++++++++++++++ policyengine_uk/variables/gov/gov_tax.py | 4 +++- .../variables/gov/hmrc/household_tax.py | 6 +++++- 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 changelog.d/1670.md diff --git a/changelog.d/1670.md b/changelog.d/1670.md new file mode 100644 index 000000000..42629adae --- /dev/null +++ b/changelog.d/1670.md @@ -0,0 +1 @@ +- Exclude `high_value_council_tax_surcharge` from `household_tax` and `gov_tax` when `gov.contrib.abolish_council_tax` is in force, since the surcharge is defined on top of council tax bands. diff --git a/policyengine_uk/tests/policy/baseline/gov/hmrc/council_tax/high_value_council_tax_surcharge.yaml b/policyengine_uk/tests/policy/baseline/gov/hmrc/council_tax/high_value_council_tax_surcharge.yaml index 94b896ccb..d0e65e317 100644 --- a/policyengine_uk/tests/policy/baseline/gov/hmrc/council_tax/high_value_council_tax_surcharge.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/hmrc/council_tax/high_value_council_tax_surcharge.yaml @@ -49,3 +49,17 @@ high_value_council_tax_surcharge: 0 household_tax: 0 gov_tax: 0 +- name: Abolishing council tax also drops the high-value surcharge from aggregates + period: 2028 + input: + gov.contrib.abolish_council_tax: true + region: LONDON + main_residence_value: 2_554_326.811538164 + main_residential_property_purchased: 0 + council_tax: 1_500 + household_owns_tv: false + gov.hmrc.stamp_duty.property_sale_rate: 0 + output: + high_value_council_tax_surcharge: 2_500 + household_tax: 0 + gov_tax: 0 diff --git a/policyengine_uk/variables/gov/gov_tax.py b/policyengine_uk/variables/gov/gov_tax.py index 2de60caf7..adbb2b8b4 100644 --- a/policyengine_uk/variables/gov/gov_tax.py +++ b/policyengine_uk/variables/gov/gov_tax.py @@ -41,7 +41,9 @@ def formula(household, period, parameters): abolish_council_tax = parameters.gov.contrib.abolish_council_tax(period) if abolish_council_tax: variables = [ - variable for variable in variables if variable != "council_tax" + variable + for variable in variables + if variable not in ["council_tax", "high_value_council_tax_surcharge"] ] return add(household, period, variables) diff --git a/policyengine_uk/variables/gov/hmrc/household_tax.py b/policyengine_uk/variables/gov/hmrc/household_tax.py index b020f394e..55e2a64c6 100644 --- a/policyengine_uk/variables/gov/hmrc/household_tax.py +++ b/policyengine_uk/variables/gov/hmrc/household_tax.py @@ -43,7 +43,11 @@ def formula(household, period, parameters): return add( household, period, - [tax for tax in HOUSEHOLD_TAX_VARIABLES if tax not in ["council_tax"]], + [ + tax + for tax in HOUSEHOLD_TAX_VARIABLES + if tax not in ["council_tax", "high_value_council_tax_surcharge"] + ], ) else: return add(household, period, HOUSEHOLD_TAX_VARIABLES)