Skip to content

Test that AFCS payments never confer severe disability; document AFCS vs AFIP (stacked on #1946) - #2003

Merged
MaxGhenis merged 4 commits into
mainfrom
afcs-severe-disability
Oct 4, 2026
Merged

MaxGhenis merged 4 commits into
mainfrom
afcs-severe-disability

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2114

Follows #1946 (merged 2026-10-03). This PR carries no formula change: it is tests and documentation only.

Summary

#1946 fixes is_severely_disabled_for_benefits paragraph 5. It reads armed_forces_independence_payment instead of any afcs payment, as Child Tax Credit Regulations 2002 reg 8(5) and Working Tax Credit Regulations 2002 reg 17(4) require. This PR adds what #1946 does not have, as listed in the review on this PR:

  • Documentation.
    • afcs_reported: what FRS benefit code 8 covers.
    • armed_forces_independence_payment: its legal basis, and that it is not part of afcs.
  • YAML cases, appended to Give the legacy severe disability premium its statutory conditions (stacked on #1896) #1946's is_severely_disabled_for_benefits.yaml. They check that AFCS payments confer nothing, alone or next to an award that is not severe, through every amount that reads the flag.
  • Hypothesis properties for the AFCS rule across those amounts.

The first version of this PR made the formula change itself on main; it was consolidated into #1946 instead, which has now merged.

What afcs holds

afcs adds afcs_reported, which policyengine-uk-data builds from FRS benefit code 8:

  • The FRS 2024-25 data dictionary (UKDA study 9563) labels code 8 "Armed Forces Compensation Scheme".
  • The questionnaire (card H3) asks about the "Armed Forces Compensation Scheme (formerly War Disablement Pension), including Guaranteed Income Payments".
  • The code frame has no armed forces independence payment (AFIP) code.

AFIP is one of six injury benefits in the AFCS Order 2011 art 15(1): lump sum, supplementary award, guaranteed income payment, AFIP, fast payment and medical expenses. CTC reg 8(5) and WTC reg 17(4) name only AFIP. UC Regs 2013 reg 24(2)(b) names no armed forces payment.

Tests

Appended to tests/policy/baseline/finance/benefit/family/is_severely_disabled_for_benefits.yaml: 7 cases, computed by hand from the law and the published rates.

  • DLA and PIP. An AFCS payment alongside DLA care at the middle rate, and alongside PIP daily living at the standard rate: not severe. Either award still makes a child disabled under CTC reg 8(2), but neither is a severe disability paragraph.
  • CTC. A child with an AFCS payment adds no severely disabled child element.
  • WTC.
    • An AFCS payment adds no severe disability element.
    • AFIP at the 2024-25 rate adds it. That rate is £184.30 a week (AFCS Order 2011 art 24A(3), as amended by SI 2024/347 art 4), so £9,583.60 a year, and the element is £1,705 (WTC Regs Sch 2).
  • UC. A 17-year-old qualifying young person with an AFCS payment gets no higher disabled child addition. On the enhanced PIP daily living rate they get it: £495.87 × 12 = £5,950.44 in 2025-26.

The file passes in full on this head: 21 of 21 (#1946's 14 cases and these 7).

New tests/test_severe_disability_afcs_properties.py. Each example is a population of 10 to 20 random families: adults, and dependants aged 0 to 18 who are in non-advanced education from 16. Every dependant is a child or qualifying young person for UC and CTC. Each person gets random DLA care, PIP daily living and Attendance Allowance categories, AFCS payments and AFIP.

  1. Differential. The flag equals the tax credit condition recomputed from the inputs: CTC reg 8(3)-(5) plus WTC reg 17(2)'s higher-rate Attendance Allowance.
  2. Metamorphic. Setting every AFCS payment to zero, or to another random amount, changes neither the flag nor the amounts that read it: the UC higher disabled child addition, the CTC severely disabled child element and the WTC severe disability element. The legacy severe disability premium reads its own qualifying-benefit list after Give the legacy severe disability premium its statutory conditions (stacked on #1896) #1946, not this flag. It gets the same AFCS check as an independent case.
  3. Monotone. Giving everyone AFIP turns the flag on and never off.

Results on this head:

Effect

There are no formula or parameter changes, so model output is unchanged.

For context on #1946's AFCS change, here are real Microsimulation runs on private copies of the Enhanced FRS 2024-25 (2024-25 to 2030-31, weights unchanged):

  • Formula alone: no change in any year. The dataset stores is_severely_disabled_for_benefits, and build_from_multi_year_dataset sets every stored column as an input for every year, so the stored flag wins. Main 7b9fc379 against a branch with only the AFIP formula, on the same copy, gave every reported aggregate identical: benefits, premiums, net income and poverty.
  • Stored flag also corrected for code 8 only (one column changed; the rebuild matches the stored flag on all 113,403 records without a code 8 payment):
    • The flag drops by 130k people in 2025-26 (from 4.14m to 4.01m). No one under 20 reports a code 8 payment.
    • Housing Benefit is the only payable benefit that moves: less than £0.1m in every year (−£27k in 2024-25, −£36k in 2030-31). Fewer than 10 survey records are affected, so there is no further breakdown.
    • The model's severe_disability_premium is computed for every benefit unit, whether or not it claims a legacy benefit. Its notional total falls by £1.1bn in 2025-26. That is not spending: only the HB, IS and CTR applicable amounts read it, and only HB moves.
    • Runs on main bfc5fea1 gave the same figures. On that baseline, policyengine-uk-data#494's full stored-flag definition lowers net income by £7.9m in 2025-26 (CTR £7.0m, HB £0.9m), so code 8 is under 0.5% of it.

Not changed here

Axiom

axiom: n/a: tests and documentation only; the provision changes in #1946. For #1946's change, CTC Regs 2002 reg 8 and the WTC reg 17(2)-(6) qualifying benefits are queued as an encoding addendum on TheAxiomFoundation/rulespec-uk#361 (TheAxiomFoundation/rulespec-uk#361 (comment)). uk:regulations/uksi/2013/376/24 is already correct: higher_rate_disabled_child_addition_applies has no armed forces input.

🤖 Generated with Claude Code

@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

Review pass (Claude Code, on Vahid's behalf), on closing this in favour of #1946.

#1946 already contains this PR's fix. At 9dd45148, is_severely_disabled_for_benefits reads armed_forces_independence_payment > 0 for paragraph 5 instead of afcs > 0, the same change as here at 296934cb. #1946 also adds Attendance Allowance at the higher rate, from WTC Regs 2002 reg 17(2).

What #1946 doesn't have yet, and should carry over before this closes:

  • tests/test_severe_disability_afcs_properties.py: the metamorphic property that changing any AFCS payment leaves the UC higher disabled child addition, the CTC severely disabled child element, the WTC severe disability element and the severe disability premium unchanged.
  • The YAML cases that pair an AFCS payment with DLA care at the middle rate or PIP daily living at the standard rate, and the UC higher disabled child addition cases.
  • The afcs_reported and armed_forces_independence_payment documentation and references: FRS benefit code 8 is AFCS plus war disablement pensions, and AFIP is not part of afcs.

Timing. #1946 is a draft stacked on #1896, so closing this delays the AFIP fix until both land. If #1896 isn't close to merging, I'd merge this first and rebase #1946 over it; otherwise consolidating is fine.

… vs AFIP

Stacked on #1946, which reads armed_forces_independence_payment (not afcs)
for CTC Regs 2002 reg 8(5) / WTC reg 17(4). This adds what #1946 lacks:

- afcs_reported documented as FRS benefit code 8 (AFCS including guaranteed
  income payments, and war disablement pensions);
  armed_forces_independence_payment documented with AFCS Order 2011 art 24A.
- YAML cases: AFCS with DLA care middle / PIP daily living standard; CTC
  severely disabled child element, WTC severe disability element (AFCS 0,
  AFIP 1,705 in 2024-25) and the UC higher disabled child addition (AFCS 0,
  PIP enhanced 5,950.44 in 2025-26).
- Hypothesis properties: differential against the tax credit condition
  (CTC reg 8(3)-(5) + WTC reg 17(2) higher-rate AA); AFCS invariance of the
  flag and of every amount that reads it; AFIP monotone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the afcs-severe-disability branch from 296934c to abef7e9 Compare October 2, 2026 13:52
@MaxGhenis MaxGhenis changed the title Count armed forces independence payment, not any AFCS payment, as a severe disability Test that AFCS payments never confer severe disability; document AFCS vs AFIP (stacked on #1946) Oct 2, 2026
@MaxGhenis
MaxGhenis changed the base branch from main to working-age-severe-disability-premium October 2, 2026 13:54
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Agreed: consolidated rather than raced. #1896 has merged and #1946 is next in the train. I kept the formula change out of this PR so #1946 stays on its tested head.

This PR is now stacked on #1946 (abef7e9a, on #1946's 5ab03ee0). It carries only what you listed:

On this head the YAML file passes 16 of 16, the 3 properties pass, and the code-health tests pass. Against pre-#1946 main, all 3 properties fail. Once #1946 merges I'll retarget this to main.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 3, 2026 07:47
…emium' into afcs-severe-disability

# Conflicts:
#	policyengine_uk/tests/policy/baseline/finance/benefit/family/is_severely_disabled_for_benefits.yaml
- The 2024 WTC case's AFIP input uses the 2024-25 rate, 184.30 a week
  (AFCS Order 2011 art 24A(3) as amended by SI 2024/347 art 4): 9,583.60.
- The YAML comment says AFCS payments meet none of the *severe* disability
  paragraphs (CTC reg 8(3)-(6), WTC reg 17(2)-(6)); a middle-rate DLA care or
  standard-rate PIP daily living award still meets reg 8(2).
- Generated dependants are 0 to 18, all children or qualifying young persons
  for UC and CTC; a 19-year-old needs the course-start condition too.
- The severe disability premium reads its own qualifying-benefit list, so the
  property docstring calls its AFCS invariance an independent check.
- Changelog fragment written as a short bullet (docs/engineering/skills/github-prs.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base automatically changed from working-age-severe-disability-premium to main October 3, 2026 18:48
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Merged at the reviewed head 2fd8ea19c with a merge commit (--match-head-commit). These were the gates:

🤖 Generated with Claude Code

MaxGhenis added a commit that referenced this pull request Oct 4, 2026
Keep main's joint-liability share on the liability, and route the Scottish
and Welsh working-age rules on council_tax_reduction_claim_pensioner, the
per-claim scheme flag the national formula uses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

Severe disability flag counted any AFCS payment instead of armed forces independence payment

2 participants