Skip to content

Pay no Pension Credit child amount to a family with a tax credit award - #2061

Merged
MaxGhenis merged 12 commits into
mainfrom
pc-child-amount-tax-credit-award
Oct 17, 2026
Merged

MaxGhenis merged 12 commits into
mainfrom
pc-child-amount-tax-credit-award

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2060

Summary

child_minimum_guarantee_addition paid the State Pension Credit Regulations 2002 Schedule IIA amount for every child or qualifying young person, whether or not the family had a tax credit award. The law pays it only where the claimant has no award of child tax credit or working tax credit (reg 6(6)(d), (11) and (17)). The model paid both.

This PR withholds the Schedule IIA amount from a family with a tax credit award, and stops the amount being paid before Schedule IIA began on 1 February 2019.

It was stacked on #2034 (the tax credit income test lifted for Pension Credit), which merged on 2026-10-13 (7d202ab9f). The PR now targets main and has main merged in.

Reproducer: policyengine_uk/tests/policy/baseline/gov/dwp/pension_credit/guarantee_credit/child_amount_tax_credit_award.yaml::A Pension Credit couple awarded CTC and WTC gets no child amount; policyengine_uk/tests/policy/baseline/gov/dwp/pension_credit/guarantee_credit/child_amount_tax_credit_award.yaml::Before February 2019 there was no Schedule IIA amount

Law (fetched verbatim from legislation.gov.uk /data.xml, 2026-10-02)

  • SPC Regs 2002 reg 6(6)(d): "Except in a case to which paragraph (3) applies, an amount additional to that prescribed in paragraph (1) shall be applicable— ... (d) except where paragraph (11) applies, or entitlement ceases by virtue of paragraph (14), in accordance with Schedule IIA (additional amount applicable for claimants responsible for a child or qualifying young person)".
  • Reg 6(11): "This paragraph applies in the case of a person who is awarded, or who is treated as having an award of, a tax credit under the Tax Credits Act."
  • Reg 6(12): a person "is to be treated as having an award of a working tax credit with effect from the start of the current tax year even though a decision has not been made under section 14 of the Tax Credits Act in respect of a claim for that tax credit for that tax year, if the person was awarded a working tax credit for the previous tax year and any of the cases specified in paragraph (13) applies", and likewise for child tax credit. Reg 6(13) lists the cases: no final notice yet, or a final notice whose date has not passed or whose claim is undecided, or no section 18(1) decision.
  • Reg 6(14): "Entitlement to the additional amount specified in Schedule IIA ceases where a person is awarded a tax credit in the circumstances specified in paragraph (15) or (16)" (a late renewal declaration, or a decision revised in the claimant's favour).
  • Reg 6(17): "“a tax credit” includes a child tax credit and a working tax credit".
  • Commencement: reg 6(6)(d), reg 6(11)-(17) and Schedule IIA were inserted from 1 February 2019 by SI 2018/676 reg 2(2)(c), (3) and (4).
  • Schedule IIA paras 9 and 10: an amount "for each child or qualifying young person", and a higher amount for the eldest "born before 6th April 2017".
  • TCA 2002 s.14(1), (3): "On a claim for a tax credit the Board must decide— (a) whether to make an award of the tax credit, and (b) if so, the rate at which to award it." "The Board's power to decide the rate at which to award a tax credit includes power to decide to award it at a nil rate."
  • TCA 2002 s.3(1), (3)(a): entitlement "is dependent on the making of a claim for it", and a couple claims jointly.
  • TCA 2002 s.7(1): entitlement depends on the relevant income not exceeding the threshold, or exceeding it "by only so much that a determination ... provides a rate of the tax credit".

DWP's guidance reads reg 6(11) the same way (DMG 78550): "They cannot be awarded a child addition in SPC if they have an ongoing award, or are treated as having an ongoing award, of tax credits." The explanatory memorandum to SI 2018/676 (para 7.5): "This additional amount will not be awarded if the claimant has an award of a tax credit."

The questions

What counts as an award. Reg 6(11) turns on being "awarded" a tax credit, which is HMRC's decision on a claim (s.14(1)), not on the amount paid. HMRC can award at a nil rate (s.14(3)). So the new has_tax_credit_award is true where the family claims a tax credit and meets its conditions other than the income test: would_claim_CTC and is_CTC_eligible, or would_claim_WTC and is_WTC_eligible.

The alternative, an award only where the amount is positive, also breaks #2034's rule. Take a family whose income-tested award is nil and whose Pension Credit is nil without the child amount. On that reading it would get the child amount, and so Pension Credit, while its tax credits stayed income-tested. But Pension Credit lifts the income test (SI 2002/2008 reg 4(1)(d)), which makes the award positive, which removes the child amount and the Pension Credit. No state is consistent. A YAML case covers this family.

How the model finds an award. The award is read from the model's existing claim and entitlement variables, and those infer a claim from a positive reported award: is_CTC_eligible and is_WTC_eligible need a positive reported amount. So an award reported as nil, or one treated as continuing during renewal, is not inferred. has_tax_credit_award is an ordinary variable, so a user can enter it for such a family; a YAML case does.

Working tax credit alone. Reg 6(17) includes working tax credit, so a family claiming WTC but not CTC also gets no child amount, although a WTC award need not include anything for the child. A YAML case covers it.

Couples. A couple claims tax credits jointly (s.3(3)(a)), so the award is the Pension Credit claimant's whichever partner claims. The model's benefit unit is both the tax credit claim and the Pension Credit claim.

Deemed awards and cessation (reg 6(12)-(16)). Not modelled. Reg 6(12) and (13) treat last year's award as continuing from the start of a tax year until it is renewed or finalised, and reg 6(14) to (16) end the child amount when an award is made late. The model has no renewal, finalisation or revision history to apply them to. The code comment says so, and a deemed award can be entered as has_tax_credit_award.

Commencement. Schedule IIA began on 1 February 2019. The model takes a year's rules at the start of the fiscal year, so the amount applies from 2019-20. Before this PR the model paid it for earlier years too: the rate parameters start on 1 February 2019, but after fiscal-year conversion they hold the 2019 rates for earlier years. On main without this PR, the 2018-19 YAML household is paid 63.84 x 52 = £3,319.68. The new parameter gov.dwp.pension_credit.guarantee_credit.child.in_effect is false until 1 February 2019.

After tax credits. Tax credits ended on 5 April 2025 (gov.dwp.tax_credits.active), so no family has an award from 2025-26 and the child amount is paid.

No dependency cycle

Pension Credit counts working tax credit as income (SPCA 2002 s.15(1)(b)), and #2034 makes the tax credit income test read Pension Credit, in a core branch. A child amount that read the award's amount would join that loop.

has_tax_credit_award reads only the claim and the entitlement conditions. Traced on the first YAML case's family (2024-25) at this PR's head, it reads 48 variables besides itself: ages, hours, couple status, education and training, disability, the reported benefits, and the Universal Credit claim with its legacy-closure routing. They include Pension Credit's age conditions and pension_credit_reported, but no Pension Credit amount, no tax credit amount and not the income test. So it is the same in #2034's passport branch as outside it, and the passport's rule is unchanged: it now decides on the Pension Credit payable without the child amount. In 2025-26 onward it returns false before reading anything.

Changes

  • has_tax_credit_award (new, benefit unit): the award, as above; false once tax credits are inactive.
  • child_minimum_guarantee_addition: nil where has_tax_credit_award, and nil while in_effect is false. Apply the 6 April 2017 child cutoffs by date of birth #1904's date-of-birth ranking and 6 April 2017 cutoff at the top of the formula are unchanged.
  • gov.dwp.pension_credit.guarantee_credit.child.in_effect (new): false from 6 October 2003, true from 1 February 2019.
  • Lift the tax credit income test for State Pension Credit #2034's YAML and Hypothesis examples no longer enter the child amount as 0 by hand; their expectations are unchanged.
  • tests/test_claimant_not_own_child_properties.py (from Stop counting a benefit unit's claimant or partner as its own child or qualifying young person #2285): its helper enters is_CTC_eligible for every unit so that the CTC disabled child elements are paid. With the claim the model presumes, every unit then had a tax credit award in 2024, so the Pension Credit child addition was nil and CI failed on 4172e7195. Those invariants are about who counts as a dependant, not about the award, so the helper now enters has_tax_credit_award as false, and the tests exercise the addition in both of their years again.

Invariants (property-tested, Hypothesis)

For any list of one to six families, each with an adult aged 60-90, perhaps a partner aged 40-90, and up to three children under 16, drawn with earnings and hours, State Pension from 66, private pension, savings and savings interest, reported CTC and WTC, a Universal Credit claim and Pension Credit take-up:

  1. Award. In 2019-20, 2021-22 and 2024-25, has_tax_credit_award equals the claim and entitlement conditions read from the same simulation. This checks the wiring; it cannot find an error in those conditions.
  2. Differential. The child amount is nil where there is an award. Otherwise it equals the amount in a second simulation with the award entered as absent. That amount equals a separate Schedule IIA calculation (para 9(1)(a) for each child, para 10 for an eldest born before 6 April 2017). The calculation reads the same rate parameters and the model's dates of birth, so it checks the formula, not the rates or the exact cutoff date.
  3. No awards after tax credits. In 2025-26 and 2026-27 no family has an award, and the child amount is the Schedule IIA amount.
  4. Commencement. In 2015-16 and 2018-19 the child amount is nil.
  5. No gain. Withholding the child amount never raises Pension Credit plus WTC plus CTC, and changes nothing for a family with no award. Other support can fall: losing Guarantee Credit ends the Housing Benefit passport, which a pinned family and two YAML cases show.
  6. Order. The child amount, the award, the income test, Pension Credit, the tax credits and Housing Benefit come out the same whether they are requested in order (the child amount first), in reverse (Housing Benefit first) or after household net income, and none of these orders raises a dependency cycle.

tests/test_pension_credit_child_amount_tax_credit_properties.py: 4 properties (20 derandomized examples each; two also run the YAML households as an explicit @example) and a coverage test. test_yaml_families_reach_every_case checks that six pinned families hit each case: CTC and WTC with Pension Credit, no claim, WTC alone, a nil-rate award, and the renting pair, in which the award ends the Housing Benefit passport and the no-claim twin keeps it. The four properties passed locally on 72bd1add7. The coverage test failed there (round 2's finding below) and passes on this head. CI runs the whole file on this head.

The drawn families reach the rule. In 40 derandomized draws for 2024-25 at this head (154 families, 102 with children):

  • 101 have an award, and the child amount is withheld from 82;
  • 28 of those 82 get different Pension Credit, and 20 still get some;
  • 8 hold an award at a nil rate;
  • 5 lose Lift the tax credit income test for State Pension Credit #2034's tax credit passport (the lifted income test) because the child amount is withheld;
  • 20 with no award are paid the child amount.

Tests

YAML: 10 cases in tests/policy/baseline/gov/dwp/pension_credit/guarantee_credit/child_amount_tax_credit_award.yaml, each computed by hand from the law and DWP's published rates, with the arithmetic in comments:

  1. a couple with Pension Credit, CTC and WTC in 2024-25: no child amount, the passport holds, Guarantee Credit £2,298.40;
  2. the same couple with no tax credit claim: child amount 76.79 x 52 = £3,993.08;
  3. a WTC award alone;
  4. an award at a nil rate;
  5. an award entered directly, as for a nil or deemed award: Guarantee Credit £7,233.40;
  6. a renting couple aged 80 awarded CTC: no child amount, so no Guarantee Credit, savings credit £382.54, and no Housing Benefit passport (capital £18,000, over the £16,000 limit);
  7. the same household with no claim: child amount £3,993.08, Guarantee Credit £2,474.48, and Housing Benefit of the full £12,000 rent through the passport;
  8. 2025-26, with tax credits ended: child amount 78.10 x 52 = £4,061.20;
  9. 2019-20, with and without an award;
  10. 2018-19, before Schedule IIA.

Inputs the cases enter, and why:

  • The CTC family element (£545) and the 2025-26 standard minimum guarantee (£346.60 a week) are entered at their statutory amounts. Both were entered when the model's own values differed; since Set DWP benefit rates to the announced amounts, not CPI projections #1925 the model's values are the same.
  • Pension Credit earnings are entered net of the Sch VI para 5 disregard (Pension Credit income still omits IIDB, SDA, the AFCS guaranteed income payment and other countable income #1954), as in Lift the tax credit income test for State Pension Credit #2034.
  • The two renting cases enter the Housing Benefit claim. The model infers take-up from reported benefits across the whole simulation (claims_all_entitled_benefits), so a reported tax credit alone would leave Housing Benefit unclaimed, and nil whatever the passport.
  • The 2025-26 case enters that the couple does not claim Universal Credit when its tax credits close. Both are over the qualifying age for Pension Credit (WRA 2012 s.4(1)(b)), and SI 2014/1230 reg 60A waives that only for a WTC claimant who "is not entitled to an award of state pension credit" (reg 60A(1)(a)(iii)). This couple is entitled (case 1), and the model's closure routing does not test that condition.
  • The savings credit expectations use the model's annual arithmetic: the maximum is 0.6 x (332.95 - 301.22) x 52 = £989.98, where DWP publishes £19.04 a week (£990.08 over 52 weeks).

On main without this PR (72fc91559, run 2026-10-15): case 5 cannot run, because it enters the new variable. Of the other nine, six fail on value, because the base pays the child amount (cases 1, 3, 4, 6, 9 and 10), and the three controls pass (cases 2, 7 and 8). #2034's two CTC cases, with their hand-entered child amount removed, fail on value: Guarantee Credit £1,826.48 and £1,280.48, where the law gives nil. On this branch all of them pass.

Local runs on this head (7550aa4e5, main at b4dbaf57a merged in): the two YAML files this PR adds or changes, 21 passed; all of tests/policy/baseline/gov/dwp, 594 passed; the two claimant-not-own-child tests that draw no examples (-k "disability_amounts or lone_qualifying"), 2 passed; uvx ruff format --check . and uvx ruff check . clean on ruff 0.16.7 and 0.17.1. Round 5's reviewer also ran the Pension Credit YAML folder with the passport and legacy-closure files main changed (278 passed) and the pinned YAML families in both property files (-k yaml_families, 2 passed). CI passed every check on eca1f85b5 (run 38962900441), both Hypothesis files included, and runs the full YAML and pytest suites on this head; a local disk pause on the shared host ruled out running the Hypothesis files here.

Enhanced FRS impact

Real Microsimulation runs on a private copy of the Enhanced FRS 2024-25 (sha256 e433e532…), one per package state, on 2026-10-14: base main at cb1770774 and this branch at 72bd1add7 (main merged in), for 2024 and 2025. Each run records the package path and git head it imported. Aggregates only.

Since that run, main has split the benefit cap and LHA rules between Universal Credit and Housing Benefit (#2089) and deducted relieved pension contributions from adjusted net income (#2440), among other changes. None of them touches a Pension Credit, tax credit or Schedule IIA file or any of the 48 variables has_tax_credit_award reads, and this PR's three model files are byte-identical to 72bd1add7; the later commits change test files and merge main. Withholding the child amount can change a paid amount only for a family with both an award and Pension Credit, and the run found none. main's changes cannot create one in 2024-25: the legacy-closure route between Universal Credit and Pension Credit is shut that year (legacy_benefits_closed is false while tax credits, Income Support and income-based JSA were active), a lower adjusted net income can only lower income tax, and the dataset enters no adjusted net income. So the run was not repeated.

No amount paid changes in either year. Of 112 arrays compared per year (Pension Credit and its two credits, tax credits, Housing Benefit, Council Tax Reduction, Universal Credit, the benefit cap, household net income, the poverty flags and each household benefit), 109 are identical in 2024 and all are identical in 2025. The branch also outputs has_tax_credit_award.

2024-25:

Benefit units (weighted) Dataset records
With a tax credit award 30.2k 142
of which tax credits in payment 16.6k 79
of which awarded at a nil rate 13.6k 63
With an award and a non-zero child amount on the base 27.0k 126
of which entitled to Pension Credit 0 0
Pension Credit in payment with a child amount 2.2k 12
of which with an award 0 0
  • The three arrays that change are intermediates: child_minimum_guarantee_addition, additional_minimum_guarantee and minimum_guarantee. The model computes them for every benefit unit with children, whether or not it can get Pension Credit. They fall for the 27.0k benefit units with an award (£235.8m in total), none of which is entitled to Pension Credit, so nothing paid moves.
  • No benefit unit in the dataset has both Pension Credit and a tax credit award, or both Pension Credit and tax credits in payment.
  • Pension Credit: 1.78m benefit units on both.

2025-26: no award (tax credits ended), and no array changes.

So on this dataset the fix is a correctness change for household calculations, with no aggregate effect. Years before 2024 were not run.

Run time and memory, from single runs on a shared, loaded host (not a benchmark): household net income took 10.5 s on the base and 7.3 s on the branch in 2024, and 4.5 s and 7.1 s in 2025; peak RSS was 3.2 GB and 2.9 GB in 2024.

Axiom

axiom: TheAxiomFoundation/rulespec-uk#424 queued

rulespec-uk encodes both provisions (uk/regulations/uksi/2002/1792/6.yaml and schedule/IIA.yaml; checked origin/main 840c51f), but does not get this case right:

  • 6.yaml has a rule for the reg 6(14)-(16) cessation and none for reg 6(6)(d), (11), (12) or (13). Its awarded_tax_credit_under_tax_credits_act input is read only by the cessation rule.
  • schedule/IIA.yaml's additional_amount_applicable is paid whenever the claimant is responsible for a child, and is dated from 2026-04-06 only.
  • uk/policies/govuk/pension-credit.yaml imports only the standard minimum guarantee from reg 6, so no child amount reaches the composed Pension Credit.

#424 holds the verbatim law, the required outputs, a pasteable review_finding and eleven companion tests from the same law and rates as this PR's YAML. The signed encoder run needs approval, so it is queued, not run.

Review

  • Round 1 (GPT-6.1 Sol, on a27a539ce): APPROVE, with minor findings on the award proxy, test independence, renewal wording and Housing Benefit and savings credit coverage, and nits on this description. The source answers them, and this description is rewritten for them.
  • Round 2 (GPT-6.1 Sol, on 72bd1add7, after merging main): REQUEST CHANGES. The new Housing Benefit coverage check failed because the renting households never claimed Housing Benefit; savings credit rounding was undisclosed; this description was stale. 5c0dc4a14 enters the Housing Benefit claim and adds the rounding note, and this description is rewritten. It confirmed both conflict resolutions keep Apply the 6 April 2017 child cutoffs by date of birth #1904's formula and Lift the tax credit income test for State Pension Credit #2034's expectations.
  • Round 3 (GPT-6.1 Sol, on 4172e7195): APPROVE WITH NITS. It found the round-2 findings fixed: on a copy of the awarded renting case, Housing Benefit is £0 with £18,000 of savings and £11,529.83 with £15,000, so the £16,000 capital limit, not take-up, gives the nil. It confirmed the three model files are byte-identical to round 2's head and that the merged main changes touch no Pension Credit, tax credit or Housing Benefit code, and it checked this description's numbers against the run logs. Its three nits, all on this description, are answered here.
  • Round 4 (GPT-6.1 Sol, on eca1f85b5): APPROVE WITH NITS. CI on 4172e7195 had failed one test from Stop counting a benefit unit's claimant or partner as its own child or qualifying young person #2285, test_claimant_not_own_child_properties.py::test_disability_amounts_count_disabled_dependants_and_never_claimants, because every unit it builds held an award in 2024. 6cae403f2 enters the award as absent in that file's helper. The review found that this keeps all five tests' purposes, and that without it invariant 2's Pension Credit comparison and the lone-claimant check were vacuous in 2024. Its one nit, that "the addition is paid" overstated what the tests do, is answered in 0fac977b0.
  • Round 5 (Claude Opus 5.5, on 7550aa4e5, after merging main at b4dbaf57a): APPROVE WITH NITS. It found 0fac977b0 text-only and accurate; the merge clean (the diff from main is this PR's nine files, and an independent git merge-tree gives the same tree); the same 48 dependencies on a re-run of the trace; and no test new on main that expects a child amount alongside a presumed tax credit claim. Its nits, all on this description (a stale sentence on what main has changed since the impact run, and stale head and review references), are answered here.

Related and follow-ups

  • Apply the 6 April 2017 child cutoffs by date of birth #1904 (merged) applies Schedule IIA para 10's 6 April 2017 cutoff by date of birth, at the top of the same formula; this PR changes the start and the end.
  • Set DWP benefit rates to the announced amounts, not CPI projections #1925 (merged) sets the Schedule IIA rates for 2023-24 to 2025-26 to DWP's published amounts.
  • Count the State Pension as step-one tax credit income #2057 (open) counts the State Pension as step-one tax credit income. In cases 1-5 and 8 a pensioner has £300 of savings interest, which uses up the £300 step-one disregard, so their tax credit income is the same either way. The renting CTC case (6) has no interest, but its savings credit lifts the income test (SI 2002/2008 reg 4(1)(d)), so its CTC is the maximum either way. Case 7 claims no tax credit, and cases 9 and 10 have no income.
  • Flagged separately: tax_credits includes a CTC child element for a family that is not eligible for CTC, and Housing Benefit and Council Tax Reduction count it as income; and SPC Regs Schedule IIB (the transitional amount for pensioners moved from CTC to Pension Credit, reg 6(6)(e), from 8 June 2024) is not modelled.

🤖 Generated with Claude Code

SPC Regs 2002 reg 6(6)(d) applies Schedule IIA "except where paragraph (11)
applies", and reg 6(11) applies to "a person who is awarded, or who is
treated as having an award of, a tax credit": child tax credit or working
tax credit (reg 6(17)). The model paid the Schedule IIA amount alongside the
tax credit award.

has_tax_credit_award is the award: a claim plus the conditions of
entitlement other than the income test, since HMRC may award at a nil rate
(TCA 2002 s.14(3)). It reads nothing from Pension Credit, so it adds no
dependency cycle with the tax credit passport (SI 2002/2008 reg 4(1)(d)).
No awards from 2025-26, when tax credits ended.

Schedule IIA began on 1 February 2019 (SI 2018/676 reg 2), but the model
paid it from 2015-16: after fiscal-year conversion the rate parameters hold
the 2019 rates for 2015 to 2018. The new parameter
gov.dwp.pension_credit.guarantee_credit.child.in_effect dates it.

The tax credit passport tests no longer enter the child amount as 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ort' into pc-child-amount-tax-credit-award

# Conflicts:
#	policyengine_uk/tests/policy/baseline/gov/dwp/tax_credits_pension_credit_passport.yaml
Base automatically changed from tax-credits-pension-credit-passport to main October 13, 2026 07:35
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

#2034 (the State Pension Credit passport), which this PR was stacked on, merged on 2026-10-13 at 07:35Z through the merge queue, as 7d202ab9f. GitHub deleted its branch and retargeted this PR to main. The launchd job com.maxghenis.pe-uk-2061-after-2034 picks this up at its next run.

🤖 Generated with Claude Code

MaxGhenis and others added 6 commits October 13, 2026 15:33
…redit-award

# Conflicts:
#	policyengine_uk/tests/policy/baseline/gov/dwp/tax_credits_pension_credit_passport.yaml
#	policyengine_uk/variables/gov/dwp/pension_credit/guarantee_credit/minimum_guarantee/additional/child_minimum_guarantee_addition.py
…t cases

- has_tax_credit_award documents that it infers the award from reported
  amounts, so a nil or deemed award reported as zero must be entered.
- child_minimum_guarantee_addition: a WTC award alone need not include
  anything for the child; renewal, finalisation and revision history are
  unmodelled inputs, not part-year effects.
- YAML: an award entered directly; a couple aged 80 whose CTC award
  removes the child amount, leaving savings credit but ending the
  Guarantee Credit passport to Housing Benefit, and its no-claim twin.
  The 2025-26 case enters that the couple does not claim Universal
  Credit at the tax credit closure (SI 2014/1230 reg 60A(1)(a)(iii)).
- Property tests: say the award check is wiring, the Schedule IIA
  calculation shares parameters and dates of birth, and pin the two
  rented households so the order checks reach Housing Benefit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r2 found the coverage test failing at line 350: the model infers
Housing Benefit take-up from reported benefits across the simulation
(claims_all_entitled_benefits), so a reported tax credit left Housing
Benefit unclaimed, and nil whatever the Guarantee Credit passport. Both
rented YAML cases and both pinned property families now enter
would_claim_housing_benefit, so the passport, not take-up, decides
Housing Benefit. The savings credit note says the model does not round
the weekly maximum (DWP publishes £19.04 a week).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 16, 2026 19:34

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review status: COMPLETE
Review severity: APPROVE
Reviewed head: 4172e7195f329f4db180742b638cdb68149c7774.

No actionable findings in the changed child-amount exclusion, commencement or affected Pension Credit, tax-credit passport and Housing Benefit paths. Independent policy and code review confirmed the awarded/deemed-award rule and 1 February 2019 commencement in the GB instrument and NI counterpart.

All 49 focused cases passed, preserving the original property-test settings. A separate two-household control inside the same bounded invocation confirmed that, with an actual HB claim and no Guarantee Credit, £18,000 savings gives £0 HB while £15,000 gives £11,529.83. Independent Decimal checks reconciled all 10 new YAML cases and 66 scalar expectations; 26 original sources/extracts were validated.

The annual commencement convention, reported-award inference and explicit nil/deemed-award input, plus documented earnings, rounding and closure assumptions, remain qualified as described. The private Enhanced FRS impact and the author's wider local test totals were not independently reproduced. Local checks used Core 3.32.27 rather than locked 3.33.2; no future combined merge tree was tested.

Required hosted CI and the queued RuleSpec parity follow-up still need their recorded gates. No encoder or completed encoded parity is claimed.

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review status: COMPLETE — CI follow-up at 4172e71.

C1 — Make the isolated Pension Credit child/disability fixture state its no-tax-credit-award premise. Required CI now fails in policyengine_uk/tests/test_claimant_not_own_child_properties.py::test_disability_amounts_count_disabled_dependants_and_never_claimants at line 341: all 162 child additions are zero against positive expectations (failed job).

The first loop is 2024. Its helper forces is_CTC_eligible=True to test CTC disability elements, supplies no reported awards and leaves claims_all_entitled_benefits at its default true. That makes would_claim_CTC and has_tax_credit_award true, so this PR's new exclusion correctly suppresses the Pension Credit component. The old positive amount oracle needs an explicit no-award premise for its separate PC calculation, or separation from the CTC-controlled calculation; retain that premise through resets. Please preserve the exhaustive dependant/disability matrix, positive no-award expectations and separate CTC/WTC/nil/deemed-award exclusion regressions, then run the named module and required CI.

My earlier approval predates this hosted failure. The focused code and policy checks support a fixture integration fix; they do not support weakening the statutory production gate. Diagnosis uses the hosted assertion and exact source/dependency trace, without a claimed local repair or rerun. Required CI and the recorded RuleSpec/Axiom follow-up remain outstanding.

MaxGhenis and others added 2 commits October 16, 2026 16:26
test_claimant_not_own_child_properties.py (from #2285, on main)
supplies is_CTC_eligible to every unit so the CTC disabled child
elements are paid. With that eligibility and the claim the model presumes,
each unit has a tax credit award in 2024, and SPC Regs 2002 reg 6(6)(d) and
(11) then give no Schedule IIA child addition, so CI failed
test_disability_amounts_count_disabled_dependants_and_never_claimants on
child_minimum_guarantee_addition (0 against the Schedule IIA amount). The
invariants are about who counts as a dependant, not the award, so the
helper now enters has_tax_credit_award as false, and the Pension Credit
addition is paid and tested in every year, as before this PR.

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

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review status: COMPLETE — re-review at eca1f85. Approval; previous C1 resolved, no new findings.

The repaired component fixture now explicitly supplies no tax-credit award and retains that input through reset. Its original positive disability matrix executes all 162 combinations in both 2024 and 2026; the years, oracles, tolerances and non-vacuity checks are unchanged. This isolates the PC component without weakening the production award exclusion or its separate award/nil/deemed-award regressions.

One bounded current-head batch passed all 17 checks: the full repaired five-test module, ten unchanged award/commencement/final-HB YAML cases, and two request-order/post-closure properties. Actual matrix observations confirm 162 positive outputs in each year. Independent policy/source checks support the fixture premise and verified that production gates and the relevant original sources are unchanged. Current main e7610ac is integrated; the trusted-base Fix evidence check passed.

Local Python 3.13.14/Core 3.32.27 differs from locked Core 3.33.2. This is focused validation, without a new full-suite or private-population claim. Hosted required CI is still pending at this head; the existing RuleSpec/Axiom #424 queued follow-up and encoder limitation remain outstanding. This approval does not establish merge readiness or encoded correctness.

MaxGhenis and others added 2 commits October 17, 2026 07:35
… pay it

Review r4 (GPT-6.1 Sol, on eca1f85) noted that "the addition is paid" is
too broad: with no award entered, a unit without a child or qualifying
young person still gets no addition, as the lone-claimant cases expect.
Comment and docstring only.

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

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review status: COMPLETE
Review severity: APPROVE
Reviewed head: 7550aa4e55de840f3ac0090ad81c92d645462adc.

Incremental review after the comment clarification and merge of main b4dbaf57a. No new findings; C1 remains resolved. The fixture's executable AST and all eight other branch files are unchanged from the previously approved head.

Independent policy and code review checked the affected integration. All 17 focused cases passed at this head, including the original positive disability matrices in 2024 and 2026, the no-award premise through reset, award exclusions, and final Pension Credit/Housing Benefit cases. All 26 cached source originals and extracts validated; no new source acquisition was needed.

The reported-award inference, nil/deemed-award input, renewal and annual-convention qualifications remain. Local execution used Core 3.32.27 rather than locked 3.33.2; private Enhanced FRS results were not reproduced. The queued RuleSpec/Axiom follow-up remains outstanding; no encoded parity is claimed.

Fresh CI check: no current failures; pending Test / Python 1/4, Test / Python 2/4, Test / Python 3/4, Test / Python 4/4, Test / Result (absent). This approval does not establish merge readiness.

@MaxGhenis
MaxGhenis added this pull request to the merge queue Oct 17, 2026
Merged via the queue into main with commit eacd5cd Oct 17, 2026
15 checks passed
@MaxGhenis
MaxGhenis deleted the pc-child-amount-tax-credit-award branch October 17, 2026 12:52
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.

Pension Credit pays the Schedule IIA child amount alongside a tax credit award, and before February 2019

2 participants