Skip to content

End OR ERDC and VT CCFAP child immigration tests per 2024 rule changes - #9359

Merged
hua7450 merged 3 commits into
mainfrom
or-vt-ccdf-immigration
Sep 1, 2026
Merged

End OR ERDC and VT CCFAP child immigration tests per 2024 rule changes#9359
hua7450 merged 3 commits into
mainfrom
or-vt-ccdf-immigration

Conversation

@hua7450

@hua7450 hua7450 commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Summary

Oregon and Vermont both ended their child care programs' child citizenship/qualified-immigrant requirement in 2024, serving federally ineligible children with state funds. The model applied is_ccdf_immigration_eligible_child unconditionally in both states, so it wrongly returned $0 for households with non-qualified children in periods on or after mid-2024.

Fixes #9358

Rule changes encoded

State Program Requirement ends Source
OR ERDC 2024-05-01 OAR 414-175-0021: "Until May 1, 2024, a child in a filing group must meet one of the following citizenship and noncitizen status requirements"; DELC: "regardless of their immigration status"
VT CCFAP 2024-06-30 (gone from 2024-07-01) DCF Act 76 updates: "Citizenship status of participating children will no longer be a factor for CCFAP eligibility"; DCF eligibility overview: "This requirement ends June 30"

Implementation

Follows the existing nm_ccap_eligible_child pattern for New Mexico's 2025-11-01 Universal Child Care change: a dated immigration_test_in_effect boolean parameter per state gates the is_ccdf_immigration_eligible_child call, so pre-2024 periods keep the test and historical results are unchanged. Monthly parameter resolution means the flip lands exactly on the May 2024 (OR) / July 2024 (VT) benefit months.

Test plan

  • New boundary tests: an undocumented 5-year-old flips ineligible→eligible across 2024-04→2024-05 (OR) and 2024-06→2024-07 (VT), plus current-law eligible cases in both states
  • Full OR ERDC + VT CCFAP suites pass locally (218 tests)
  • CI passes

🤖 Generated with Claude Code

https://claude.ai/code/session_011UW7tQydLfV769EbeAd6f7

Oregon (OAR 414-175-0021) sunset the child citizenship/noncitizen status
requirement on May 1, 2024, and Vermont ended CCFAP's participating-child
citizenship requirement on June 30, 2024 under the Act 76 rollout; both
states now serve federally ineligible children with state funds. Gate the
is_ccdf_immigration_eligible_child check behind dated
immigration_test_in_effect parameters (the NM CCAP pattern) so pre-2024
periods keep the test.

Fixes #9358

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UW7tQydLfV769EbeAd6f7
@codecov

codecov Bot commented Aug 31, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (3540ad3) to head (4d5f65e).
⚠️ Report is 9 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #9359   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            1         2    +1     
  Lines           17        33   +16     
=========================================
+ Hits            17        33   +16     
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
hua7450 marked this pull request as ready for review August 31, 2026 04:05
@hua7450
hua7450 requested a review from DTrim99 August 31, 2026 15:58
@DTrim99

DTrim99 commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

PR #9359 Review — OR ERDC + VT CCFAP: end the child immigration/citizenship eligibility test

Program review

This PR sunsets the child immigration/citizenship eligibility test for two child-care subsidy
programs, per 2024 rule changes:

  • Oregon ERDC (Employment Related Day Care) — test ends 2024-05-01.
  • Vermont CCFAP (Child Care Financial Assistance Program) — test ends 2024-07-01.

Each program gains a boolean parameter immigration_test_in_effect (unit: bool,
period: month) that is true while the citizenship/qualified-noncitizen test applies and
false from the first month it no longer applies. The consuming *_eligible_child formula
reads the parameter and drops only the immigration conjunct after the sunset:

  • OR or_erdc_eligible_child.py: age_eligible & immigration_eligibleage_eligible.
  • VT vt_ccfap_eligible_child.py: age_eligible & is_dependent & immigration_eligible
    age_eligible & is_dependent.

Both formulas continue to call the existing shared federal CCDF variable
is_ccdf_immigration_eligible_child (reused, not reinvented). The VT formula also refactors its
parameter handle from ...ccfap.age_threshold up to the ...ccfap root so it can read the
sibling immigration_test_in_effect — verified value-neutral (the age_threshold subtree is
byte-identical and no other consumer used the old handle).

Source documents

Source Jurisdiction Supports
OAR 414-175-0021 "Citizenship and Noncitizen Status" OR "Until May 1, 2024, a child … must meet one of the following citizenship and noncitizen status requirements" — anchors both 2023-07-01 (on) and 2024-05-01 (off)
DELC ERDC program page OR Secondary corroboration of post-2024 policy (eligible regardless of immigration status)
VT DCF, Act 76 and CCFAP updates (June 2024) blog VT Citizenship "will no longer be a factor," effective June 30, 2024
VT DCF, "More Vermont families qualify…" news VT "This requirement ends June 30"
33 V.S.A. § 3512(a)(6) (via Act 76, 2023) VT Durable statutory hook for the repeal — present in the sibling .py, absent from the parameter YAML
CCFAP Regulations PDF (Feb 2009) VT Durable source for the 2009-02-09 "on" start — present in the .py, absent from the parameter YAML

No PDF value mismatches — this is a logic/date PR, not a rate-table PR.

Branch status

The PR branch is 6 commits behind main. This is informational only and does not affect the
review; a merge/rebase with main before merge is advisable but is not a review finding.

Critical

None.

Should address

  1. VT parameter YAML relies only on secondary DCF blog/news citations. The
    vt/dcf/ccfap/immigration_test_in_effect.yaml reference: list cites only a DCF blog post
    and a DCF news page. These corroborate the change and the July 1, 2024 effective date but are
    not durable primary sources, and neither establishes the 2009 start date. The durable primary
    cites already exist in the sibling vt_ccfap_eligible_child.py: 33 V.S.A. § 3512(a)(6)
    (the repeal, enacted via Act 76 2023) and the Feb 2009 CCFAP Regulations PDF (which anchors
    2009-02-09: true). Recommend adding both to the parameter YAML's reference: list (retaining
    the DCF pages as plain-language corroboration). Reference-durability, non-blocking. (OR is clean
    — OAR 414-175-0021 is durable, primary, correctly cited, and quotes the exact sunset date.)

  2. Prefer a vectorized where() over the scalar if on the toggle parameter. Both formulas
    use if p.immigration_test_in_effect: to select the branch
    (or_erdc_eligible_child.py:35, vt_ccfap_eligible_child.py:24). This is correct — the
    parameter resolves to a scalar within a single computed period, both variables are
    definition_period = MONTH so each month picks the right branch, and this matches an
    established repo idiom (e.g. il_tanf_payment_level_for_grant_calculation.py). It is not a
    correctness bug. A fully vectorized form is the model's preferred style and removes any
    dependence on the parameter being a Python scalar:
    immigration_eligible = where(p.immigration_test_in_effect, person("is_ccdf_immigration_eligible_child", period.this_year), True)
    then return age_eligible & immigration_eligible (VT: & is_dependent). Style, non-blocking.

Suggestions

  1. VT date encoding — mirror the statute exactly. The statute/DCF phrase the change as
    effective June 30, 2024 (last day the test applied), so a day-exact encoding would be
    false: 2024-06-30. The PR uses false: 2024-07-01. Because these are period: month
    booleans evaluated at the month start, 2024-06-30 and 2024-07-01 produce identical
    monthly results (June 2024 reads true, July 2024 reads false under either). The current
    encoding is operationally correct; switching to 2024-06-30 would only make the YAML mirror
    the statutory date more literally, with no computed change. Cosmetic. (OR's 2024-05-01 is
    exactly right — "Until May 1" is exclusive and May 1 is a month boundary.)

  2. Parameter descriptions could use the standard naming pattern. Labels correctly spell out
    the state and abbreviate the program (Oregon ERDC, Vermont CCFAP) with no trailing period.
    The description sentences use a free-form verb ("applies … if this is true") rather than the
    standard closing … under the [Full Program Name] program. clause. Minor.

  3. Two optional regression cases would fully lock the post-sunset truth table (see Validation
    summary): a VT case proving a non-dependent undocumented child stays excluded after the
    toggle, and an OR case proving an over-age undocumented child stays excluded after the
    toggle. Both surviving gates are already exercised in isolation by pre-existing cases at other
    periods, so these are additive, not blocking.

Validation summary

Check Result Notes
Regulatory correctness PASS Both formulas drop only the immigration conjunct; OR keeps age eligibility, VT keeps age + is_dependent
OR effective date (2024-05-01) PASS "Until May 1" is exclusive; May 1 is the first untested day and a month boundary — exactly right
VT effective date (2024-07-01) PASS (operationally) Statute says June 30; month-start evaluation makes 2024-07-01 and 2024-06-30 identical — suggestion to mirror statute
Shared variable reuse PASS is_ccdf_immigration_eligible_child reused, not reinvented
VT .age_threshold.ccfap refactor PASS Value-neutral; age_threshold subtree byte-identical; no other consumers of old handle
Code pattern (Category 9 toggle) PASS Scalar if on scalar param is the established idiom; both vars MONTH-defined; dates aligned; no hard-coded dates
References — OR PASS OAR 414-175-0021 durable, primary, correctly cited
References — VT PASS w/ warning Corroborated; durable primary cites exist in .py but not the parameter YAML
Tests PASS Both toggles exercised on both sides at the exact boundary month (OR 2024-04/05, VT 2024-06/07)
Test coverage gaps 2 non-blocking No VT post-toggle non-dependent case; no OR post-toggle over-age case
Changelog PASS changelog.d/or-vt-ccdf-immigration.fixed.md (.fixed) present
CI PASS 33/33 green

Review severity: APPROVE

No critical issues. Both effective dates and the formula branching correctly reflect the 2024
OR/VT rule changes, no other eligibility condition is disturbed, the refactor is value-neutral,
and CI is green. The VT items are a reference-durability improvement and style/cosmetic
suggestions — none blocking.

Next steps

Run /fix-pr 9359 to apply the should-address items (VT durable citations; optional vectorized
where()) and, if desired, the suggestions (VT 2024-06-30 encoding, description naming, two
regression cases). Rebase on main (branch is 6 behind) before merge.

🤖 Generated with Claude Code /review-program

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix minor nits, then ready

hua7450 and others added 2 commits September 1, 2026 13:40
Replace the scalar if on immigration_test_in_effect with a vectorized
where() in both eligible-child formulas, lead the VT parameter references
with 33 V.S.A. § 3512(a)(6) and the 2009 CCFAP regulations, standardize
both parameter descriptions, and add post-sunset regression tests (OR
over-age child, VT non-dependent child).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UW7tQydLfV769EbeAd6f7
@hua7450
hua7450 merged commit 81dd4ff into main Sep 1, 2026
33 checks passed
@hua7450
hua7450 deleted the or-vt-ccdf-immigration branch September 1, 2026 22:38
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.

OR ERDC and VT CCFAP still apply the child immigration status test the states ended in 2024

2 participants