Skip to content

Implement Mississippi Child Care Payment Program (CCPP/CCAP)#8648

Open
hua7450 wants to merge 10 commits into
PolicyEngine:mainfrom
hua7450:ms-ccap
Open

Implement Mississippi Child Care Payment Program (CCPP/CCAP)#8648
hua7450 wants to merge 10 commits into
PolicyEngine:mainfrom
hua7450:ms-ccap

Conversation

@hua7450

@hua7450 hua7450 commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Implements Mississippi's Child Care Payment Program (CCPP) — the state's CCDF-funded child care subsidy, administered by the Mississippi Department of Human Services (MDHS) through the Division of Early Childhood Care and Development (DECCD). The program reimburses providers for the cost of care for eligible low-income working families, net of a sliding-scale family co-payment.

Closes #8647

Regulatory Authority

  • CCPP Policy Manual (current) — operative rules (file-page anchors): Chapter 3 Priority Service Populations (p.18), Rule 5.1 eligibility (p.25), Rule 5.3 self-employment documentation (p.26), Rule 5.4 income (countable p.28 / non-countable p.29), Rule 5.5 activity requirement (p.30), Rule 5.9 special-needs work-requirement waiver (p.32), Rule 6.2 co-payment (who pays / $0 exemptions p.40; minimum-fee categories p.41), Rule 7.1 provider types (p.43), Rule 8.1 reimbursement rates (p.57)
  • 2024 Mississippi Child Care Market Rate Survey — Table 1 (licensed center, p.9) and Table 2 (registered family-home, p.10) carry the operative "Current CCPP Rates" schedule (effective 2023-07-01)
  • Family Co-Payment Fee Scale (effective 2021-11-01) — sliding-fee scale and SMI income limits
  • CCDF State Plan FFY 2025–2027 — co-payment affordability (§3.1, p.39) and adopted full-time base rates (§4.3.2, pp.59-60)
  • OMB Bulletin No. 13-01 — February 2013 Metropolitan Statistical Area delineation (basis for the metro-county list)

Program Overview

  • Administration: State-administered (MDHS / DECCD), federally funded through the Child Care and Development Fund (CCDF), 45 CFR Part 98
  • Subsidy type: Provider-reimbursement voucher — pays the lesser of the provider's charge and a maximum weekly rate, net of the family co-payment
  • Legal authority: Miss. Code Ann. § 43-1-2(4), § 43-1-4; Mississippi Administrative Code Title 18, Part 17

Eligibility

Requirement Source How Modeled
Child under age 13 (under 19 if special-needs) Manual Rule 5.1 ms_ccpp_eligible_child: where(is_disabled, age < 19, age < 13); params eligibility/child_age_limit.yaml (13), eligibility/special_needs_child_age_limit.yaml (19)
Family income ≤ 85% SMI Manual Rule 5.1; Copay Fee Scale ms_ccpp_income_eligible: countable_income <= hhs_smi * 0.85; param income/smi_rate.yaml (0.85). Uses the federal hhs_smi % ratio, not transcribed SMI dollars
Mississippi residency Manual Rule 5.1 defined_for = StateCode.MS chain on ms_ccpp_eligible
Parent/caretaker activity ≥ 25 hr/wk work OR full-time school/training Manual Rule 5.5 ms_ccpp_activity_eligible: weekly_hours_worked_before_lsr >= 25 | is_full_time_student; param eligibility/activity_hours.yaml (25)
Work requirement waived for a parent meeting the SSI disability definition Manual Rule 5.9 ms_ccpp_activity_eligible adds | is_ssi_disabled for head/spouse. (Rule 5.1(3) life-threatening-illness waiver is documented but not tracked.)
Assets ≤ $1,000,000 Manual Rule 5.1(2) Federal is_ccdf_asset_eligible (reused; no state asset parameter)
Child citizen or qualified non-citizen (no parent citizenship bar) Manual; State Plan Federal is_ccdf_immigration_eligible_child (reused)
Categorical bypass of the income/activity tests Manual Chapter 3 / Rule 3.1 ms_ccpp_categorically_eligible: is_tanf_enrolled | is_homeless | receives_or_needs_protective_services (eligible-child and asset tests still apply)

