Skip to content

Apply the Pension Credit earnings disregards (SPC Regs 2002 Sch VI) - #2019

Open
MaxGhenis wants to merge 2 commits into
mainfrom
pc-earnings-disregard
Open

MaxGhenis wants to merge 2 commits into
mainfrom
pc-earnings-disregard

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Part of #1954 (its bullet "pension_credit_income applies no Sch VI earnings disregards").

The law

SPC Regs 2002 reg 17(9) disregards the sums in Schedule VI from the claimant's earnings (legislation.gov.uk, current and as-made texts, read 2026-10-01):

Para Who Weekly
1 lone parent £20
3 claimant or partner is a carer satisfying Sch I para 4 £20
4(1)(a) claimant or partner receives long-term IB, SDA, AA, DLA, ESA, PIP, AFIP (or a Scottish equivalent, WTC disability element, war pensions mobility supplement) £20
4(1)(b) claimant or partner certified severely sight impaired or blind £20
4A £20 is the most, however many conditions are met
5 otherwise: single / couple with earnings £5 / £10

The amounts have not changed since 6 October 2003. ESA was added to para 4(1)(a) on 27 October 2008 (SI 2008/1554), and PIP and AFIP on 8 April 2013 (SI 2013/388, SI 2013/591).

What changes

  • New parameters gov.dwp.pension_credit.earnings_disregard:
    • standard (SINGLE £5, COUPLE £10);
    • higher.amount (£20);
    • higher.disability_benefits, a dated person-level list: IB, SDA, AA, DLA; contributory ESA from 2008-10-27; PIP and AFIP from 2013-04-08;
    • higher.disability_benefit_unit_benefits: income-related ESA, held on the benefit unit, from 2008-10-27.
  • New variable pension_credit_earnings_disregard: min(net earnings, 52 × weekly amount).
    • The weekly amount is £20 if the unit is a lone-parent family, or a claimant or partner (is_claimant_or_partner) is a carer (is_carer_for_benefits, i.e. Sch I para 4), is on a listed benefit, or is_blind. Otherwise it is £5 or £10 by relation_type.
    • Net earnings are the claimant's and partner's employment and self-employment income, less earnings NI (Class 1 employee, 2, 4), less half of pension contributions, less income tax on the earnings. That tax is taken as the lesser of the person's income tax and the basic rate on their earnings, the tax deducted when the personal allowance goes against pension income first. Reg 17(9) disregards the sums "in calculating the claimant's earnings", which reg 17(10) and 17A(4A) define net (DMG 86110). Capping at gross earnings, as the first version did, let a taxpayer's first pounds of earnings raise Pension Credit.
  • pension_credit_income subtracts it, after tax, NI and half of pension contributions, floored at 0.
  • Not modelled, as stated in the variable and parameter documentation:
    • the para 2-2B employments (part-time firefighters, coastguards, lifeboat crew, reserve forces), for which there is no data;
    • the para 4(2)-(4) transitional protections;
    • pension age disability payment, adult disability payment and Scottish adult DLA, which have no variables of their own;
    • the WTC disability elements; WTC ended in April 2025.

Tests

  • pension_credit_earnings_disregard.yaml: 17 hand-computed cases (2024-25). They include a taxpayer whose disregard is capped at net earnings (Pension Credit income £14,514 with £1,040 of earnings and without), and a dependant's caring that doesn't qualify a couple. They cover single £5, couple £10, attendance allowance, partner's PIP, carer, lone parent, blind, both partners qualifying (para 4A cap), the earnings cap, self-employment, no earnings, a dependent child's DLA not qualifying, income-related ESA, and the effect on the guarantee credit.

  • tests/test_pension_credit_earnings_disregard_properties.py (Hypothesis) checks six properties:

    1. Statute. The disregard equals min(net earnings, 52 × w). The test computes net earnings itself from the inputs and the model's tax and NI. Conditions come from the inputs, with dependants' DLA and caring generated so they are seen never to qualify.
    2. Bounds. 0 ≤ disregard ≤ min(gross earnings, £20 × 52).
    3. Differential. Pension Credit income equals the pre-change income less the disregard.
    4. Monotonicity. The guarantee credit is never below its value without the disregard.
    5. Earning more never raises Pension Credit (+£1 to +£5,000 of employment income).
    6. Dated lists. ESA appears from 2008-10-27, PIP and AFIP from 2013-04-08.

    The lists are tested as parameters because the model cannot compute severe disablement allowance before April 2015.

  • Updated expectations, with the arithmetic in comments:

  • The Pension Credit and local authority YAML suites (178 cases) and the property tests pass locally. CI runs the full suite.

Measured impact (real runs)

The PolicyEngine/policyengine-uk-data#510 build D Enhanced FRS (2024-25), calibrated weights, GB. main 3c48247 (after #1896) against this branch:

2025-26 2026-27
benefit units entitled to Pension Credit +1.9k +2.9k
benefit units receiving it +1.5k +2.0k
Pension Credit spending +£1m +£1m
household net income +£0m +£1m
Housing Benefit, CTR, pensioner poverty unchanged to the reported precision unchanged

It does not change which FRS Pension Credit reporters are entitled. The reporter gap comes from imputed capital; see #2018 (merged) and PolicyEngine/policyengine-uk-data#513.

Review

An independent Opus 5.5 review (Subfleet) of the first head asked for changes:

A delta review of the new head is pending.

axiom: TheAxiomFoundation/rulespec-uk#414 queued (SPC Regs 2002 Sch VI; the corpus cannot yet ingest a Roman-numeral schedule)

🤖 Generated with Claude Code

@juaristi22

Copy link
Copy Markdown
Collaborator

Codex review — changes required

Reviewed commit 2c87ceebfb0dccddb0aa8d9cc73881cf14634b2e. COMPLETE; 1 confirmed blocking finding(s). Independent code/test and policy/source reviews were consolidated for the changed behavior and affected dependencies.

code-1 — [P1] Cap the disregard against earnings after statutory deductions

The new cap at pension_credit_earnings_disregard.py:54–55 uses gross pension_credit_earnings, whereas pension_credit_income.py:19–25 separately subtracts tax, National Insurance and half pension contributions before this disregard. Therefore the cap still allows the disregard to consume pension income. For a single person aged 70 in 2024, £400 employment earnings, £400 reported employee pension contributions, £9,000 State Pension and no savings, the current head produces £260 disregard, £8,940 assessable income and £2,403.80 final Pension Credit. Half the contribution leaves only £200 earnings before the Schedule VI disregard; capping to £200 leaves £9,000 assessable income and £2,343.80 Pension Credit, a £60 annual overpayment in the PR. This follows the independently checked regulation 17A(4A) earnings calculation and regulation 17(9)/Schedule VI ordering.

Cap using the nonnegative net earnings available at this stage and add a low-earnings/pension-contribution regression that asserts the final award. The property tests currently construct gross-only earnings and so do not challenge this deduction ordering. Confidence: high; current-head code, source rule and final award reproduction agree.

Policy/source review independently confirms the ordering in regulation 17A(4A), regulation 17(9) and Schedule VI. The code and policy reports describe the same defect, counted once.

The standard/higher disregard amounts and category conditions were corroborated. The required correction is the cap's placement after statutory deductions.

Validation: 43 focused tests passed. A separate executed household diagnostic reproduced the £60 final Pension Credit overpayment described above. Three official source originals were inspected and their cached bytes verified. Existing passing tests do not cover the failing net-earnings ordering. No material review gaps remain within this scope.

Focused tests used an existing cached Python 3.13 environment (Core 3.32.9, NumPy 2.1.3, pandas 2.3.1, microdf-python 1.2.1, Hypothesis 6.168.2, pytest 8.4.2) with this PR’s isolated source snapshot. No dependencies were installed; this was not a freshly synced lock environment or a full-suite/population run. This is a review comment, not a formal GitHub review vote.

Live check before posting (2026-10-02T10:35:18.903311+00:00): same commit, CLEAN; all reported CI checks pass.

@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

Review pass (Claude Code, on Vahid's behalf) at 2c87ceeb

Short version: the Schedule VI amounts, categories and dating are right, but the cap needs to move. I agree with the Codex review's blocking finding and reproduced it independently. Everything else is small.

1. Blocking: cap the disregard at net earnings, not gross. pension_credit_earnings_disregard.py:54-55 caps at pension_credit_earnings. But pension_credit_income.py:22-25 subtracts tax, NI and half the pension contributions before the disregard. Reg 17(9) applies Schedule VI to earnings as calculated under reg 17A, and reg 17A(4A) takes net earnings after income tax, Class 1 NI and half of any pension contribution. So the disregard can currently eat into non-earned income.

  • Reproduced at this head (2024): single person aged 70, £400 earnings, £400 employee pension contributions, £9,000 State Pension. The disregard is £260, Pension Credit income £8,940 and Pension Credit £2,403.80. Capped at the £200 of net earnings, Pension Credit income is £9,000 and Pension Credit £2,343.80, so this head overpays by £60.
  • Fix: cap at max(0, earnings − NI − 0.5 × pension contributions − income tax on earnings). pension_credit_income deducts income tax on all income (State Pension included), so for the cap you need only the share that falls on earnings. Apportioning by earnings' share of taxable income is a reasonable approximation; say so in the docstring.
  • Test: add a YAML case that asserts the final award for the case above. The property tests only generate gross earnings with no deductions, so they can't catch this. A strategy with pension contributions, or taxable earnings, would.

2. Nit: Sch VI para 6 isn't mentioned. Earnings from an employment that ended before the claimant first became entitled to Pension Credit are disregarded in full (other than reg 17(9)(b) amounts). The model can't see when an employment ended, so listing para 6 under "Not modelled" next to paras 2-2B would be enough.

3. Nit: coordination with #1896. The claimant-or-partner test reads is_uc_claimant (line 32). #1896 introduces is_claimant_or_partner for exactly this, and #1946 uses it. Whichever lands second should switch, so a Pension Credit rule doesn't depend on a UC-named flag.

Checked and correct:

  • Read against the current Sch VI text:
    • £20 for a lone parent (para 1), a carer (para 3, via the Sch I para 4 addition), or a claimant or partner on a listed benefit or blind (para 4(1)).
    • £5 single and £10 where the claimant has a partner (para 5).
    • £20 at most however many conditions apply (para 4A).
  • The dated lists add ESA from 27 October 2008, and PIP and AFIP from 8 April 2013. Treating incapacity_benefit as long-term IB is documented.
  • Probes on this head behave as expected otherwise:
    • single with £200 earnings: £200 disregarded, the earnings cap;
    • couple with £200 earnings: £200, under the £520 couple amount;
    • self-employment of £3,000 with AA: £1,040, the £20 rate, and AA stays outside Pension Credit income.
  • Tests: the Pension Credit YAML directory (63) and the property file pass locally; CI 6/6 green.

MaxGhenis and others added 2 commits October 2, 2026 09:54
20 pounds a week for a lone parent (para 1), a carer satisfying Sch I para 4
(para 3), or a claimant or partner on a listed disability benefit or
certified blind (para 4(1)); otherwise 5 pounds single and 10 pounds couple
(para 5); at most 20 pounds (para 4A), never more than the earnings.

Refs #1954.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…2019)

Reg 17(9) disregards the Sch VI sums in calculating the claimant's earnings,
which are net of income tax and NI (reg 17(10)) and of half of pension
contributions (reg 17A(4A)). Capping at gross earnings let a taxpayer's
first pounds of earnings raise Pension Credit. Income tax on earnings is the
lesser of the person's income tax and the basic rate on their earnings.

Also: the carer condition reads the claimant's or partner's
is_carer_for_benefits (Sch I para 4), not the carer addition, which counts
dependants; is_claimant_or_partner after #1896; property tests compute net
earnings independently, include dependants' DLA and caring, and add that
earning more never raises Pension Credit; parameter description and test
comment fixes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the pc-earnings-disregard branch from 2c87cee to 3d4f12b Compare October 2, 2026 14:08

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants