Skip to content

Tighten the Pension Credit reported-capital docs and properties (review of #2018) - #2070

Open
MaxGhenis wants to merge 1 commit into
mainfrom
pc-reported-capital-followups
Open

MaxGhenis wants to merge 1 commit into
mainfrom
pc-reported-capital-followups

Conversation

@MaxGhenis

Copy link
Copy Markdown
Collaborator

Follow-up to #2018, which merged before its independent review came back. This PR applies that review (Opus 5.5 via Subfleet, REQUEST_CHANGES on wording only). The review confirmed the code: the -1 default is a no-op, the sentinel stays negative under uprating, and the nine YAML expectations are correct by hand.

Changes (docs and tests only; no formula changes)

  1. A stated invariant was false. Let a dataset supply each benefit unit's own Pension Credit capital #2018 claimed that entitlement never rises with reported capital. Under SPCA 2002 s.3 it can:

    • Deemed income counts in savings credit qualifying income and in total income.
    • With income the savings credit excludes (reg 9), such as contributory ESA, the 60% phase-in can outrun the 40% taper above the minimum guarantee.
    • Reviewer's case, reproduced: a person aged 80 with State Pension £10,900 and contributory ESA £1,300. Reported capital from £10,000 to £10,500 raises entitlement from £252.26 to £262.66 (+£10.40 = 20p × 52).

    The property now asserts that the guarantee credit never rises, and that total entitlement never rises where all income qualifies (the generated households have no excluded income). The counterexample is pinned as a labelled intended exception.

  2. Documentation of pension_credit_reported_capital now says:

    • the input must be countable capital (after the Sch V disregards and reg 19 valuation);
    • it replaces every capital source, including land, property, corporate_wealth and the Lifetime ISA;
    • capital-source reforms do not reach a unit that records it;
    • any negative value means none is recorded;
    • s.5 treats the partner's capital as the claimant's. The unsupported "and no one else's" is gone.
  3. pension_credit_assessable_capital documents a deliberate difference from uc_assessable_capital. Another unit's recorded capital is not subtracted from the household capital an unrecorded unit's proxy shares, because the two come from different measures.

    The other difference: this input is uprated with savings, while uc_reported_capital is not.

  4. Locality test. The reviewer found that only 2 of the 17 two-unit draws could detect a leak. It now has its own strategy: the other unit always has someone over State Pension age, records nothing, and shares non-zero household capital. The test asserts that unit's capital is positive before comparing.

  5. Nit: the YAML header's "(2025: 52 weeks a year)" now reads "times 52 weeks a year".

Not changed here (follow-ups)

  • HB (SPC) Regs 2006 reg 27(1) has Housing Benefit take DWP's Pension Credit capital figure for savings-credit-only awards. The model's HB still uses its own proxy. This is pre-existing, and it matters once datasets fill the input. It sits with the UC/HB reported-capital task running separately.
  • The data side, Use the FRS benefit-unit capital for Pension Credit's capital test policyengine-uk-data#513, writes -1 (not NaN) where nothing is recorded. It will regenerate uprating_factors.csv if needed.

Tests

  • tests/test_pension_credit_reported_capital_properties.py: 5 passed (the strengthened locality and monotonicity properties, plus the pinned exception).
  • pension_credit_reported_capital.yaml: 9 passed.
  • ruff format and ruff check are clean.

Impact

None. Only documentation and tests change.

axiom: n/a: documentation and tests only

🤖 Generated with Claude Code

…ew of #2018)

- Document that the input must be countable capital (after Sch V disregards
  and reg 19 valuation), that it replaces every capital source, that capital
  source reforms do not reach a unit that records it, and that any negative
  value means none recorded; drop the unsupported "no one else's" from s.5.
- Say why an unrecorded unit's proxy is not reduced by another unit's
  recorded capital (unlike uc_assessable_capital).
- Monotonicity: the guarantee credit never rises with reported capital; total
  entitlement only where all income is savings credit qualifying. Pin the
  intended SPCA s.3 exception (contributory ESA: +20p a week per 500 pounds).
- Locality gets its own strategy so a leak into the other unit would show.

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

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.

1 participant