Income

Gross-income tested with no deductions (Manual Rule 5.4). ms_ccpp_countable_income (SPMUnit, MONTH) = countable earned income (summed across members) + countable unearned income.

  • Earned (ms_ccpp_countable_earned_income, Person): employment_income plus the self-employment sum (self_employment_income, sstb_self_employment_income, farm_operations_income, listed in income/countable_income/self_employment_sources.yaml). Two manual rules shape it:
    • Self-employment is gross income (Rule 5.3 "Total Sales and Receipts") — the self-employment sum is floored at $0 so a net business loss cannot offset other income. PolicyEngine's self-employment income is net, so this may still understate gross receipts.
    • Earned income of students under 18 is non-countable (Rule 5.4) — a person who is in K-12 school and under income/student_earner_age_limit.yaml (18) contributes $0 earned income; their unearned income still counts.
  • Unearned (income/countable_income/unearned_sources.yaml): social_security (parent and child), ssi (parent and child — listed separately from the social_security umbrella), unemployment_compensation, workers_compensation, alimony_income, veterans_benefits, pension_income, rental_income, dividend_income, capital_gains.
  • Non-countable (omitted): child support received, EITC, interest income, Pell/student aid, foster-care board payments, and the manual's other exclusions. social_security_disability is omitted because the social_security umbrella already adds it. Unemployment compensation is counted only at redetermination in the manual; modeled as always-countable, with the simplification documented in the parameter.

Co-payment (sliding fee)

ms_ccpp_copay (SPMUnit, MONTH) composes three sub-variables: where(ms_ccpp_copay_waived, 0, where(ms_ccpp_minimum_fee_category, min(income_based, $10), income_based)).

  • ms_ccpp_income_based_copay — gross income (floored at $0) × a percentage that depends on family size and the SMI band (Copay Fee Scale, effective 2021-11-01), params copay/rate/very_low_income.yaml and copay/rate/low_income.yaml:

    SMI band Fam 2 Fam 3 Fam 4 Fam 5 Fam 6+
    ≤ 50% SMI 5.5% 5% 4.5% 4% 3.5%
    50–85% SMI 6.5% 6% 5.5% 5% 4.5%

    The band split is at 50% SMI (income/very_low_income_smi_rate.yaml = 0.50); family size caps at the "6 or more" row (copay/max_family_size.yaml = 6).

  • ms_ccpp_copay_waived$0 for families at or below the federal poverty line (copay/fpg_exempt_rate.yaml = 1), TANF recipients, and homeless families with no countable income (Rule 6.2, p.40). A genuine $0, not a sentinel floor row. The waiver takes precedence over the minimum-fee cap.

  • ms_ccpp_minimum_fee_category → caps the fee at $10 (copay/minimum_fee_categories_cap.yaml) when income is above the FPL (Rule 6.2, p.41). Of the manual's six minimum-fee populations, the three PolicyEngine can track fire: protective-services children (receives_or_needs_protective_services), parents with a disability who are receiving SSI (is_ssi_disabled head/spouse with ssi > 0), and special-needs children (a disabled tax-unit dependent under 19, per Definition 25). Transitional Child Care and teen-parent categories are not tracked at the moment.

Provider rates (two effective-dated eras)

This is the most nuanced part of the implementation, so the provenance is spelled out explicitly. Rates are weekly, by provider type (center / family-home) × 4 age bands × full-time/part-time × metro/non-metro, plus a flat Special Needs (all ages) rate per provider type. All values vision-verified against the source PDFs.

