Skip to content

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

Merged
hua7450 merged 12 commits into
PolicyEngine:mainfrom
hua7450:ms-ccap
Jun 18, 2026
Merged

Implement Mississippi Child Care Payment Program (CCPP/CCAP)#8648
hua7450 merged 12 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 (7809118) to head (e0c18f7).
⚠️ Report is 2 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #8648   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           19        18    -1     
  Lines          272       292   +20     
=========================================
+ Hits           272       292   +20     
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
@hua7450 hua7450 requested a review from PavelMakarchuk June 17, 2026 18:45
@PavelMakarchuk

Copy link
Copy Markdown
Collaborator

Program Review — Mississippi CCPP (PR #8648)

Automated multi-agent review (regulatory, references, code patterns, test coverage, and source-value audits of income/copay/rates/metro).

Verdict

This is a clean, high-quality, production-ready implementation of the Mississippi Child Care Payment Program (CCPP). Every parameter value traces to an authoritative MS/MDHS/federal source and is corroborated in the cited document's text — the source-value audits found zero mismatches across income (85% SMI), the copay percentage bands, the $0/$10 fee floors, all 32 provider-rate leaves (both rate eras), age and time bands, and activity hours. Metro geography exactly matches the OMB Bulletin 13-01 (Feb 2013) MSA delineation, all 17 listed counties exist in the county enum (no dead entries), and the NON_METRO default is the safe lower-rate fallback. 112 CCPP tests plus 11 parameter/system tests pass and the model runs vectorized for MS 2024 with no entity or cycle errors. No shared federal code is touched beyond the CCDF aggregator list and programs.yaml. There are no Critical issues. Recommended severity: COMMENT — a small set of should-address items (changelog filename, two test-gap additions, and confirming the complete status) plus minor suggestions.

Source Documents (all values verified)

  • CCPP Policy Manual (Nov 2025) — Rules 5.1, 5.4, 5.5, 6.2 + Chapter 2 definitions
  • CCDF State Plan FFY 2025-2027 — §3.1 (copay bands), §4.3.2 (adopted full-time base rates, pp.59-60)
  • 2024 MS Child Care Market Rate Survey — Tables 1 & 2 (current CCPP rates eff. July 2023, pp.9-10)
  • Family Co-Payment Fee Scale (eff. 11/01/2021) — Table 2 (copay %), Table 3 (SMI limits)
  • OMB Bulletin 13-01 (Feb 2013) — MSA delineations (list1.xls) for metro geography

Critical (Must Fix)

None.

Should Address

  1. Changelog fragment is misnamedchangelog.d/ms-ccap.added.md. The program is CCPP (Child Care Payment Program), not CCAP. The fragment content is correct ("Add Mississippi Child Care Payment Program (CCPP).") and will build, but the filename inherits the branch typo. Rename to changelog.d/ms-ccpp.added.md.

  2. Test gap — categorical eligibility does not prove the child/asset gates still apply. ms_ccpp_eligible requires has_eligible_child & asset_eligible & categorical, but no test shows a categorical family (TANF/homeless) with no eligible child (or over the asset limit) resolving to ineligible. The asset-gate test exists only on the standard income path. Add a case — e.g. a TANF-enrolled family whose only child is age 15 — asserting ms_ccpp_eligible: false, to lock in that the categorical path does not bypass the child/asset gates. (eligibility tests under tests/.../ms/dhs/ccpp/eligibility/)

  3. Test gap — special-needs minimum-fee cutoff untested at exactly age 19. In ms_ccpp_minimum_fee_category.py the age < special_needs_child_age_limit (19) boundary is not exercised: Case 4 uses a disabled dependent age 18 (true) and Case 5 a disabled 18-year-old head (false for the head reason). Add a disabled dependent at exactly age 19 asserting ms_ccpp_minimum_fee_category: false. (copay tests under tests/.../ms/dhs/ccpp/copay/)

  4. Confirm programs.yaml: complete vs documented untracked items. programs.yaml asserts status: complete for ms_ccpp while the implementation documents several untracked pathways: FY25-27 part-time/special-needs dollar rates retained at 2023-07 values, and the Transitional Child Care (TCC), teen-parent (Rule 5.10), Healthy Families Mississippi, and life-threatening-illness activity-waiver pathways. The regulatory reviewer judged complete justified given single-period architecture/data limits; please confirm complete vs partial is the intended call. (policyengine_us/programs.yaml)

Suggestions

  1. Four #page anchors land one printed page off (click-accuracy only; values and authoritative sources are unaffected):

    • Rule 5.1 is printed p.24, not p.25 — fix #page=25#page=24 in eligibility/child_age_limit.yaml, eligibility/special_needs_child_age_limit.yaml, and income/smi_rate.yaml.
    • The $10 minimum-fee list is printed p.40, not p.41 — fix #page=41#page=40 in copay/minimum_fee_categories_cap.yaml.
    • Optional/borderline: copay/fpg_exempt_rate.yaml p.40→p.39; income/student_earner_age_limit.yaml p.29→p.28.
  2. Add a one-line note on the pre-2023 rate extrapolation. Eligibility/copay params start 2021-11-01 but provider rates start 2023-07-01, so for 2021-11..2023-06 PolicyEngine backward-extrapolates the July-2023 rates. The actual COVID emergency rates were in effect during that window (per MRS p.9). This is standard PE extrapolation, not a bug — worth a one-line in-file note if pre-2023 accuracy matters.

  3. Name the inlined min_() in ms_ccpp_copay.py. The min_(income_based_copay, p.minimum_fee_categories_cap) expression is inlined inside a where; the code-style guide prefers breaking complex expressions into a named intermediate variable. Minor readability nit.

  4. Lower-priority test nice-to-haves (to bring the rest of the suite up to the already-high standard of the rate/copay matrices): an at-boundary 85% SMI case at additional family sizes (e.g. size 3/5); a copay size-5 row (currently never exercised in either band); and a homeless-with-small-positive-income case to isolate the homeless_no_income copay branch from the at_or_below_fpl branch (Case 14's zero income satisfies both).

  5. Optionally cite the MS-MSA per-county definitions on geography/metro_counties.yaml, in addition to OMB Bulletin 13-01, so each of the 17 counties is individually verifiable rather than derived from MSA membership.

Investigated & Cleared

  • Metro counties — all 17 are valid county-enum members in the exact member-name key format county_str.decode_to_str() returns; classification is exactly correct vs the OMB 2013 delineation (Jackson/Gulfport/Hattiesburg/Memphis-MS MSAs). No GA-style dead entries (unlike a prior similar PR). The omitted-county/default case is tested (George County → NON_METRO).
  • Source values — every income, copay, provider-rate (32 leaves, both eras), age, time, and activity value matches its cited primary source exactly (no delta > 0.3; all deltas = 0). hhs_smi reproduces Fee Scale Table 3 SMI limits exactly for FFY2021.
  • QRIS star-rate table correctly omitted — Mississippi does not publish a quality-tiered rate add-on, so none is modeled.
  • No shared federal code touched — only the CCDF aggregator list (gov/hhs/ccdf/child_care_subsidy_programs.yaml) and programs.yaml are edited outside gov/states/ms/.
  • No duplicate variables — reuses hhs_smi, is_ccdf_asset_eligible, is_ccdf_immigration_eligible_child, is_tanf_enrolled, is_ssi_disabled, spm_unit_fpg, and other shared helpers; no SMI/median-income/child-care variable reinvented.
  • Single 85% SMI entry/exit threshold is correct — the manual (p.38) uses one SMI threshold with no separate redetermination SMI.

Validation Summary

Area Result
Regulatory PASS — eligibility, income, copay, categorical, two-parent rule all match the Policy Manual (Rules 5.1/5.4/5.5/6.2)
References PASS — every value corroborated in an authoritative MS/MDHS/federal source; 4 #page anchors one page off (cosmetic)
Code patterns PASS — entities, periods, aggregation, parameterization conform; minor inlined-min_ nit
Test coverage STRONG — 112 CCPP tests; rate matrix & copay bands exemplary; 2 boundary gaps to fill
Source value audit (income + copay + rates + metro) PASS — zero mismatches; all deltas = 0
Cross-program edits PASS — only CCDF aggregator list + programs.yaml; no shared federal logic changed
CI status PASS — 112 CCPP + 11 param/system tests pass; vectorized MS 2024 run clean (27 checks pass)

Review Severity: COMMENT

Excellent work — this is one of the cleanest program PRs we've reviewed, with byte-for-byte source fidelity and an unusually thorough test suite. The handful of items above are quick polish, not blockers. Nice job!

hua7450 and others added 2 commits June 18, 2026 16:49
…metro source

- ms_ccpp_copay: extract inlined min_ into capped_minimum_fee_copay (readability)
- metro_counties: cite the 2024 MS Market Rate Survey (program doc) and the
  NCHS 2013 Urban-Rural Classification Scheme alongside OMB Bulletin 13-01, so
  each metro county is individually verifiable from the source MS actually uses

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

# Conflicts:
#	policyengine_us/programs.yaml
@hua7450 hua7450 merged commit cd92e07 into PolicyEngine:main Jun 18, 2026
27 checks passed
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)

2 participants