Repository navigation
Conversation
- Switch on the senior and disabled medically needy flags for AR, IA, IL, NJ and ND. - Add medicaid_medically_needy_income_limit, which applies a share of the poverty guideline (IL, MN, ND, NY, UT, WI) or of the SSI federal benefit rate (KS, WA) in place of a dollar limit; Washington applies its one-person limit to couples. - Update dollar limits in CT, DC, NH, RI and NY (2022), and asset limits in CA, IL and NY. Closes PolicyEngine#10357 Closes PolicyEngine#10358 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rences - Year-keyed cases pin every dated CT, DC, NH, RI, NY, MN, ND and WI income limit; cases sit exactly at the IL, ND, CA and NY limits, with CA one dollar over, CA 2024 without a limit, and couples at the NY, CA and IL couple asset limits. - NJ and CA cases use incomes above the optional ABD pathway. - Disabled adults in AR, IA, IL, ND and NJ are in a medically needy category. - Arkansas spend down in cents (108.33 / 216.66, DHS quick reference). - Fix NY GIS 22 MA/11 and RI 210-RICR-40-00-3 titles, the RI section, the KS F-8 page; cite 305 ILCS 5/5-2 and Welf. & Inst. Code 14005.62. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The PIL outside Chittenden County, the same for one and two people, each January 1 (HBEE 8.06(b), 29.14; DCF B17-26; DVHA charts 2020-2026). No 2019 PIL was found, so 2018's value stays in force through 2019. The higher Chittenden PIL is not modeled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
KFF 2018 and 2026 list no medically needy program for aged, blind or disabled people in these five states; the flags had been swapped with AR, IL, IA, NJ and ND. Their -inf limits meant no result changes. The NJ DMAHS fact sheet now 404s, so cite the 2026-05-14 Wayback copy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Iowa 441-75.8(7) and (5)"a", the NJ fact sheet (archived) and SPA KS-25-0019 page 7 for the $475 standard, alongside KFF. - HBEE 29.14 cited from file page 50. - Number the two category cases 3 and 4, after PR 10370's Cases 1-2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings in main's CI fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Program Review
PR #10374, "Update Medicaid medically needy limits and switch on AR, IA, IL, NJ and ND" (hua7450). Round 1, full review.
IDs: C = critical, SA = should address, G = suggestion.
Paths: VAR/ = policyengine_us/variables/gov/hhs/medicaid/eligibility/categories/medically_needy/, V = VAR/medicaid_medically_needy_income_limit.py, E = VAR/is_medically_needy_for_medicaid.py, MN/ = policyengine_us/parameters/gov/hhs/medicaid/eligibility/categories/medically_needy/, INC/ = MN/limit/income/, AST/ = MN/limit/assets/, CAT/ = MN/categories/, T/ = policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/categories/medically_needy/. Line numbers refer to the reviewed head. Every PDF link uses the file page number.
Source Documents
- Reviewed head SHA: 15059d9
- Mode: full
- Scope: 16 files, +1,424 / -53 against the merge base
4a1a3cdeb7. The analysis ran atc1b120a6ed; the only later commit mergesmainand changes none of the 16 files. Decisive probes and all fix runs were repeated at the head. - Federal: 42 CFR 435.811, 435.602, 435.831, 435.1007; KFF 2018 (Table 3) and 2026 (Appendix Table 4).
- New York: PDF GIS 22 MA/11 (pages 1-2); attachments of 22 MA/01, 23 MA/02, 24 MA/01, 25 MA/03 (image) and 26 MA/05 (page 2 each); PDF SPA NY-23-0001.
- North Dakota: 510-05-85-40 and its ML 3896 archive; PDF ML 3702 (page 6), ML 3776 (page 1, image), SPA ND-23-0034 (pages 2, 5; images), NDAC 75-02-02.1 (page 40).
- Illinois: WAG 25-03-02(2) (live, and Wayback 2023-06-08, 2024-07-15, 2025-05-15); 305 ILCS 5/5-2; PM 15-06-02-a, 15-06-02-c, 15-08-00, 07-02-01; 89 IAC 120.20.
- WI, DC, NJ: PDF WI Ops Memo 19-26 (Wayback, page 2, image), MEH 39.4.1; PDF 29 DCMR 901.1 (image), DHCF notice and fact sheet (page 2), SPA DC-22-0014 (pages 15-17); PDF NJ fact sheet (Wayback), N.J.A.C. 10:70-1.2 and 10:70-5.1.
- Other states: every other reference in the PR's files (74 links) was opened at its cited file page (SPA pages as images). A fix carries the links it adds.
- Repository:
policyengine_us/variables/gov/hhs/medicaid/eligibility/categories/medicaid_optional_senior_or_disabled_income_limit.py:46(Missourinp.ceil); #9561 and #9563. - Year: target 2026. Values checked 2018-2026.
Branch Status
- 8 commits ahead and 6 behind
main(8ea43422e6); basemain; MERGEABLE. CI at the head: 33 pass, 0 fail. - Merge after #10370, as the body says. Both PRs edit
Eon different lines, and the Python merges cleanly. At this head the test mixes units (SA1); after #10370 it uses the marital unit throughout. - #10370 has its own open critical item. PavelMakarchuk's review found that #10370 drops the parents' medical expenses from a child's spend-down (42 CFR 435.831(d)). This PR does not cause or fix it, and its limit (a child is a unit of one) stays right after #10370's fix, which must come first.
- Test-file conflicts with #10370. Two test files conflict at the end. Resolved as the body says, the medically needy folder passed 47 of 47. Renumber the new C1 and SA4 cases then.
- #10375 is stacked on this PR (its commits plus California's 2027 asset limits). Rebase it after this PR changes.
- Other overlaps. Draft #10394 (G3). #10240 also appends to
T/is_medically_needy_for_medicaid.yaml. #10378 merges after this PR. #10361 and #10386 change the optional ABD pathway, but the new tests setis_optional_senior_or_disabled_for_medicaid: false.
What the PR gets right
- All 10 flag changes are right, and after the PR the senior and disabled flags of all 51 jurisdictions match KFF 2026. The switch-offs change no result, because those limits were
-.inf. - All 112 dated values checked, in 17 states and DC, match their sources.
- The rate encodings follow the law, with exact dates: MN 80%, 81% and 100%; KS at the SSI rate from 2025-07-01; WA at the one-person rate for sizes 1 and 2; UT 100%; NY 138% from 2023. The updated KS medical-expenses case is right.
- The new variable has no hard-coded amounts, is vectorized, and sizes the unit by marital unit (42 CFR 435.602). The year-keyed tests pin every dated CT, DC, NH, RI and VT value.
- The body states its limits and merge steps clearly. No partner test is edited; the changelog fragment is correct.
Critical (Must Fix)
C1. Rate-based limits are not rounded to the whole-dollar monthly levels that NY, ND and IL publish.
- Where:
V:34-41. The rate branch returnsfpg_rate * unit_fpgwith no rounding. - Evidence: NY and ND round up to the next dollar, and IL drops the cents.
- NY (GIS attachments, page 2): 2025 $1,800 / $2,433 for 138% FPL of $1,799.75 / $2,432.25 (so not nearest-dollar); 2026 $1,836 / $2,489 for $1,835.40 / $2,488.60.
- ND (ML 3702 page 6; ML 3896): 2023 $1,009 for $1,008.45; April 2024 $1,130 for $1,129.50.
- IL (WAG 25-03-02(2)): $1,803 for two in 2026, for $1,803.33; 2023-2025 also drop the cents.
- WI keeps the cents (MEH 39.4.1, $1,803.33), so WI stays unrounded.
- A probe at the head flips eligibility at the published level. A NY senior at $22,032 in 2026 (12 × $1,836) is ineligible (model limit $22,024.80), as are NY at $21,600 in 2025 and ND at $13,560 in 2024. An IL couple at $21,640 in 2026 is eligible, above the published $21,636. The PR's tests pin the unrounded amounts (
T/medicaid_medically_needy_income_limit.yaml:173,:294,:337,:400). - Why C: missing rounding, with a probe that flips eligibility at a published standard. The body mentions the gap, but that does not override a clear published standard. The repo's whole-dollar ceiling (#9561) leaves this pathway out (#9563), but that choice predates rate-based limits, and Missouri's rate limit is already rounded up (
medicaid_optional_senior_or_disabled_income_limit.py:46). The band is under $1 a month. - Fix (ran at the head with the SA fixes; results in the Validation Summary).
New INC/rounds_up_monthly.yaml:
description: States round the monthly medically needy income limit up to the next whole dollar under the Medicaid program, if this is true.
metadata:
unit: bool
period: year
label: Medicaid medically needy income limit rounded up to a whole dollar
breakdown:
- state_code
reference:
- title: New York DOH GIS 26 MA/05, Attachment I, SSI-Related Medicaid Income Level $1,836 / $2,489 (138% FPL)
href: https://www.health.ny.gov/health_care/medicaid/publications/docs/gis/26ma05_att1.pdf#page=2
- title: New York DOH GIS 25 MA/03, Attachment I, SSI-Related Medicaid Income Level $1,800 / $2,433 (138% FPL)
href: https://www.health.ny.gov/health_care/medicaid/publications/docs/gis/25ma03_att1.pdf#page=2
- title: North Dakota Manual Letter 3702, medically needy income levels $1,009 / $1,364 (83% FPL)
href: https://www.nd.gov/dhs/policymanuals/51003/Content/ML/2023/ML%203702%20Federal%20Poverty%20Level%20Updates%2004-01-2023.pdf#page=6
- title: North Dakota Non-ACA Medicaid Manual 510-05-85-40 (archived, ML 3896), medically needy income level $1,130 (90% FPL)
href: https://www.nd.gov/dhs/policymanuals/51005/Archived%20Documents/2025/3896/510_05_85_40.htm
ND:
2018-01-01: true
NY:
2018-01-01: trueNew INC/rounds_down_monthly.yaml:
description: States round the monthly medically needy income limit down to a whole dollar under the Medicaid program, if this is true.
metadata:
unit: bool
period: year
label: Medicaid medically needy income limit rounded down to a whole dollar
breakdown:
- state_code
reference:
- title: Illinois DHS Workers' Action Guide WAG 25-03-02(2), AABD 100% FPL monthly income standards ($1,803 for two in 2026)
href: https://www.dhs.state.il.us/page.aspx?item=21741
IL:
# IDHS tables drop the cents for one and two people from 2023; KFF 2018 does not.
2018-01-01: false
2023-01-01: trueV, insert above line 34, then use fpg_limit in place of fpg_rate * unit_fpg at line 37:
fpg_limit = fpg_rate * unit_fpg
# Some states publish the monthly level in whole dollars. Fix the
# monthly amount at cent precision first, so floating-point noise
# cannot move an exact whole dollar (as in medicaid_income_level).
fpg_monthly = np.round(fpg_limit / MONTHS_IN_YEAR, 2)
fpg_limit = select(
[
p.rounds_up_monthly[state].astype(bool),
p.rounds_down_monthly[state].astype(bool),
],
[
np.ceil(fpg_monthly) * MONTHS_IN_YEAR,
np.floor(fpg_monthly) * MONTHS_IN_YEAR,
],
default=fpg_limit,
)The cent-precision step keeps ND 2026 (exactly $1,197.00) at $14,364.
In T/medicaid_medically_needy_income_limit.yaml, change four expectations (and comments): line 173 (Case 7) to [29_868, 29_868]; line 294 (Case 12) to [21_636, 21_636]; line 337 (Case 14) to [27_216, 27_216, 20_124]; line 400 (Case 16) to [16_368, 16_368, 12_108].
Append three cases to T/is_medically_needy_for_medicaid.yaml after the SA4 case. Case 18 is Case 17 named "New York senior one dollar a year above the published level does not qualify in 2026.", with ssi_countable_income: 22_033 and output false. All pass with the fix.
- name: Case 17, New York senior at the published 1,836 monthly level qualifies in 2026.
period: 2026
input:
age: 70
is_adult_for_medicaid: false
is_optional_senior_or_disabled_for_medicaid: false
is_ssi_recipient_for_medicaid: false
ssi_countable_income: 22_032
medicaid_medically_needy_medical_expenses: 0
ssi_countable_resources: 1_000
state_code: NY
output:
# GIS 26 MA/05: 1,836 x 12 = 22,032 (138% FPL is 1,835.40, rounded up).
is_medically_needy_for_medicaid: true
- name: Case 19, Illinois couple above the published 1,803 monthly level does not qualify in 2026.
period: 2026
input:
people:
person1: {age: 70, is_tax_unit_head: true, is_adult_for_medicaid: false, is_optional_senior_or_disabled_for_medicaid: false, is_ssi_recipient_for_medicaid: false, ssi_countable_income: 21_640, medicaid_medically_needy_medical_expenses: 0, ssi_countable_resources: 1_000}
person2: {age: 68, is_tax_unit_spouse: true, is_adult_for_medicaid: false, is_optional_senior_or_disabled_for_medicaid: false, is_ssi_recipient_for_medicaid: false, ssi_countable_income: 0, medicaid_medically_needy_medical_expenses: 0, ssi_countable_resources: 0}
marital_units:
marital_unit: {members: [person1, person2]}
tax_units:
tax_unit: {members: [person1, person2]}
households:
household: {members: [person1, person2], state_code: IL}
output:
# WAG 25-03-02(2): 1,803 x 12 = 21,636 (21,640 / 12 = 1,803.33, cents dropped).
is_medically_needy_for_medicaid: [false, false]Should Address
SA1. At this head, the test compares tax-unit income with a marital-unit limit.
- Where:
E:26-28(income and assets summed over the tax unit),E:31(asset limit bytax_unit_is_joint),E:33(income limit fromV, sized by marital unit atV:23). - Evidence: a NY 2026 married couple filing separately, each with $24,000 of countable income, is eligible at the head. Under either consistent unit it fails ($48,000 against $29,863.20; $24,000 against $22,024.80). The merge base and a tree merged with #10370 both give ineligible.
- Why SA: an entity mismatch that the declared dependency removes, so not critical; but nothing enforces the order on a MERGEABLE, green PR.
- Fix: retarget the base to #10370's branch (
medicaid-medically-needy-blind-unit), or hold the merge until #10370 lands and rebase.
SA2. DC limits for 2019-2022 stay at $652, against 29 DCMR 901.1.
- Where:
INC/individual.yaml:105-107andINC/couple.yaml:105-107. - Evidence: 29 DCMR 901.1 bases the levels on "50% of the respective amounts of the Federal poverty guidelines published each year", with one person at 95% of two (2003 table). The PR uses it for 2023-2026, and it reproduces KFF 2018's $652 and DHCF's 2023 and 2024 figures. But 2019-2022 stay at $652; in 2022 that is $72.77 a month low for one person and $110.92 for a couple.
- Why SA: the PR extends the DC series by a stated rule and leaves the rule unapplied for four years. Not critical: the 2018 line is unchanged context, and the body lists the gap.
- Fix (ran):
# INC/individual.yaml, DC, after 2018-01-01: 652
2019-01-01: 669.35
2020-01-01: 682.42
2021-01-01: 689.54
2022-01-01: 724.77
# INC/couple.yaml, DC, after 2018-01-01: 652
# NOTE: KFF 2018 reports DC's own $652 for couples; the 29 DCMR 901.1 method applies from 2019.
2019-01-01: 704.58
2020-01-01: 718.33
2021-01-01: 725.83
2022-01-01: 762.92Append to T/medicaid_medically_needy_income_limit.yaml (passes), and update the body's DC limitation line:
- name: Case 22, District of Columbia couple and individual limits from 2019 to 2022 follow 29 DCMR 901.1.
period: 2022
absolute_error_margin: 0.01
input:
people:
person1: {age: 70}
person2: {age: 68}
person3: {age: 74}
marital_units:
marital_unit1: {members: [person1, person2]}
marital_unit2: {members: [person3]}
tax_units:
tax_unit1: {members: [person1, person2]}
tax_unit2: {members: [person3]}
households:
household:
members: [person1, person2, person3]
state_code: {2019: DC, 2020: DC, 2021: DC, 2022: DC}
output:
# Couple: 50% of the two-person guideline / 12; individual: 95% of that.
medicaid_medically_needy_income_limit:
2019: [8_454.96, 8_454.96, 8_032.2]
2020: [8_619.96, 8_619.96, 8_189.04]
2021: [8_709.96, 8_709.96, 8_274.48]
2022: [9_155.04, 9_155.04, 8_697.24]SA3. The only source for Wisconsin's 2019-09-01 date is a dead link.
- Where:
INC/fpg_rate.yaml:43-44, which supportsINC/fpg_rate.yaml:62-64. - Evidence: the live Ops Memo 19-26 URL returns HTTP 404. The Wayback capture of 2025-10-31 returns the memo; page 2 gives 100 percent of the FPL "Effective September 1, 2019". The other WI references give no date.
- Why SA: the document exists and corroborates the value, so this is a broken link, not a missing source.
- Fix (ran; files load), at
INC/fpg_rate.yaml:44:
href: https://web.archive.org/web/20251031224345id_/https://www.dhs.wisconsin.gov/dms/memos/ops/dms-ops-2019-26.pdf#page=2SA4. The tests do not pin several values and dates that the PR adds or makes live, or the marital-unit rule.
- Where: AR, IA and NJ at lines 90-91, 119-120 and 154-155 of
INC/individual.yamlandINC/couple.yaml;INC/fpg_rate.yaml:53, 56;AST/individual.yaml:67-69andAST/couple.yaml:67-69;CAT/senior.yaml:55-56;V:21-23. - Evidence: each change passes all 41 cases: AR $108.33 back to $108 (this PR's own change); other AR, NJ and IA values; the ND 90% and MN 100% dates moved a year; the IL asset date and senior flag moved to 2025;
is_couplefromtax_unit_is_joint(every existing case has marital unit = tax unit). - Why SA: missing edge cases for variables that already have tests.
- Fix (ran: each case passes and fails on the change it targets). Values include C1; without it, Case 20's ND values are
12_101.4and13_554, and Case 21 is[29_863.2, 29_863.2, 22_024.8]. Append toT/medicaid_medically_needy_income_limit.yaml:
- name: Case 19, Arkansas, Iowa and New Jersey couple and individual dollar limits in 2026.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1: {age: 70}
person2: {age: 68}
person3: {age: 74}
person4: {age: 70}
person5: {age: 68}
person6: {age: 74}
person7: {age: 70}
person8: {age: 68}
person9: {age: 74}
marital_units:
marital_unit1: {members: [person1, person2]}
marital_unit2: {members: [person3]}
marital_unit3: {members: [person4, person5]}
marital_unit4: {members: [person6]}
marital_unit5: {members: [person7, person8]}
marital_unit6: {members: [person9]}
tax_units:
tax_unit1: {members: [person1, person2]}
tax_unit2: {members: [person3]}
tax_unit3: {members: [person4, person5]}
tax_unit4: {members: [person6]}
tax_unit5: {members: [person7, person8]}
tax_unit6: {members: [person9]}
households:
household1: {members: [person1, person2, person3], state_code: AR}
household2: {members: [person4, person5, person6], state_code: IA}
household3: {members: [person7, person8, person9], state_code: NJ}
output:
# AR: 216.66 / 108.33 x 12; IA: 483 / 483 x 12; NJ: 434 / 367 x 12.
medicaid_medically_needy_income_limit: [2_599.92, 2_599.92, 1_299.96, 5_796, 5_796, 5_796, 5_208, 5_208, 4_404]
- name: Case 20, North Dakota uses 90 percent of the poverty guideline from 2024 and Minnesota 100 percent from 2023.
period: 2024
absolute_error_margin: 0.01
input:
people:
person1: {age: 70}
person2: {age: 70}
marital_units:
marital_unit1: {members: [person1]}
marital_unit2: {members: [person2]}
tax_units:
tax_unit1: {members: [person1]}
tax_unit2: {members: [person2]}
households:
household1: {members: [person1], state_code: {2023: MN, 2024: MN}}
household2: {members: [person2], state_code: {2023: ND, 2024: ND}}
output:
# [MN, ND]. 2023: 100% and 83% of 14,580 (ND 1,008.45 rounds up to 1,009 a month).
# 2024: 100% and 90% of 15,060 (ND 1,129.50 rounds up to 1,130, ML 3896).
medicaid_medically_needy_income_limit:
2023: [14_580, 12_108]
2024: [15_060, 13_560]
- name: Case 21, aged parent claimed as a dependent on a married child's joint return uses the individual limit.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1: {age: 50, is_tax_unit_head: true}
person2: {age: 48, is_tax_unit_spouse: true}
person3: {age: 78, is_tax_unit_dependent: true}
marital_units:
marital_unit1: {members: [person1, person2]}
marital_unit2: {members: [person3]}
tax_units:
tax_unit: {members: [person1, person2, person3]}
households:
household: {members: [person1, person2, person3], state_code: NY}
output:
# 42 CFR 435.602: the unit is the individual or married couple, not the tax unit.
# person3 is unmarried: 1.38 x 15,960 / 12 = 1,835.40, rounded up to 1,836, x 12.
medicaid_medically_needy_income_limit: [29_868, 29_868, 22_032]Append to T/is_medically_needy_for_medicaid.yaml:
- name: Case 16, Illinois senior with assets at the 17,500 limit qualifies in 2024.
period: 2024
input:
age: 70
is_adult_for_medicaid: false
is_optional_senior_or_disabled_for_medicaid: false
is_ssi_recipient_for_medicaid: false
ssi_countable_income: 20_000
medicaid_medically_needy_medical_expenses: 6_000
ssi_countable_resources: 17_500
state_code: IL
output:
# Limit 15,060 (100% FPG, 2024). 20,000 - 6,000 = 14,000; assets 17,500 equal
# the limit from 2023-05-12, first read in 2024 (PM 07-02-01).
is_in_medicaid_medically_needy_category: true
is_medically_needy_for_medicaid: trueSA5. Four new parameter descriptions do not follow the one-sentence format.
- Where:
INC/fpg_rate.yaml:1andINC/ssi_rate.yaml:1(two sentences);INC/individual.yaml:1andINC/couple.yaml:1(end with formula mechanics). - Evidence: the repo's parameter rule asks for one sentence that ends "under the [program name] program".
- Why SA: formatting.
- Fix (ran; files load):
# INC/fpg_rate.yaml
description: States set the medically needy income limit at this share of the federal poverty guideline for a household of one or two under the Medicaid program.
# NOTE: States not listed, or with a share of zero, use the dollar limits in individual.yaml and couple.yaml.
# INC/ssi_rate.yaml: the same, with "the Supplemental Security Income federal benefit rate" in place of the guideline phrase.
# INC/individual.yaml (couple.yaml: "for a couple")
description: States limit monthly income for an individual to this amount under the Medicaid medically needy program.
# NOTE: From the date a state's fpg_rate or ssi_rate is positive, the formula uses that rate instead of this amount.Suggestions
G1. Minnesota and Utah rounding is not confirmed; correct the body's claim.
- Where: the body's Limitations ("MN, NY and ND round up");
INC/fpg_rate.yaml:50-53and:60-61. - Evidence: MN's DHS-3461A could not be retrieved, and UT's policy gives "100% of the Federal Poverty Level" with no table. Only KFF 2026 shows UT at $1,804 for two ($1,803.33 at 100%).
- Why G: inconclusive; no flip is proved for MN or UT.
- Fix: keep MN and UT unrounded (C1 lists only ND, NY and IL). Change the body line to "NY and ND round up; IL drops cents; WI keeps cents; MN and UT are not confirmed." Add a state to
rounds_up_monthly.yamlonly with a primary table.
G2. Cite the North Dakota documents that carry the 90% date.
- Where:
INC/fpg_rate.yaml:31-32(SPA ND-23-0034), which supportsINC/fpg_rate.yaml:56. - Evidence: SPA ND-23-0034 page 5 sets 90% for "AFDC-related medically needy groups" only. ML 3776 page 1 (effective January 1, 2024) makes ACA medically needy the same as Non-ACA at 90%, so ABD was 90% by then.
- Why G: the date is right and corroborated; this improves the trail.
- Fix (not run; both links resolve):
- title: North Dakota Manual Letter 3776, ACA Medically Needy (effective January 1, 2024)
href: https://www.nd.gov/dhs/policymanuals/51003/Content/ML/2023/ML%203776%20-ACA%20Med%20Needy.pdf#page=1
- title: North Dakota Non-ACA Medicaid Manual 510-05-85-40 (archived, ML 3896), 90% of poverty from April 1, 2024
href: https://www.nd.gov/dhs/policymanuals/51005/Archived%20Documents/2025/3896/510_05_85_40.htmG3. Name draft #10394 in the body, and agree on the North Dakota encoding.
- Where: the body's "Merge after #10370" paragraph.
- Evidence: #10394 edits the same four parameter files and adds ND dollars from 2025-04-01 ($1,174 / $1,587) and 2026-04-01 that this PR replaces with 90% FPL. Its tests expect calendar 2026 at $1,174, but this PR gives $1,197, so a case fails after a rebase.
- Why G: coordination only.
- Fix: add one line to the body, and agree on one ND encoding with #10394.
G4. Document the Illinois rules that the switch-on does not model.
- Where:
CAT/senior.yaml:55-56andCAT/disabled.yaml:55-56;E:39. - Evidence: PM 15-08-00 starts spenddown when income "and/or nonexempt resources" exceed the limits; the model applies a hard asset test. PM 15-06-02-c (
INC/fpg_rate.yaml:13-14) counts everyone in the home when the client has children under 18; the model caps the unit at two. Both understate IL eligibility. - Why G: the one-or-two unit is a model-wide limit, and the body can document both gaps.
- Fix: add both to the body's Limitations, or to follow-up issue #10472.
G5. Cite N.J.A.C. 10:70 for New Jersey, and note the narrower benefit package.
- Where: the NJ references at
CAT/senior.yaml:18-19,CAT/disabled.yaml:18-19, and lines 11-12 of the fourAST/andINC/dollar files. - Evidence: the only NJ source is an undated fact sheet (values match KFF). N.J.A.C. 10:70-1.2 and 10:70-5.1 set up the program and its resource limits. The fact sheet's package excludes inpatient hospital care and prescribed drugs, but
medicaidvalues these enrollees at the full per-capita cost. - Why G: the values are corroborated; this adds the rule and one limitation.
- Fix (not run; links resolve), and add the benefit-package line to the body's Limitations:
- title: N.J.A.C. 10:70-1.2 - Purpose of the Medically Needy Manual
href: https://www.law.cornell.edu/regulations/new-jersey/N-J-A-C-10-70-1-2
- title: N.J.A.C. 10:70-5.1 - Resource eligibility limits
href: https://www.law.cornell.edu/regulations/new-jersey/N-J-A-C-10-70-5-1G6. Cite GIS 22 MA/01 for New York's 2022 values.
- Where:
INC/individual.yaml:160-162,INC/couple.yaml:160-162,AST/individual.yaml:108-110andAST/couple.yaml:108-110. - Evidence: GIS 22 MA/01 attachment page 2 lists $934 / $1,367 and $16,800 / $24,600 effective January 1, 2022; GIS 22 MA/11 refers to them only after the fact.
- Why G: the values are right; this is a better source.
- Fix (not run; link resolves):
- title: New York DOH GIS 22 MA/01, Attachment I, 2022 SSI-Related Medicaid Income and Resource Levels
href: https://www.health.ny.gov/health_care/medicaid/publications/docs/gis/22ma01_att1.pdf#page=2G7. The five new switches start in 2015, but the limits they gate start in 2018.
- Where: AR, IA, IL, ND and NJ at
CAT/senior.yaml:29-30, 50-51, 55-56, 84-85, 90-91and the same lines ofCAT/disabled.yaml. - Evidence: 2015-2017 use the 2018 values (AR $1,300 a year; IL 100% FPG; ND 83% FPG).
- Why G: every other state has the same pattern, and AR's program text is dated 01/01/14.
- Fix: add a one-line NOTE, or date the five new flags 2018-01-01.
G8. The dollar fallback for IL, MN, ND, UT and WA is now $0.
- Where:
INC/individual.yamlandINC/couple.yaml, which no longer list these states. - Evidence: an unlisted state reads 0, so a reform that sets one of these states' rate to 0 gives a $0 limit.
- Why G: baseline results do not change.
- Fix: keep the 2018 dollar entries, or say in the SA5 NOTE that these states have none.
G9. Readability.
V:24names Washington in generic code. Use# Some states apply the one-person limit to a couple.T/medicaid_medically_needy_income_limit.yamlhas double blank lines after several cases (for example lines 81-82, 174-175, 295-296). Use one.- Why G: style only.
Investigated and cleared
- DC 2018 couple. The 29 DCMR 901.1 method gives $685.83, but KFF 2018, the file's original source, records DC's own $652 / $652. The sources conflict, so 2018 stays.
- The ND 90% date as a reference defect. Partly right: the cited SPA amends only AFDC-related groups, but ML 3776 and ML 3896 carry the date (G2).
- An earlier rounding fix (round up MN, ND, NY, UT; not IL, WI). Partly right: IL drops cents; MN and UT lack a primary table. C1 replaces it.
- SA1 as critical. It lasts only until the declared prerequisite merges, so SA.
- Rate limits above the federal cap. KS, NY, UT and WA use a 1902(r)(2) disregard; encoding the effective limit gives the same result.
- Missing keys and branch order. Unlisted states read 0, and no state has both rates, so both are safe.
- A child's spend-down.
E:26-28still sums over the tax unit, as onmain; that is #10370's scope.
Out of scope / follow-up
- Named in the body: MA (KFF 2026: 100% FPL, against $522 / $650), MI (#8453), LA and VA regional limits, VT's Chittenden PIL, #10472, #10473, #10375 and #10378.
- Documented simplifications: mid-year dates apply from the next January; MN's July COLA disregard; NY 2019-2021 and VT 2019 keep the 2018 values.
Validation Summary
| Check | Result |
|---|---|
| CI and local tests | CI 33 pass, 0 fail. Medically needy folder 41/41 at both heads; Medicaid folder 728 at c1b120a6ed |
| Fix runs at the head | C1 and SA2-SA5 together: medically needy 49/49, boundary probe 5/5, Medicaid 753/753, partner healthcare 70/70 (read-only; no partner file edited) |
| References and law | 74 links, 73 resolve (WI dead, SA3); 112 values match; rounding (C1); DC 2019-2022 (SA2) |
| Code and mutation | No hard-coded values; vectorized. 22 mutations: 9 killed, SA4 kills 10 more, 3 left immaterial |
| Merge trials | #10370: Python clean, two test files conflict, resolved tree 47/47, SA1 correct after merge |
Microsimulation (2026, at c1b120a6ed) |
Medically needy eligible +517,100 (to 919,635); NY +359,286 (not re-checked); switch-ons +34,600; switch-offs 0 |
| Branch | 8 ahead / 6 behind main; MERGEABLE |
| PR body, other reviews | Accurate, apart from G1 and G3. axiom: line present (process note, not counted). No other reviews |
Review Severity: REQUEST_CHANGES
One critical item (C1: missing rounding that flips eligibility at the published NY, ND and IL limits) and five should-address items are open.
Next Steps
To auto-fix issues: run the fix-pr workflow for this PR.
- Apply C1: the two rounding flags, the formula change, four updated expectations and three boundary cases.
- Apply SA2 (DC 2019-2022 and its test), SA3 (WI link), SA4 (four test cases) and SA5 (descriptions).
- Take the suggestions you agree with, and update the body for G1, G3, G4 and G5.
- Run
make format, then the medically needy and Medicaid test folders. - Merge after #10370 has its fix (SA1), resolve the two test files as the body says, then rebase #10375.
…needy-limits # Conflicts: # policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/categories/medically_needy/is_in_medicaid_medically_needy_category.yaml # policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/categories/medically_needy/is_medically_needy_for_medicaid.yaml
…and references Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, Pavel. Round 1 is applied at 33d10a5. That head also merges Paths as in your review:
The changelog fragment now covers the rounding and DC. TheAxiomFoundation/rulespec-us#1938 is updated to this head. |
Closes #10357
Closes #10358
What and why
PolicyEngine's medically needy pathway for aged, blind and disabled people (
is_medically_needy_for_medicaid) had two problems. Five states that run the pathway had it switched off, and most limits still held 2018 values. This PR switches the five states on and updates the limits in 14 states. Where a state ties its limit to the poverty guideline or the SSI federal benefit rate, the PR encodes that rate in place of a dollar amount.Pathway switched on (senior and disabled flags)
Pathway switched off (senior and disabled flags)
AZ, ID, IN, NM and NV had the senior and disabled flags on, swapped with AR, IL, IA, NJ and ND. KFF's 2018 and 2026 tables, already cited in the flag files, list no medically needy program for aged, blind or disabled people in these five states. They are now off from 2015. Their limits were
-.inf, so no result changes.Limits tied to a federal amount
Dollar limits updated
Asset limits updated
How the model applies them
medicaid_medically_needy_income_limit(person, annual). It returns one of three amounts:fpg_ratetimes the poverty guideline for one or two people, when the state'sfpg_rateis above zero. The monthly amount is fixed at cents, then rounded up to the dollar in NY and ND (limit.income.rounds_up_monthly) and down in IL from 2023 (limit.income.rounds_down_monthly), as their published tables do: NY $1,836 / $2,489 in 2026 for 138% FPL of $1,835.40 / $2,488.60; ND $1,009 in 2023 and $1,130 in 2024; IL $1,803 for two in 2026. WI keeps cents; MN and UT are not confirmed and stay unrounded;ssi_ratetimes the SSI federal benefit rate (individual or couple rate), when the state'sssi_rateis above zero;medicaid_optional_senior_or_disabled_income_limit(42 CFR 435.602).mainafter Count blind people and use the individual or couple in the Medicaid medically needy test #10370 (3a8bf04, at b210b45). The spend-down test now uses the marital unit throughout, from Count blind people and use the individual or couple in the Medicaid medically needy test #10370, with this PR's income limit. The two conflicting test files kept main's cases first: this PR's cases inis_medically_needy_for_medicaid.yamlare now Cases 11-23 (Cases 24-27 are new in this round), andis_in_medicaid_medically_needy_category.yamlkeeps main's Cases 1-2, then this PR's Cases 3-4.limit.income.fpg_rate(IL, MN, ND, NY, UT, WI) andlimit.income.ssi_rate(KS, WA). These files list only the states that use them. NY, WI and KS carry a zero share before their switch dates.limit.income.couple_uses_individual_limit, true for Washington only. Washington's MNIL chart gives the one-person benefit rate to households of one and two people. Kansas's F-8 table gives couples the couple rate.Not confirmed against a primary source
DC: DHCF publishes only the one-person level ($780.58 for 2023 and $809.08 for 2024). The couple levels and the 2025–2026 values follow the method in 29 DCMR 901.1 and its table: the two-person level is 50% of the two-person guideline, and the one-person level is 95% of that. This method reproduces both DHCF figures and KFF's 2026 figures, which KFF rounds to $857 / $902. Sources give values by year only, so the parameter dates them January 1.
ND: no North Dakota document says when 90% replaced 83%. The manual shows 83% in April 2023 and 90% in April 2024. SPA ND-23-0034 (effective 2024-01-01) aligns the medically needy standards at 90%. Manual letter 3776 (1/1/2024) and the table in ML 3790 point to the same date, so the parameter uses 2024-01-01.
NH: KFF 2026 lists $926 / $1,073. The CMS-approved SPA NH-25-0019 and NH's current manual tables show $939 / $1,093 from 2025-07-01, and the PR uses those.
VT 2019: no 2019 PIL was found (DVHA's 2019 chart is not online or archived), so 2018's $1,041 stays in force through 2019.
IL: IDHS does not state when it applies each year's new guideline. Illinois's Department on Aging says the figures post in early April.
DC state plan: CMS-approved SPA DC-22-0014 (effective 10/1/2022, pp. 15–17) still lists the 1994 six-month levels, $2,262 / $2,382, or $377 / $397 a month. The PR follows 29 DCMR 901.1 and DHCF's notices. No statute is involved.
Limitations
medicaidvalues these enrollees at the full per-capita cost.Out of scope
parent.yamlhas more differences. Follow-up issue Medicaid medically needy: fix the pregnant, child and parent category flags against KFF and state sources #10473.Test plan
medicaid_medically_needy_income_limit.yaml(22 cases, including Vermont's PIL for every year from 2018 to 2026):is_medically_needy_for_medicaid.yaml:is_in_medicaid_medically_needy_category.yaml: disabled adults in AR, IA, IL, ND and NJ are in a medically needy category; a senior and a disabled adult in AZ are not.medicaid_medically_needy_medical_expenses.yaml. Under the 2026 limit ($11,928) the old income passed both ways. The case now uses countable income of $15,000, so it still distinguishes deducting pretax premiums once from deducting them twice.make format(ruff)changelog.d/No file in
tests/policy/baseline/partners/changes. By static reading, the partner Medicaid cases in these states are seniors who already qualify through the aged, blind and disabled pathway, and the medically needy pathway applies only to people outside every other pathway. CI will confirm once the PR is ready.axiom: TheAxiomFoundation/rulespec-us#1938 queued
🤖 Generated with Claude Code