Skip to content

Implement Missouri Child Care Subsidy (CCS) program#8653

Draft
hua7450 wants to merge 5 commits into
PolicyEngine:mainfrom
hua7450:mo-ccap
Draft

Implement Missouri Child Care Subsidy (CCS) program#8653
hua7450 wants to merge 5 commits into
PolicyEngine:mainfrom
hua7450:mo-ccap

Conversation

@hua7450

@hua7450 hua7450 commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Implements Missouri's Child Care Subsidy program, administered by the DESE Office of Childhood, in PolicyEngine. Missouri colloquially calls this program "CCAP," but the official name is the Child Care Subsidy; the implementation uses the mo_ccs_ variable prefix and lives under gov/states/mo/dese/ccs/ accordingly.

The subsidy is a provider-reimbursement childcare benefit: each eligible child's daily base reimbursement rate (looked up by region, provider type, age group, and time unit) is reduced by a sliding-fee copay, floored at zero, and capped at the family's actual childcare expense. Existing families above the traditional income limit can receive a phased-down ("transitional") subsidy.

Closes #8652

Regulatory Authority

  • 5 CSR 25-200.050 (Definitions) and 5 CSR 25-200.060 (Eligibility and Authorization) — Cornell LII. The CSR rule text is thin and incorporates the Child Care Subsidy Eligibility Policy Manual by reference.
  • DESE Child Care Subsidy Eligibility Policy Manual (sections 2010 Eligibility, 2025 Payments). The live DESE manual deep links return a branded HTTP 403 WAF page even to a real browser, so the operative manual content was cited to Internet Archive Wayback snapshots of the official DESE pages (snapshot 2021-12-08):
  • November 2025 Child Care Eligibility Income Guidelines and Sliding Fee Chart — single-page PDF (no page anchor; single page).
  • 2025 Rates Held Harmless 2.0XLSX (spreadsheet; no page anchor), effective Oct 1, 2025 – Jun 30, 2026.

