Implement Wyoming Child Care Subsidy Program (CCAP) - #9109
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…anf_enrolled formula change Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…les (ref PolicyEngine#9108) Purchase of Service rules Ch. 1 now cites the Secretary of State copy on rules.wyo.gov (verified identical 40-page document, same pagination); policy manual sections cite the DFS Child Care Subsidy Policy Manual page; the CCDF State Plan and Table I sliding fee scales cite the DFS child care services page that hosts them. POWER references unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Waive the income eligibility test for foster and protective-services children (Rules Ch. 1 §8(e)(iv)(C); CCDF State Plan §§2.2.2.f-g and 3.3.1.vi). The flags previously reached only the copay, which is unreachable once a unit fails the income test, so foster families above 175% of the poverty guideline were denied the benefit outright. Exclude the unearned income of children ineligible for assistance (Rules §8(e)(iv)(E)(III)). The unearned side was derived as unit gross less unit earned, which bypassed every member-level exclusion in the rules; it is now taken per person. Correct four section citations in comments: the 16-hour care cap is §9(h) not §9(k), the family-rate cap is Manual §1101.N.3 rather than a nonexistent §9(m) cap, the no-resources rule is §8(e)(v) not §8(f), and the "increased due to employment" condition comes from Rules §8(e)(i)(N)(II) alone, not from Manual §1201.B. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…into wy-ccap # Conflicts: # policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml # policyengine_us/programs.yaml
Program Review — Wyoming CCAP (new program)PR #9109 ( Scope
Verified correctThis is a clean, unusually well-documented new-program PR. Independently confirmed:
Critical (must fix)None. The test agent flagged Should address
Suggestions
Caveats
Validation summary table
Review severityAPPROVE. With 0 true criticals, a sample-clean rate/copay audit (40 cells / 0 mismatch), Next steps
🤖 Generated by /review-program (Claude Code) |
Pin the wy_child_care_subsidies MONTH-to-YEAR roll-up with a case whose monthly wy_ccap varies across the year, so a twelve-month sum and a pass-through of one month no longer produce the same expected value. Pin three previously unexercised defaults: the CENTER provider type, the FULL_DAY day length (observable only outside Wyoming, since the zero childcare_hours_per_day default always yields PART_DAY inside it), and the copay's max_(gross, 0) floor, via a self-employment loss that drives gross income negative while countable income stays in a paying step. Each was mutation-tested: removing the floor or flipping either default fails the new cases. Document the deliberate unit-wide foster and protective-services waiver in wy_ccap_copay, including its magnitude in a mixed household, and cross-reference it from wy_ccap_income_eligible. Reframe the asset test as the federal CCDF ceiling rather than a Wyoming rule, since Rules §8(e)(v) provides that resources are not considered. Align the CCDF State Plan copay citations across the variable and the parameter, and stop repeating one href within a reference list: the three Table I editions now link to their own PDFs instead of the shared DFS landing page, and sections of one document share a single entry. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Upstream changed weekly_hours_worked_before_lsr's default from 40 to 0 so a dataset that fails to populate hours fails work-requirement tests loudly instead of silently clearing them. The WY CCAP cases relied on the old implicit 40 to satisfy the activity test, so fourteen of them returned zero once main was merged in. Set the hours explicitly on every caretaker rather than restoring the old default. Cases that assert zero or false needed this too: without hours they would have passed for the wrong reason, the activity test failing before the gate each case is meant to exercise. Case 4 of wy_ccap_eligible keeps hours at zero deliberately, since it tests the idle-caretaker path. Re-verified that the negative-gross copay case still fails when the max_(gross, 0) floor is removed, returning -126 as documented; it had begun passing vacuously while the activity test was zeroing the copay first. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Follow-up — review items verified at
|
S11: add seven copay step-boundary tests. Cases 1-13 all land mid-band, so an unshifted Table I threshold (1.25 rather than 1.2501) passed unnoticed. The new cases put countable income exactly on each step edge, and Case 15 uses one full-day and one part-day child so it pins full_day.yaml and part_day.yaml at once. Mutation-verified both ways: stripping the 0.0001 offsets fails five of the six exact-edge cases, and widening one offset to 0.001 fails the paired just-above case. S3: the special-needs age limit of 18 was attributed to Rules Ch. 1 §8(e)(i)(A), which extends eligibility past 13 but states no upper age. The 18 is Wyoming's elected ceiling in CCDF Plan §2.2.1.b.i, whose §2.2.1.b.ii "less than 18 years old" confirms the exclusive comparison. Reattribute in the parameter and in wy_ccap_eligible_child, and repoint the plan reference at the PDF (the href was the DFS landing page while the title claimed a page number). S5: confirm the 7% copay cap against Plan §3.1.1 and cite the federal ceiling at 45 CFR 98.45(l)(3). G1: give wy_ccap_max_rate's select an explicit default so every provider type resolves to a rate, matching al_ccsp_maximum_weekly_rate. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
Resolves two conflicts from Utah and Tennessee CCAP landing in main since this branch last merged: - parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml: the 2025 list keeps main's tn_child_care_subsidies and appends wy_child_care_subsidies last, matching the 2021/2024 lists where Wyoming is last. Utah arrived from main and merged cleanly into all three lists. - programs.yaml: the ccdf entry takes the union of both coverage strings (main's TN + UT plus WY) and keeps all three new state_implementations blocks in append order (UT, TN, WY). coverage and state_implementations both hold 49 states with no duplicates. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Summary
This PR implements Wyoming's Child Care Assistance Program (CCAP), the state's CCDF-funded child care subsidy administered by the Department of Family Services (DFS) under the regulation "Child Care, Purchase of Service." The implementation determines child, activity, income, and asset eligibility, places the assistance unit on Wyoming's six-step sliding fee scale, and computes the monthly subsidy paid to the provider as attendance-based daily reimbursement (capped at the DFS maximum daily rate) net of a per-child daily copayment and a 7%-of-gross-income family copay cap. It adds 15 variables, 14 parameter files, and 13 YAML test files (82 cases), and registers
wy_child_care_subsidiesunder the federalchild_care_subsidiesaggregator.Closes #9108
Regulatory authority
Google Drive viewer URLs do not honor
#page=anchors, so page numbers for Drive-hosted documents appear in the link text rather than as URL fragments; the wyoleg.gov statute PDF uses a#page=anchor because it honors them.Income eligibility tests
Wyoming places the assistance unit on a six-step sliding fee scale expressed as fractions of the federal poverty guideline (FPG): Step 1 = 100%, Step 2 = 125%, Step 3 = 150%, Step 4 = 175%, Step 5 = 200%, Step 6 = 225% (Rules Appendix A; Table I). The implementation applies two thresholds depending on enrollment status:
wy_ccap_income_eligiblereads the boolean inputwy_ccap_enrolledto select the applicable limit — applicants use the 175% threshold, enrolled recipients the 225% threshold (decision D1, following the existingis_tanf_enrolledapplicant/recipient pattern).The scale placement uses countable income (post-$200 disregard, post-child-support), per Rules §8(e)(iv)(G)(II) ("All countable income including gross earnings and cash benefit programs … shall be included") and §8(e)(iv)(D)(III)(5.), which deducts the $200 disregard before the amount is carried to the scale. The Table I chart column header reads "Household Size and Monthly Gross Income"; this is worker-facing shorthand that conflicts with the binding Rules definition of "gross income" as pre-disregard income (Rules §4(vv)(v)). The parameter descriptions document this discrepancy and cite the governing Rules text.
Income deductions and exemptions
wy_ccap_countable_incomecomputes countable income from gross income with the following adjustments:self_employment_incomeis counted. Manual §§902–903 allow a business-expense deduction of the greater of 25% of gross receipts or actual expenses. The actual-expense branch is what net self-employment income already reflects; the fixed 25%-of-gross-receipts alternative is not modelable because PolicyEngine has no gross-receipts input (see "Not modeled").income/countable_income/sources.yamlclassifies income types as counted or exempt following Rules Appendix B and Manual Table Basic prototype #1 — for example, SSI and foster-care payments are exempt while RSDI, unemployment, and child support received are counted.POWER (Wyoming TANF) cash is excluded from countable income (decision D2). Wyoming's manual and rules count POWER as nonexempt unearned income, but including it would create a CCAP↔POWER circular dependency in the model. This exclusion deliberately breaks that cycle, follows the Montana CCAP
sources.yamlprecedent, and is supported by the CCDF State Plan income definition (§2.2.4.c), which omits public assistance. This is a documented deviation from the manual's text.Income standards
The step boundaries are stored as FPG fractions (1.75 for initial eligibility, 2.25 for continued eligibility), so the dollar income limits self-uprate automatically each year as the federal poverty guideline updates — no annual parameter edit is required for the income thresholds. The Table I income-limit dollar amounts differ across the 2024, 2025, and 2026 charts only because the underlying FPG changes; the step fractions are identical across all three editions.
The DFS maximum daily rate grid and the per-child daily copay schedule are encoded once at an effective date of 2024-04-01 because the dollar values are identical on all three chart editions (04/01/24, 04/01/26, and the intervening 04/01/25 chart), which are all cited in the parameter references (decision D8).
Benefit calculation
The monthly subsidy is attendance-based daily reimbursement:
wy_ccap_max_rateselects the DFS maximum daily rate by facility type (child care center, licensed-family setting, or legally exempt) × age band (0–11 months, 12–23 months, 2–3 years, 4–5 years, 6–13 years) × day length (part day < 5 hours, full day ≥ 5 hours). Legally exempt providers use flat rates of $12.09 part day / $24.19 full day with no age variation.wy_ccap_daily_benefittakes the minimum of the provider's actual charge and the DFS maximum daily rate (authorize-at-the-lowest, Rules §9(c); Manual §1101.M).wy_ccapmultiplies the daily benefit bychildcare_attending_days_per_month, subtracts the copayment, and floors the result at zero.The copayment (
wy_ccap_copay) is the flat per-child daily copay from Table I by FPL step, scaled by attendance days, then subject to the 7%-of-gross-family-income cap from CCDF State Plan §3.1.1 (decision D9). Per-child daily copays range from $0.00 (Step 1) to $6.84 part day / $13.68 full day (Step 6), with the full-day copay equal to twice the part-day copay at every step. The copay is $0 at Step 1 (≤100% FPG) and is waived for foster and protective-services children, whose income is not considered (CCDF State Plan §3.3.1).Per decision D7, the implementation reads attendance from the existing
childcare_attending_days_per_monthvariable rather than introducing a Wyoming default-days parameter; test cases that depend on attendance supply it as an input (10 days).Requirements coverage
The requirements tracker verified 26 of 26 in-scope requirements as covered against the actual files on the branch (spot-checking manifests rather than trusting them blindly). One gap-fix round closed the two requirements initially flagged: REQ-007 (self-employment authorized hours) gained a documentation note with citations plus activity test Case 9, and REQ-020 (VA benefits) gained gross-income Case 5, which feeds
veterans_benefitsthrough to countable income.The 82 YAML test cases span unit tests for each variable, boundary cases (age-band edges, the 5-hour day-length cutoff, the $1,000,000 asset ceiling, the six copay steps), and seven integration cases exercising the full chain through the federal
child_care_subsidiesaggregator. A microsimulation smoke run confirmed no circular-dependency errors between CCAP and POWER.Not modeled
The following requirements are out of scope by design and tracked here:
The 25%-of-gross-receipts self-employment alternative is also not modeled (no gross-receipts input); the actual-expense branch is modeled through net self-employment income.
Historical notes
Files added
Parameters (14, under
parameters/gov/states/wy/dfs/ccap/):Variables (15, under
variables/gov/states/wy/dfs/ccap/):Tests (13, under
tests/policy/baseline/gov/states/wy/dfs/ccap/):wy_ccap.yaml,wy_ccap_age_band.yaml,wy_ccap_daily_benefit.yaml,wy_ccap_day_length.yaml,wy_ccap_max_rate.yaml,integration.yaml, pluscopay/,eligibility/(4 files), andincome/(2 files).Registrations (2):
wy_child_care_subsidiesadded togov/hhs/ccdf/child_care_subsidy_programs.yaml; Wyoming CCAP entry added toprograms.yaml.Changelog:
changelog.d/wy-ccap.added.md.🤖 Generated with Claude Code