Skip to content

Implement Wyoming Child Care Subsidy Program (CCAP) - #9109

Open
hua7450 wants to merge 8 commits into
PolicyEngine:mainfrom
hua7450:wy-ccap
Open

Implement Wyoming Child Care Subsidy Program (CCAP)#9109
hua7450 wants to merge 8 commits into
PolicyEngine:mainfrom
hua7450:wy-ccap

Conversation

@hua7450

@hua7450 hua7450 commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

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_subsidies under the federal child_care_subsidies aggregator.

Closes #9108

Regulatory authority

  • Wyoming Administrative Rules, DFS (agency 049), Child Care – Purchase of Service (sub-agency 0008), Chapter 1, effective 05/07/2025 (ref. 049.0008.1.05072025). DFS-hosted rule PDF; canonical portal rules.wyo.gov (JS application, no stable deep link). Cited sections include §8(e)(i) (eligible child, activities), §8(e)(iv) (income), §8(e)(iv)(G)(II) (countable-income basis, PDF page 22), §9(c) (benefit computation), and Appendix A/B (sliding fee scale and income classification, PDF pages 37–40).
  • Wyoming Child Care Subsidy Policy Manual, September 2025 edition — full text (HTML). Chapter PDFs used: §500 assistance-unit composition, §900 income (worked examples and Table Basic prototype #1 classification, PDF pages 5–9), §1100 basic benefit computation, §1200 benefit level/period.
  • Table I sliding fee scale charts (single page each) — income limits by household size, per-child daily copays, and DFS maximum daily rates: eff. 04/01/24, eff. 04/01/25, eff. 04/01/26.
  • Wyoming Statutes Title 42, W.S. 42-2-103(f) — the annual April-1 copay-setting authority. Cited for structure and authority only; the published Table I chart governs the operative copay amounts (see D3 below).
  • Wyoming CCDF State Plan FFY 2025–2027 (ACF-118) — plan PDF. Cited for the 7%-of-income copay cap (§3.1.1), copay waivers (§3.3.1), and rate methodology (§4.3).

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:

  • Initial eligibility requires income at or below Step 4 (175% FPG).
  • Continued (transitional) eligibility extends through Step 6 (225% FPG) for units already receiving assistance whose income rose due to employment, with no 30-day break in aid (Rules §8(e)(i)(N); Manual §1201).

wy_ccap_income_eligible reads the boolean input wy_ccap_enrolled to select the applicable limit — applicants use the 175% threshold, enrolled recipients the 225% threshold (decision D1, following the existing is_tanf_enrolled applicant/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_income computes countable income from gross income with the following adjustments:

  • Earned income disregard: $200 deducted from the gross earned income of each working adult in the unit (Rules §8(e)(iv)(D)(III)(5.); Manual §907.A).
  • Child support paid: deducted for child support paid by a parent whose income is countable, averaged and capped at the monthly court-ordered amount (Manual §907.B).
  • Self-employment: net self_employment_income is 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 classification: income/countable_income/sources.yaml classifies 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.yaml precedent, 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:

  1. wy_ccap_max_rate selects 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.
  2. wy_ccap_daily_benefit takes the minimum of the provider's actual charge and the DFS maximum daily rate (authorize-at-the-lowest, Rules §9(c); Manual §1101.M).
  3. wy_ccap multiplies the daily benefit by childcare_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_month variable 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_benefits through 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_subsidies aggregator. 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:

What Source Why excluded
Fraud, fugitive-felon, program-noncooperation, and overpayment bars Rules §8(e)(i)(F), (G), (L), (M) Not observable in the model
12-month certification periods, temporary activity breaks, and 85% SMI mid-certification action Rules §10; Manual §§1202, 1500.B Point-in-time model has no certification history
Monthly-conversion data-entry rounding (×4.3 weekly, ×2.15 biweekly, round up to whole dollar) Rules §8(e)(iv)(D)(III) Data-entry mechanics, not a policy rule
Infrequent/irregular income ≤$50/person/quarter exemption Rules §8(e)(iv)(F)(V) Below model income granularity
Lump-sum divisor / ineligibility-months rule Rules §8(e)(iv)(F)(VII); Manual §1209 Requires event timing the model does not represent
85% state median income "For EAs only" mid-certification cap Rules Appendix A; Manual §1500.B Mid-certification cap, not a benefit step (decision D9)
Special-needs add-on up to $250/month Rules §9(u); Manual §1101.O Discretionary "may approve," case-by-case amount (decision D5)
SNAP E&T-funded care caps ($200/month infants, $175/month age 2+) Rules §9(t) Narrow SNAP E&T funding stream
Funding-shortfall contingency eligibility narrowing and copay surcharge (+10%/+20%) Rules §9(x); W.S. 42-2-103(f)(i)(D) Contingency provisions triggered by appropriations
Statutory hourly copay formula (income ÷ 2,340 hours × multiplier) W.S. 42-2-103(f)(i) Authority only; the Table I chart governs the operative amounts (decision D3)

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

  • The Table I income-limit charts change year to year only through the federal poverty guideline; the step fractions and the dollar rate/copay grids are identical across the 04/01/24, 04/01/25, and 04/01/26 editions, so the grids are encoded once at 2024-04-01. Wyoming CCAP predates 2024; because parameters begin at 2024-04-01 with no pre-program sentinel, values before that date approximate the earliest verified chart era rather than reflecting collected pre-2024 policy — a documented coverage limit, not a bug.
  • The published daily copays do not reconcile with a fresh application of the statutory hourly formula (income ÷ 2,340 hours) for any recent FPL vintage. The implementation encodes the chart values and cites the statute for authority only (decision D3).
  • Validator escalation E2 resolved a gross-vs-countable ambiguity: the copay and income-limit formulas correctly place the unit on the scale by countable income, but four parameter descriptions had said "gross." The descriptions were corrected to "countable income" with a comment explaining the Table I chart-header discrepancy, citing Rules §8(e)(iv)(G)(II), §8(e)(iv)(D)(III)(5.), and §4(vv)(i). No formula, test, or expected value changed. The distinct 7%-of-gross-income family copay cap correctly remains on a gross basis (CCDF State Plan §3.1.1).

Files added

Parameters (14, under parameters/gov/states/wy/dfs/ccap/):

age_group/months.yaml
copay/family_income_cap_rate.yaml
copay/full_day.yaml
copay/part_day.yaml
eligibility/child_age_limit.yaml
eligibility/special_needs_child_age_limit.yaml
income/countable_income/sources.yaml
income/earned_income_disregard.yaml
income/fpl_limit/continued.yaml
income/fpl_limit/initial.yaml
rates/center.yaml
rates/day_length_min_hours.yaml
rates/legally_exempt.yaml
rates/licensed_family.yaml

Variables (15, under variables/gov/states/wy/dfs/ccap/):

wy_ccap.py                          wy_ccap_max_rate.py
wy_ccap_age_band.py                 wy_ccap_provider_type.py
wy_ccap_daily_benefit.py            wy_child_care_subsidies.py
wy_ccap_day_length.py               copay/wy_ccap_copay.py
wy_ccap_enrolled.py                 eligibility/wy_ccap_eligible.py
eligibility/wy_ccap_eligible_child.py
eligibility/wy_ccap_income_eligible.py
eligibility/wy_ccap_activity_eligible.py
income/wy_ccap_countable_income.py
income/wy_ccap_gross_income.py

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, plus copay/, eligibility/ (4 files), and income/ (2 files).

Registrations (2): wy_child_care_subsidies added to gov/hhs/ccdf/child_care_subsidy_programs.yaml; Wyoming CCAP entry added to programs.yaml.

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

🤖 Generated with Claude Code

hua7450 and others added 4 commits July 21, 2026 18:00
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>
hua7450 and others added 2 commits July 23, 2026 13:48
…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>
@hua7450
hua7450 marked this pull request as ready for review August 11, 2026 13:48
hua7450 and others added 2 commits August 11, 2026 10:13
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
@hua7450
hua7450 requested a review from DTrim99 August 12, 2026 13:31
@DTrim99

DTrim99 commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Program Review — Wyoming CCAP (new program)

PR #9109 (hua7450) — new Wyoming Child Care Assistance Program (wy_ccap) under
gov/states/wy/dfs/ccap/. Consolidated from five independent review passes (context,
regulatory, PDF rate/copay audit, code-pattern audit, test-coverage audit).

Scope

  • What it implements: Wyoming CCDF child care subsidy — six-step sliding-fee-scale
    copays, Table I daily reimbursement-rate caps by provider type × age band × day-length,
    initial (175% FPG) / continued (225% FPG) income limits, $200-per-working-adult earned
    disregard, POWER (TANF) categorical eligibility, activity test (any hours > 0), and a
    7%-of-gross family copay cap. 14 new variables (incl. 3 Enum modules + 1 bare input),
    14 parameter files, wy_child_care_subsidies YEAR wrapper (adds=["wy_ccap"]) wired
    into gov/hhs/ccdf/child_care_subsidy_programs.yaml, plus programs.yaml registration
    and a changelog fragment.
  • CI: 31/31 pass. 11 YAML test files including an integration suite.
  • Branch status: 8 ahead, 54 behind main → rebase before merge.
  • Sources: Wyo. Admin. Rules DFS Ch.1 (rules.wyo.gov doc 24638, eff. 05/07/2025);
    DFS Table I Sliding Fee Scale charts (04/01/24, /25, /26); DFS Child Care Subsidy Policy
    Manual; CCDF State Plan FFY2025-27; W.S. 42-2-103.

Verified correct

This is a clean, unusually well-documented new-program PR. Independently confirmed:

  • Rate/copay sample audit — 40 cells / 0 mismatch. All three Table I eras (2024/2025/2026
    charts) carry identical values, consistent with the single 2024-04-01 value blocks.
    • Six-step copay (part/full): 0/0, 0.44/0.88, 0.88/1.76, 3.20/6.40, 4.68/9.36, 6.84/13.68
      — 12/12 values MATCH; full = 2× part at every step; FPG-band thresholds
      (100/125/150/175/200/225%) match Appendix A.
    • Max daily rates: 22/22 sampled cells MATCH exactly (center, licensed-family, legally-exempt).
      The two non-monotonic cells the PR flags are confirmed as printed on the chart, not errors.
    • Income limits: initial 175% FPG (Step 4) and continued 225% FPG (Step 6) CONFIRMED.
    • $200 per-working-adult earned disregard CONFIRMED; 5-hour full-day threshold CONFIRMED.
  • Code cleanliness (0 critical). No numeric policy literal in any formula — every rate,
    threshold, disregard, cap, and age limit reads from a parameter. Enums
    (WYCCAPAgeBand, WYCCAPDayLength, WYCCAPProviderType) define possible_values +
    explicit default_value and use string Enum-member keys in breakdown params (no
    boolean/integer-key validation traps).
  • Entity/period chain matches the SD peer. wy_ccap (SPMUnit, MONTH) sums person daily
    benefit × care_days − copay, floored at 0; wy_child_care_subsidies (SPMUnit, YEAR)
    adds=["wy_ccap"] matches sd_child_care_subsidies exactly. YEAR income vars auto-÷12 in
    the MONTH countable-income formula; count/bool vars read period.this_year. Period
    discipline correct throughout.
  • 7% family cap reads gross correctly. wy_ccap_copay.py caps at
    family_income_cap_rate * max_(wy_ccap_gross_income, 0) while the step lookup uses
    countable income — gross-vs-countable distinction coded correctly, floor prevents a
    negative cap on a self-employment loss.
  • Countable income, activity test, POWER exclusion, reference format, defined_for
    gating, changelog, programs.yaml
    — all verified against the rules or repo conventions.
  • Test coverage is thorough: nearly every formula branch has a would-fail-if-broken test
    (income tiers, all six copay steps, rate lookup across all age bands/providers, eligibility
    gates, per-child assembly, negative-earnings floors, division-by-zero guards).

Critical (must fix)

None.

The test agent flagged wy_child_care_subsidies (the YEAR aggregator) as CRITICAL for
lacking a test that would catch a broken MONTH→YEAR summation. This is reclassified to
SHOULD-ADDRESS (S1).
Reason: the code agent confirmed wy_child_care_subsidies is a
declarative adds=["wy_ccap"] wrapper that matches the sd_child_care_subsidies peer
verbatim. The MONTH→YEAR roll-up is engine behavior, not a hand-written formula in this
PR that could break. There is no author-written summation logic to regress, so the gap is
one of test-hardening, not a code defect — it cannot be a code CRITICAL. Result: 0 true
criticals.
(The remedy is a test, tracked below as S1.)

Should address

  1. [S1 — test-hardening] wy_child_care_subsidies YEAR roll-up is not pinned by a
    distinguishing test.
    Integration Cases 1/2 assert the annual wrapper equal to a monthly
    wy_ccap where every month is identical, so a 12-month sum and a pass-through would both
    pass. Add a dedicated wy_child_care_subsidies.yaml with a period: 2026 case whose
    monthly wy_ccap varies across the year (e.g. enrollment or income change mid-year) so the
    annual total ≠ any single month, confirming the roll-up. Downgraded from CRITICAL per the
    reasoning above — declarative wrapper, engine roll-up, no formula to regress.
    Files: tests/policy/baseline/gov/states/wy/dfs/ccap/ (new file).

  2. [S2 — regulatory/code] Foster/protective income & copay waiver applied unit-wide (author-flagged
    over-inclusion).
    wy_ccap_income_eligible.py:3328-3331 and wy_ccap_copay.py:3122-3126
    both use spm_unit.any(is_in_foster_care | receives_or_needs_protective_services). Rule
    §8(e)(iv)(C) ties the exclusion to the foster child, not the whole unit, so a non-foster
    sibling also gets the income test waived and the family copay zeroed. Low frequency (mixed
    foster/non-foster units are uncommon) and the author documents it, but the copay effect
    over-subsidizes non-foster siblings. Recommend documenting as a known simplification or, if
    feasible, gating the waiver to the foster child's own copay share. (The two flags reading at
    different periods — is_in_foster_care MONTH vs receives_or_needs_protective_services YEAR
    — is correct, not a bug.)

  3. [S3 — regulatory] Special-needs age extension: rule says "over 13," code caps at "< 18."
    special_needs_child_age_limit = 18; wy_ccap_eligible_child.py:3258-3259. §8(e)(i)(A)
    places no explicit upper bound on the special-needs branch; the 18 comes from the CCDF State
    Plan, not Ch. 1. Defensible as a floor-of-the-cap proxy but narrower than the rule. Confirm 18
    (vs 19, the CCDBG special-needs ceiling) is intended and that the citation reflects the Plan.

  4. [S4 — regulatory, documented modeling choice] Copay uses the DFS Table I daily chart, not
    the statutory hourly formula.
    W.S. 42-2-103(f)(i) defines an hourly per-child copay
    (band-midpoint income × rate ÷ 2,340 hours, rounded to $0.05); the code uses the DFS-published
    daily Table I chart. The author explicitly documents that the statutory hourly formula does
    not reconcile with the published chart and that the chart is the operative schedule — and
    the chart's FPG band edges match the statute exactly. Assessed as a sound, disclosed modeling
    choice
    , not a regulatory error. Noted so the reviewer signs off on the divergence.
    wy_ccap_copay.py; copay/full_day.yaml, part_day.yaml.

  5. [S5 — sourcing] 7% family cap sourced only to CCDF State Plan §3.1.1, not independently
    fetched.
    copay/family_income_cap_rate.yaml = 0.07. The value is not in the reachable rules
    PDF; the rules confirm only that the copay is set by the State Plan / W.S. 42-2-103(f). Not
    contradicted, but not independently source-verified in this pass. Fetch the State Plan to
    confirm 0.07, or note it as structural-only.

  6. [S6 — citation hygiene] Copay Plan-section citations are inconsistent across files.
    wy_ccap_copay.py cites "§§3.1.1, 3.3.1"; copay/family_income_cap_rate.yaml cites
    "§§3.1.1, 3.2.1" for the same 7% cap; the income-waiver comment cites §3.3.1.vi. Align:
    7% cap = §3.1.1; ≤100%-FPL foster/protective deeming = §3.3.1. A reference-validator should
    confirm exact Plan section numbers.

  7. [S7 — code confirmation] childcare_attending_days_per_month read with period.this_year.
    wy_ccap_copay.py:3111, wy_ccap.py:3468, wy_ccap_daily_benefit.py:3538 read this count
    with period.this_year (no ÷12), treating it as a monthly quantity inside a MONTH formula.
    Internally consistent and tests reconcile; flagged only to confirm the variable is genuinely
    defined as a monthly count (its name implies so), since copay, benefit, and daily benefit all
    depend on that assumption.

  8. [S8 — test HIGH] wy_ccap_provider_type default (CENTER) never exercised. Every
    max_rate case sets provider_type explicitly; a regression flipping the default wouldn't be
    caught. Drop the explicit provider_type in one center-rate case.

  9. [S9 — test HIGH] Copay 7%-cap with negative gross income untested. The max_(gross,0)
    guard is never the thing under test — wy_ccap Case 6 drives a large SE loss but lands at
    Step 1 (copay 0 regardless). Add a case with negative gross but a non-Step-1 copay if
    reachable, or note as defensively unreachable.

  10. [S10 — test HIGH] wy_ccap_day_length FULL_DAY default is dead/untested. With the
    default-0 childcare_hours_per_day, the formula returns PART_DAY, so the FULL_DAY
    default_value is never the observed output and is unpinned. Add a comment or targeted case
    so a future change to the hours default is caught.

  11. [S11 — test MEDIUM] Exact-FPG copay step boundaries (the +0.0001 shift) untested. Every
    copay/income case lands mid-band; none sits exactly on 100/125/150/175/200/225% FPG. A
    construction error in the offset (1.25 vs 1.2501) wouldn't be caught. Add one case per
    interior boundary at an exact FPG multiple asserting it stays in the lower step.

Suggestions

  1. [G1] wy_ccap_max_rate select has no default. wy_ccap_max_rate.py:3642 — every
    Enum member is covered so it can't fire, but default=0 would be defensive against a future
    fourth provider type.
  2. [G2] Parameter reference page numbers live in title: prose. Anchor with #page= where
    possible for consistency (the Google-Drive link already does).
  3. [G3] copay/full_day.yaml / part_day.yaml have dense 12-line comment blocks before
    metadata:.
    A one-line description plus a pointer to the variable docstring reads more
    cleanly. Cosmetic.
  4. [G4] Duplicate DFS landing-page reference URLs (same href three times, distinguished only
    by title: date range). Correct/intentional but a reader can't open the distinct charts.
    Cosmetic.
  5. [G5] wy_ccap_gross_income "gross" semantics documented only in the test header. A
    one-line class comment ("sources list, pre-deduction") would aid future readers.
  6. [G6 — test MEDIUM] Continued-limit lower boundary not paired (enrolled-passes side
    between 175–225% only shown mid-band).
  7. [G7 — test MEDIUM] Special-needs developmental-delay-only pathway tested at 17 but not at
    the 18 cutoff (symmetry gap).
  8. [G8 — test MEDIUM] LEGALLY_EXEMPT provider never run end-to-end through the
    min(rate,charge) → benefit chain (isolated in max_rate Case 5 only).
  9. [G9 — structural note] family_income_cap_rate and the parameter-tree placement are
    structurally correct; no orphaned parameters observed. No Mode-A structural pass performed.
  10. [G10] Reinvented-variable check PASSED — all 13 referenced framework variables
    (spm_unit_fpg, is_ccdf_immigration_eligible_child, is_ccdf_asset_eligible,
    is_tanf_enrolled, meets_ccdf_activity_test, etc.) are reused, not reinvented.

Caveats

  • Rate audit is a SAMPLE (~40 cells). Wyoming's Table I is small, so the sampled coverage is
    high (22/22 rate cells + 12/12 copay values + thresholds), but it is not an exhaustive
    cell-by-cell audit of every possible source value.
  • 7% family cap is structural-only. family_income_cap_rate = 0.07 was not independently
    source-verified — the CCDF State Plan was not fetched this pass. Not contradicted by the rules
    PDF, but not confirmed either.
  • Branch is 54 behind main → rebase before merge.
  • Note: the regulatory agent additionally flagged the is_ccdf_asset_eligible gate as a possible
    conflict with §8(e)(v) ("Resources shall not be considered"). Per the consolidation directive
    this is not scored as a true CRITICAL here; it is a documented modeling choice (federal CCDF
    $1M backstop) that the author should either drop to match §8(e)(v) or document as a deliberate
    non-Wyoming addition and remove the verbatim §8(e)(v) quote from the rationale. Folding into the
    should-address track as a documentation/confirmation item alongside S3.

Validation summary table

Dimension Result
CI 31/31 pass
Copay six-step values 12/12 MATCH
Copay FPG thresholds MATCH (Appendix A)
Max daily rates (sampled) 22/22 MATCH, 0 mismatch
Income limits (175% / 225% FPG) MATCH
$200 disregard / 5-hr full-day MATCH
Hard-coded values in formulas None (all parameterized)
Enum definitions / breakdown keys Correct
Entity/period chain vs SD peer Matches
7% cap reads gross Correct
Test coverage of formula branches Nearly complete (gaps → S1, S8–S11)
True criticals 0
Should-address 11
Suggestions 10

Review severity

APPROVE. With 0 true criticals, a sample-clean rate/copay audit (40 cells / 0 mismatch),
and the copay hourly-vs-daily divergence being an explicitly documented modeling choice
(the DFS Table I chart is the state's operative published schedule, its FPG bands match the
statute), the should-address items are test-hardening and confirmation/documentation, not
blocking defects. Approve with the S1–S11 items requested as follow-ups; rebase before merge.

Next steps

/fix-pr 9109

🤖 Generated by /review-program (Claude Code)

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 Wyoming Child Care Subsidy Program (CCAP)

2 participants