From 5c034ec6214a952b5197b0051ebb22190283a994 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 28 Oct 2026 10:35:57 -0400 Subject: [PATCH] Raise the savings and property income rates by 2 more points from 2027-28 Budget 2026 paragraphs 6.246 and 6.247 add 2 percentage points to the savings and property rates from 6 April 2027, on top of Budget 2025's 22%, 42% and 47%: 24%, 44% and 49% (Table 6.1, items 61 and 62). Property rates apply in England, Wales and Northern Ireland, which the model already does (Scottish taxpayers' property income stays on the Scottish rates); savings rates apply UK-wide. Finance cost relief reads the property basic rate, so it rises to 24%, as the costing note says. The ISA cash-interest charge reads the savings basic rate (SI 2026/1018 reg. 22A(3)), so it rises too. Tests: hard-coded 22/42/47% expectations recomputed at 24/44/49%; new Budget 2026 YAML cases for each band and country; property tests for the exact 2-point rise, Scotland's exclusion from property rates, UK-wide savings rates and the finance cost relief bound. Co-Authored-By: Claude Opus 5.5 --- .../ab26-savings-property-rates.changed.md | 1 + .../gov/hmrc/income_tax/rates/property.yaml | 40 ++++- .../gov/hmrc/income_tax/rates/savings.yaml | 40 ++++- .../income/uc_earnings_deductions.yaml | 8 +- .../property_allowance_deduction.yaml | 4 +- .../income_tax/property_income_band_base.yaml | 4 +- .../reliefs/property_finance_cost_relief.yaml | 16 +- .../baseline/gov/hmrc/isa/isa_income.yaml | 7 +- .../tests/policy/integration/income.yaml | 5 +- .../income_source_tax_rates.yaml | 56 +++--- .../savings_property_income_rates.yaml | 135 +++++++++++++++ ..._2026_savings_property_rates_properties.py | 159 ++++++++++++++++++ .../liability/property_income_tax.py | 10 +- 13 files changed, 423 insertions(+), 62 deletions(-) create mode 100644 changelog.d/ab26-savings-property-rates.changed.md create mode 100644 policyengine_uk/tests/policy/reforms/oct_2026_budget/savings_property_income_rates.yaml create mode 100644 policyengine_uk/tests/test_budget_2026_savings_property_rates_properties.py diff --git a/changelog.d/ab26-savings-property-rates.changed.md b/changelog.d/ab26-savings-property-rates.changed.md new file mode 100644 index 0000000000..0e141c7896 --- /dev/null +++ b/changelog.d/ab26-savings-property-rates.changed.md @@ -0,0 +1 @@ +Raise the savings and property income rates to 24%, 44% and 49% from 6 April 2027 (Budget 2026). diff --git a/policyengine_uk/parameters/gov/hmrc/income_tax/rates/property.yaml b/policyengine_uk/parameters/gov/hmrc/income_tax/rates/property.yaml index d383f5421d..3aab150eb3 100644 --- a/policyengine_uk/parameters/gov/hmrc/income_tax/rates/property.yaml +++ b/policyengine_uk/parameters/gov/hmrc/income_tax/rates/property.yaml @@ -1,10 +1,12 @@ -description: Property income tax rates. From April 2027, property income is taxed at rates 2pp higher than the standard UK rates. +description: Property income tax rates. From April 2027, property income is taxed at rates 4pp higher than the standard UK rates (2pp from Budget 2025 and 2pp from Budget 2026), in England, Wales and Northern Ireland. metadata: label: Property Income Tax rates unit: /1 reference: - title: OBR Economic and Fiscal Outlook November 2025 href: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/ + - title: Budget 2026, paragraph 6.246 + href: https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=142 basic: description: The basic rate of tax on property income. metadata: @@ -12,11 +14,19 @@ basic: unit: /1 values: 2015-04-06: 0.20 + # Budget 2025 set 22% from 6 April 2027; Budget 2026 adds a further + # 2 percentage points from the same date, applying across England, Wales and Northern Ireland. 2027-04-06: - value: 0.22 + value: 0.24 metadata: reference: - - title: OBR Economic and Fiscal Outlook November 2025 + - title: Budget 2026, paragraph 6.246 + href: https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=142 + - title: Budget 2026 policy costings, page 74 (from 6 April 2027) + href: https://assets.publishing.service.gov.uk/media/6ae1883fe4367e5c8b0467df/AB26_Policy_Costing.pdf#page=74 + - title: Budget 2026, Table 6.1, item 61 + href: https://assets.publishing.service.gov.uk/media/6ae187a2779378370fd80a9a/Table_6.1_and_6.2_Budget_2026_Policy_Decisions.xlsx + - title: OBR Economic and Fiscal Outlook November 2025 (Budget 2025's first 2 points) href: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/ higher: description: The higher rate of tax on property income. @@ -25,11 +35,19 @@ higher: unit: /1 values: 2015-04-06: 0.40 + # Budget 2025 set 42% from 6 April 2027; Budget 2026 adds a further + # 2 percentage points from the same date, applying across England, Wales and Northern Ireland. 2027-04-06: - value: 0.42 + value: 0.44 metadata: reference: - - title: OBR Economic and Fiscal Outlook November 2025 + - title: Budget 2026, paragraph 6.246 + href: https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=142 + - title: Budget 2026 policy costings, page 74 (from 6 April 2027) + href: https://assets.publishing.service.gov.uk/media/6ae1883fe4367e5c8b0467df/AB26_Policy_Costing.pdf#page=74 + - title: Budget 2026, Table 6.1, item 61 + href: https://assets.publishing.service.gov.uk/media/6ae187a2779378370fd80a9a/Table_6.1_and_6.2_Budget_2026_Policy_Decisions.xlsx + - title: OBR Economic and Fiscal Outlook November 2025 (Budget 2025's first 2 points) href: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/ additional: description: The additional rate of tax on property income. @@ -38,9 +56,17 @@ additional: unit: /1 values: 2015-04-06: 0.45 + # Budget 2025 set 47% from 6 April 2027; Budget 2026 adds a further + # 2 percentage points from the same date, applying across England, Wales and Northern Ireland. 2027-04-06: - value: 0.47 + value: 0.49 metadata: reference: - - title: OBR Economic and Fiscal Outlook November 2025 + - title: Budget 2026, paragraph 6.246 + href: https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=142 + - title: Budget 2026 policy costings, page 74 (from 6 April 2027) + href: https://assets.publishing.service.gov.uk/media/6ae1883fe4367e5c8b0467df/AB26_Policy_Costing.pdf#page=74 + - title: Budget 2026, Table 6.1, item 61 + href: https://assets.publishing.service.gov.uk/media/6ae187a2779378370fd80a9a/Table_6.1_and_6.2_Budget_2026_Policy_Decisions.xlsx + - title: OBR Economic and Fiscal Outlook November 2025 (Budget 2025's first 2 points) href: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/ diff --git a/policyengine_uk/parameters/gov/hmrc/income_tax/rates/savings.yaml b/policyengine_uk/parameters/gov/hmrc/income_tax/rates/savings.yaml index 1f160ef4ab..96322ee4df 100644 --- a/policyengine_uk/parameters/gov/hmrc/income_tax/rates/savings.yaml +++ b/policyengine_uk/parameters/gov/hmrc/income_tax/rates/savings.yaml @@ -1,10 +1,12 @@ -description: Savings income tax rates. From April 2027, savings income is taxed at rates 2pp higher than the standard UK rates. +description: Savings income tax rates. From April 2027, savings income is taxed at rates 4pp higher than the standard UK rates (2pp from Budget 2025 and 2pp from Budget 2026), across the UK. metadata: label: Savings Income Tax rates unit: /1 reference: - title: OBR Economic and Fiscal Outlook November 2025 href: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/ + - title: Budget 2026, paragraph 6.247 + href: https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=142 basic: description: The basic rate of tax on savings income. metadata: @@ -12,11 +14,19 @@ basic: unit: /1 values: 2015-04-06: 0.20 + # Budget 2025 set 22% from 6 April 2027; Budget 2026 adds a further + # 2 percentage points from the same date, applying across the UK. 2027-04-06: - value: 0.22 + value: 0.24 metadata: reference: - - title: OBR Economic and Fiscal Outlook November 2025 + - title: Budget 2026, paragraph 6.247 + href: https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=142 + - title: Budget 2026 policy costings, page 75 (from 6 April 2027) + href: https://assets.publishing.service.gov.uk/media/6ae1883fe4367e5c8b0467df/AB26_Policy_Costing.pdf#page=75 + - title: Budget 2026, Table 6.1, item 62 + href: https://assets.publishing.service.gov.uk/media/6ae187a2779378370fd80a9a/Table_6.1_and_6.2_Budget_2026_Policy_Decisions.xlsx + - title: OBR Economic and Fiscal Outlook November 2025 (Budget 2025's first 2 points) href: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/ higher: description: The higher rate of tax on savings income. @@ -25,11 +35,19 @@ higher: unit: /1 values: 2015-04-06: 0.40 + # Budget 2025 set 42% from 6 April 2027; Budget 2026 adds a further + # 2 percentage points from the same date, applying across the UK. 2027-04-06: - value: 0.42 + value: 0.44 metadata: reference: - - title: OBR Economic and Fiscal Outlook November 2025 + - title: Budget 2026, paragraph 6.247 + href: https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=142 + - title: Budget 2026 policy costings, page 75 (from 6 April 2027) + href: https://assets.publishing.service.gov.uk/media/6ae1883fe4367e5c8b0467df/AB26_Policy_Costing.pdf#page=75 + - title: Budget 2026, Table 6.1, item 62 + href: https://assets.publishing.service.gov.uk/media/6ae187a2779378370fd80a9a/Table_6.1_and_6.2_Budget_2026_Policy_Decisions.xlsx + - title: OBR Economic and Fiscal Outlook November 2025 (Budget 2025's first 2 points) href: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/ additional: description: The additional rate of tax on savings income. @@ -38,9 +56,17 @@ additional: unit: /1 values: 2015-04-06: 0.45 + # Budget 2025 set 47% from 6 April 2027; Budget 2026 adds a further + # 2 percentage points from the same date, applying across the UK. 2027-04-06: - value: 0.47 + value: 0.49 metadata: reference: - - title: OBR Economic and Fiscal Outlook November 2025 + - title: Budget 2026, paragraph 6.247 + href: https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=142 + - title: Budget 2026 policy costings, page 75 (from 6 April 2027) + href: https://assets.publishing.service.gov.uk/media/6ae1883fe4367e5c8b0467df/AB26_Policy_Costing.pdf#page=75 + - title: Budget 2026, Table 6.1, item 62 + href: https://assets.publishing.service.gov.uk/media/6ae187a2779378370fd80a9a/Table_6.1_and_6.2_Budget_2026_Policy_Decisions.xlsx + - title: OBR Economic and Fiscal Outlook November 2025 (Budget 2025's first 2 points) href: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/ diff --git a/policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/income/uc_earnings_deductions.yaml b/policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/income/uc_earnings_deductions.yaml index dd01419059..e753affdcf 100644 --- a/policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/income/uc_earnings_deductions.yaml +++ b/policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/income/uc_earnings_deductions.yaml @@ -291,10 +291,10 @@ property_rental_income: 5_000 property_income: 5_000 output: - # Property: 5,000 of receipts with no expenses, so (5,000 - 1,000) x 22% - # = 880. - property_income_tax: 880 - income_tax: 2_366 + # Property: 5,000 of receipts with no expenses, so (5,000 - 1,000) x 24% + # = 960. Earnings: (20,000 - 12,570) x 20% = 1,486. + property_income_tax: 960 + income_tax: 2_446 uc_income_tax_on_earnings: 1_486 - name: A tax reduction comes off the tax on earnings first diff --git a/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/allowances/property_allowance_deduction.yaml b/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/allowances/property_allowance_deduction.yaml index e7e7daebd7..0b6da00b9f 100644 --- a/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/allowances/property_allowance_deduction.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/allowances/property_allowance_deduction.yaml @@ -13,8 +13,8 @@ property_allowance_deduction: 0 taxable_property_income: 25_000 adjusted_net_income: 25_000 - # (25,000 - 12,570) * 22% (property basic rate from 2027-28) - income_tax: 2_734.60 + # (25,000 - 12,570) * 24% (property basic rate from 2027-28) + income_tax: 2_983.20 - name: Profit within the allowance, receipts unknown, is fully relieved period: 2027 diff --git a/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/property_income_band_base.yaml b/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/property_income_band_base.yaml index 7312c6d5bd..5a7f5ad0fd 100644 --- a/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/property_income_band_base.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/property_income_band_base.yaml @@ -94,8 +94,8 @@ members: [person] country: ENGLAND output: - # Property income at the 22% property basic rate: 27,430 x 22% = 6,034.60. - property_income_tax: 6_034.60 + # Property income at the 24% property basic rate: 27,430 x 24% = 6,583.20. + property_income_tax: 6_583.20 dividend_income_tax: 4_528.75 - name: Case 6, the annual allowance charge reads the rate on property income too. diff --git a/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/reliefs/property_finance_cost_relief.yaml b/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/reliefs/property_finance_cost_relief.yaml index b205bb7efd..9b76545f49 100644 --- a/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/reliefs/property_finance_cost_relief.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/hmrc/income_tax/reliefs/property_finance_cost_relief.yaml @@ -26,7 +26,7 @@ # (30,000 - 12,570) x 20% + 14,000 x 20% - 1,600 income_tax: 4_686 -- name: The same landlord in 2027-28 gets relief at the 22% property basic rate +- name: The same landlord in 2027-28 gets relief at the 24% property basic rate period: 2027 absolute_error_margin: 0.01 input: @@ -35,10 +35,10 @@ property_income: 14_000 property_finance_costs: 8_000 output: - # 22% x 8,000 - property_finance_cost_relief: 1_760 - # (30,000 - 12,570) x 20% + 14,000 x 22% - 1,760 - income_tax: 4_806 + # 24% x 8,000 + property_finance_cost_relief: 1_920 + # (30,000 - 12,570) x 20% + 14,000 x 24% - 1,920 + income_tax: 4_926 - name: A Scottish taxpayer gets relief at the basic rate of 20% in 2025-26 period: 2025 @@ -52,7 +52,7 @@ pays_scottish_income_tax: true property_finance_cost_relief: 1_600 -- name: A Scottish taxpayer also gets the 22% property basic rate in 2027-28 +- name: A Scottish taxpayer also gets the 24% property basic rate in 2027-28 period: 2027 absolute_error_margin: 0.01 input: @@ -62,9 +62,9 @@ region: SCOTLAND output: pays_scottish_income_tax: true - # s. 274AA(5) gives no Scottish rate: 22% x 8,000, although the property + # s. 274AA(5) gives no Scottish rate: 24% x 8,000, although the property # profits themselves are taxed at Scottish rates. - property_finance_cost_relief: 1_760 + property_finance_cost_relief: 1_920 - name: Relief is limited to the property profits and the rest carried forward period: 2025 diff --git a/policyengine_uk/tests/policy/baseline/gov/hmrc/isa/isa_income.yaml b/policyengine_uk/tests/policy/baseline/gov/hmrc/isa/isa_income.yaml index f7448862b2..c55488b45e 100644 --- a/policyengine_uk/tests/policy/baseline/gov/hmrc/isa/isa_income.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/hmrc/isa/isa_income.yaml @@ -63,7 +63,9 @@ income_tax: 0 capital_income: 100 market_income: 100 - isa_cash_interest_flat_rate_charge: 22 + # SI 2026/1018 reg. 15 (new reg. 22A(3)): the savings basic rate, 24% in + # 2027-28, on 100. + isa_cash_interest_flat_rate_charge: 24 - name: Noncash cash interest is an of-which detail of an explicitly supplied ISA total period: 2027 @@ -75,7 +77,8 @@ taxable_savings_interest_income: 0 capital_income: 500 market_income: 500 - isa_cash_interest_flat_rate_charge: 22 + # 24% savings basic rate on the 100 of cash interest. + isa_cash_interest_flat_rate_charge: 24 - name: Tax Credits and total taxable income exclude ISA returns without losing ordinary interest or dividends diff --git a/policyengine_uk/tests/policy/integration/income.yaml b/policyengine_uk/tests/policy/integration/income.yaml index 798953e25f..391dcf83fb 100644 --- a/policyengine_uk/tests/policy/integration/income.yaml +++ b/policyengine_uk/tests/policy/integration/income.yaml @@ -49,10 +49,11 @@ savings_allowance: 500 basic_rate_savings_income: 0 higher_rate_savings_income: 500 - savings_income_tax: 210 + # 500 x 44% savings higher rate (2027-28) + savings_income_tax: 220 taxed_dividend_income: 500 dividend_income_tax: 178.75 - income_tax: 7_874.75 + income_tax: 7_884.75 - name: Personal allowance caps savings starter rate before dividends. period: 2027 diff --git a/policyengine_uk/tests/policy/reforms/nov_2025_budget/income_source_tax_rates.yaml b/policyengine_uk/tests/policy/reforms/nov_2025_budget/income_source_tax_rates.yaml index 31a39110fa..991f840442 100644 --- a/policyengine_uk/tests/policy/reforms/nov_2025_budget/income_source_tax_rates.yaml +++ b/policyengine_uk/tests/policy/reforms/nov_2025_budget/income_source_tax_rates.yaml @@ -16,6 +16,10 @@ # - Basic rate: 20% -> 22% (+2pp) # - Higher rate: 40% -> 42% (+2pp) # - Additional rate: 45% -> 47% (+2pp) +# +# Budget 2026 (paragraphs 6.246 and 6.247) adds a further 2pp to the savings +# and property rates from the same date, so current law from 2027-28 is +# 24%, 44% and 49%; the post-reform cases below use those rates. # ============================================================================= # DIVIDEND TAX RATE TESTS @@ -103,7 +107,7 @@ # Additional rate taxpayers get £0 savings allowance, so £2000 at 45% savings_income_tax: 2000 * 0.45 -# Test savings rates AFTER April 2027 (should be +2pp: 22/42/47) +# Test savings rates AFTER April 2027 (+4pp from Budgets 2025 and 2026: 24/44/49) - name: Savings tax at higher rate - 2028 (post-reform) period: 2028 absolute_error_margin: 1 @@ -111,8 +115,8 @@ employment_income: 60000 savings_interest_income: 2000 output: - # £1500 at NEW rate 42% - savings_income_tax: 1500 * 0.42 + # £1500 at NEW rate 44% + savings_income_tax: 1500 * 0.44 - name: Savings tax at additional rate - 2028 (post-reform) period: 2028 @@ -121,8 +125,8 @@ employment_income: 200000 savings_interest_income: 2000 output: - # £2000 at NEW rate 47% - savings_income_tax: 2000 * 0.47 + # £2000 at NEW rate 49% + savings_income_tax: 2000 * 0.49 # ============================================================================= # PROPERTY INCOME TAX RATE TESTS @@ -154,7 +158,7 @@ # has already used up basic rate band property_income_tax: 1000 * 0.40 -# Test property rates AFTER April 2027 (should be +2pp: 22/42/47) +# Test property rates AFTER April 2027 (+4pp from Budgets 2025 and 2026: 24/44/49) - name: Property tax at basic rate - 2028 (post-reform) period: 2028 absolute_error_margin: 1 @@ -163,8 +167,8 @@ property_rental_income: 2000 property_income: 2000 output: - # £1000 at NEW rate 22% - property_income_tax: 1000 * 0.22 + # £1000 at NEW rate 24% + property_income_tax: 1000 * 0.24 - name: Property tax at higher rate - 2028 (post-reform) period: 2028 @@ -174,8 +178,8 @@ property_rental_income: 2000 property_income: 2000 output: - # £1000 at NEW rate 42% - property_income_tax: 1000 * 0.42 + # £1000 at NEW rate 44% + property_income_tax: 1000 * 0.44 - name: Property tax at additional rate - 2028 (post-reform) period: 2028 @@ -185,8 +189,8 @@ property_rental_income: 2000 property_income: 2000 output: - # £1000 at NEW rate 47% - property_income_tax: 1000 * 0.47 + # £1000 at NEW rate 49% + property_income_tax: 1000 * 0.49 # ============================================================================= # INTEGRATION TESTS - verify income_tax includes source-specific taxes @@ -202,11 +206,11 @@ property_rental_income: 2000 property_income: 2000 output: - # Property allowance is £1000, so £1000 taxable at 22% - property_income_tax: 220 + # Property allowance is £1000, so £1000 taxable at 24% + property_income_tax: 240 # Total income_tax should include property_income_tax - # Employment: £0 (covered by PA), Property: £220 - income_tax: 220 + # Employment: £0 (covered by PA), Property: £240 + income_tax: 240 - name: Property tax flows into income_tax - higher rate - 2028 period: 2028 @@ -216,16 +220,16 @@ property_rental_income: 2000 property_income: 2000 output: - # £1000 at 42% - property_income_tax: 420 + # £1000 at 44% + property_income_tax: 440 # income_tax = earned_income_tax + savings_income_tax + dividend_income_tax + property_income_tax # Earned income tax on £60000: PA=£12570, taxable=£47430 # Basic rate (20%): £37700 at 20% = £7540 # Higher rate (40%): £9730 at 40% = £3892 # Total earned: £11432 - # Property: £420 - # Total: £11852 - income_tax: 11852 + # Property: £440 + # Total: £11872 + income_tax: 11872 - name: Savings tax flows into income_tax - higher rate - 2028 period: 2028 @@ -234,9 +238,9 @@ employment_income: 60000 savings_interest_income: 2000 output: - # £1500 at 42% (after £500 savings allowance) - savings_income_tax: 630 + # £1500 at 44% (after £500 savings allowance) + savings_income_tax: 660 # Earned: £11432 (same as above) - # Savings: £630 - # Total: £12062 - income_tax: 12062 + # Savings: £660 + # Total: £12092 + income_tax: 12092 diff --git a/policyengine_uk/tests/policy/reforms/oct_2026_budget/savings_property_income_rates.yaml b/policyengine_uk/tests/policy/reforms/oct_2026_budget/savings_property_income_rates.yaml new file mode 100644 index 0000000000..9c08e7ed34 --- /dev/null +++ b/policyengine_uk/tests/policy/reforms/oct_2026_budget/savings_property_income_rates.yaml @@ -0,0 +1,135 @@ +# Budget 2026 savings and property income rates (Table 6.1, items 61 and 62). +# +# Budget 2025 (Finance Act 2026) set the savings and property rates at 22%, +# 42% and 47% from 6 April 2027. Budget 2026 adds a further 2 percentage +# points from the same date (paragraphs 6.246 and 6.247): +# - property: 24%, 44% and 49% across England, Wales and Northern Ireland; +# Scottish taxpayers' property income stays on the Scottish rates; +# - savings: 24%, 44% and 49% across the UK; +# - finance cost relief stays at the property basic rate (policy costings, +# page 74), so it rises to 24%. + +- name: 2026-27 savings rates are unchanged at 40% for a higher-rate taxpayer + period: 2026 + absolute_error_margin: 0.01 + input: + employment_income: 60_000 + savings_interest_income: 2_000 + output: + # 500 Personal Savings Allowance, then 1,500 x 40% + savings_income_tax: 600 + +- name: 2027-28 savings basic rate is 24% + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 20_000 + savings_interest_income: 3_000 + output: + # Non-savings income above the starter-rate limit, 1,000 Personal Savings + # Allowance, then 2,000 x 24% + savings_income_tax: 480 + +- name: 2027-28 savings higher rate is 44% + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 60_000 + savings_interest_income: 2_000 + output: + # 500 Personal Savings Allowance, then 1,500 x 44% + savings_income_tax: 660 + +- name: 2027-28 savings additional rate is 49% + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 200_000 + savings_interest_income: 2_000 + output: + # No Personal Savings Allowance for additional-rate taxpayers: 2,000 x 49% + savings_income_tax: 980 + +- name: 2027-28 savings rates apply to Scottish taxpayers too + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 30_000 + savings_interest_income: 2_000 + region: SCOTLAND + output: + pays_scottish_income_tax: true + # Savings bands follow the UK thresholds: 1,000 Personal Savings + # Allowance, then 1,000 x 24% + savings_income_tax: 240 + +- name: 2027-28 property basic rate is 24% in England + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 20_000 + property_rental_income: 5_000 + property_income: 5_000 + region: LONDON + output: + # (5,000 - 1,000 property allowance) x 24% + property_income_tax: 960 + +- name: 2027-28 property basic rate is 24% in Wales + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 20_000 + property_rental_income: 5_000 + property_income: 5_000 + region: WALES + output: + property_income_tax: 960 + +- name: 2027-28 property basic rate is 24% in Northern Ireland + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 20_000 + property_rental_income: 5_000 + property_income: 5_000 + region: NORTHERN_IRELAND + output: + property_income_tax: 960 + +- name: 2027-28 property higher and additional rates are 44% and 49% + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 200_000 + property_rental_income: 2_000 + property_income: 2_000 + output: + # Earnings already fill the additional-rate band: 1,000 x 49% + property_income_tax: 490 + +- name: 2027-28 property income straddling the higher-rate threshold + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 45_000 + property_income: 10_000 + output: + # Earnings use 32,430 of the 37,700 basic-rate band, leaving 5,270. + # 10,000 profit with receipts unknown: no property allowance on top. + # 5,270 x 24% + 4,730 x 44% = 1,264.80 + 2,081.20 + property_income_tax: 3_346 + +- name: 2027-28 finance cost relief rises with the property basic rate + period: 2027 + absolute_error_margin: 0.01 + input: + employment_income: 30_000 + property_rental_income: 20_000 + property_income: 14_000 + property_finance_costs: 8_000 + output: + # 24% x 8,000 + property_finance_cost_relief: 1_920 + # (30,000 - 12,570) x 20% + 14,000 x 24% - 1,920 + income_tax: 4_926 diff --git a/policyengine_uk/tests/test_budget_2026_savings_property_rates_properties.py b/policyengine_uk/tests/test_budget_2026_savings_property_rates_properties.py new file mode 100644 index 0000000000..e0397937fd --- /dev/null +++ b/policyengine_uk/tests/test_budget_2026_savings_property_rates_properties.py @@ -0,0 +1,159 @@ +"""Property tests for the Budget 2026 savings and property income rates. + +Budget 2026 adds 2 percentage points to the savings and property rates from +6 April 2027 (paragraphs 6.246 and 6.247), on top of Budget 2025's 22%, 42% +and 47%. Each test compares current law with the Budget 2025 rates for the +same generated people, and checks identities that hold for every input: + +- rUK property tax rises by exactly 2% of taxable property income, since every + pound of it sits in one of the three rate bands; +- Scottish taxpayers' property tax does not change, because their property + income stays on the Scottish rates; +- savings tax rises by exactly 2% of the savings income in the basic, higher + and additional bands, in every UK country; +- finance cost relief, which follows the property basic rate, rises by at + most 2% of the costs relieved, and never falls. +""" + +import numpy as np +import pytest +from hypothesis import HealthCheck, given, settings +from hypothesis import strategies as st + +from policyengine_uk import Simulation + +pytestmark = pytest.mark.usefixtures("cloned_uk_tax_benefit_system") + +YEAR = 2027 +RISE = 0.02 +REGIONS = ["LONDON", "WALES", "NORTHERN_IRELAND", "SCOTLAND"] +CASES = 24 +BUDGET_2025_RATES = { + f"gov.hmrc.income_tax.rates.{source}.{band}": {str(YEAR): rate} + for source in ("savings", "property") + for band, rate in (("basic", 0.22), ("higher", 0.42), ("additional", 0.47)) +} + +amount = st.one_of( + st.floats(min_value=0, max_value=60_000), + st.floats(min_value=0, max_value=300_000), + st.sampled_from([0.0, 1_000.0, 12_570.0, 37_700.0, 50_270.0, 125_140.0]), +) +case = st.tuples( + amount, # employment income + amount, # property profit + st.floats(min_value=0, max_value=1), # finance costs as a share of profit + st.one_of(st.floats(min_value=0, max_value=20_000), amount), # savings +) +cases = st.lists(case, min_size=CASES, max_size=CASES) + + +def situation(): + return { + "people": { + f"person_{i}": {"age": {YEAR: 45}, "employment_income": {YEAR: 0}} + for i in range(CASES) + }, + "benunits": { + f"benunit_{i}": {"members": [f"person_{i}"]} for i in range(CASES) + }, + "households": { + f"household_{i}": { + "members": [f"person_{i}"], + "region": {YEAR: REGIONS[i % len(REGIONS)]}, + } + for i in range(CASES) + }, + } + + +@pytest.fixture(scope="module") +def sims(): + return Simulation(situation=situation()), Simulation( + situation=situation(), reform=BUDGET_2025_RATES + ) + + +VARIABLES = [ + "pays_scottish_income_tax", + "taxable_property_income_after_allowances", + "property_income_tax", + "savings_income_tax", + "basic_rate_savings_income", + "higher_rate_savings_income", + "add_rate_savings_income", + "property_finance_costs_relieved", + "property_finance_cost_relief", + "income_tax", +] + + +def run(sims, drawn): + employment, profit, cost_share, savings = map(np.array, zip(*drawn)) + results = [] + for sim in sims: + sim.set_input("employment_income", YEAR, employment) + sim.set_input("property_income", YEAR, profit) + sim.set_input("property_finance_costs", YEAR, profit * cost_share) + sim.set_input("savings_interest_income", YEAR, savings) + sim.reset_calculations() + results.append({v: sim.calculate(v, YEAR).astype(float) for v in VARIABLES}) + return results + + +def tolerance(*values): + """A penny plus float32 rounding on the amounts involved.""" + return 0.01 + 1e-6 * sum(np.abs(v) for v in values) + + +SETTINGS = settings( + max_examples=25, + deadline=None, + suppress_health_check=[HealthCheck.too_slow], +) + + +@SETTINGS +@given(cases) +def test_ruk_property_tax_rises_by_two_points_of_taxable_property(sims, drawn): + law, before = run(sims, drawn) + ruk = ~law["pays_scottish_income_tax"].astype(bool) + rise = law["property_income_tax"] - before["property_income_tax"] + expected = RISE * law["taxable_property_income_after_allowances"] + tol = tolerance(law["property_income_tax"], expected) + assert (np.abs(rise - expected)[ruk] <= tol[ruk]).all() + + +@SETTINGS +@given(cases) +def test_scottish_property_tax_ignores_the_property_rates(sims, drawn): + law, before = run(sims, drawn) + scottish = law["pays_scottish_income_tax"].astype(bool) + rise = law["property_income_tax"] - before["property_income_tax"] + tol = tolerance(law["property_income_tax"]) + assert (np.abs(rise)[scottish] <= tol[scottish]).all() + + +@SETTINGS +@given(cases) +def test_savings_tax_rises_by_two_points_in_every_country(sims, drawn): + law, before = run(sims, drawn) + banded = ( + law["basic_rate_savings_income"] + + law["higher_rate_savings_income"] + + law["add_rate_savings_income"] + ) + rise = law["savings_income_tax"] - before["savings_income_tax"] + tol = tolerance(law["savings_income_tax"], banded) + assert (np.abs(rise - RISE * banded) <= tol).all() + + +@SETTINGS +@given(cases) +def test_finance_cost_relief_rises_by_at_most_two_points(sims, drawn): + law, before = run(sims, drawn) + rise = law["property_finance_cost_relief"] - before["property_finance_cost_relief"] + cap = RISE * law["property_finance_costs_relieved"] + tol = tolerance(law["property_finance_cost_relief"], cap) + assert (rise >= -tol).all() + assert (rise <= cap + tol).all() diff --git a/policyengine_uk/variables/gov/hmrc/income_tax/liability/property_income_tax.py b/policyengine_uk/variables/gov/hmrc/income_tax/liability/property_income_tax.py index 0e9aeb56ba..1181eae828 100644 --- a/policyengine_uk/variables/gov/hmrc/income_tax/liability/property_income_tax.py +++ b/policyengine_uk/variables/gov/hmrc/income_tax/liability/property_income_tax.py @@ -32,6 +32,10 @@ class property_income_tax(Variable): title="Finance Act 2026, s. 7 (property income rates)", href="https://www.legislation.gov.uk/ukpga/2026/11/section/7/enacted", ), + dict( + title="Budget 2026, paragraph 6.246 (property rates of 24%, 44% and 49%)", + href="https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=142", + ), ] unit = GBP @@ -77,8 +81,10 @@ def formula_2027(person, period, parameters): apply to Scotland). For rUK taxpayers, property income is taxed using property-specific - rates. From April 2027, these are 2pp higher than standard UK rates - (22%, 42%, 47% vs 20%, 40%, 45%). + rates. From April 2027, these are 4pp higher than standard UK rates + (24%, 44%, 49% vs 20%, 40%, 45%): 2pp from Budget 2025 and a further + 2pp from Budget 2026 (paragraph 6.246), which applies them across + England, Wales and Northern Ireland. Property income is stacked on top of other earned income for determining which tax band it falls into.