Skip to content

Pay Vermont and New Hampshire child care subsidies only for care - #10584

Merged
MaxGhenis merged 4 commits into
mainfrom
vt-ccfap-care-used
Nov 2, 2026
Merged

MaxGhenis merged 4 commits into
mainfrom
vt-ccfap-care-used

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Two state child care programs pay for children who aren't in care. vt_ccfap pays Vermont's state rate for every eligible child, and nh_ccap adds New Hampshire's disability supplement outside the bill cap. In a 51-state check, these are the only two programs that pay a family with no bill and no care hours.

#9503 depends on this fix, because that PR moves these payments into household_net_income.

What changed

  • Vermont, care: CCFAP Regulations section V pays "from the first day of eligibility and actual attendance". The model has no attendance record, so vt_ccfap now counts a child who has care hours or a bill.
  • Vermont, dates: CCFAP Understanding Payments says Vermont stopped paying the lesser of the state rate and the provider's rate on December 17, 2023, but vt_ccfap applied the later rule in every year. A new parameter, gov.states.vt.dcf.ccfap.rates.pays_above_provider_charge, dates the change. The family's bill stands in for the provider's rate before it.
  • New Hampshire: He-C 6910.17(g) adds the supplement to the standard rates, and those rates pay for care, so the supplement now needs a charge. It stays outside the cap, so a child whose cost share covers the charge still draws it.

Invariants

test_child_care_subsidy_needs_care.py asserts this across all 51 programs at once, with Hypothesis generating earnings, child ages and disability:

  • Children with no bill and no care hours draw no subsidy.

It fails on main. The YAML cases pin the rest:

  • From December 17, 2023, a family's bill doesn't cap the state rate. Before then a bill caps it, and with no bill nothing does, because the charge stays unknown.
  • Only a child in care draws the rate.
  • New Hampshire's supplement stays outside the cap.

Test cost: YAML can pin one family in one state, but not one rule across every state and a generated family. One simulation holds all 51 households, so the 8 examples build 8 models. That took 42.08s at 1.57 GB peak on local macOS under load. These aren't Linux CI numbers, and I have no Linux peak memory figure. The test lands in the "Python tests / Full Suite - Rest" shards.

Impact

These come from real 2026 microsimulations of the whole Populace US file (populace-us-2024-spm-20260909), comparing 469ad12 with this branch at 220ad80. The later commits change only months before December 2023.

2026 Main This branch Change
child_care_subsidies $2,260.24M $1,786.29M -$473.95M
Vermont $519.20M $45.95M -$473.26M
New Hampshire $17.64M $16.95M -$0.69M

SPM poverty, spm_unit_net_income, household_benefits and household_net_income don't move, because main counts neither state's subsidy in either total. Main moved four commits past 469ad12 with no variable or parameter changes.

Vermont swings from too high to too low. The state reports about $141.6M spent in fiscal 2025 and budgets about $172.6M for fiscal 2026 (FY26 DCF budget presentation), so $519M ran about three times high and $46M runs about a third of the way there. The file carries no care hours, and its bill comes from what parents report paying, so a bill is the only sign of care it can show. A family whose subsidy covers its bill shows none. Of Vermont's 76 subsidized records, 59 had no bill. The state row rests on few records (an effective sample of 156 households), so it shows exposure and isn't an estimate of state spending.

Limitations

  • A unit's bill splits evenly across its children, so one child's bill puts a sibling in care too.
  • childcare_expenses subtracts the subsidy from the bill and stops at zero, so it can't show the family share that Vermont's parents still owe.
  • Before December 17, 2023, the bill stands in for the provider's rate, which the model doesn't carry. A $52 bill caps a year's payment at $52, while no bill leaves the state rate uncapped.
  • Nothing models take-up of child care subsidies.

axiom: TheAxiomFoundation/rulespec-us#1984 queued
axiom: TheAxiomFoundation/rulespec-us#1985 queued

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits November 2, 2026 02:36
vt_ccfap paid the state rate to every eligible child whether or not the child
had a provider, and nh_ccap added its disability supplement outside the bill
cap. A child with no care hours and no bill now draws nothing, which every other
state's program already held. A new test asserts that across all 51.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Vermont paid the lesser of the state rate and the provider's rate until December
17, 2023. The formula applied the later rule in every year, which the household
aggregate would carry into 2023 net income. Word the changelog for both states.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review November 2, 2026 08:34
Before December 17, 2023 the cap read a missing bill as a zero charge, so a
child with care hours but no bill drew nothing. A missing bill leaves the
charge unknown, so only a real bill caps the rate.

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

Copy link
Copy Markdown
Contributor Author

Merging at e7823d4 under the repo's merge gates: every check passed on this head, the PR is mergeable, and no review asks for changes. The only block was the required approving review on a PR opened from Max's account.

Independent reviews, all on Opus lanes because the Codex lanes are closed this week:

  • 220ad80: APPROVE.
  • ea25a6b: REQUEST_CHANGES. Before December 17, 2023 a child with care hours and no bill drew $0. Fixed in e7823d4, with a 2023 case that fails without the fix.
  • e7823d4: APPROVE, including the December 2023 parameter reading and no change from 2024 on.
  • Count all child care subsidies in household benefits #9503 stacked on this head: APPROVE. Every CCDF program now pays only for care that was used, in every year of the list.

Local runs on all five reconciliation PRs merged together: 585 YAML and 142 pytest cases passed. household_net_income calculates in all 51 jurisdictions for 2021 to 2027, and no state pays with no care and no bill.

#9503 lands after this one.

@MaxGhenis
MaxGhenis merged commit 6ad72ed into main Nov 2, 2026
34 checks passed
@MaxGhenis
MaxGhenis deleted the vt-ccfap-care-used branch November 2, 2026 14:10
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.

1 participant