Repository navigation
tax_band compares a Scottish taxpayer's total income with the Scottish thresholds; the Scottish rates apply to non-savings, non-dividend income only #2350
Description
What the law says
- ITA 2007 s. 11A charges the Scottish rates on "the non-savings income of a Scottish taxpayer" (s. 11A(1A)), subject to the dividend rates of s. 13 (s. 11A(5)).
- So a Scottish taxpayer's savings and dividend income is charged at the UK rates and bands, on top of their other income.
- ITA 2007 s. 55B(2)(b) lets a person receive the Marriage Allowance only if they are liable at no rate other than the basic rate, the Scottish basic rate, "a Scottish rate below the Scottish basic rate", the Scottish intermediate rate, the dividend ordinary rate and the other rates it lists.
What the model does
tax_band (from 2018-19) takes adjusted_net_income - allowances, which includes savings and dividends, and compares it with the Scottish thresholds for a Scottish taxpayer:
income = ani - allowances
scottish_band = select(
[income < threshold for threshold in rates.scotland.rates.thresholds[:5]],
[NONE, STARTER, BASIC, INTERMEDIATE, HIGHER],
default=ADDITIONAL,
)The liability itself is right: earned_income_tax applies the Scottish rates to earnings only, and dividend_income_tax applies the UK dividend bands. Only the label is wrong, and what reads it:
meets_marriage_allowance_income_conditionsrefuses a Scottish taxpayer whose earnings sit in the intermediate band and whose dividends are charged at the ordinary rate.- Counts of taxpayers by marginal rate put some Scottish taxpayers a band too high: those whose savings or dividends carry their total income over a Scottish threshold.
savings_allowancealso readstax_band. That is Personal Savings Allowance uses the Scottish bands for Scottish taxpayers (ITA 2007 s. 12B(8)) #2347, which needs the rest-of-UK bands and is a separate fix.
Minimal reproduction
policyengine-uk 2.122.2, period 2025, one adult aged 40. The formula on main is the same.
- Scotland, £40,000 of pay and £5,000 of dividends
- Model:
tax_bandisHIGHER;meets_marriage_allowance_income_conditionsis false. - Law: the pay is charged at the starter, basic and intermediate rates (£27,430 of taxable income, below the £31,092 higher-rate threshold). The dividends are charged at the ordinary rate (total taxable income £32,430, below £37,700). The person is liable at no higher rate, so the condition holds.
- The model's tax is right: £5,582.82 on the pay and £393.75 on the dividends.
- Model:
- England, the same incomes:
BASIC, and the condition holds. - Scotland, £60,000 of pay and £20,000 of dividends
- Model:
tax_bandisADDITIONAL, because £67,430 of total taxable income is above the £62,430 advanced-rate threshold. - Law: the pay reaches the Scottish higher rate only (£47,430 of taxable income). The dividends are charged at the upper rate (total below £125,140). No income is charged at the advanced, top or dividend additional rate.
- Model:
- England, the same incomes:
HIGHER.
from policyengine_uk import Simulation
def band(country, pay, dividends, year=2025):
situation = {
"people": {"p": {
"age": {str(year): 40},
"employment_income": {str(year): pay},
"dividend_income": {str(year): dividends},
}},
"benunits": {"b": {"members": ["p"]}},
"households": {"h": {"members": ["p"], "country": {str(year): country}}},
}
sim = Simulation(situation=situation)
return (
sim.calculate("tax_band", year),
sim.calculate("meets_marriage_allowance_income_conditions", year),
)
band("SCOTLAND", 40_000, 5_000) # HIGHER, False; law: intermediate, True
band("SCOTLAND", 60_000, 20_000) # ADDITIONAL; law: higherA possible fix
For a Scottish taxpayer, take the higher of two bands:
- the Scottish band of taxable income that is neither savings nor dividends, against the Scottish thresholds;
- the rest-of-UK band of total taxable income, which is the highest rate their savings and dividends are charged at.
On the cases above this gives INTERMEDIATE and HIGHER. A Scottish taxpayer with £30,000 of pay and £25,000 of dividends stays HIGHER, which is right: part of the dividends is charged at the upper rate.
Tests to add in scottish_rates.yaml: the two Scottish cases above, with dividends and with savings interest.
Where it showed up
PolicyEngine/microcosm#1198 binds HMRC's counts of Scottish higher and additional rate Income Tax payers (Income Tax liabilities statistics, Table 2.2) on tax_band. An engine test there pins the first case above, so a fix here shows up as a failure of that pin.
Activity