Program Overview

  • Administration: DESE Office of Childhood (the program transferred from the DSS Children's Division to DESE effective 2021-08-28; regulations moved from Title 13 (DSS) to Title 5 (Education), 5 CSR 25-200).
  • Benefit type: Provider-reimbursement childcare subsidy. A daily base reimbursement rate (minus the sliding-fee copay) is paid per eligible child, with transitional phase-out tiers for existing families whose income has risen above the traditional limit.

Eligibility

Requirement Source How modeled
Eligible child under 13 5 CSR 25-200.050; Manual 2010.005 mo_ccs_eligible_childage < child_age_limit (13)
Special-needs child under 18 (under 19 if in school) 5 CSR 25-200.050 (Child with Special Needs) mo_ccs_eligible_childspecial_needs_child_age_limit (18) / special_needs_in_school_age_limit (19 when is_in_k12_school)
Child resides with parent/caretaker in the EU 5 CSR 25-200.050; Manual 2010.005.00 is_tax_unit_dependent in mo_ccs_eligible_child
US citizen / qualified alien 5 CSR 25-200.050 reuse federal is_ccdf_immigration_eligible_child
Missouri residency 5 CSR 25-200.060 defined_for = StateCode.MO (chains through eligibility vars)
Eligibility-unit (EU) composition Manual 2010.005.00; 5 CSR 25-200.050(17) SPMUnit-level scoping on mo_ccs_eligible and the income variables
Need for care — employment / training / job search Manual 2010.050.05/.15/.20 mo_ccs_activity_eligible — head/spouse activity present (weekly_hours_worked > 0 or is_full_time_student)
Protective-services pathway 5 CSR 25-200.050 (Eligible Child) mo_ccs_protective_services (is_in_foster_care, is_homeless, receives_or_needs_protective_services)
Asset cap $1,000,000 (self-certified) 5 CSR 25-200.060 reuse federal is_ccdf_asset_eligible (effectively no resource test)
Income tests Manual 2010.045; chart mo_ccs_income_eligible (see Income)

mo_ccs_eligible = has an eligible child & income-eligible & asset-eligible & (activity-eligible | protective services).

Income

  • Countable income (mo_ccs_countable_income) = monthly gross income (earned + unearned) of EU members, modeled via an adds list of countable income sources (income/countable_income/sources.yaml).
  • Adjusted income (mo_ccs_adjusted_income) = countable gross − health_insurance_premiums, floored at 0. Medical-insurance premiums are the only deduction (5 CSR 25-200.050(2); Manual 2010.045.15).
  • Traditional test: adjusted income ≤ 150% FPL by household size (new applicants).
  • Transitional test: existing families up to 242% FPL, gated by the mo_ccs_enrolled SPMUnit boolean input (only enrolled recipients can use the >150% path).

The manual's 45-item income-exclusions list (2010.045.10.05–.30) is modeled by omission: sources.yaml enumerates only the ~14 countable PolicyEngine income variables, so any excluded type is simply absent from the list (the SC/WV pattern). Several excluded types have no PolicyEngine equivalent and so drop out automatically (e.g., LIHEAP/energy assistance, in-kind income, lump sums, tribal/restitution payments). Two excluded types cannot be split out cleanly and are documented as known limitations:

  • The veterans education-maintenance portion of veterans_benefits — we don't track the education-portion split at the moment, so gross veterans benefits are counted (a slight over-count).
  • Earnings of a school-attending child — we don't filter income by the earner's age/school status at the moment.

Benefit Calculation

  • Daily base rate (mo_ccs_maximum_daily_benefit) is looked up by region (5) × provider type (5) × age group (3) × time unit (3) from the Daytime rate table. Special-needs/protective-services children use the PS rate column (rates/<provider>/special_needs.yaml).
  • Subsidy = Σ over eligible children of min(daily rate × attending days, per-child pre-subsidy expense) − sliding-fee copay, floored at 0 (mo_ccs). The total is also capped at the family's spm_unit_pre_subsidy_childcare_expenses.
  • Transitional tiers: TCC1 / TCC2 / TCC3 fund 80% / 60% / 50% of the base rate over the FPL bands 151–185% / 186–215% / 216–242% (transitional/funding_rate.yaml).
  • Sliding fee (mo_ccs_copay): a daily fee per child looked up by household size (1–20, via copay/tier/size_N.yaml) × monthly income band, with per-unit fees varying by full / half / part day (copay/daily_fee/{full,half,part}_unit.yaml). A $1/year minimum applies to TANF-only income or income below 25% of State Median Income (minimum_annual_fee.yaml, smi_minimum_rate.yaml). Special-needs children are exempt from the sliding fee.

Requirements Coverage

All 31 in-scope requirements are covered (106 tests pass). Out-of-scope rate-table differentials (evening/weekend, accreditation, +25% enhancement) and administrative provisions are listed under "Not Modeled."

REQ Description Parameter(s) Variable Test(s)
001 Eligible child under 13 eligibility/child_age_limit mo_ccs_eligible_child eligibility/mo_ccs_eligible_child (1–3)
002 Special-needs child <18 (<19 in school) special_needs_child_age_limit, special_needs_in_school_age_limit mo_ccs_eligible_child mo_ccs_eligible_child (4,5,8,9)
003 Resides with parent/caretaker mo_ccs_eligible_child mo_ccs_eligible_child (7)
004 Immigration (citizen/qualified alien) is_ccdf_immigration_eligible_child mo_ccs_eligible_child (6)
005 Missouri residency defined_for = StateCode.MO covered via chain
006 EU composition SPMUnit scoping mo_ccs_eligible
008 Countable monthly gross income income/countable_income/sources mo_ccs_countable_income income/mo_ccs_countable_income
009 AGI = gross − health insurance premiums mo_ccs_adjusted_income income/mo_ccs_adjusted_income
010 Traditional ≤150% FPL income/fpl_rate/initial_eligibility mo_ccs_income_eligible mo_ccs_income_eligible (1–3)
011 Transitional ≤242% FPL (enrolled) income/fpl_rate/transitional mo_ccs_enrolled, mo_ccs_income_eligible mo_ccs_income_eligible (4,5,9,10)
012 45-item income exclusions (inverse list) income/countable_income/sources mo_ccs_countable_income mo_ccs_countable_income
013/014/015 Need for care: employment / training / job search mo_ccs_activity_eligible eligibility/mo_ccs_activity_eligible
016 Asset cap $1M is_ccdf_asset_eligible mo_ccs_eligible
017 5 geographic regions region/region_1..4_counties mo_ccs_region mo_ccs_region
018 5 provider types rates/<provider>/ mo_ccs_provider_type mo_ccs_maximum_daily_benefit (1–5)
019 3 age groups age_group/age mo_ccs_age_group mo_ccs_age_group
020 3 time units time_category/hours mo_ccs_time_category mo_ccs_time_category
021 Daytime base rate table rates/*/base mo_ccs_maximum_daily_benefit mo_ccs_maximum_daily_benefit (1–12)
023 PS (special-needs) rate column rates/*/special_needs mo_ccs_maximum_daily_benefit mo_ccs_maximum_daily_benefit (13)
028 TCC tiers 80/60/50% transitional/funding_rate mo_ccs_maximum_daily_benefit mo_ccs_maximum_daily_benefit (14–16)
029 TCC FPL bands 151/186/216–242 transitional/funding_rate mo_ccs_maximum_daily_benefit mo_ccs_maximum_daily_benefit (17,18); integration (3)
030 Sliding fee by HH size 1–20 × income band copay/tier/size_1..20 mo_ccs_copay copay/mo_ccs_copay (9,10,13)
031 Per-unit copay (full/half/part) copay/daily_fee/{full,half,part}_unit mo_ccs_copay copay/mo_ccs_copay (1–3)
032 $1/yr minimum (TANF-only or <25% SMI) copay/minimum_annual_fee, copay/smi_minimum_rate mo_ccs_copay copay/mo_ccs_copay (5,6,11,12)
033 Special-needs: no sliding fee mo_ccs_copay copay/mo_ccs_copay (7)
034 Transitional copay rows TCC1/2/3 copay/tier/size_* mo_ccs_copay copay/mo_ccs_copay (4)
035 Payment = rate(+PS) − fee, floored 0 mo_ccs mo_ccs (1,6)
036 Cap at provider charge / pre-subsidy expenses mo_ccs mo_ccs (2); integration (7)
037 Protective-services pathway mo_ccs_protective_services eligibility/mo_ccs_protective_services
038 85% SMI ceiling (CCDF) reference-only documented

Not Modeled (by design)

What Source Why excluded
Evening/Weekend (EW) rate schedule XLSX EW Rates 2025 Deferred to a follow-up rate-differentials PR (per scope)
+25% special-needs-serving enhancement rates landing page Deferred to follow-up PR (per scope)
+20% accredited differential rates landing page Deferred to follow-up PR (per scope)
+30% accredited (≥half subsidy kids) differential rates landing page Deferred to follow-up PR (per scope)
Held-harmless FY2025 rate cap rates landing page Current rates are already net of the held-harmless adjustment — no modeling effect
EU optional-member fee optimization Manual 2010.005.00 Caseworker discretion — not simulatable
New-application waitlist (eff. 2026-03-01) DESE waitlist page Administrative, not a household eligibility rule
Work-activity hours verification Manual 2010.050 Need assumed met if a qualifying activity is present
Non-payment → ineligible until paid 5 CSR 25-200.060(3)(C)5 Administrative

Historical Notes

  • The program transferred from the DSS Children's Division to the DESE Office of Childhood in 2021; its regulations moved from Title 13 (DSS) to Title 5 (Education), 5 CSR 25-200.
  • All parameters are effective 2025-10-01, the start of the current rate/chart era (Oct 2025 – Jun 2026).

Verification TODO

  • The income thresholds (150% traditional / 242% transitional FPL) were corroborated by the chart's own per-tier dollar bounds: for household size 1, the tier-7 upper bound of $1,956/mo = 150% of the monthly federal poverty guideline, and the transitional ceiling lands at 242%. A final check against the live manual 2010.045.00 is still advisable. (Two Wayback strategies disagreed — one read 138%, the other 150%/151–242%; the current Nov-2025 chart governs and was used.)
  • Several DESE manual pages return HTTP 403 to automated access (and to a real browser). The operative content was recovered via Internet Archive Wayback snapshots (2021-12-08), corroborated by 5 CSR 25-200 and the current chart/XLSX. The recovered manual framework is stable, but a reviewer with browser access to the live manual should spot-check the recovered sections.
  • Region county classification was read from the XLSX "Breakdown Of Counties" sheet; Regions 1–4 are enumerated in region/region_N_counties.yaml and Region 5 is the catch-all default.

Files Added

policyengine_us/parameters/gov/states/mo/dese/ccs/    48 parameter files
policyengine_us/variables/gov/states/mo/dese/ccs/     16 variable files
policyengine_us/tests/policy/baseline/gov/states/mo/dese/ccs/   15 test files (106 cases)

Federal wiring edits (2):

  • policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml — registers mo_child_care_subsidies in the federal CCDF aggregator.
  • policyengine_us/programs.yaml — adds the Missouri CCS program entry (variable: mo_ccs, parameter_prefix: gov.states.mo.dese.ccs, status: complete).

Changelog: changelog.d/mo-ccap.added.md.

hua7450 and others added 2 commits June 16, 2026 15:49
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements Missouri's Child Care Subsidy under DESE, a provider-reimbursement
subsidy with four geographic regions, age-based maximum daily rates by provider
type (licensed center, registered center, licensed family home, group home, and
six-or-fewer), special-needs rate add-ons, time-category-based units (full/half/
part-day), and a family-size copay tier with SMI minimum rate and minimum annual
fee. Includes FPL-based initial and transitional income eligibility, activity and
protective-services eligibility paths, and wires the state into the federal CCDF
child_care_subsidy_programs registry and programs.yaml.

Closes PolicyEngine#8652

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hua7450 hua7450 changed the title Implement Missouri Child Care Assistance Program (CCAP) Implement Missouri Child Care Subsidy (CCS) program Jun 16, 2026
@codecov

codecov Bot commented Jun 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (fbace93) to head (4068206).
⚠️ Report is 24 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main     #8653    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files            1        16    +15     
  Lines           23       271   +248     
==========================================
+ Hits            23       271   +248     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

hua7450 and others added 3 commits June 16, 2026 18:54
…CCS)

