Skip to content

Pension contributions relief goes negative when a self-employment loss exceeds wages #2045

Closed

Description

@MaxGhenis

pension_contributions_relief computes

income = add(person, period, ["employment_income", "self_employment_income"])
tax_relief = min_(income, contributions) * under_age_limit

with no zero floor. A self-employment loss larger than wages makes income negative, so the relief is negative even with no pension contributions. allowances adds the relief, so allowances fall and income tax rises. The relief also extends the basic rate band in capital_gains_tax, so a negative relief shrinks the band and raises capital gains tax.

Example (synthetic household, 2025): age 40, £11,000 wages, £0 pension contributions, self_employment_income −£20,000. Relief is −£9,000, allowances £3,570, and income tax £1,486. With the loss removed, relief is £0 and income tax £0.

A smaller loss also cuts relief when contributions are positive: £60,000 wages, a £30,000 loss and £40,000 personal contributions give relief of £30,000 instead of £40,000.

Law: FA 2004 s.190(1) caps relief at the individual's relevant UK earnings chargeable to income tax. s.189(2) defines those as employment income, income chargeable under ITTOIA 2005 Part 2 that comes directly from a trade, and certain patent income. Each of those is an amount of income, so none is negative: in a loss year there is no trading income, and the loss does not reduce employment income. Relief under s.188 is never negative.

Found by review r2 of #2031 (finding 1). That PR taxes ESA pay on its own and doesn't depend on this fix.

Activity

  1. juaristi22 commented on Oct 24, 2026

    @juaristi22
    Collaborator

    Implemented on main. Pension relief now uses a shared relevant-UK-earnings calculation that floors trading profits at zero, so a trading loss does not reduce employment earnings or create negative relief. The loss case is covered by the pension-relief regression tests. See #2536 and the helper. Closing as completed.

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