Repository navigation
Fix DfE childcare funding rates for 2025 and 2026 - #2465
Conversation
563f8a3 to
5c5555d
Compare
|
Fixed the stale EntitledTo #2 fixture in All 112 affected tests passed on the rebased tree (7.83s pytest / 13.12s CLI), and independent fix verification returned CLEAN for this repair. Hosted CI for the new head and the existing Vahid review remain pending. Local Core 3.32.27 differs from locked 3.33.2; the statistical-data Axiom n/a qualification remains unchanged. |
vahid-ahmadi
left a comment
There was a problem hiding this comment.
Looks right, fine to approve.
@juaristi22 the six new values match DfE's published Table 6 figures, the tests pin them, and the old values fail the new tests. I found nothing that blocks merge. Two small points below.
- nit
policyengine_uk/parameters/gov/dfe/childcare_funding_rate.yaml:20-22: the comment says the model samples 30 April. So calendar year 2025 uses the 2025-26 rate for January to March as well, when the 2024-25 rate actually applied. This was already how the model worked and the PR states it clearly. A blended rate (a quarter at the old rate, three quarters at the new one) would be more accurate for annual totals, but that belongs in its own change. - nit
policyengine_uk/parameters/gov/dfe/childcare_funding_rate.yaml:16-17: the 2025-26 technical note was withdrawn on 10 August 2026 only because it is out of date ("See Early years funding: 2026 to 2027"). It was not corrected. The "(historical, withdrawn)" label is fine. You could add a short note saying the withdrawal was routine, so a later reader does not doubt the 2025 values.
No clash with other open PRs. #2386's regional childcare plan doc mentions gov.dfe.childcare_funding_rate at its current path. This PR keeps that path, so the doc still holds. No other open PR asserts targeted or extended childcare cash amounts that these new rates would change.
What I checked
- Sources: fetched both GOV.UK technical notes. 2025-26 Table 6: £6.12 (3 and 4, combined universal and additional), £8.53 (age 2, combined FRAS and working parent), £11.54 (under 2). 2026-27 Table 6: £6.61, £8.90, £12.04. All six match the YAML. I checked the 2025-26 withdrawal notice through the GOV.UK content API.
- Hand checks: 570 x 6.12 = 3,488.40; 570 x 8.53 = 4,862.10; 1,140 x 12.04 = 13,725.60; 1,140 x 8.90 = 10,146.00; 570 x 6.61 = 3,767.70. They match the YAML and pytest expectations.
- Ran in a fresh worktree at
5c5555dfwith its own uv venv:policyengine-core testontests/policy/baseline/gov/dfeplustests/policy/integration/entitledto_scenarios.yamlgave 249 passed.pytest tests/test_childcare_funding_rates.pygave 13 passed. - Revert check: with main's
childcare_funding_rate.yamlrestored, 11 of 13 pytest cases fail and 26 YAML cases fail. The two pytest cases that still pass are the Wales-zero and the 2024 controls. ruff checkandruff format --checkon the new test file are clean.git grepfinds no other copies of the old CPI-uprated rates.- Process: the
fixedchangelog fragment fits. The Reproducer: and axiom: lines are there, and the hosted "Fix evidence" check passed. All hosted CI checks on this head pass: tests 1/4 to 4/4, YAML, Lint and docs. - Not checked: population-level or budget impact. That needs private data, and I did not download any.
🤖 Generated with Claude Code
vahid-ahmadi
left a comment
There was a problem hiding this comment.
Approving, per my review above. The shoulds and nits can follow.
Fixes #2183
Refresh England childcare funding values using DfE's combined national-average local-authority hourly rates:
Sources: 2025–26 technical note, Table 6, 2026–27 technical note, Table 6, 2025–26 operational guide, 2026 statutory guidance. The withdrawn 2025 note supplies the historical year's values.
The six new anchors retain their 1 April dates. Existing parameter processing samples 30 April, so annual model years 2025 and 2026 receive the corresponding funding-year rates. These combined averages remain the model's national valuation proxy; they do not specify each provider's fee or exact expenditure for each entitlement stream.
Eligibility, funded hours, usage caps, 38 weeks and 2024 values remain unchanged. The existing annual approximation retains 15 under-three working-parent hours in 2025 and 30 in 2026. Later years continue the existing CPI projection from the new 2026 anchor. Two existing cash-fixture files receive source-derived expected values; their inputs, periods and tolerances remain unchanged.
For the tested English single parent earning £30,000 with children aged 1, 2 and 3, the 2026 funded childcare valuation totals £31,407: £13,725.60 + £10,146 + £7,535.40. The three-year-old’s amount combines universal and additional hours. These conditional household values use the national funding proxy.
Initial author validation (historical implementation): 161 focused cases passed: 13 new regressions, 147 existing programme YAML cases and the unchanged 30-example family-floor property. Before the fix, 11 numerical regressions failed and two controls passed. Coverage includes source dates, actual annual processing, final working-family and targeted awards, usage caps, England applicability and future projection. Formatting, Ruff and whitespace checks passed. Local validation used offline Python 3.13.14 / Core 3.32.27; hosted CI uses locked Core 3.33.2. No private-data or population-impact run was performed.
Initial independent integration validation (historical): 53 selected cases passed on the diagnostic combination with main
f1122205(integration commitf618c6ffe0a2c05595bb1a2843b6a3399255be99). This selection overlaps the initial author tests, so the counts are not summed. Neither initial selection included the EntitledTo integration fixture that subsequently failed hosted CI.The EntitledTo #2 model-regression fixture now records the three-year-old’s 570 universal hours at £6.12 as £3,488.40, replacing the previous £3,435.39 valuation. The £53.01 increase raises expected household net income from £36,114.90 to £36,167.91. A direct person-level universal-award assertion records
[0, 0, 0, 3488.40]; all inputs, other outputs and the £1 error margin remain unchanged. This fixture tracks model regressions and does not certify an authoritative EntitledTo comparison.Current repair validation (
5c5555dfe9fedf430b3e5a3cca3449ff8486c76e, rebased onto mainb4dbaf57): all 112 selected cases passed, with 0 failures, errors or skips (7.83s pytest / 13.12s bounded CLI). The selection covers all 3 EntitledTo scenarios, 13 funding regressions and 96 extended-entitlement cases. An earlier 112-case run on thef1122205tree overlaps this selection and remains historical evidence. Independent fix verification returned CLEAN for the single scoped repair, with no new issues or material gaps. Formatting changed no source bytes, and all 15 tested source/dependency hashes match the committed tree. Local Core 3.32.27 differs from locked Core 3.33.2. Hosted CI for the new head and the existing human review remain pending; no private-data, population or parity run is claimed.Reproducer: policyengine_uk/tests/test_childcare_funding_rates.py::test_published_rates_reach_genuine_working_family_awards
axiom: n/a: refreshes illustrative combined national-average local-authority childcare funding valuation data; entitlement eligibility, funded hours and formulas are unchanged.