Repository navigation
Description
In 15 states the model tests a married applicant for Medicaid's medically needy pathway on the couple's combined income, even when the spouse isn't aged, blind or disabled. It does so in Arkansas, California, Connecticut, Hawaii, Illinois, Kansas, Maryland, Massachusetts, Michigan, Minnesota, Nebraska, New Hampshire, North Dakota, Vermont and Wisconsin. The model starts from the applicant's ssi_countable_income, where it adds SSI in-kind support and maintenance to the applicant's unearned income, subtracts SSI's $20 general income exclusion and adds SSI's deemed amount. It then adds medicaid_medically_needy_income_from_spouse, where it removes SSI's deemed amount and adds a couple budget less an applicant-alone budget. It builds both budgets from cash income alone and subtracts a separate $20 in each.
When the applicant has no cash income, the model finds nothing in the alone budget to take that budget's $20 from, but takes the couple budget's $20 from the spouse's income. The model then counts the support less $20 and the spouse's income less $20, so the couple gets two exclusions. An applicant with in-kind support and less than $20 a month of other unearned income gets some or all of the second $20.
For example, take a Massachusetts applicant aged 70 who has no cash income and whose shelter someone outside the household pays for throughout 2026, with a spouse aged 50 who has a $24,000 pension. SSA deems the spouse's income, so SSA and the model both value the support at one-sixth of the couple rate plus $10 (POMS SI 01320.150 B.1.a), $1,491 / 6 + $10 = $258.50 a month. Under SSA's method the couple's income comes to $258.50 + $2,000 − $20 = $2,238.50 a month, or $26,862 for the year. The model counts ($258.50 − $20) + ($2,000 − $20) = $2,218.50 a month, or $26,622.
With $18,900 of medical expenses, the model leaves $7,722, within its Massachusetts couple limit of $7,800, and finds the applicant medically needy. Under SSA's method $7,962 remains, above the limit. If the applicant had $50 a month of Social Security, or if nobody paid toward the shelter, the two methods would agree.
The model also gives the second $20 below SSI's deeming threshold, where it counts SSI income correctly. With a $4,800 pension, SSA deems nothing, and the model counts $3,976 of SSI countable income at the individual presumed maximum value, ($351.33 − $20) × 12. In the medically needy budget, the model adds ($400 − $20) × 12 = $4,560 for the spouse, for $8,536. With one $20 a month, the couple's $4,216 of support and $4,800 of pension come to $8,776. That applicant also qualifies for $7,952 of SSI, and SSA decides Medicaid for SSI recipients in Massachusetts (POMS SI 01715.010), so the second $20 doesn't change their coverage.
The model takes the second $20 only for applicants in these 15 states whose household calculation sets ssi_receives_outside_shelter_support, ssi_receives_shelter_from_others_in_household or, for food received before September 30, 2024, ssi_receives_food_from_others. We leave all three unset in the default dataset, so default microsimulation results don't include the second $20.
What SSA, CMS and the states set
- When SSA deems a spouse's income, it combines "the remainder of your spouse's unearned income with your own unearned income" and then applies the exclusions in 416.1112 and 416.1124 to the total (20 CFR 416.1163(d)(2)). In Example 3 of that section, SSA takes the $20 from the eligible spouse's $100 pension and gives the ineligible spouse's $201 of earnings only the earned income exclusion.
- SSA excludes "the first $20 of any unearned income in a month", except in-kind support received in another person's household and income based on need (20 CFR 416.1124(c)(12)). The model values support at the presumed maximum value only in the applicant's own household, so SSA applies the $20 to it.
- CMS directs state agencies to apply the methods of the cash program "most closely categorically related" to the applicant (42 CFR 435.601(b)(2)). For aged, blind and disabled people, CMS names SSI's methods, except in states that use more restrictive criteria (42 CFR 435.601(a)).
- For the medically needy in states that cover all SSI recipients, CMS has the agency "deduct amounts that would be deducted in determining eligibility under SSI" (42 CFR 435.831(b)(2)). SSA lists six of the 15 states (Connecticut, Hawaii, Illinois, Minnesota, New Hampshire and North Dakota) among the states with more restrictive criteria (POMS SI 01715.010). The other nine must cover all SSI recipients (42 CFR 435.120). For the six, CMS caps the deductions at amounts "no more liberal than those used in determining eligibility under SSI or an optional State supplement" (42 CFR 435.831(b)(3)).
- Wisconsin's health department puts spouses who live together in one fiscal test group (MEH 15.1.1) and tells its agencies to "Disregard $20 from the EBD ... fiscal test group's net income" (MEH 15.3.8).
A state may count less than SSA does (42 CFR 435.601(d)). For example, Kansas doesn't count rent that a relative or friend outside the household pays to the landlord (MKEESM 6410), and the model counts it there as SSA does. For Illinois, Connecticut and Minnesota, which use their own exclusions in place of SSI's $20, see #10472.
In the code
- In
medicaid_medically_needy_income_from_spouse.py, the model reads the applicant's cash income alone (L40-L41). It builds the alone and couple budgets with a $20 in each and takes their difference (L52-L60), then subtracts SSI's deemed amount and adds that difference (L64-L65). - In
ssi_countable_income.py, the model adds the support to the applicant's unearned income before the $20 (L60-L70) and adds SSI's deemed amount (L87-L95). - In
is_medically_needy_for_medicaid.py, the model sums the two (L63-L65). SSI's deemed amount cancels, so the model keeps the second $20 in this budget whatever it deems for SSI. It would keep it if the model's SSI deeming applied one $20, as Apply SSI's general exclusion once under spousal deeming #10837 proposes for Fix SSI spousal deeming for in-kind support and for aged, blind or disabled spouses who are not eligible #10243. - The model lists the 15 states in
budgets_couple_together.yaml. - The model builds the spouse amount for the optional aged, blind and disabled pathway the same way. It leaves the support out of that amount (
medicaid_optional_senior_or_disabled_income_deemed_from_ineligible_spouse.py#L78-L96) and adds it to the applicant's own income (medicaid_optional_senior_or_disabled_countable_income.py#L54-L61). The model counts the same $26,622 and $8,536 there for the two Massachusetts households.
Reproduction
This script runs six households at commit 8b2fba3. Besides the two Massachusetts households above, it runs the $24,000 household twice more, once with $50 a month of Social Security and once without shelter support. It also runs that household in Maryland and in New York, which doesn't budget the couple together.
Script
from policyengine_us import Simulation
MONTHS = [f"2026-{m:02d}" for m in range(1, 13)]
def situation(state, claimant_extra, spouse_pension, shelter, expenses):
claimant = {
"age": {"2026": 70},
"is_tax_unit_head": {"2026": True},
"takes_up_medicare_if_eligible": {"2026": False},
"other_medical_expenses": {"2026": expenses},
"ssi_receives_outside_shelter_support": {m: shelter for m in MONTHS},
}
claimant.update(claimant_extra)
spouse = {
"age": {"2026": 50},
"is_tax_unit_spouse": {"2026": True},
"taxable_pension_income": {"2026": spouse_pension},
"ssi_receives_outside_shelter_support": {m: False for m in MONTHS},
}
return {
"people": {"claimant": claimant, "spouse": spouse},
"tax_units": {"tu": {"members": ["claimant", "spouse"]}},
"spm_units": {"spm": {"members": ["claimant", "spouse"]}},
"families": {"f": {"members": ["claimant", "spouse"]}},
"marital_units": {"mu": {"members": ["claimant", "spouse"]}},
"households": {"hh": {"members": ["claimant", "spouse"], "state_code": {"2026": state}}},
}
CASES = {
"A MA, ISM, spouse pension 4,800 (below deeming threshold)": situation("MA", {}, 4_800, True, 0),
"B MA, ISM, spouse pension 24,000, expenses 18,900": situation("MA", {}, 24_000, True, 18_900),
"C MA, as B plus claimant SS 600/yr ($50/mo)": situation("MA", {"social_security_retirement": {"2026": 600}}, 24_000, True, 18_900),
"D MA, as B without shelter support": situation("MA", {}, 24_000, False, 18_900),
"E MD, as B (another budget-together state)": situation("MD", {}, 24_000, True, 18_900),
"F NY, as B (state that does not budget together)": situation("NY", {}, 24_000, True, 18_900),
}
YEAR_VARS = [
"ssi_unearned_income",
"is_ssi_spousal_deeming_applies",
"ssi_countable_income",
"ssi_income_deemed_from_ineligible_spouse",
"medicaid_medically_needy_income_from_spouse",
"medicaid_medically_needy_uses_couple_standard",
"medicaid_medically_needy_income_limit",
"medicaid_medically_needy_medical_expenses",
"is_medically_needy_for_medicaid",
"ssi",
"medicaid_optional_senior_or_disabled_countable_income",
]
for name, sit in CASES.items():
sim = Simulation(situation=sit)
print("\n==", name)
ism_jan = sim.calculate("ssi_in_kind_support_and_maintenance", "2026-01")
ism_year = sum(sim.calculate("ssi_in_kind_support_and_maintenance", m) for m in MONTHS)
print(f" ssi_in_kind_support_and_maintenance 2026-01: {[round(float(x), 2) for x in ism_jan]} year: {[round(float(x), 2) for x in ism_year]}")
for v in YEAR_VARS:
vals = sim.calculate(v, 2026)
print(f" {v}: {[round(float(x), 2) for x in vals]}")
unit = sim.calculate("ssi_countable_income", 2026) + sim.calculate("medicaid_medically_needy_income_from_spouse", 2026)
print(f" model medically needy income (ssi_countable_income + adjustment): {[round(float(x), 2) for x in unit]}")It prints each person's values, the applicant first:
Output
== A MA, ISM, spouse pension 4,800 (below deeming threshold)
ssi_in_kind_support_and_maintenance 2026-01: [351.33, 0.0] year: [4216.0, 0.0]
ssi_unearned_income: [0.0, 4800.0]
is_ssi_spousal_deeming_applies: [0.0, 0.0]
ssi_countable_income: [3976.0, 0.0]
ssi_income_deemed_from_ineligible_spouse: [0.0, 0.0]
medicaid_medically_needy_income_from_spouse: [4560.0, 0.0]
medicaid_medically_needy_uses_couple_standard: [1.0, 1.0]
medicaid_medically_needy_income_limit: [7800.0, 7800.0]
medicaid_medically_needy_medical_expenses: [0.0, 0.0]
is_medically_needy_for_medicaid: [0.0, 0.0]
ssi: [7952.0, 0.0]
medicaid_optional_senior_or_disabled_countable_income: [8536.0, 0.0]
model medically needy income (ssi_countable_income + adjustment): [8536.0, 0.0]
== B MA, ISM, spouse pension 24,000, expenses 18,900
ssi_in_kind_support_and_maintenance 2026-01: [258.5, 0.0] year: [3102.0, 0.0]
ssi_unearned_income: [0.0, 24000.0]
is_ssi_spousal_deeming_applies: [1.0, 0.0]
ssi_countable_income: [26622.0, 0.0]
ssi_income_deemed_from_ineligible_spouse: [23760.0, 0.0]
medicaid_medically_needy_income_from_spouse: [0.0, 0.0]
medicaid_medically_needy_uses_couple_standard: [1.0, 1.0]
medicaid_medically_needy_income_limit: [7800.0, 7800.0]
medicaid_medically_needy_medical_expenses: [18900.0, 0.0]
is_medically_needy_for_medicaid: [1.0, 0.0]
ssi: [0.0, 0.0]
medicaid_optional_senior_or_disabled_countable_income: [26622.0, 0.0]
model medically needy income (ssi_countable_income + adjustment): [26622.0, 0.0]
== C MA, as B plus claimant SS 600/yr ($50/mo)
ssi_in_kind_support_and_maintenance 2026-01: [258.5, 0.0] year: [3102.0, 0.0]
ssi_unearned_income: [600.0, 24000.0]
is_ssi_spousal_deeming_applies: [1.0, 0.0]
ssi_countable_income: [27462.0, 0.0]
ssi_income_deemed_from_ineligible_spouse: [24000.0, 0.0]
medicaid_medically_needy_income_from_spouse: [0.0, 0.0]
medicaid_medically_needy_uses_couple_standard: [1.0, 1.0]
medicaid_medically_needy_income_limit: [7800.0, 7800.0]
medicaid_medically_needy_medical_expenses: [18900.0, 0.0]
is_medically_needy_for_medicaid: [0.0, 0.0]
ssi: [0.0, 0.0]
medicaid_optional_senior_or_disabled_countable_income: [27462.0, 0.0]
model medically needy income (ssi_countable_income + adjustment): [27462.0, 0.0]
== D MA, as B without shelter support
ssi_in_kind_support_and_maintenance 2026-01: [0.0, 0.0] year: [0.0, 0.0]
ssi_unearned_income: [0.0, 24000.0]
is_ssi_spousal_deeming_applies: [1.0, 0.0]
ssi_countable_income: [23760.0, 0.0]
ssi_income_deemed_from_ineligible_spouse: [23760.0, 0.0]
medicaid_medically_needy_income_from_spouse: [0.0, 0.0]
medicaid_medically_needy_uses_couple_standard: [1.0, 1.0]
medicaid_medically_needy_income_limit: [7800.0, 7800.0]
medicaid_medically_needy_medical_expenses: [18900.0, 0.0]
is_medically_needy_for_medicaid: [1.0, 0.0]
ssi: [0.0, 0.0]
medicaid_optional_senior_or_disabled_countable_income: [23760.0, 0.0]
model medically needy income (ssi_countable_income + adjustment): [23760.0, 0.0]
== E MD, as B (another budget-together state)
ssi_in_kind_support_and_maintenance 2026-01: [258.5, 0.0] year: [3102.0, 0.0]
ssi_unearned_income: [0.0, 24000.0]
is_ssi_spousal_deeming_applies: [1.0, 0.0]
ssi_countable_income: [26622.0, 0.0]
ssi_income_deemed_from_ineligible_spouse: [23760.0, 0.0]
medicaid_medically_needy_income_from_spouse: [0.0, 0.0]
medicaid_medically_needy_uses_couple_standard: [1.0, 1.0]
medicaid_medically_needy_income_limit: [4704.0, 4704.0]
medicaid_medically_needy_medical_expenses: [18900.0, 0.0]
is_medically_needy_for_medicaid: [0.0, 0.0]
ssi: [0.0, 0.0]
medicaid_optional_senior_or_disabled_countable_income: [26622.0, 0.0]
model medically needy income (ssi_countable_income + adjustment): [26622.0, 0.0]
== F NY, as B (state that does not budget together)
ssi_in_kind_support_and_maintenance 2026-01: [258.5, 0.0] year: [3102.0, 0.0]
ssi_unearned_income: [0.0, 24000.0]
is_ssi_spousal_deeming_applies: [1.0, 0.0]
ssi_countable_income: [26622.0, 0.0]
ssi_income_deemed_from_ineligible_spouse: [23760.0, 0.0]
medicaid_medically_needy_income_from_spouse: [0.0, 0.0]
medicaid_medically_needy_uses_couple_standard: [1.0, 1.0]
medicaid_medically_needy_income_limit: [29868.0, 29868.0]
medicaid_medically_needy_medical_expenses: [18900.0, 0.0]
is_medically_needy_for_medicaid: [1.0, 0.0]
ssi: [0.0, 0.0]
medicaid_optional_senior_or_disabled_countable_income: [26622.0, 0.0]
model medically needy income (ssi_countable_income + adjustment): [26622.0, 0.0]
In households B, E and F, the model also takes the extra $20 in its SSI count, as #10243 describes.
A possible fix
We could add the applicant's in-kind support for the year to unearned in medicaid_medically_needy_income_from_spouse before line 52. The model would then count the support in both budgets, and their difference would hold only the spouse's income. In household B that gives $3,102 + $24,000 − $240 = $26,862. The optional pathway's spouse amount would need the same change. A state such as Kansas, which doesn't count the support, would still need its own rule.
Activity