The full-time base rates carry two consecutive effective-dated eras (sequential, not conflicting — a 2024 calculation uses the first, a late-2024-onward calculation uses the second):

  • 2023-07-01 — "Current CCPP Rates" from the 2024 Market Rate Survey Table 1 (licensed center, p.9) and Table 2 (registered family-home, p.10) — the operative paid rates of that era (not the survey's 75th-percentile recommendation tables).
  • 2024-10-01 — FY2025-2027 CCDF State Plan adopted full-time base rates (§4.3.2, pp.59-60). The State Plan reports rates by "most populous region" (→ metro slot, = the statewide 75th-percentile) and "lowest region" (→ non-metro slot).

The FY2025-2027 State Plan publishes full-time base rates only, so part-time and special-needs retain the era-1 values for the 2024-10 era (the adopted part-time/special-needs dollars are not public — only the copay fee scale is).

Licensed center (rates/center.yaml) — weekly, metro / non-metro:

Age band FT 2023-07 FT 2024-10 PT (both eras)
Infant $152 / $125 $167 / $140 $90 / $80
Toddler $145 / $120 $160 / $135 $90 / $75
Preschool $135 / $120 $150 / $125 $75 / $75
School-age $130 / $110 $130 / $120 $80 / $74
Special Needs (all ages) $145 / $145 carries era-1 $87 / $87

Registered family-home (rates/family_home.yaml) — weekly, metro / non-metro:

Age band FT 2023-07 FT 2024-10 PT (both eras)
Infant $115 / $94 $140 / $128 $68 / $60
Toddler $120 / $98 $131 / $125 $75 / $61
Preschool $120 / $106 $125 / $120 $60 / $60
School-age $95 / $79 $115 / $95 $58 / $53
Special Needs (all ages) $125 / $125 carries era-1 $63 / $63

The center and family-home special-needs rate sets live in rates/special_needs_center.yaml and rates/special_needs_home.yaml.

  • Age bands (ms_ccpp_age_group): 4 bands from the manual definitions — Infant (<1 yr, Add "personal_income" as a layer to parameters/tax/ #49), Toddler (12–35 months, Add ItemDed #87), Preschool (3 yr to kindergarten, Integrate data package #66), School-age (≥5 yr, Shelter deduction SNAP parameter #74). The survey's separate 2-year-old band collapses into the manual's single Toddler band.
  • Full-time vs part-time (ms_ccpp_time_category): part-time = care for fewer than 6 hours of a 24-hour day; full-time = ≥6 hr/day (manual def. OpenFisca conventions #44/Developer meeting agenda 2021-08-28 #65). Under the operative schedule PT < FT in every cell, so no part-time cap is needed.
  • In-home care: special-needs only. No distinct in-home rate table exists, so in-home children are paid the home-based special-needs rate.
  • Metro / non-metro (ms_ccpp_facility_location): the schedule varies by facility location, which PolicyEngine does not track, so the household's county is used as a proxy. The 17 metro counties (geography/metro_counties.yaml) are exactly the Mississippi counties in an OMB February-2013 MSA (Jackson, Gulfport-Biloxi-Pascagoula, Hattiesburg, and the Mississippi portion of Memphis).

Benefit

ms_ccpp (SPMUnit, MONTH): per child, the subsidy is min(provider charge, applicable maximum weekly rate × 52/12) − family copay, floored at $0. Per-child weekly maximum rates (ms_ccpp_maximum_weekly_rate) are summed across children, converted to monthly via WEEKS_IN_YEAR / MONTHS_IN_YEAR, capped at the provider charge (spm_unit_pre_subsidy_childcare_expenses), and reduced by the family co-payment. A child not actually in care (childcare_hours_per_week ≤ 0) draws no rate. The SPMUnit-level ms_child_care_subsidies (YEAR) aggregates ms_ccpp and feeds the federal child_care_subsidies.

Requirements coverage

Area Requirement Where
Eligibility Child age, income ≤85% SMI, residency, activity (+ SSI-disability waiver), assets, immigration eligibility/ variables + params
Categorical TANF / homeless / protective-services bypass ms_ccpp_categorically_eligible
Income Gross-income test; earned (minor-student exclusion, gross self-employment floored) + unearned ms_ccpp_countable_income, ms_ccpp_countable_earned_income, *_sources.yaml
Co-payment %-of-income sliding scale, $0 waiver, $10 minimum-fee categories ms_ccpp_copay + ms_ccpp_income_based_copay / ms_ccpp_minimum_fee_category / ms_ccpp_copay_waived
Rates Provider × 4 ages × FT/PT × metro/non-metro + special-needs ms_ccpp_maximum_weekly_rate, rates/ params
Benefit min(charge, rate) − copay, floored at $0 ms_ccpp
Registry CCDF program list + programs.yaml 2 registry edits

Not modeled (by design)

What Source Why excluded
Post-July-2025 rate increase (3rd era) News reports The ~July-2025 increase sits behind the eLedger/SECAC portal and its full grid is not public; to be added in a follow-up
FY2025-2027 part-time & special-needs rates FY2025-2027 State Plan The State Plan publishes full-time base rates only, so the 2024-10 era carries the July-2023 part-time/special-needs values forward
Rule 5.1(3) life-threatening-illness work-requirement waiver Manual Rule 5.1 No corresponding PolicyEngine input — not tracked at the moment
TCC / Healthy Families MS / teen-parent minimum-fee & categorical pathways Manual Rule 3.1 / 6.2 No corresponding PolicyEngine input — not tracked at the moment
Priority tiers / waitlist ordering MDHS eligibility page Affects waitlist ordering, not benefit amount
Facility location for metro/non-metro split Manual Rule 8.1 PolicyEngine doesn't track the child care facility's location; the household's county is used as a proxy

Test plan

  • 112 tests pass locally (policyengine-core test policyengine_us/tests/policy/baseline/gov/states/ms/dhs/ccpp -c policyengine_us)
  • CI passes

Files

New program files under gov/states/ms/dhs/ccpp/ (20 parameters, 18 variables, 16 test files) plus 2 registry edits:

policyengine_us/parameters/gov/states/ms/dhs/ccpp/
  age_group/age.yaml
  copay/fpg_exempt_rate.yaml
  copay/max_family_size.yaml
  copay/minimum_fee_categories_cap.yaml
  copay/rate/low_income.yaml
  copay/rate/very_low_income.yaml
  eligibility/activity_hours.yaml
  eligibility/child_age_limit.yaml
  eligibility/special_needs_child_age_limit.yaml
  geography/metro_counties.yaml
  income/countable_income/self_employment_sources.yaml
  income/countable_income/unearned_sources.yaml
  income/smi_rate.yaml
  income/student_earner_age_limit.yaml
  income/very_low_income_smi_rate.yaml
  rates/center.yaml
  rates/family_home.yaml
  rates/special_needs_center.yaml
  rates/special_needs_home.yaml
  time_category/hours.yaml

policyengine_us/variables/gov/states/ms/dhs/ccpp/
  ms_child_care_subsidies.py
  ms_ccpp.py
  ms_ccpp_age_group.py
  ms_ccpp_countable_earned_income.py
  ms_ccpp_countable_income.py
  ms_ccpp_facility_location.py
  ms_ccpp_maximum_weekly_rate.py
  ms_ccpp_provider_type.py
  ms_ccpp_time_category.py
  copay/ms_ccpp_copay.py
  copay/ms_ccpp_income_based_copay.py
  copay/ms_ccpp_minimum_fee_category.py
  copay/ms_ccpp_copay_waived.py
  eligibility/ms_ccpp_eligible.py
  eligibility/ms_ccpp_eligible_child.py
  eligibility/ms_ccpp_income_eligible.py
  eligibility/ms_ccpp_activity_eligible.py
  eligibility/ms_ccpp_categorically_eligible.py

policyengine_us/tests/policy/baseline/gov/states/ms/dhs/ccpp/
  integration.yaml
  ms_ccpp.yaml
  ms_ccpp_age_group.yaml
  ms_ccpp_countable_income.yaml
  ms_ccpp_facility_location.yaml
  ms_ccpp_maximum_weekly_rate.yaml
  ms_ccpp_time_category.yaml
  copay/ms_ccpp_copay.yaml
  copay/ms_ccpp_income_based_copay.yaml
  copay/ms_ccpp_minimum_fee_category.yaml
  copay/ms_ccpp_copay_waived.yaml
  eligibility/ms_ccpp_eligible.yaml
  eligibility/ms_ccpp_eligible_child.yaml
  eligibility/ms_ccpp_income_eligible.yaml
  eligibility/ms_ccpp_activity_eligible.yaml
  eligibility/ms_ccpp_categorically_eligible.yaml

Registry edits:

  • policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml — adds ms_child_care_subsidies to the 2021-01-01 list
  • policyengine_us/programs.yaml — adds the MS CCDF state_implementations entry and MS to the CCDF coverage line

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

hua7450 and others added 3 commits June 16, 2026 09:30
Placeholder changelog fragment to start the ms-ccap branch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@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 (67bb475).
⚠️ Report is 24 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main     #8648    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files            1        18    +17     
  Lines           23       291   +268     
==========================================
+ Hits            23       291   +268     
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 7 commits June 16, 2026 13:13
…eferences

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

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

Center and family-home full-time rates now carry a second effective-dated entry from the FY2025-2027 CCDF State Plan (most-populous region = metro, lowest region = non-metro). Part-time and special-needs retain the prior-era values (the State Plan publishes full-time base rates only). Integration tests split into era-1 (2024-01) and era-2 (2025-01) cases.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Fee Scale Table 2

The up-to-50%-SMI per-size copay rates (5.5/5/4.5/4/3.5%) are published directly in the Copay Fee Scale 'Table 2: Family Co-Pay Rates', not merely derived from the 5.5% cap.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Page anchors: fix systematic +1 offset (Rule 5.1 #26->25, Rule 5.4 countable
  #29->28, priority populations #19->18, FPL exemption PolicyEngine#41->40, FT/PT defs
  #13->12) and correct inline definition page numbers in age/hours titles.
- Wrong-rule citations: subsidy/reimbursement PolicyEngine#45 -> Rule 8.1 PolicyEngine#57 (ms_ccpp,
  ms_child_care_subsidies); provider types PolicyEngine#45 -> Rule 7.1 PolicyEngine#43.
- Copay test: $0 poverty-line exemption takes precedence over the $10
  minimum-fee cap for a special-needs child at/below FPL.
- Activity: note the unmodeled Rule 5.1(3) life-threatening-illness waiver.
- Backdate age-group/time-category classification brackets to 2021-11-01.
- Add an income-above-85%-SMI ineligible case to ms_ccpp.yaml.

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

- Income (Rule 5.4): exclude earned income of students under 18 (new
  ms_ccpp_countable_earned_income) and floor the self-employment sum at zero so a
  business loss does not offset other income. Split the countable income sources
  into self_employment_sources and unearned_sources.
- Co-payment (Rule 6.2): decompose ms_ccpp_copay into ms_ccpp_income_based_copay,
  ms_ccpp_minimum_fee_category, and ms_ccpp_copay_waived. The $10 minimum-fee cap
  now requires a parent with a disability who is receiving SSI (ssi > 0), and a
  special-needs child must be a disabled dependent under 19.
- Add tests for the new variables and the corrected income/copay behavior.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hua7450 hua7450 marked this pull request as ready for review June 17, 2026 03:47
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 Mississippi Child Care Payment Program (CCPP/CCAP)

1 participant