Implement Maryland Child Care Scholarship (CCS)#7889
Conversation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds eligibility, income calculation, copayment, and provider reimbursement rate parameters for Maryland's CCS program (COMAR 13A.14.06). Includes formal rates (7 regions) and informal rates (24 counties), enum-keyed parameter lookups, and 78 test cases. Closes PolicyEngine#7888 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7889 +/- ##
===========================================
+ Coverage 94.69% 100.00% +5.30%
===========================================
Files 7 15 +8
Lines 113 259 +146
Branches 2 1 -1
===========================================
+ Hits 107 259 +152
+ Misses 6 0 -6
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add region_w_counties.yaml and update md_ccs_region.py - Add MD CCS to programs.yaml registry - Add #page=XX to 5 session law PDF references - Fix continuation.yaml to cite state source as primary - Document frozen SMI limitation with TODO Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace all broken dsd.maryland.gov URLs with regs.maryland.gov - Fix continuation.yaml: .03(B) → .03(H) (Income Eligibility Scale) - Fix self_employment_deduction_rate.yaml: (F)(6) → (F)(8)(a)(i) - Fix sources.yaml: (F)(3)-(8) → .02 (Gross income definition) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Program Review — PR #7889: Maryland Child Care Scholarship (CCS)
Author: hua7450
Diff: 3,807 lines (new state program)
CI: All functional checks pass; codecov/patch soft fail (expected for new program)
Posting mode: LOCAL ONLY
Source Documents
Eight authoritative sources consulted:
- COMAR 13A.14.06 (Child Care Scholarship Program regulations) — HTML extract; defines eligibility, gross income (.02B(28)), countable income sources (.03F(8)), copay matrix (.12), unit-rate derivation (.11)
- Chapter 525 of 2022 (HB 995) — child-support pursuit prohibition; effective July 1, 2022; does NOT exclude child support from income
- Chapter 717 of 2024 (SB 362) — §9.5-111(d) statutory copay cap anchored to Jan 1, 2024 operational levels
- February 2026 W&M Committee Briefing — slide 21 (SMI base-year freeze pattern), slide 22 (75% SMI initial threshold administrative origin)
- MSDE Rate page (current) — operational rate workbooks
- MSDE Rate page (Wayback Machine, historical) — pre-2024 rate snapshots
- January 2025 OCC Info Session — MSDE program operations
- 45 CFR 98.21(b), 98.45(l)(3) — federal CCDF continuation eligibility (85% SMI) and 7% co-payment cap
Critical (Must Fix Before Merge)
1. Child support exclusion regulatorily unsupported
Finding: income/countable_income/sources.yaml omits child_support_received and cites Chapter 525 of 2022 as authority for excluding it. This citation is incorrect:
- Chapter 525 of 2022 (HB 995) only prohibits MSDE from requiring child-support pursuit as a condition of eligibility. It does NOT exclude child support from gross income.
- COMAR 13A.14.06.02B(28)(b)(x) explicitly INCLUDES "Alimony and child support" in gross income.
- COMAR 13A.14.06.03F(8)(c) instructs contractors to count child support actually received.
Fix options:
- Add
child_support_receivedto countable income sources list, OR - Locate authoritative MSDE policy memo (not Chapter 525) supporting the exclusion and update citation accordingly.
Without one of these, Maryland CCS income test under-counts gross income and over-grants eligibility/under-charges copay.
2. md_child_care_subsidies aggregator missing from household-level wiring
Finding: md_child_care_subsidies aggregator variable is not included in:
policyengine_us/variables/household/income/household/household_benefits/household_state_benefits.yamlpolicyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py
Impact: Silent under-counting of household and SPM unit benefits in microsimulation. The federal child_care_subsidy_programs aggregator picks it up, but downstream household income computations omit it.
Precedent: Same asymmetry was flagged in the WA WCCC review and fixed in the AL CCSP review. Peer state CCDF programs (DE/CO/CA/NE/SC/VA) all appear in household_state_benefits.yaml. Confirmed by both the code-validator pass and the rates audit pass.
Fix: Add md_child_care_subsidies to both files, matching the peer-state pattern.
Should Address
-
Changelog filename typo.
changelog.d/md-ccap.added.mdshould bechangelog.d/md-ccs.added.md(same pattern observed in AL CCSP / AR SRA reviews). -
receives_snapnaming convention. Breaks the project conventionis_X_enrolled(cf.is_tanf_enrolled,is_wccc_enrolled,chip_enrolled). Rename tois_snap_enrolledand add areferencefield. Cycle-avoidance justification is real and well-documented and should be preserved as an inline comment. -
Hard-coded
/3divisor.md_ccs_payment_rate.py:3676divides by literal 3 to convert UNIT_3 to UNIT_1. Derive fromp.unit_count["UNIT_3"]for parameter-driven correctness. -
PR body's "HHS SMI starts 2021" claim is wrong. Actual HHS SMI dataset begins 2017-10-01. The deferred-backfill issue (#8355) may be moot. Update PR body. Reconsider whether
smi_frozen_year2018 is needed if the backfill isn't necessary. -
45 CFR citation typo. Code comment cites
98.45(k), but the 7% copay cap is actually at98.45(l)(3). Fix the code comment. -
Chapter 525 effective date mismatch.
sources.yamluses2022-05-01as start date, but Ch 525 effective date is July 1, 2022. Either use2022-07-01or document the rationale. -
75% SMI threshold not actually in Chapter 525. This value came from MSDE administrative action documented in the February 2026 W&M briefing slide 22.
initial.yamlcitation to Ch 525 is misleading. Fix citation to slide 22 plus MSDE memo. -
Multi-sentence parameter descriptions (skill requires single sentence) in:
smi_freeze_in_effect.yamlweekly_amount.yamllicensed_center.yamllicensed_family.yamlunit_count.yaml
-
Missing tests — coverage gaps:
- Region V formal rates entirely untested (only 5 of 7 regions have rate-lookup tests)
- UNIT_1 formal derivation untested (only informal hourly tested)
- SMI freeze critically under-tested: only FY2024 path; missing FY2019-2022 (2018 SMI) and explicit FY2025+ unfrozen assertions
- Historical SMI rate transitions (50% / 65% / 75%) — zero coverage at periods 2016 / 2019 / 2020 / 2022
- No exact-at-threshold tests for 75% / 85% SMI
- Only 2 of 14 income sources tested (employment, self-employment)
- No federal-aggregator integration test (md_ccs → md_child_care_subsidies → child_care_subsidy_programs)
-
Test count discrepancy. PR body says 53 tests; actual count is 81 across 14 YAML files. Update PR body.
-
md_ccs_regiondefault discrepancy. Code default isREGION_W, but tests document "default = Region Z (Allegany)". Reconcile. -
Reference precision:
- 11 payment files cite the MSDE rates landing page (navigation-only); replace with direct workbook links.
copay/unit_hours.yaml3-hr / 6-hr boundaries are not in COMAR .11; cite the operational MSDE source.income/countable_income/sources.yamlcitesCOMAR .02B(28)but the operational source list is at.03F; add.03Fcite.- Verify the
#page=19anchor inCH_717_sb0362E.pdfactually lands on the copay freeze section.
-
Copay description overreach. "Frozen at Jan 1, 2024 levels by Chapter 717" overstates Ch 717's scope. Chapter 717 is a one-directional cap with a legislative-notification escape valve. Rewrite YAML description accordingly.
-
Rank-aware copay logic. COMAR .12A(3)(a)-(c) assigns the highest copay to the youngest child; PR code ignores birth-order assignment. Defensible under the current flat $1/$2/$3 schedule but breaks if the regional matrix is restored. Document the assumption explicitly in code comments.
-
unit_hours.yamlboundary.3.0001epsilon is brittle; consider inclusive/exclusive boundary semantics or document the convention. -
Copay citation chain. Ch 717 + MSDE operational schedule should be presented as a coherent chain, not a single citation that overreaches.
-
Receipt-tracking variable scope.
receives_snapis currently MD-specific; consider whether a genericis_snap_enrolledwould benefit other state programs.
Suggestions
- Add reconciliation comments cross-referencing parameter YAML headers in
md_ccs_payment_rate.py. - Add inline comment in
receives_snap.pydocumenting the cycle anti-pattern rationale and why direct dependency onsnapis avoided. integration.yamlCase 3: clarify that the TCA waiver path isn't actually exercised in the test scenario.- Section 8 Housing Choice Voucher and Guaranteed Access Grant copay waivers from Chapter 525 are properly deferred — open a follow-up issue tracking Phase-2 work.
smi_frozen_year.yaml— clarify base-year tag semantics in description.federal_cap_rate.yamleffective date — consider2024-08-01(CCDF Final Rule binding date) instead of2022-05-01.
Investigated and Cleared
$1 / $2 / $3 copay schedule — DEFENSIBLE
COMAR formally codifies a different regional × age × birth-order matrix ranging $2.42–$90.46. However:
- Chapter 717 of 2024 §9.5-111(d) anchors the flat operational schedule statutorily.
- MSDE operational practice has used flat $1/$2/$3 (1st/2nd/3rd child) since Jan 1, 2024.
- Code-path verifier confirmed values reflect operational practice with statutory anchor.
Action retained as a SHOULD-address: clarify citation chain (Ch 717 is a one-directional cap, not full statutory replacement of COMAR matrix) and rewrite copay description.
7% cap uses countable income (not literal gross) — DEFENSIBLE
Code uses md_ccs_countable_income, which IS COMAR's "gross income for CCS" per .03F(3) + .02B(28) + .03F(8)(a)(i). 45 CFR is silent on which income base applies to the 7% cap. No regulatory mismatch.
Only nit retained: code comment citation typo (98.45(k) → 98.45(l)(3)).
PDF Audit Summary
| Category | Count |
|---|---|
| Confirmed correct data points | ~80 across 15 categories |
| Mismatches | 1 (child support exclusion) |
| Investigated and cleared | 2 ($1/$2/$3 copay; 7% cap base) |
Confirmed-correct items:
- All 56 UNIT_3 formal rate cells (7 regions × 2 provider types × 2 ages × 2 schedules) match PR-body transcription exactly
- UNIT_2 / UNIT_1 derivation (× 2/3, × 1/3) per COMAR .11.B(3) / .C(2) / .D
- 24 jurisdictions (23 counties + Baltimore City) allocated exactly once across 7 region files
- Informal 24-county × 2 age structure plausible (operational post-2020 schedule)
- Age 13 / 19 cutoffs match COMAR .02.B(11) verbatim
- 30% self-employment deduction per COMAR .03F(8)(a)(i)
- 85% SMI continuation per 45 CFR 98.21(b)
- 75% SMI initial threshold value correct (citation needs fix)
- SMI base-year freeze pattern (
smi_freeze_in_effect+smi_frozen_year) correctly aligns with W&M slide 21 - TCA / SSI categorical exemption from income test
- 3-children copay cap
- 7% federal cap
- Benefit formula order
- Federal aggregator wiring (
child_care_subsidy_programs.yaml+programs.yaml) - Citizenship via federal
is_ccdf_immigration_eligible_childreuse receives_snapcycle reality
Validation Summary
| Check | Result |
|---|---|
| Regulatory Accuracy | 1 critical + 2 should |
| Reference Quality | 0 critical + 6 should + 5 suggestions |
| Code Patterns | 2 critical + 8 should |
| Test Coverage | 0 critical + 7 should-add |
| PDF Value Audit | 1 mismatch / ~80 data points confirmed |
| CI Status | All functional PASS; codecov/patch soft fail (expected) |
Review Severity: REQUEST_CHANGES
Two critical findings block merge:
-
Child support exclusion lacks regulatory support. Chapter 525 of 2022 doesn't actually exclude child support from income; COMAR explicitly includes it. Either add
child_support_receivedto countable income, or find authoritative MSDE policy citation supporting the exclusion. -
md_child_care_subsidiesaggregator missing fromhousehold_state_benefits.yamlcauses silent under-counting in microsim. Same pattern WA WCCC review flagged; AL CCSP fixed it.
Both fixes are localized. Otherwise this is a high-quality Phase-1 implementation:
- 56 rate cells verified exact against COMAR-derived workbooks
- Full federal CCDF helper reuse (
is_ccdf_immigration_eligible_child) - Correct SMI base-year freeze pattern aligned with W&M slide 21
- Correct benefit formula order
- Sensible deferrals (Section 8 / GAG waivers) for Phase 2
Next Steps
Run /fix-pr 7889 to apply the two critical fixes and the should-address items.
… fix citations Critical: - Count child_support_received in MD CCS countable income per COMAR 13A.14.06.02B(28)(b)(x) and .03F(8)(c); Chapter 525 does not exclude it - Add md_child_care_subsidies to household_state_benefits.yaml (both brackets) so the benefit flows into household net income Should-address: - 45 CFR 98.45(k) -> (l)(3) for the 7% copayment cap - Single-sentence parameter descriptions (5 files); drop Chapter 717 freeze overreach - Add slide 22 citation for the 75% SMI initial threshold - Rename changelog fragment md-ccap -> md-ccs Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Thanks for the thorough review, @PavelMakarchuk — addressed in Critical1. Child support exclusion — fixed ✅
2.
Should-address (done)
Clarifications / pushbacks
Deferred to follow-up
PR description updated to match all of the above. |
Summary
Implements Maryland's Child Care Scholarship (CCS) program in PolicyEngine, including eligibility, income calculation with SMI base-year freeze, copayment, provider reimbursement rates (with historical 5/23/22 schedule + current 3/1/26 schedule), and benefit computation.
Closes #7888
Regulatory Authority
Program Overview
Eligibility
defined_for = StateCode.MDage < p.age_threshold.child(param = 13)age < p.age_threshold.disabled_child(param = 19)is_ccdf_immigration_eligible_childis_tanf_enrolledssi > 0countable_income <= md_smi * 0.75countable_income <= md_smi * 0.85(viamd_ccs_enrolled)Income Calculation
Per COMAR 13A.14.06.03F(8), countable income includes annual gross income from 15 sources:
Income Thresholds + SMI Base-Year Freeze
MD freezes the SMI base year for CCS eligibility on a fiscal-year schedule (FY starts July 1). Implemented via
smi_freeze_in_effect(bool) +smi_frozen_yearparameters — when the freeze is in effect the formula pins SMI tosmi_frozen_year, otherwise it uses the current-year SMI. Verified against Feb 2026 W&M briefing slide 21.Note: HHS SMI data in this repo now covers FFY2018 (2017-10-01) onward following the #8356 backfill, so the base-year freeze resolves to real 2018 and 2021 SMI values.
Historical initial-eligibility SMI rate (independent of base-year freeze), as implemented in
smi_rate/initial.yaml:Copayment Structure
Current flat copayments (effective since 2022 legislation, capped per Ch 717 of 2024):
Categorical exemptions (copayment = $0):
is_tanf_enrolledssi > 0receives_snap(bare-input bool, NEW)receives_wic(existing)receives_snapis a new federal-level bare-input variable to avoid a cycle throughsnap_dependent_care_deduction → childcare_expenses → md_ccsif we used the computedsnapvalue. The § 9.5-113 waiver is also conditioned on employment/education, which is implicitly satisfied for any family that already passesmd_ccs_activity_eligible.Federal cap: Copayment cannot exceed 7% of family gross income (45 CFR 98.45(l)(3)).
Copayment assessed for up to 3 children per COMAR 13A.14.06.12; 4th+ child is free.
Provider Reimbursement Rates
payment/formal/): 7 market regions (U/V/W/X/Y/Z/BC) × 2 provider types (licensed center, licensed family) × 2 age groups (infant, regular). Only UNIT_3 (full-time) base rates are stored; UNIT_2 and UNIT_1 are derived inmd_ccs_payment_rate.pyviaunit_count / 3(i.e., × 2/3 and × 1/3) per COMAR 13A.14.06.11.payment/informal/rates.yaml): 24 counties × 2 age groups. UNIT_3 rates only; UNIT_2/UNIT_1 derived in the same way.UNIT_3 formal rates, current schedule (effective 2026-03-01):
UNIT_3 formal rates, historical schedule (effective 2022-05-23 through 2026-02-28):
Benefit Formula
Where:
expenses=spm_unit_pre_subsidy_childcare_expenses(annual)copay= weekly copayment × 52 (annualized), summed across up to 3 eligible childrenmax_reimbursement= provider reimbursement rate × 52, summed across eligible children — based on region, provider type, child age, and service unit at the period's effective rate scheduleThe benefit flows into household and SPM-unit income via
md_child_care_subsidies, which is registered in bothchild_care_subsidy_programs.yaml(federal aggregator) andhousehold_state_benefits.yaml(household net income).Not Modeled (by design)
Deferred to Follow-up PR
receives_housing_voucherbare-input in the codebaseFiles Added
Totals: 24 parameter files, 15 variable files (14 MD + 1 federal
receives_snap), 13 test files (81 test cases)Also modified:
policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml— registermd_child_care_subsidiespolicyengine_us/parameters/gov/household/household_state_benefits.yaml— includemd_child_care_subsidiesso the benefit flows into household net incomepolicyengine_us/programs.yaml— add CCS to program registryTest plan