- TCC funding multiplier applied to remaining base rate (base − fee) per
  5 CSR 25-200.060 and Manual 2010.045.00 (transitional families only)
- Sliding-fee copay tier keyed on adjusted gross income per CSR 25-200.060(3)(C)1
  (25% SMI / $1-min floor remains on gross per Manual 2025.010)
- Protective-services pathway bypasses income+activity per CSR 25-200.060(7)(B)
- Incapacitated-parent need-for-care pathway added (is_disabled, Manual 2010.050.25)
- Reference fixes: funding_rate + initial_eligibility repointed to current
  manual 2010.045.00; dropped stale EU-page ref on child_age_limit
- Expanded test coverage (PS rates all providers, more rate cells, copay ladder)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…O CCS)

Round 1 made the protective-services pathway bypass the income+activity
tests, but mo_ccs_protective_services wrongly included is_homeless.
Homelessness is a need-for-care reason (Manual 2010.050.35), NOT a
CSR 25-200.060(7)(A) income-maximum exemption — so it must not bypass income.

- Remove is_homeless from mo_ccs_protective_services (now foster | protective)
- Add is_homeless as a need-for-care term in mo_ccs_activity_eligible, so
  homeless families satisfy need-for-care but still face the income test
- Document is_disabled as a proxy for the incapacity attestation we don't track
- Repoint dead Wayback manual references (2010.050.25/.05/.35) to working snapshots
- Correct copay/tier/size_* descriptions to "adjusted gross income"
- Add regression tests: homeless over-income -> ineligible; within-income -> eligible

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…items (MO CCS)

Critical:
- mo_ccs_time_category now reads childcare_hours_per_day (the chart's
  full/half/part thresholds are per day, not per week); update cascade
  across all 6 test files preserving each case's time category.

References:
- funding_rate / income fpl_rate transitional / income_eligible: cite
  5 CSR 25-200.060(4)(C) Transitional Child Care and Manual 2010.045.00;
  fix pre-existing (3)(C) -> (4)(C) misreference in mo_ccs.

Docs:
- Note 85% SMI is the informational CCDF ceiling, infant/toddler
  special-needs rate equals base (deferred +25%), is_disabled proxy for
  the six-criteria special-needs definition, and job-search need not modeled.

Tests:
- Add TCC2 (0.60) and TCC3 (0.50) end-to-end funding cases, registered-center
  half/part rate cells, and a multi-child (special-needs + base) case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

Implement Missouri Child Care Assistance Program (CCAP / Child Care Subsidy)

1 participant