Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
705b3d7
Band Scottish taxpayers' savings and dividends on rest-of-UK limits
MaxGhenis Oct 31, 2026
92be9ef
Test tax_band for Scottish savings, dividends and limits
MaxGhenis Oct 31, 2026
a2d64ee
Test tax_band for Scottish taxpayers in 2026-27
MaxGhenis Oct 31, 2026
c8139c2
Add property tests reading tax_band off the liability
MaxGhenis Nov 1, 2026
174a9b2
Correct the property tests' note on the earlier formula
MaxGhenis Nov 1, 2026
1983fd2
Move the Gift Aid snapshot's Scottish mixed-income band to basic
MaxGhenis Nov 1, 2026
db76188
Scope the band notes and name tax_band as a reader
MaxGhenis Nov 1, 2026
4c011bc
Apply the s. 55B rate conditions to income for the Marriage Allowance
MaxGhenis Nov 1, 2026
319f197
Wrap the Marriage Allowance rate test's result for the line limit
MaxGhenis Nov 1, 2026
d73ecfb
Cite Step 4 of s. 23 and name who acts in the rate-test notes
MaxGhenis Nov 1, 2026
3fdf236
Name the actor in the rate-test labels and the changelog
MaxGhenis Nov 1, 2026
53cfaf4
Use the basic rate limit for Scots in the rate test before 2017-18
MaxGhenis Nov 1, 2026
6d517bb
Give the Scottish property-income cases profit at the limit
MaxGhenis Nov 1, 2026
7e70a75
Test the removed eligible bands through the reform entry points
MaxGhenis Nov 1, 2026
cd974a4
Cite the 2016-17 start of s. 11A in the rate test's notes
MaxGhenis Nov 1, 2026
c27c6bb
Test the starting rate for savings in the Marriage Allowance conditions
MaxGhenis Nov 1, 2026
0d1e279
List the Marriage Allowance rate test among the readers of non-saving…
MaxGhenis Nov 1, 2026
bb37aa7
Name who acts in the pre-2017 and starting-rate notes
MaxGhenis Nov 1, 2026
3af8cb7
Say the model picks a Scottish taxpayer's band in its documentation
MaxGhenis Nov 1, 2026
e380c79
Start the dividend upper rate at the basic rate limit in the rate test
MaxGhenis Nov 1, 2026
743b277
Count no savings nil rate in the rate test before 2016-17
MaxGhenis Nov 1, 2026
d96eb3d
Place the savings nil rate above the starting rate limit in the rate …
MaxGhenis Nov 1, 2026
09d216d
Describe the rate test and the band in current terms
MaxGhenis Nov 1, 2026
7ad623f
Name who acts in the new rate-test case notes
MaxGhenis Nov 1, 2026
f0f576a
Give the Gift Aid rise to s. 414(2)(b) in the rate-test notes
MaxGhenis Nov 1, 2026
0713b7c
Keep the pound-of-savings case at the savings higher rate under any a…
claude Nov 2, 2026
c74ca64
Name Parliament, the Scottish Parliament and the Treasury as the actors
claude Nov 2, 2026
e5b16d1
Cite the Scottish rate resolutions and s. 11A(5) in two comments
MaxGhenis Nov 2, 2026
fa20193
Merge main at 9b456bda6 into the Marriage Allowance reduction branch
claude Nov 3, 2026
f20faa4
Give the Marriage Allowance as a Step 6 tax reduction at the basic rate
claude Nov 3, 2026
988bd91
Pin Universal Credit's tax on earnings in the Marriage Allowance redu…
claude Nov 3, 2026
89f2f9f
Give the CPS reform's higher-rate recipient the basic rate of the all…
claude Nov 3, 2026
b860e67
Merge main at 9dd44e142 into the Scottish tax band branch
claude Nov 4, 2026
2ca7c5f
Update the Scottish Pension Credit cases to the Step 6 Marriage Allow…
claude Nov 4, 2026
e511964
Clarify the Scottish Pension Credit case comment
MaxGhenis Nov 4, 2026
ffa8651
Merge main: the Step 6 reductions on #1966's Welsh route and in main'…
MaxGhenis Nov 6, 2026
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/2350.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The model now reports Scottish tax bands from 2017-18 using Scottish limits for non-savings, non-dividend income and UK limits for savings and dividends, and tests the Marriage Allowance income conditions directly under ITA 2007 s. 55B(2)(b) and (ba), allowing income at a rate limit and savings at a permitted nil rate. It gives the Marriage Allowance recipient a Step 6 tax reduction of the basic rate, or the Scottish basic rate, on the transferable amount (s. 55B(1) and (3)), in place of a deduction from taxable income. A reduction larger than the tax on earnings now also comes off the tax the Welsh working-age Council Tax Reduction route disregards on pensions and benefits.
5 changes: 3 additions & 2 deletions docs/engineering/gift-aid.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,9 @@ order, each against the extended limits. Property income is taxed on top of
and savings and dividends on top of `non_savings_taxable_income`
(`earned_taxable_income` plus property income after allowances). Both bases
derive from `net_income`, so the gift raises the limits without also shrinking
the income beneath them. They differ only when Marriage Allowance applies,
which `earned_taxable_income` subtracts (#1947). The Personal Savings Allowance
the income beneath them. The two bases come to the same amount; the Marriage
Allowance reduces neither, since the model gives it as a tax reduction at Step 6
(`marriage_allowance_tax_reduction`). The Personal Savings Allowance
compares net income less allowances with the UK basic and higher rate limits,
both extended by the gross gift ([s. 12B](https://www.legislation.gov.uk/ukpga/2007/3/section/12B),
including s. 12B(8) for Scottish taxpayers, with s. 414(2)(b)).
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
description: Maximum Marriage Allowance taxable income reduction, as a percentage of the full Personal Allowance.
description: Maximum Marriage Allowance transferable amount, as a percentage of the full Personal Allowance. The recipient gets a tax reduction of the appropriate percentage of that amount.
values:
2016-04-01: 0.1
metadata:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ values:
- taxable_dividend_income
- taxable_property_income
- received_allowances_earned_income
- marriage_allowance

metadata:
unit: list
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ metadata:
href: https://www.legislation.gov.uk/ukpga/2007/3/section/26
- title: Income Tax Act 2007 s. 29(2) and (3)
href: https://www.legislation.gov.uk/ukpga/2007/3/section/29
- title: Income Tax Act 2007 s. 27(2)
href: https://www.legislation.gov.uk/ukpga/2007/3/section/27
- title: Income Tax Act 2007 s. 55A(2)
href: https://www.legislation.gov.uk/ukpga/2007/3/section/55A
- title: Budget 2026, paragraph 6.182 (Pension Tax Allowance)
href: https://assets.publishing.service.gov.uk/media/6ae1ec57bdb574cf1c9b3f12/E03668986_HMT_Budget_2026_ELAY__2_.pdf#page=135
values:
Expand All @@ -19,3 +23,9 @@ values:
- property_finance_cost_relief
# Budget 2026, 2027-28 to 2029-30; zero in other years.
- pension_tax_allowance
# ITA 2007 s. 55A(2) and s. 55B(1). Section 27(5) does not list Chapter 3A,
# so s. 27(2) sets its place: the order that gives the greatest reduction.
# Each reduction above has an amount fixed before Step 6, so every order
# deducts the same total. Listing this one last leaves the amounts of the
# reductions above as they were.
- marriage_allowance_tax_reduction
22 changes: 12 additions & 10 deletions policyengine_uk/reforms/cps/marriage_tax_reforms.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from policyengine_uk.model_api import *
from policyengine_uk.utils.income_tax import net_income_from_adjusted_net_income
from policyengine_uk.utils.supplied_inputs import supplied_input
from policyengine_uk.variables.gov.hmrc.income_tax.allowances.meets_marriage_allowance_income_conditions import (
liable_only_at_marriage_allowance_rates,
)
from typing import Union, Optional


Expand Down Expand Up @@ -34,23 +37,22 @@ def formula(person, period):

class meets_marriage_allowance_income_conditions(Variable):
label = "Meets Marriage Allowance income conditions"
documentation = "Whether this person (and their partner) meets the conditions for this person to be eligible for the Marriage Allowance, as set out in the Income Tax Act 2007 sections 55B and 55C"
documentation = (
"Whether this person meets the statutory Marriage Allowance income "
"conditions or this reform's expansion conditions."
)
entity = Person
definition_period = YEAR
value_type = bool
reference = "https://www.legislation.gov.uk/ukpga/2007/3/section/55B"

def formula(person, period, parameters):
band = person("tax_band", period)
eligible_bands = parameters(
period
).gov.hmrc.income_tax.allowances.marriage_allowance.eligible_bands
base_eligible = np.isin(band.decode_to_str(), eligible_bands)
# Expand to higher bands if the reform's expansion conditions are met.
bands = band.possible_values
expansion = person("meets_expanded_ma_conditions", period) & (
(band == bands.HIGHER) | (band == bands.ADDITIONAL)
base_eligible = liable_only_at_marriage_allowance_rates(
person, period, parameters
)
# Expand to people liable above those rates who meet the reform's
# expansion conditions.
expansion = person("meets_expanded_ma_conditions", period) & ~base_eligible
return base_eligible | expansion

class marriage_allowance(Variable):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,6 @@
- taxable_dividend_income
- taxable_property_income
- received_allowances_earned_income
- marriage_allowance
- taxable_pension_income
age: 40
employment_income: 20_000
Expand Down
Loading
Loading