Skip to content

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

Open

Description

@juaristi22

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_conditions refuses 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_allowance also reads tax_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_band is HIGHER; meets_marriage_allowance_income_conditions is 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.
  • England, the same incomes: BASIC, and the condition holds.
  • Scotland, £60,000 of pay and £20,000 of dividends
    • Model: tax_band is ADDITIONAL, 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.
  • 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: higher

A possible fix

For a Scottish taxpayer, take the higher of two bands:

  1. the Scottish band of taxable income that is neither savings nor dividends, against the Scottish thresholds;
  2. 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions