Skip to content

Fix DfE childcare funding rates for 2025 and 2026 - #2465

Merged
juaristi22 merged 2 commits into
mainfrom
fix-2183-childcare-funding-rates
Oct 19, 2026
Merged

juaristi22 merged 2 commits into
mainfrom
fix-2183-childcare-funding-rates

Conversation

@juaristi22

@juaristi22 juaristi22 commented Oct 16, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2183

Refresh England childcare funding values using DfE's combined national-average local-authority hourly rates:

Funding year Under 2 Age 2 Ages 3–4
2025–26 £11.54 £8.53 £6.12
2026–27 £12.04 £8.90 £6.61

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 commit f618c6ffe0a2c05595bb1a2843b6a3399255be99). 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 main b4dbaf57): 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 the f1122205 tree 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.

@juaristi22 juaristi22 self-assigned this Oct 16, 2026
@juaristi22
juaristi22 force-pushed the fix-2183-childcare-funding-rates branch from 563f8a3 to 5c5555d Compare October 17, 2026 00:42
@juaristi22

Copy link
Copy Markdown
Collaborator Author

Fixed the stale EntitledTo #2 fixture in 5c5555dfe9fedf430b3e5a3cca3449ff8486c76e, rebased onto main b4dbaf57. The three-year-old’s 570 universal hours × £6.12 gives £3,488.40; the £53.01 valuation increase raises expected net income to £36,167.91. Added the direct per-person award assertion while preserving all inputs, other outputs and the £1 margin.

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 vahid-ahmadi 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.

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.

  1. 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.
  2. 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 5c5555df with its own uv venv: policyengine-core test on tests/policy/baseline/gov/dfe plus tests/policy/integration/entitledto_scenarios.yaml gave 249 passed. pytest tests/test_childcare_funding_rates.py gave 13 passed.
  • Revert check: with main's childcare_funding_rate.yaml restored, 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 check and ruff format --check on the new test file are clean. git grep finds no other copies of the old CPI-uprated rates.
  • Process: the fixed changelog 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 vahid-ahmadi 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.

Approving, per my review above. The shoulds and nits can follow.

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.

Childcare funding rates are CPI-uprated 2024-25 values, below DfE's published 2025-26 and 2026-27 rates

2 participants