diff --git a/changelog.d/oh-nm-ccap-current-rule-references.fixed.md b/changelog.d/oh-nm-ccap-current-rule-references.fixed.md new file mode 100644 index 00000000000..c606d2e796c --- /dev/null +++ b/changelog.d/oh-nm-ccap-current-rule-references.fixed.md @@ -0,0 +1 @@ +Cite the current Ohio PFCC (OAC 5180:6-1-03) and New Mexico CCAP (8.9.3 NMAC) rules, apply New Mexico's age-19 special-supervision limit from the 2025-11-04 rule amendment, and classify New Mexico five-year-olds as school age from September 2026. diff --git a/policyengine_us/parameters/gov/states/nm/ececd/ccap/copay/waived.yaml b/policyengine_us/parameters/gov/states/nm/ececd/ccap/copay/waived.yaml index 105a46e3336..d04caedf591 100644 --- a/policyengine_us/parameters/gov/states/nm/ececd/ccap/copay/waived.yaml +++ b/policyengine_us/parameters/gov/states/nm/ececd/ccap/copay/waived.yaml @@ -4,12 +4,18 @@ description: New Mexico uses this indicator to determine whether child care assi # 2023-07-01: copay waiver expired -- copays reinstated for families above # 200% FPL (families at or below 200% FPL remained at $0); # 2025-11-01: Universal Child Care -- no copays for anyone. +# 8.9.3.13.E NMAC, as amended effective 2025-11-04, states that copayments are +# waived. The rule that replaced 8.9.3 NMAC on 2026-09-09 has the department +# pay copayments for families at or below 600% FPL, and requires copayments +# only after a fiscal trigger (8.9.3.12), on a schedule that starts no earlier +# than 2027-03-01 (8.9.3.14.D). # This flag is true only when copays are fully waived for every family (the # 2022-05-01 to 2023-06-30 and 2025-11-01-onward windows). In the interim # window it is false, but PolicyEngine still returns a $0 copay there because # the reinstated >200% FPL copay uses the annually published copay schedule -# (8.15.2.24) that is not encoded, and the pre-2022 copay formula (8.15.2.13.B) -# is likewise not modeled -- see nm_ccap_copay for the documented approximation. +# (8.9.3.24 NMAC; from 2023-08-01 the percent-of-income chart in 8.9.3.13.D) +# that is not encoded, and the pre-2022 copay formula (8.15.2.13.B) is +# likewise not modeled -- see nm_ccap_copay for the documented approximation. values: 2016-10-01: false 2022-05-01: true @@ -25,5 +31,11 @@ metadata: href: https://www.nmececd.org/wp-content/uploads/2024/09/CCA-Co-payments-waived_rev1l.pdf#page=1 - title: LFC Policy Brief, New Mexico Childcare Assistance Eligibility Changes (Dec 9 2025), p.2 (copay waiver expired 2023-07-01 for >200% FPL; no copays from 2025-11-01) href: https://www.nmlegis.gov/handouts/ALFC%20120825%20Item%208%20Policy%20Brief%20Child%20Care%20Update.pdf#page=2 - - title: 8.15.2.13.B NMAC + - title: 8.15.2.13.B NMAC (before 2022-11-01) href: https://www.srca.nm.gov/parts/title08/08.015.0002.html + - title: 8.9.3.13 and 8.9.3.24 NMAC (2022-11-01 to 2026-09-08) + href: https://www.srca.nm.gov/parts/title08/08.009.0003.html + - title: "8.9.3.13.A-E NMAC, as amended effective 2025-11-04 (copayments are waived) #page 12-13" + href: https://www.nmececd.org/wp-content/uploads/2025/11/8.9.3_integrated_FULL-TEXT.pdf#page=12 + - title: "8.9.3.12 and 8.9.3.14 NMAC (from 2026-09-09) #page 12-13" + href: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=12 diff --git a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/child_age_limit.yaml b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/child_age_limit.yaml index d923c826543..d8f515d83ae 100644 --- a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/child_age_limit.yaml +++ b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/child_age_limit.yaml @@ -7,5 +7,9 @@ metadata: period: year label: New Mexico CCAP child age limit reference: - - title: 8.15.2.11.F NMAC + - title: 8.15.2.11.F NMAC (before 2022-11-01) href: https://www.srca.nm.gov/parts/title08/08.015.0002.html + - title: 8.9.3.11.F NMAC (2022-11-01 to 2026-09-08) + href: https://www.srca.nm.gov/parts/title08/08.009.0003.html + - title: 8.9.3.10.F NMAC (from 2026-09-09) + href: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=10 diff --git a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/continuation.yaml b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/continuation.yaml index d4d5fd51760..642f4b69f7f 100644 --- a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/continuation.yaml +++ b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/continuation.yaml @@ -1,15 +1,20 @@ description: New Mexico limits continuing income eligibility to this percentage of the federal poverty guideline under the Child Care Assistance Program. -# Codified vs. operative layering. The NMAC rule (8.15.2.12) codifies a 250% FPG -# recertification/exit ceiling. Since May 1, 2022, however, ECECD has operated -# CCAP under broader expansion policies: the Legislative Finance Committee's -# December 2025 policy brief documents an operative continuation/exit ceiling of -# 425% FPG from May 1, 2022 (held at 425% through the July 1, 2023 copay-waiver -# expiration), and no income limit at all once Universal Child Care took effect -# November 1, 2025. We encode the operative ceilings (which is what actually -# determined continued eligibility) rather than the superseded codified 250%, -# and set the limit to infinity from 2025-11-01 (income_limit_in_effect also -# turns off then). Earlier operative expansions (200%/400% before May 2022) -# predate CCAP coverage in PolicyEngine and are not encoded. +# Codified vs. operative layering. The NMAC rule (8.15.2.12, then 8.9.3.12 from +# 2022-11-01) codifies a 250% FPG recertification/exit ceiling, or 425% for +# essential workers in priority four plus (8.9.3.9.G). Since May 1, 2022, +# however, ECECD has operated CCAP under broader expansion policies: the +# Legislative Finance Committee's December 2025 policy brief documents an +# operative continuation/exit ceiling of 425% FPG from May 1, 2022 (held at 425% +# through the July 1, 2023 copay-waiver expiration), and no income limit at all +# once Universal Child Care took effect November 1, 2025. The 2025-11-04 +# amendment removed the ceilings from 8.9.3.12 and added category four C with +# no income cap (8.9.3.9.H), and the rule that replaced 8.9.3 NMAC on +# 2026-09-09 sets no income limit. PolicyEngine follows the operative ceilings +# in the LFC brief (which is what actually determined continued eligibility) +# over the codified 250%, and sets the limit to infinity from 2025-11-01 +# (income_limit_in_effect also turns off then). Earlier operative expansions +# (200%/400% before May 2022) predate CCAP coverage in PolicyEngine and are not +# encoded. values: 2016-10-01: 2.5 2022-05-01: 4.25 @@ -20,8 +25,14 @@ metadata: period: year label: New Mexico CCAP continuing income limit reference: - - title: 8.15.2.12 NMAC (codified 250% continuation ceiling) + - title: 8.15.2.12 NMAC (codified 250% continuation ceiling, before 2022-11-01) href: https://www.srca.nm.gov/parts/title08/08.015.0002.html + - title: 8.9.3.9.F-G and 8.9.3.12 NMAC (codified 250% and essential-worker 425% continuation ceilings, 2022-11-01 to 2025-11-03) + href: https://www.srca.nm.gov/parts/title08/08.009.0003.html + - title: "8.9.3.9.H and 8.9.3.12 NMAC, as amended effective 2025-11-04 (no income cap) #page 6,12" + href: https://www.nmececd.org/wp-content/uploads/2025/11/8.9.3_integrated_FULL-TEXT.pdf#page=6 + - title: "8.9.3.10.C and 8.9.3.12-13 NMAC (from 2026-09-09; no income limit, income sets waitlist priority only) #page 9,12" + href: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=9 - title: LFC Policy Brief, New Mexico Childcare Assistance Eligibility Changes (Dec 9 2025), p.2 (operative 425% from 2022-05-01; no income limit from 2025-11-01) href: https://www.nmlegis.gov/handouts/ALFC%20120825%20Item%208%20Policy%20Brief%20Child%20Care%20Update.pdf#page=2 - title: ECECD Universal Child Care (no income limit from 2025-11-01) diff --git a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/initial.yaml b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/initial.yaml index 6b07567f87f..2685e822de4 100644 --- a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/initial.yaml +++ b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/initial.yaml @@ -1,16 +1,20 @@ description: New Mexico limits initial income eligibility to this percentage of the federal poverty guideline under the Child Care Assistance Program. -# Codified vs. operative layering. The NMAC rule (8.15.2.9) codifies a 200% FPG -# initial-certification ceiling. Since May 1, 2022, however, ECECD has operated -# CCAP under successively broader emergency/expansion policies: the Legislative -# Finance Committee's December 2025 policy brief documents an operative initial -# ceiling of 400% FPG from May 1, 2022 (held at 400% through the July 1, 2023 -# copay-waiver expiration), and no income limit at all once Universal Child Care -# took effect November 1, 2025. We encode the operative ceilings (which is what -# actually determined eligibility) rather than the superseded codified 200%, and -# set the limit to infinity from 2025-11-01 (income_limit_in_effect also turns -# off then, short-circuiting the income test). Earlier operative expansions -# (150%/350% before May 2022) predate CCAP coverage in PolicyEngine and are not -# encoded. +# Codified vs. operative layering. The NMAC rule (8.15.2.9.F, then 8.9.3.9.F +# from 2022-11-01) codifies a 200% FPG initial-certification ceiling, or 400% +# for essential workers in priority four plus (Subsection G). Since May 1, +# 2022, however, ECECD has operated CCAP under successively broader +# emergency/expansion policies: the Legislative Finance Committee's December +# 2025 policy brief documents an operative initial ceiling of 400% FPG from May +# 1, 2022 (held at 400% through the July 1, 2023 copay-waiver expiration), and +# no income limit at all once Universal Child Care took effect November 1, +# 2025. The 2025-11-04 amendment added category four C with no income cap +# (8.9.3.9.H), and the rule that replaced 8.9.3 NMAC on 2026-09-09 sets no +# income limit. PolicyEngine follows the operative ceilings in the LFC brief +# (which is what actually determined eligibility) over the codified 200%, and +# sets the limit to infinity from 2025-11-01 (income_limit_in_effect also +# turns off then, short-circuiting the income test). Earlier operative +# expansions (150%/350% before May 2022) predate CCAP coverage in PolicyEngine +# and are not encoded. values: 2016-10-01: 2 2022-05-01: 4 @@ -21,8 +25,14 @@ metadata: period: year label: New Mexico CCAP initial income limit reference: - - title: 8.15.2.9 NMAC (codified 200% initial ceiling) + - title: 8.15.2.9 NMAC (codified 200% initial ceiling, before 2022-11-01) href: https://www.srca.nm.gov/parts/title08/08.015.0002.html + - title: 8.9.3.9.F-G NMAC (codified 200% and essential-worker 400% initial ceilings, 2022-11-01 to 2025-11-03) + href: https://www.srca.nm.gov/parts/title08/08.009.0003.html + - title: 8.9.3.9.H NMAC, as amended effective 2025-11-04 (category four C has no income cap) + href: https://www.nmececd.org/wp-content/uploads/2025/11/8.9.3_integrated_FULL-TEXT.pdf#page=6 + - title: "8.9.3.10.C and 8.9.3.12-13 NMAC (from 2026-09-09; no income limit, income sets waitlist priority only) #page 9,12" + href: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=9 - title: LFC Policy Brief, New Mexico Childcare Assistance Eligibility Changes (Dec 9 2025), p.2 (operative 400% from 2022-05-01; no income limit from 2025-11-01) href: https://www.nmlegis.gov/handouts/ALFC%20120825%20Item%208%20Policy%20Brief%20Child%20Care%20Update.pdf#page=2 - title: ECECD Universal Child Care (no income limit from 2025-11-01) diff --git a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/immigration_test_in_effect.yaml b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/immigration_test_in_effect.yaml index e9fc67b3fc6..00345ac668b 100644 --- a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/immigration_test_in_effect.yaml +++ b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/immigration_test_in_effect.yaml @@ -3,7 +3,8 @@ description: New Mexico uses this indicator to determine whether a child citizen # effective November 1, 2025) removes the child-level citizenship/immigration # test; a participating New Mexico child without a federally eligible status is # served with state funds, so status only sets the funding source, not -# eligibility. +# eligibility. The 2025-11-04 amendment of 8.9.3.11.E NMAC adopts this rule, +# and 8.9.3.10.E NMAC keeps it from 2026-09-09. values: 2016-10-01: true 2025-11-01: false @@ -13,7 +14,13 @@ metadata: period: month label: New Mexico CCAP immigration test in effect reference: - - title: 8.15.2.11.E NMAC + - title: 8.15.2.11.E NMAC (before 2022-11-01) href: https://www.srca.nm.gov/parts/title08/08.015.0002.html + - title: 8.9.3.11.E NMAC (2022-11-01 to 2025-11-03) + href: https://www.srca.nm.gov/parts/title08/08.009.0003.html + - title: 8.9.3.11.E NMAC, as amended effective 2025-11-04 (citizenship status does not affect eligibility) + href: https://www.nmececd.org/wp-content/uploads/2025/11/8.9.3_integrated_FULL-TEXT.pdf#page=11 + - title: 8.9.3.10.E NMAC (from 2026-09-09) + href: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=10 - title: ECECD Universal Child Care href: https://www.nmececd.org/universal/ diff --git a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/income_limit_in_effect.yaml b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/income_limit_in_effect.yaml index 436310514ac..8ddba71db86 100644 --- a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/income_limit_in_effect.yaml +++ b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/income_limit_in_effect.yaml @@ -2,6 +2,9 @@ description: New Mexico uses this indicator to determine whether an income limit # New Mexico's Universal Child Care initiative (a state ECECD program, the # first in the nation; effective November 1, 2025) removes all income limits; # New Mexico families are eligible regardless of income from that date forward. +# The 2025-11-04 amendment added category four C with no income cap +# (8.9.3.9.H NMAC), and the rule that replaced 8.9.3 NMAC on 2026-09-09 sets +# no income limit. values: 2016-10-01: true 2025-11-01: false @@ -11,7 +14,13 @@ metadata: period: month label: New Mexico CCAP income limit in effect reference: - - title: 8.15.2.9 NMAC + - title: 8.15.2.9 NMAC (before 2022-11-01) href: https://www.srca.nm.gov/parts/title08/08.015.0002.html + - title: 8.9.3.9 NMAC (2022-11-01 to 2025-11-03) + href: https://www.srca.nm.gov/parts/title08/08.009.0003.html + - title: 8.9.3.9.H NMAC, as amended effective 2025-11-04 (category four C has no income cap) + href: https://www.nmececd.org/wp-content/uploads/2025/11/8.9.3_integrated_FULL-TEXT.pdf#page=6 + - title: "8.9.3.10.C and 8.9.3.12-13 NMAC (from 2026-09-09; no income limit, income sets waitlist priority only) #page 9,12" + href: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=9 - title: ECECD Universal Child Care href: https://www.nmececd.org/universal/ diff --git a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/special_needs_child_age_limit.yaml b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/special_needs_child_age_limit.yaml index a94a0a3be34..d7c1330fc3c 100644 --- a/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/special_needs_child_age_limit.yaml +++ b/policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/special_needs_child_age_limit.yaml @@ -1,22 +1,31 @@ description: New Mexico limits child care assistance for children with special supervision needs to those under this age under the Child Care Assistance Program. values: - # "Between the ages of 13 and 18" (8.9.3.11.G) and the Parents' Guide's "up - # to 18 years of age" are read as under 18, so an 18-year-old is excluded. + # "Between the ages of 13 and 18" (8.15.2.11.G, then 8.9.3.11.G) and the + # Parents' Guide's "up to 18 years of age" are read as under 18, so an + # 18-year-old is excluded. 2016-10-01: 18 - # 2026 Laws, Ch. 63 (SB 241) is effective May 20, 2026. Monthly periods - # resolve parameters at the first of the month, so the monthly model first - # applies the age-19 limit for June 2026; May 2026 still uses 18. - 2026-05-20: 19 + # The amendment of 8.9.3.11.G effective 2025-11-04 changed the range to + # "between the ages of 13 and 19", read the same way as under 19. + # 8.9.3.10.G keeps it from 2026-09-09, and 2026 Laws, Ch. 63 (SB 241), + # Section 4(B), sets the same under-19 limit in statute from May 20, 2026. + # Monthly periods resolve parameters at the first of the month, so the + # monthly model first applies the age-19 limit for December 2025; November + # 2025 still uses 18. + 2025-11-04: 19 metadata: unit: year period: year label: New Mexico CCAP special needs or court-supervised child age limit reference: - - title: 8.15.2.11.G NMAC (in effect 10/1/2016 to 10/31/2022) + - title: 8.15.2.11.G NMAC (before 2022-11-01) href: https://www.srca.nm.gov/parts/title08/08.015.0002.html - - title: 8.9.3.11.G NMAC (successor to 8.15.2.11.G) + - title: 8.9.3.11.G NMAC (2022-11-01 to 2025-11-03) href: https://www.srca.nm.gov/parts/title08/08.009.0003.html + - title: 8.9.3.11.G NMAC, as amended effective 2025-11-04, ages 13 to 19 + href: https://www.nmececd.org/wp-content/uploads/2025/11/8.9.3_integrated_FULL-TEXT.pdf#page=11 + - title: 8.9.3.10.G NMAC (from 2026-09-09), ages 13 to 19 + href: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=10 - title: ECECD Parents' Guide to Selecting Quality Child Care, ages served href: https://www.nmececd.org/wp-content/uploads/2024/12/Parents-Guide-to-Child-Care_English.pdf#page=5 - title: 2026 New Mexico Laws, Chapter 63 (SB 241), Section 4(B), under age nineteen if under court supervision diff --git a/policyengine_us/parameters/gov/states/nm/ececd/ccap/rates/age_group/months.yaml b/policyengine_us/parameters/gov/states/nm/ececd/ccap/rates/age_group/months.yaml index 89e4e619f0b..5b9056e8a5c 100644 --- a/policyengine_us/parameters/gov/states/nm/ececd/ccap/rates/age_group/months.yaml +++ b/policyengine_us/parameters/gov/states/nm/ececd/ccap/rates/age_group/months.yaml @@ -3,6 +3,18 @@ description: New Mexico assigns children to these reimbursement age categories b # 0 = INFANT (0-23 months), 1 = TODDLER (24-35 months), # 2 = PRESCHOOL (three to five year olds, 36-71 months), # 3 = SCHOOL_AGE (six year olds and older, 72+ months). +# The rule that replaced 8.9.3 NMAC makes a child school age once the child is +# five years old by September 1 of the school year (8.9.3.7(I)(3)). +# 8.9.3.19(D) dates the move of preschool children to school age September 1, +# 2026, but the rule took effect on its publication on 2026-09-09 (8.9.3.5 +# NMAC; NMSA 14-4-5: no rule is valid or enforceable until it is published in +# the New Mexico Register). The new threshold therefore starts 2026-09-09, and +# the monthly model first applies it in October 2026. From then PRESCHOOL is +# 36-59 months and SCHOOL_AGE is 60+ months. +# Age in whole years only approximates the September 1 cutoff: every child of +# age five is school age, although a child who turns five after September 1 +# stays preschool for that school year (8.9.3.7(I)(3)(c), 8.9.3.19(D)). Late +# in the school year, that covers most five-year-olds. metadata: type: single_amount threshold_unit: month @@ -10,8 +22,12 @@ metadata: period: year label: New Mexico CCAP age group by months reference: - - title: 8.15.2.7(I)(2)(a)-(d) NMAC + - title: 8.15.2.7(I)(2)(a)-(d) NMAC (before 2022-11-01) href: https://www.srca.nm.gov/parts/title08/08.015.0002.html + - title: 8.9.3.7(I)(2)(a)-(d) NMAC (2022-11-01 to 2026-09-08) + href: https://www.srca.nm.gov/parts/title08/08.009.0003.html + - title: "8.9.3.7(I)(3)(a)-(d) and 8.9.3.19(D) NMAC (from 2026-09-09) #page 3,18" + href: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=3 brackets: - threshold: @@ -28,5 +44,6 @@ brackets: 2016-10-01: 2 - threshold: 2016-10-01: 72 + 2026-09-09: 60 amount: 2016-10-01: 3 diff --git a/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/earned_sources.yaml b/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/earned_sources.yaml index 12c7256a818..243b4aa3542 100644 --- a/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/earned_sources.yaml +++ b/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/earned_sources.yaml @@ -10,5 +10,7 @@ metadata: period: year label: Ohio PFCC earned income sources reference: - - title: OAC 5180:2-16-03(C),(D) — Income eligibility requirements (earned income) - href: https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf + - title: "OAC 5180:2-16-03(C),(D) — Income eligibility requirements (earned income) (effective 2022-02-27) #page 1-2" + href: https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf#page=1 + - title: "OAC 5180:6-1-03(C),(D) — Income eligibility requirements (earned income) (effective 2026-08-01) #page 1-2" + href: https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/6/1/5180$6-1-03_20260801.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/minor_age_limit.yaml b/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/minor_age_limit.yaml index 9cb1ad34902..b6925acc6b4 100644 --- a/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/minor_age_limit.yaml +++ b/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/minor_age_limit.yaml @@ -7,5 +7,7 @@ metadata: period: year label: Ohio PFCC minor age limit reference: - - title: OAC 5180:2-16-03(F)(1) - href: https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf + - title: OAC 5180:2-16-03(F)(1) (effective 2022-02-27) + href: https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf#page=4 + - title: OAC 5180:6-1-03(F)(1) (effective 2026-08-01) + href: https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/6/1/5180$6-1-03_20260801.pdf#page=3 diff --git a/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/net_loss_sources.yaml b/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/net_loss_sources.yaml index 8b265c069e7..4cae1eea59e 100644 --- a/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/net_loss_sources.yaml +++ b/policyengine_us/parameters/gov/states/oh/dcy/ccap/income/countable_income/net_loss_sources.yaml @@ -9,10 +9,13 @@ metadata: unit: list period: year label: Ohio PFCC net-loss income sources - # 5180:2-16-03(D)(1) defines gross self-employment earnings as the total - # profit from a business enterprise, and (D)(4)(a) excludes net losses from - # the allowable deductions, so a loss from these signed net-flow sources is - # floored at zero per person rather than offsetting other income. + # 5180:2-16-03(D)(1), now 5180:6-1-03(D)(1), defines gross self-employment + # earnings as the total profit from a business enterprise, and (D)(4)(a) + # excludes net losses from the allowable deductions, so a loss from these + # signed net-flow sources is floored at zero per person rather than + # offsetting other income. reference: - - title: OAC 5180:2-16-03(D) — Income eligibility requirements (self-employment income) - href: https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf + - title: OAC 5180:2-16-03(D) — Income eligibility requirements (self-employment income) (effective 2022-02-27) + href: https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf#page=2 + - title: OAC 5180:6-1-03(D) — Income eligibility requirements (self-employment income) (effective 2026-08-01) + href: https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/6/1/5180$6-1-03_20260801.pdf#page=2 diff --git a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/court_supervision.yaml b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/court_supervision.yaml index d0242bfe159..902e835a5af 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/court_supervision.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/court_supervision.yaml @@ -24,51 +24,54 @@ output: nm_ccap_eligible_child: false -# 2026 Laws, Chapter 63 (SB 241), section 4(B) extends eligibility to under -# age 19 for a child under court supervision or incapable of self-care, and -# section 5(G) exempts such a child through age 18 from the slot cap, -# effective May 20, 2026. Monthly periods resolve parameters at the first of -# the month, so the age-19 limit first applies in June 2026. -- name: Case 3, NM 2026-05 age 18, court True, medical-supervision proxy False. - period: 2026-05 +# The amendment of 8.9.3.11.G NMAC effective 2025-11-04 extends special +# supervision to children between the ages of 13 and 19 (under 19), and +# 8.9.3.10.G NMAC keeps it from 2026-09-09. 2026 Laws, Chapter 63 (SB 241), +# section 4(B) sets the same under-19 limit for a child under court +# supervision or incapable of self-care from May 20, 2026, and section 5(G) +# exempts such a child through age 18 from the slot cap. Monthly periods +# resolve parameters at the first of the month, so the age-19 limit first +# applies in December 2025. +- name: Case 3, NM 2025-11 age 18, court True, medical-supervision proxy False. + period: 2025-11 input: people: person1: age: - 2026: 18 + 2025: 18 is_under_court_supervision: - 2026: true + 2025: true has_developmental_delay: - 2026: false + 2025: false households: household: members: - person1 state_code: - 2026: NM + 2025: NM output: - # May 2026 still uses the age-18 limit: 18 < 18 is false. + # November 2025 still uses the age-18 limit: 18 < 18 is false. nm_ccap_eligible_child: false -- name: Case 4, NM 2026-06 age 18, court True, medical-supervision proxy False. - period: 2026-06 +- name: Case 4, NM 2025-12 age 18, court True, medical-supervision proxy False. + period: 2025-12 input: people: person1: age: - 2026: 18 + 2025: 18 is_under_court_supervision: - 2026: true + 2025: true has_developmental_delay: - 2026: false + 2025: false households: household: members: - person1 state_code: - 2026: NM + 2025: NM output: - # June 2026 uses the age-19 limit: 18 < 19. + # December 2025 uses the age-19 limit: 18 < 19. nm_ccap_eligible_child: true - name: Case 5, NM 2026-06 age 18, court False, medical-supervision proxy True. diff --git a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_activity_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_activity_eligible.yaml index 2d484e25823..0d172ff2b99 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_activity_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_activity_eligible.yaml @@ -1,8 +1,9 @@ -# NM CCAP activity eligibility (8.15.2.11.I, 8.15.2.7 NMAC): benefits are only -# for families working, attending school, or in job training. Every head/spouse -# caretaker must be working (any hours) or a full-time student. NM does not -# impose a minimum weekly-hours floor (unlike WV's 20-hour test) -- the -# regulation requires activity presence, not a threshold. +# NM CCAP activity eligibility (8.15.2.11.I, 8.15.2.7 NMAC; 8.9.3.11.H, 8.9.3.7 +# NMAC from 2022-11-01): benefits are only for families working, attending +# school, or in job training. Every head/spouse caretaker must be working (any +# hours) or a full-time student. NM does not impose a minimum weekly-hours +# floor (unlike WV's 20-hour test) -- the regulation requires activity +# presence, not a threshold. - name: Case 1, single working parent meets the activity test. period: 2025-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible_child.yaml b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible_child.yaml index d79af0f5363..331d173757e 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible_child.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible_child.yaml @@ -1,8 +1,10 @@ -# NM CCAP eligible child: age 6 weeks to under 13 (8.15.2.11.F NMAC), or -# with a developmental delay or under court supervision, under 18 through May -# 2026 (special-supervision extension, 8.9.3.11.G, formerly 8.15.2.11.G) and -# under 19 from June 2026 (2026 Laws, Ch. 63, section 4(B)), AND a US citizen -# or qualified immigrant before Universal Child Care (8.15.2.11.E, reusing +# NM CCAP eligible child: age 6 weeks to under 13 (8.15.2.11.F NMAC, then +# 8.9.3.11.F and, from 2026-09-09, 8.9.3.10.F), or with a developmental delay +# or under court supervision, under 18 through November 2025 +# (special-supervision extension, 8.9.3.11.G, formerly 8.15.2.11.G) and under +# 19 from December 2025 (8.9.3.11.G as amended 2025-11-04; 2026 Laws, Ch. 63, +# section 4(B) from May 20, 2026), AND a US citizen or qualified immigrant +# before Universal Child Care (8.15.2.11.E, then 8.9.3.11.E; reusing # is_ccdf_immigration_eligible_child). Court-supervision cases are in # ../court_supervision.yaml. @@ -79,7 +81,7 @@ output: nm_ccap_eligible_child: [false, true] -- name: Case 5, special needs child at exactly eighteen is ineligible before the June 2026 age-19 limit. +- name: Case 5, special needs child at exactly eighteen is ineligible before the December 2025 age-19 limit. period: 2025-01 input: people: @@ -87,8 +89,9 @@ age: 45 immigration_status: CITIZEN person2: - # Developmental delay, age 18 is NOT < 18 in 2025 -> ineligible. The - # age-19 limit that starts in June 2026 would make this child eligible. + # Developmental delay, age 18 is NOT < 18 in January 2025 -> + # ineligible. The age-19 limit that starts in December 2025 would make + # this child eligible. age: 18 has_developmental_delay: true immigration_status: CITIZEN @@ -119,8 +122,9 @@ # ============================================================ # Edge cases: age-limit boundaries. -# Regular limit is < 13 (8.15.2.11.F); the special-supervision -# extension raises it to < 18 (8.15.2.11.G) for children with a +# Regular limit is < 13 (8.15.2.11.F, then 8.9.3.11.F); the +# special-supervision extension raises it to < 18 (8.15.2.11.G, then +# 8.9.3.11.G until the 2025-11-04 amendment) for children with a # developmental delay. # ============================================================ @@ -204,8 +208,9 @@ # ============================================================ # Universal Child Care (from 2025-11-01) removes the child-level -# citizenship/qualified-immigrant test (8.15.2.11.E NMAC pre-UCC; -# ECECD Universal Child Care post-UCC). Before UCC the test bars +# citizenship/qualified-immigrant test (8.15.2.11.E, then 8.9.3.11.E NMAC +# pre-UCC; ECECD Universal Child Care and 8.9.3.11.E as amended 2025-11-04 +# post-UCC). Before UCC the test bars # non-qualified-immigrant children; after UCC they are eligible. # ============================================================ diff --git a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_income_eligible.yaml index c976b55dc56..f57d6427a0b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_income_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/eligibility/nm_ccap_income_eligible.yaml @@ -1,5 +1,6 @@ -# NM CCAP income eligibility (8.15.2.9, 8.15.2.12 NMAC; operative ceilings per -# the LFC Policy Brief, Dec 9 2025, p.2). +# NM CCAP income eligibility (8.15.2.9, 8.15.2.12 NMAC; 8.9.3.9, 8.9.3.12 NMAC +# from 2022-11-01; operative ceilings per the LFC Policy Brief, Dec 9 2025, +# p.2). # Dual threshold: initial applicants (nm_ccap_enrolled = false) capped at the # initial FPL ceiling; enrolled recipients (nm_ccap_enrolled = true) capped at # the higher continuation ceiling. The codified NMAC ceilings are 200% / 250%, diff --git a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_age_group.yaml b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_age_group.yaml index d1df7483a63..691a23da938 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_age_group.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_age_group.yaml @@ -1,9 +1,15 @@ -# NM CCAP age group classification by age in months (8.15.2.7 NMAC). +# NM CCAP age group classification by age in months (8.15.2.7 NMAC, then +# 8.9.3.7 NMAC from 2022-11-01). # Bracket boundaries (rates/age_group/months.yaml): # 0-23 months -> INFANT # 24-35 months -> TODDLER -# 36-71 months -> PRESCHOOL -# 72+ months -> SCHOOL_AGE +# 36-71 months -> PRESCHOOL (36-59 months from 2026-09-09) +# 72+ months -> SCHOOL_AGE (60+ months from 2026-09-09) +# The rule that replaced 8.9.3 NMAC on 2026-09-09 makes a child school age +# once the child is five by September 1 of the school year (8.9.3.7(I)(3)). +# 8.9.3.19(D) names September 1, 2026, but the rule took effect on its +# publication on 2026-09-09 (8.9.3.5 NMAC; NMSA 14-4-5), so the monthly model +# first applies the 60-month threshold in October 2026. - name: Case 1, six month old is an infant. period: 2025-01 @@ -88,3 +94,87 @@ state_code: NM output: nm_ccap_age_group: SCHOOL_AGE + +- name: Case 7, a five year old is preschool before September 2026. + period: 2026-08 + input: + people: + person1: + # 5.0 years = 60 months -> PRESCHOOL (below the 72-month threshold) + age: + 2026: 5.0 + households: + household: + members: [person1] + state_code: + 2026: NM + output: + nm_ccap_age_group: PRESCHOOL + +- name: Case 8, a five year old is still preschool in September 2026. + period: 2026-09 + input: + people: + person1: + # The rule took effect 2026-09-09, so September 2026 still uses the + # 72-month threshold: 60 months -> PRESCHOOL. + age: + 2026: 5.0 + households: + household: + members: [person1] + state_code: + 2026: NM + output: + nm_ccap_age_group: PRESCHOOL + +- name: Case 9, a five year old is school age from October 2026. + period: 2026-10 + input: + people: + person1: + # 5.0 years = 60 months -> SCHOOL_AGE (at the 60-month threshold) + age: + 2026: 5.0 + households: + household: + members: [person1] + state_code: + 2026: NM + output: + nm_ccap_age_group: SCHOOL_AGE + +- name: Case 10, fifty nine months is the top of preschool from October 2026. + period: 2026-10 + input: + people: + person1: + # 59/12 = 4.9167 years = 59 months -> PRESCHOOL (below 60 months) + age: + 2026: 4.9167 + households: + household: + members: [person1] + state_code: + 2026: NM + output: + nm_ccap_age_group: PRESCHOOL + +- name: Case 11, a five year old is school age late in the school year (approximation). + period: 2027-03 + input: + people: + person1: + # Approximation: whole-year age cannot show the September 1 cutoff. + # A child who turned five after 2026-09-01 stays preschool for the + # 2026-27 school year (8.9.3.7(I)(3)(c), 8.9.3.19(D)), but the model + # gives every five-year-old SCHOOL_AGE. + age: + 2027: 5.0 + households: + household: + members: [person1] + state_code: + 2027: NM + output: + nm_ccap_age_group: SCHOOL_AGE diff --git a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_copay.yaml b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_copay.yaml index 551f4d72270..ba55a80a174 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_copay.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_copay.yaml @@ -1,9 +1,12 @@ -# NM CCAP copayment (8.15.2.13 NMAC; ECECD Co-payments Waived flyer; LFC brief). +# NM CCAP copayment (8.15.2.13 NMAC, then 8.9.3.13 NMAC from 2022-11-01 and +# 8.9.3.12 and 8.9.3.14 NMAC from 2026-09-09; ECECD Co-payments Waived flyer; +# LFC brief). # The copay is $0 for every modeled period, but for different reasons across # eras (LFC Policy Brief, Dec 9 2025, p.2): # - 2022-05-01 to 2023-06-30 and 2025-11-01 onward: all copays waived -> $0; # - 2023-07-01 to 2025-10-31: copays reinstated only for families above 200% -# FPL, using an unencoded published schedule (8.15.2.24), APPROXIMATED as $0; +# FPL, using an unencoded published schedule (8.9.3.24; from 2023-08-01 +# the 8.9.3.13.D chart), APPROXIMATED as $0; # - before 2022-05-01: the pre-2022 copay formula (8.15.2.13.B) is not modeled -> $0. - name: Case 1, copay is zero during the 2023-07 partial reinstatement window. diff --git a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_countable_income.yaml index 2940c769fd7..1888c1d061d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_countable_income.yaml @@ -1,9 +1,10 @@ -# NM CCAP countable income (8.15.2.11.C NMAC). The counted sources are a -# positive list (sources.yaml); exempt sources (SNAP, TANF, SSI, SSDI, child -# support, etc.) are excluded by omission. 8.15.2.11.C(3) further excludes the -# earned and unearned income of legal dependents, so the formula counts only -# caretakers' (tax unit head/spouse) income. This is a MONTH variable that sums -# YEAR-defined income sources, so the monthly value is the annual sum / 12. +# NM CCAP countable income (8.15.2.11.C NMAC; 8.9.3.11.C from 2022-11-01 and +# 8.9.3.10.C from 2026-09-09, with the same paragraph numbers). The counted +# sources are a positive list (sources.yaml); exempt sources (SNAP, TANF, SSI, +# SSDI, child support, etc.) are excluded by omission. C(3) further excludes +# the earned and unearned income of legal dependents, so the formula counts +# only caretakers' (tax unit head/spouse) income. This is a MONTH variable that +# sums YEAR-defined income sources, so the monthly value is the annual sum / 12. - name: Case 1, counted earned and unearned income. period: 2025-01 @@ -75,7 +76,7 @@ person1: age: 40 employment_income: 12_000 # counted - social_security_disability: 18_000 # exempt SSDI (8.15.2.11.C(6)) + social_security_disability: 18_000 # exempt SSDI (C(6)) spm_units: spm_unit: members: [person1] @@ -110,6 +111,6 @@ state_code: NM output: # Only the caretaker's retirement counts: 12_000 / 12 = 1_000/month. - # Under 8.15.2.11.C(3), the dependent child's earnings and survivors + # Under C(3), the dependent child's earnings and survivors # benefit are both excluded from household income. nm_ccap_countable_income: 1_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_monthly_rate.yaml b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_monthly_rate.yaml index df48dab6f2d..30f811bc3cf 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_monthly_rate.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/nm_ccap_monthly_rate.yaml @@ -1,7 +1,8 @@ # NM CCAP monthly provider reimbursement rate lookup (rate flyer, effective -# August 2023; 8.15.2.13.C NMAC). Rate = provider type x FOCUS level x age -# group, scaled by the service-unit fraction (FT 100% / PT1 75% / PT2 50% / -# PT3 25%) and a non-traditional-hours supplement when applicable. +# August 2023; rate tables and units of service in 8.9.3.17 NMAC, formerly +# 8.15.2.17, and 8.9.3.19 NMAC from 2026-09-09). Rate = provider type x FOCUS +# level x age group, scaled by the service-unit fraction (FT 100% / PT1 75% / +# PT2 50% / PT3 25%) and a non-traditional-hours supplement when applicable. # # Every case below uses FULL_TIME care (childcare_hours_per_week >= 30, so the # service-unit fraction is 1.0) and zero non-traditional hours (no supplement), diff --git a/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/integration.yaml index c96cdf4a599..7f1bb481f36 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/integration.yaml @@ -275,8 +275,8 @@ # Edge cases. # Negative self-employment income floors at zero per person in countable -# income (5180:2-16-03(D)(4)(a)), so the family is income-eligible, owes no -# copay, and receives the full reimbursement. +# income (5180:2-16-03(D)(4)(a), now 5180:6-1-03(D)(4)(a)), so the family is +# income-eligible, owes no copay, and receives the full reimbursement. - name: Case 8, self-employment loss yields full subsidy with no negative copay. period: 2026-01 absolute_error_margin: 0.01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/oh_ccap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/oh_ccap_countable_income.yaml index 6e5056daa84..08919eb0fef 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/oh_ccap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/oh_ccap_countable_income.yaml @@ -1,10 +1,10 @@ # Tests for oh_ccap_countable_income (SPMUnit, MONTH). -# 5180:2-16-03: countable income is gross earned plus gross unearned income, -# minus the enumerated exclusions. SSI is excluded (omitted from the sources -# list), and the earned income of any person receiving SSI is also excluded -# (subtracted person-level, since a list omission cannot zero one earner's -# wages). Income variables are YEAR-defined (input annual, output monthly); -# ssi is MONTH-defined (input monthly). +# 5180:2-16-03, now 5180:6-1-03: countable income is gross earned plus gross +# unearned income, minus the enumerated exclusions. SSI is excluded (omitted +# from the sources list), and the earned income of any person receiving SSI +# is also excluded (subtracted person-level, since a list omission cannot +# zero one earner's wages). Income variables are YEAR-defined (input annual, +# output monthly); ssi is MONTH-defined (input monthly). - name: Case 1, earned plus unearned income with no SSI. period: 2026-01 input: @@ -91,10 +91,10 @@ output: oh_ccap_countable_income: 0 -# 5180:2-16-03(D)(1) counts self-employment as the total profit from a -# business enterprise and (D)(4)(a) disallows net losses, so a loss is floored -# at zero per person and per source instead of flowing through as negative -# countable income. +# 5180:2-16-03(D)(1), now 5180:6-1-03(D)(1), counts self-employment as the +# total profit from a business enterprise and (D)(4)(a) disallows net losses, +# so a loss is floored at zero per person and per source instead of flowing +# through as negative countable income. - name: Case 5, a self-employment loss floors at zero. period: 2026-01 input: diff --git a/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/oh_ccap_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/oh_ccap_income_eligible.yaml index 76bcb6a9170..6de9ab82f9d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/oh_ccap_income_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/oh/dcy/ccap/oh_ccap_income_eligible.yaml @@ -129,8 +129,9 @@ oh_ccap_income_eligible: false # 5180:6-1-02(B)(1) makes income eligibility purely FPL-based, and -# 5180:2-16-03(H)(3)(j) counts OWF cash assistance as unearned income, so -# TANF enrollment confers no categorical income eligibility. +# 5180:2-16-03(H)(3)(j), now 5180:6-1-03(H)(3)(j), counts OWF cash assistance +# as unearned income, so TANF enrollment confers no categorical income +# eligibility. - name: Case 6, TANF enrollment does not bypass the income test. period: 2026-01 input: diff --git a/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_activity_eligible.py b/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_activity_eligible.py index 5a7aba39371..f1c4c7f80ef 100644 --- a/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_activity_eligible.py +++ b/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_activity_eligible.py @@ -7,15 +7,24 @@ class nm_ccap_activity_eligible(Variable): label = "Eligible for New Mexico CCAP based on activity requirements" definition_period = MONTH defined_for = StateCode.NM - reference = "https://www.srca.nm.gov/parts/title08/08.015.0002.html" + reference = ( + "https://www.srca.nm.gov/parts/title08/08.015.0002.html", + "https://www.srca.nm.gov/parts/title08/08.009.0003.html", + # PDF pages 3, 5, 10-11 + "https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=3", + ) def formula(spm_unit, period, parameters): - # 8.15.2.11.I / 8.15.2.7: benefits are for families working, attending - # school, or in a job-training/educational program. 8.15.2.11.I - # requires the activity to be present (it does not set a minimum-hours - # floor), so we test for any work hours or full-time student status. - # Each head/spouse caretaker must independently meet the activity - # requirement. + # 8.15.2.11.I / 8.15.2.7 (8.9.3.11.H / 8.9.3.7 from 2022-11-01): + # benefits are for families working, attending school, or in a + # job-training/educational program. The rule requires the activity to + # be present (it does not set a minimum-hours floor), so we test for + # any work hours or full-time student status. Each head/spouse + # caretaker must independently meet the activity requirement. + # From 2026-09-09, 8.9.3.10.H also lists part-time study, TANF + # receipt, homelessness, foster parents, grandparents raising a + # grandchild and other statuses, which are modeled here only through + # meets_ccdf_activity_test. person = spm_unit.members is_head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) hours_worked = person("weekly_hours_worked", period.this_year) @@ -27,7 +36,7 @@ def formula(spm_unit, period, parameters): ) # Fallback for approved activities not modeled individually here -- job # training, job search, and temporary leave from work or school - # (8.15.2.7): set meets_ccdf_activity_test to flag the unit as meeting - # the activity requirement. + # (8.15.2.7, 8.9.3.7): set meets_ccdf_activity_test to flag the unit as + # meeting the activity requirement. meets_ccdf = spm_unit("meets_ccdf_activity_test", period.this_year) return (has_caretaker & no_ineligible_caretaker) | meets_ccdf diff --git a/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible.py b/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible.py index b7fefbfffdd..7a68006d87c 100644 --- a/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible.py +++ b/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible.py @@ -7,7 +7,12 @@ class nm_ccap_eligible(Variable): label = "Eligible for New Mexico CCAP" definition_period = MONTH defined_for = StateCode.NM - reference = "https://www.srca.nm.gov/parts/title08/08.015.0002.html" + reference = ( + "https://www.srca.nm.gov/parts/title08/08.015.0002.html", + "https://www.srca.nm.gov/parts/title08/08.009.0003.html", + # PDF pages 9-11 + "https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=9", + ) def formula(spm_unit, period, parameters): has_eligible_child = add(spm_unit, period, ["nm_ccap_eligible_child"]) > 0 diff --git a/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible_child.py b/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible_child.py index e9a486ad166..543a2257d24 100644 --- a/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible_child.py +++ b/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_eligible_child.py @@ -10,23 +10,27 @@ class nm_ccap_eligible_child(Variable): reference = ( "https://www.srca.nm.gov/parts/title08/08.015.0002.html", "https://www.srca.nm.gov/parts/title08/08.009.0003.html", + "https://www.nmececd.org/wp-content/uploads/2025/11/8.9.3_integrated_FULL-TEXT.pdf#page=11", + "https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=10", "https://www.law.cornell.edu/cfr/text/45/98.20", "https://www.nmlegis.gov/Sessions/26%20Regular/final/SB0241.pdf#page=7", "https://www.nmlegis.gov/Sessions/26%20Regular/final/SB0241.pdf#page=14", ) def formula(person, period, parameters): - # 8.15.2.11.F: eligible from 6 weeks old through the day before the + # 8.15.2.11.F (8.9.3.11.F from 2022-11-01; 8.9.3.10.F from + # 2026-09-09): eligible from 6 weeks old through the day before the # 13th birthday. The 6-week lower bound is not modeled because we don't # track sub-year age granularity at the moment (all children under 1 # read age == 0), so enforcing it would wrongly exclude every infant. - # 8.9.3.11.G (formerly 8.15.2.11.G) extends eligibility for children - # needing special supervision, including supervision by a court. - # 2026 Laws, Ch. 63, Section 4(B) extends eligibility to under age 19 - # for a child under court supervision or incapable of self-care, and - # Section 5(G) exempts such a child through age 18 from the slot cap, - # effective May 20, 2026 (applied from June 2026 in the monthly model, - # since the dated age parameter resolves at the first of the month). + # 8.9.3.11.G (formerly 8.15.2.11.G; 8.9.3.10.G from 2026-09-09) + # extends eligibility for children needing special supervision, + # including supervision by a court. Its amendment effective 2025-11-04 + # raised the upper age from 18 to 19 (applied from December 2025 in + # the monthly model, since the dated age parameter resolves at the + # first of the month). 2026 Laws, Ch. 63, Section 4(B) sets the same + # under-19 limit in statute from May 20, 2026, and Section 5(G) exempts + # such a child through age 18 from the slot cap. # has_developmental_delay proxies the medical-professional branch. p = parameters(period).gov.states.nm.ececd.ccap.eligibility age = person("age", period.this_year) @@ -37,11 +41,13 @@ def formula(person, period, parameters): age < p.special_needs_child_age_limit, age < p.child_age_limit, ) - # 8.15.2.11.E: before Universal Child Care, a child must be a citizen or - # qualified immigrant. Under Universal Child Care (from 2025-11-01) this - # bar is removed: a participating child without a federally eligible - # status is served with state funds, so status only sets the funding - # source, not eligibility (ECECD Universal Child Care). + # 8.15.2.11.E (8.9.3.11.E from 2022-11-01): before Universal Child + # Care, a child must be a citizen or qualified immigrant. Under + # Universal Child Care (from 2025-11-01; 8.9.3.11.E as amended + # 2025-11-04, then 8.9.3.10.E from 2026-09-09) this bar is removed: a + # participating child without a federally eligible status is served + # with state funds, so status only sets the funding source, not + # eligibility. if p.immigration_test_in_effect: immigration_eligible = person( "is_ccdf_immigration_eligible_child", period.this_year diff --git a/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_income_eligible.py b/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_income_eligible.py index f5f6c96fbfd..5c74a0ee2b7 100644 --- a/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_income_eligible.py +++ b/policyengine_us/variables/gov/states/nm/ececd/ccap/eligibility/nm_ccap_income_eligible.py @@ -9,6 +9,10 @@ class nm_ccap_income_eligible(Variable): defined_for = StateCode.NM reference = ( "https://www.srca.nm.gov/parts/title08/08.015.0002.html", + "https://www.srca.nm.gov/parts/title08/08.009.0003.html", + "https://www.nmececd.org/wp-content/uploads/2025/11/8.9.3_integrated_FULL-TEXT.pdf#page=6", + # PDF pages 9, 12 + "https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=9", "https://www.nmececd.org/universal/", ) @@ -16,10 +20,14 @@ def formula(spm_unit, period, parameters): p = parameters(period).gov.states.nm.ececd.ccap.eligibility # Universal Child Care removes the income limit from November 1, 2025: # families are income-eligible regardless of income from that date. + # The 2025-11-04 amendment added category four C with no income cap + # (8.9.3.9.H), and the rule that replaced 8.9.3 NMAC on 2026-09-09 sets + # no income limit. if not p.income_limit_in_effect: return True - # 8.15.2.9 / 8.15.2.12 codify an initial cap of 200% FPL and a - # continuation cap of 250% FPL, but ECECD has operated at broader + # 8.15.2.9 / 8.15.2.12 (8.9.3.9 / 8.9.3.12 from 2022-11-01) codify an + # initial cap of 200% FPL and a continuation cap of 250% FPL (400% / + # 425% for essential workers), but ECECD has operated at broader # ceilings since 2022-05-01 (400% initial / 425% continuation per the # LFC brief). fpl_limit.initial / .continuation carry those operative # values by date, so this formula uses whichever ceiling was in force. @@ -30,8 +38,9 @@ def formula(spm_unit, period, parameters): enrolled, p.fpl_limit.continuation, p.fpl_limit.initial ) fpl_eligible = countable_income <= income_limit - # 8.15.2.9 Priority 2: families transitioning off TANF need not meet - # the income test. is_tanf_enrolled is a bare input that breaks the - # CCAP <-> TANF circular dependency. + # 8.15.2.9.D Priority 2 (8.9.3.9.D from 2022-11-01): families + # transitioning off TANF need not meet the income test. + # is_tanf_enrolled is a bare input that breaks the CCAP <-> TANF + # circular dependency. is_tanf = spm_unit("is_tanf_enrolled", period) return is_tanf | fpl_eligible diff --git a/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap.py b/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap.py index c8b707d43aa..da58f518b75 100644 --- a/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap.py +++ b/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap.py @@ -10,15 +10,19 @@ class nm_ccap(Variable): defined_for = "nm_ccap_eligible" reference = ( "https://www.srca.nm.gov/parts/title08/08.015.0002.html", + "https://www.srca.nm.gov/parts/title08/08.009.0003.html", + # PDF pages 2, 13 + "https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=2", "https://www.nmececd.org/wp-content/uploads/2024/05/Cost-Model-Reimbursement-Rate-Flyer-English-and-Spanish-Revised-May-2024.pdf#page=2", ) def formula(spm_unit, period, parameters): - # 8.15.2.13.C: ECECD pays providers the lesser of the reimbursement - # rate and the provider's actual charge, less the family copayment. - # Following the standard PolicyEngine childcare pattern (see RI CCAP), - # the reimbursement is summed across eligible children and capped at - # the family's actual pre-subsidy expenses at the SPM-unit level. + # 8.15.2.7.C(5) (8.9.3.7.C(5) from 2022-11-01; 8.9.3.7.C(8) and + # 8.9.3.14.E from 2026-09-09): the department's payment to the provider + # is reduced by the family copayment. Following the standard + # PolicyEngine childcare pattern (see RI CCAP), the reimbursement is + # summed across eligible children and capped at the family's actual + # pre-subsidy expenses at the SPM-unit level. max_reimbursement = add(spm_unit, period, ["nm_ccap_monthly_rate"]) # spm_unit_pre_subsidy_childcare_expenses is annual; reading it with # the bare period auto-divides it to a monthly amount. diff --git a/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_age_group.py b/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_age_group.py index ef572cf20e7..b2920e0272a 100644 --- a/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_age_group.py +++ b/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_age_group.py @@ -16,7 +16,12 @@ class nm_ccap_age_group(Variable): definition_period = MONTH label = "New Mexico CCAP child age group" defined_for = StateCode.NM - reference = "https://www.srca.nm.gov/parts/title08/08.015.0002.html" + reference = ( + "https://www.srca.nm.gov/parts/title08/08.015.0002.html", + "https://www.srca.nm.gov/parts/title08/08.009.0003.html", + # PDF pages 3, 18 + "https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=3", + ) def formula(person, period, parameters): # age is a YEAR variable; convert to months to look up the age group. diff --git a/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_copay.py b/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_copay.py index 30a8af6dc6b..dfdf7e9f5a3 100644 --- a/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_copay.py +++ b/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_copay.py @@ -12,6 +12,10 @@ class nm_ccap_copay(Variable): "https://www.nmececd.org/wp-content/uploads/2024/09/CCA-Co-payments-waived_rev1l.pdf#page=1", "https://www.nmlegis.gov/handouts/ALFC%20120825%20Item%208%20Policy%20Brief%20Child%20Care%20Update.pdf#page=2", "https://www.srca.nm.gov/parts/title08/08.015.0002.html", + "https://www.srca.nm.gov/parts/title08/08.009.0003.html", + "https://www.nmececd.org/wp-content/uploads/2025/11/8.9.3_integrated_FULL-TEXT.pdf#page=13", + # PDF pages 12-13 + "https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=12", ) def formula(spm_unit, period, parameters): @@ -20,9 +24,13 @@ def formula(spm_unit, period, parameters): # across three eras (LFC Policy Brief, Dec 9 2025, p.2): # - copay.waived is true (2022-05-01 to 2023-06-30, and 2025-11-01 # onward under Universal Child Care): all copays waived -> $0. + # 8.9.3.13.E NMAC (amended 2025-11-04) states that copayments are + # waived; from 2026-09-09, 8.9.3.12 and 8.9.3.14 NMAC require + # copayments only after a fiscal trigger and not before 2027-03-01. # - copay.waived is false and period >= 2023-07-01: the copay was # reinstated only for families above 200% FPL, using the annually - # published copay schedule (8.15.2.24 NMAC) that is not encoded, so + # published copay schedule (8.9.3.24 NMAC; from 2023-08-01 the + # percent-of-income chart in 8.9.3.13.D) that is not encoded, so # that partial reinstatement is APPROXIMATED as $0 here. # - copay.waived is false and period < 2022-05-01: the pre-2022 copay # formula (8.15.2.13.B) is likewise not modeled -> $0. diff --git a/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_countable_income.py b/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_countable_income.py index cef70eba159..9ec918be31b 100644 --- a/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_countable_income.py +++ b/policyengine_us/variables/gov/states/nm/ececd/ccap/nm_ccap_countable_income.py @@ -8,15 +8,21 @@ class nm_ccap_countable_income(Variable): definition_period = MONTH unit = USD defined_for = StateCode.NM - reference = "https://www.srca.nm.gov/parts/title08/08.015.0002.html" + reference = ( + "https://www.srca.nm.gov/parts/title08/08.015.0002.html", + "https://www.srca.nm.gov/parts/title08/08.009.0003.html", + # PDF pages 9-10 + "https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=9", + ) def formula(spm_unit, period, parameters): p = parameters(period).gov.states.nm.ececd.ccap.income.countable_income - # 8.15.2.11.C(3): household income excludes the earned and unearned + # 8.15.2.11.C(3) (8.9.3.11.C(3) from 2022-11-01; 8.9.3.10.C(3) from + # 2026-09-09): household income excludes the earned and unearned # income of legal dependents and of grandparents who are not legal # guardians. Count only caretakers (tax unit head/spouse), so household # children's income is excluded. SSDI is omitted from the sources list, - # so it is exempt for everyone (8.15.2.11.C(6)). + # so it is exempt for everyone (Paragraph (6) of the same subsection). person = spm_unit.members is_caretaker = person("is_tax_unit_head_or_spouse", period.this_year) person_income = add(person, period, p.sources) diff --git a/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_countable_income.py b/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_countable_income.py index ba603faa46f..7773b7ba8f3 100644 --- a/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_countable_income.py +++ b/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_countable_income.py @@ -8,16 +8,19 @@ class oh_ccap_countable_income(Variable): definition_period = MONTH unit = USD defined_for = StateCode.OH - reference = "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf" + reference = ( + "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf", + "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/6/1/5180$6-1-03_20260801.pdf", + ) def formula(spm_unit, period, parameters): p = parameters(period).gov.states.oh.dcy.ccap.income sources = add(spm_unit, period, p.countable_income.sources) person = spm_unit.members - # 5180:2-16-03(D)(1) counts self-employment as the total profit from - # a business enterprise and (D)(4)(a) disallows net losses, so each - # member's loss from a signed net-flow source is added back rather - # than offsetting other income. + # 5180:2-16-03(D)(1), now 5180:6-1-03(D)(1), counts self-employment + # as the total profit from a business enterprise and (D)(4)(a) + # disallows net losses, so each member's loss from a signed net-flow + # source is added back rather than offsetting other income. loss_amounts = [ min_(person(source, period), 0) for source in p.countable_income.net_loss_sources diff --git a/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_eligible.py b/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_eligible.py index 19397a33439..e302a7ecbe2 100644 --- a/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_eligible.py +++ b/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_eligible.py @@ -10,6 +10,7 @@ class oh_ccap_eligible(Variable): reference = ( "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-01_20221211.pdf", "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf", + "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/6/1/5180$6-1-03_20260801.pdf", "https://codes.ohio.gov/ohio-administrative-code/rule-5180:6-1-02", "https://dam.assets.ohio.gov/image/upload/childrenandyouth.ohio.gov/For%20Partners/Rules%20and%20Resources/2025/PL_21.pdf#page=2", ) diff --git a/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_income_eligible.py b/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_income_eligible.py index dcb604c554a..023a0ffe554 100644 --- a/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_income_eligible.py +++ b/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_income_eligible.py @@ -10,6 +10,7 @@ class oh_ccap_income_eligible(Variable): reference = ( "https://dam.assets.ohio.gov/image/upload/childrenandyouth.ohio.gov/For%20Partners/Rules%20and%20Resources/2025/PL_21.pdf#page=2", "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf", + "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/6/1/5180$6-1-03_20260801.pdf", "https://codes.ohio.gov/ohio-administrative-code/rule-5180:6-1-02", ) diff --git a/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_owf_basic_assistance.py b/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_owf_basic_assistance.py index d2d4939d58c..56657273af7 100644 --- a/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_owf_basic_assistance.py +++ b/policyengine_us/variables/gov/states/oh/dcy/ccap/eligibility/oh_ccap_owf_basic_assistance.py @@ -8,10 +8,14 @@ class oh_ccap_owf_basic_assistance(Variable): definition_period = MONTH label = "Ohio Works First basic assistance for Ohio CCAP income" defined_for = StateCode.OH - reference = "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf" - # 5180:2-16-03(H)(3)(j) counts Ohio Works First cash assistance as - # unearned income. This is a bare input defaulting to zero: reading the - # computed OWF benefit would recreate the CCAP-TANF circular dependency - # through childcare_expenses, and OWF payment standards leave enrolled - # families well below the 145% intake standard and the 100%-FPG - # zero-copay band, so the default does not change modeled results. + reference = ( + "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/2/16/5180$2-16-03_20220227.pdf#page=5", + "https://codes.ohio.gov/assets/laws/administrative-code/authenticated/5180/6/1/5180$6-1-03_20260801.pdf#page=4", + ) + # 5180:2-16-03(H)(3)(j), now 5180:6-1-03(H)(3)(j), counts Ohio Works First + # cash assistance as unearned income. This is a bare input defaulting to + # zero: reading the computed OWF benefit would recreate the CCAP-TANF + # circular dependency through childcare_expenses, and OWF payment + # standards leave enrolled families well below the 145% intake standard + # and the 100%-FPG zero-copay band, so the default does not change + # modeled results. diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index ae2b8fcba55..2c0a249bc90 100644 --- a/source_conflicts/candidates.yaml +++ b/source_conflicts/candidates.yaml @@ -5050,20 +5050,62 @@ candidates: - kind: regulation citation: 8.15.2.9 NMAC and 8.15.2.12 NMAC url: https://www.srca.nm.gov/parts/title08/08.015.0002.html + - kind: regulation + citation: 8.9.3.9(F)-(G) NMAC and 8.9.3.12 NMAC (2022-11-01 to 2025-11-03) + url: https://www.srca.nm.gov/parts/title08/08.009.0003.html - kind: agency-practice citation: LFC Policy Brief, New Mexico Childcare Assistance Eligibility Changes (Dec 9 2025), p.2 url: https://www.nmlegis.gov/handouts/ALFC%20120825%20Item%208%20Policy%20Brief%20Child%20Care%20Update.pdf#page=2 readings: - statute: No statute supplied; the regulation provides 200% initial and 250% continuation ceilings. + statute: No statute supplied; the regulation (8.15.2 NMAC, then 8.9.3 NMAC from 2022-11-01) provides 200% initial + and 250% continuation ceilings, or 400% and 425% for essential workers in priority four plus, until the 2025-11-04 + amendment removed the caps. other: Practice uses 400%/425% from May 1, 2022 and no income limit from November 1, 2025. pe_us: follows: unknown code: - policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/continuation.yaml - policyengine_us/parameters/gov/states/nm/ececd/ccap/eligibility/fpl_limit/initial.yaml - prs: [] + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10417 state: unreviewed note: PE-US follows agency practice; establish authority for departure from the codified regulation. +- id: us-nm:ccap-school-age-start-date + program: child-care-assistance + years: + from: 2026 + to: 2026 + type: program + note: program year as the program defines it + question: Does the 2026 school-age category (a child five years old by September 1 of the school year) start on + September 1, 2026, the date 8.9.3.19(D) NMAC names, or on 2026-09-09, when the rule that replaced 8.9.3 NMAC was + published and took effect? + sources: + - kind: statute + citation: NMSA 14-4-5 (as quoted in the New Mexico Register) + url: https://www.srca.nm.gov/nmac-home/new-mexico-register/volume-xxxvi-issue-4/adopted-rules-issue-4/ + - kind: regulation + citation: 8.9.3.5 NMAC (rule effective 2026-09-09) + url: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=1 + - kind: regulation + citation: 8.9.3.7(I)(3) and 8.9.3.19(D) NMAC (rule effective 2026-09-09) + url: https://prod-rf-lambda.rtssaas.com/PublicFiles/d89c47bd0d70402dba89b03a22bda6d1/b0e207a9-a1a3-412d-9660-0a6e925f6f25/8.9.3.pdf#page=18 + readings: + statute: NMSA 14-4-5 makes no rule valid or enforceable until it is published in the New Mexico Register, and + 8.9.3.5 gives September 9, 2026 as the effective date, so the new category applies from 2026-09-09. + other: 8.9.3.19(D) says that a preschool child's placement category changes to school age "Effective September 1, + 2026". + example: A five-year-old in a 2-star licensed center at full time gets the $735 preschool rate for September 1-8, + 2026 on the statute reading and the $689 school-age rate on the 8.9.3.19(D) date. + pe_us: + follows: statute + code: + - policyengine_us/parameters/gov/states/nm/ececd/ccap/rates/age_group/months.yaml + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10417 + state: ruled + note: Monthly periods resolve parameters at the first of the month, so the 60-month threshold first applies in + October 2026. TheAxiomFoundation/rulespec-us#1956 lists the same choice as an open point. - id: us-nm:medical-care-credit-mixed-age-spouses program: income-tax years: