Repository navigation
Separate apprentice minimum wage eligibility from NI relief - #2684
Conversation
|
Round 1 at Verdict: the rule is right in law and the employer NI path is untouched, but one must: the new parameter breaks Findings
Checks with no finding
What I ranIn a fresh clone at
CI at the time of writing: YAML tests, lint, docs, smoke imports and Fix evidence are green. Python shards 1 to 5 and Aggregate impact were still running. Not run or read: the full test suite, any microsimulation, the Axiom issue, or the changelog wording beyond one read. 🤖 Generated with Claude Code |
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in Notes
Moves flagged for reviewNone. Spending by benefit and service
Caseloads
Standard reform costings (change in gov_balance)
Standard reforms: change in each reform's target
Household net income by decileNo household's net income changes in any year. No change in any year: receipts by tax head; government balance, each component counted once; model totals; household income totals; population; poverty rates; people in poverty; inequality; mean household net income in each side's own deciles. Checks failing on both base and head (1)
Counted-once checkEach of 91 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped.
Provenance
Dataset: Receipts by tax head: head levels
Spending by benefit and service: head levels
Caseloads: head levels
Government balance, each component counted once: head levels
Model totals: head levels
Household income totals: head levels
Population: head levels
Poverty rates: head levels
People in poverty: head levels
Inequality: head levels
Mean household net income in each side's own deciles: head levels
Standard reform costings (change in gov_balance): head levels
Standard reforms: change in each reform's target: head levels
|
Critical fixedAddressed your historical-coverage finding in c1e1a06ff1. The apprentice age-limit value of 19 now starts on 1 October 2012, matching the existing wage-rate history. S.I. 2010/1901, regulation 5 supplies the predecessor rule; its legal commencement was 1 October 2010. The 2012 parameter date records model coverage. VerificationEight appended 2013/2014 cases cover non-apprentices, under-19 apprentices, adult first-year apprentices and adult later-year apprentices, checking both wage and category. All eight reproduced the missing-parameter error before the fix. Fresh runs passed 40 YAML cases and 46 Python tests. Unchanged employer NI and childcare evidence remains applicable; these counts overlap the original validation. Independent verification is CLEAN (1/1 finding, no new issues). Formatting and trusted committed-object checks passed. The new head's GitHub checks are pending. |
|
Round 2 at Verdict: the round 1 must is fixed and I have no new findings. Not approving because the PR is still a draft. Once it is ready and CI is green at this head, I have nothing blocking. Round 1 findings
Checks with no finding
What I ranIn a fresh worktree at
CI at the time of writing: YAML tests, lint, docs, smoke imports, changelog and Fix evidence are green at this head. Python shards 1 to 5 and Aggregate impact are still pending. Not run: the full test suite or any microsimulation. 🤖 Generated with Claude Code |
vahid-ahmadi
left a comment
There was a problem hiding this comment.
Approving at c1e1a06; see the round 2 comment above. All 19 checks green. 🤖 Generated with Claude Code
Fixes #2683
An apprentice aged 19 or over currently receives the apprentice minimum wage in every apprenticeship year. That also lowers the minimum earnings needed for Tax-Free Childcare, extended childcare entitlement and the Childcare Offer for Wales. Employer National Insurance relief legitimately uses apprentice status in any apprenticeship year while the person is under 25.
This change adds the annual person input
is_in_first_year_of_apprenticeshipand shares a single apprentice-rate eligibility rule betweenminimum_wageandminimum_wage_category. The rate applies only to apprentices under 19 or within their first 12 months, following National Minimum Wage Regulations 2015, regulation 5. Employer NI calculations and minimum-wage rates remain unchanged.The apprentice age limit covers the existing wage-rate history from 1 October 2012. S.I. 2010/1901, regulation 5 introduced the same under-19 or first-12-month rule into the 1999 Regulations, with commencement on 1 October 2010. The parameter's 2012 start matches the model's rate coverage; it does not change the rule's legal commencement. This also keeps
minimum_wageandminimum_wage_categoryavailable for 2013 and 2014.Migration
The new input defaults to
False. Existing callers setting onlyis_apprentice=Truefor a person aged 19 or over will receive their age-related minimum wage. Supply both flags for a first-year adult apprentice. The input describes the first 12 months of the current apprenticeship employment, including statutory continuity; the model does not infer start dates or advance tenure during projection.Microcosm #1373 currently exports
is_apprentice. It can adopt this UK fix independently, but must explicitly export the new first-year classification to identify adult apprentices who qualify for the lower minimum wage. This PR supplies no population imputation or migration of existing datasets. Durable calculator and producer contracts are included in the documentation.Validation
uv run --frozen --no-sync make formatpassed; formatting and rebase left the tested files unchanged. Trusted actual-base committed-object Fix evidence and Changelog checks passed.Reproducer:
policyengine_uk/tests/policy/baseline/finance/income/apprentice_minimum_wage.yaml::Case 1, an older apprentice without first-year status fails the Tax-Free Childcare minimum income condition.;policyengine_uk/tests/policy/baseline/finance/income/apprentice_minimum_wage.yaml::Case 2, an older apprentice without first-year status fails the extended childcare minimum income condition.;policyengine_uk/tests/policy/baseline/finance/income/apprentice_minimum_wage.yaml::Case 3, an older apprentice without first-year status fails the Childcare Offer for Wales parent condition.axiom: TheAxiomFoundation/rulespec-uk#495 queued
The Axiom issue contains the operative law and source-backed companion cases. Its signed encoding is queued because this runtime has no supported signed encoder; no billed run or handwritten RuleSpec was used.