Skip to content

Apply 416.1163(e)(2) to deemed SSI and identify SSI couples by marriage, not tax roles - #10141

Open
MaxGhenis wants to merge 23 commits into
mainfrom
ssi-couples-and-deeming-cap
Open

MaxGhenis wants to merge 23 commits into
mainfrom
ssi-couples-and-deeming-cap

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #10138.

Summary

Apply 20 CFR 416.1163(e)(2): SSI with spousal deeming is the lesser of the couple computation and the individual benefit after the claimant's own countable income. Apply the cap inside uncapped_ssi, so state supplements and other downstream readers receive the corrected federal shortfall.

Identify SSI couples by the existing resource-deeming test for marriage and co-residence, rather than tax-unit head/spouse roles. Joint claims, couple income/resources, deemed income and facility checks use the identified spouse. The methodology predicate retains main's citizenship treatment because CAPI, Medicaid and supplements depend on it. is_ssi_eligible_spouse remains a tax-unit-spouse label; payment calculations treat both spouses alike.

Review

Round 6: the hub's independent review at the new head, pending

Round 5 fixes

  • The shared state retained-pair helper now preserves SSI's parent-link and tax-dependent exclusions across households. Existing parent-link resolution runs within the marital unit, including across tax units, while preserving a known co-resident parent identity if an ID repeats in another household. A possible default two-person unit cannot turn known nonspouses into a retained marriage. CO, MO, OR, SD, VA and IA receive this shared correction; genuine recorded marriages apart retain their program-specific budgets.
  • Iowa's separated 96-year-old parent and 66-year-old dependent child, with explicit parent IDs and $1,800 resources each, receive individual RCF budgets with omitted marital units and explicit singletons alike: $1,192.57 each. Generated parent-only and dependent-only cases independently test both exclusions across the five states.
  • Both requested 2026 SSI: deemed benefit is capped at the individual rate instead of the no-deeming amount, and couples are identified by tax roles #10138 cases are pinned: claimant age 67 with $12,000 wages, spouse age 45 with self-employment income of $6,000 (deeming active) or $5,900 (inactive), annual SSI $6,438 in both. The independent oracle now varies claimant wages; generated cases check continuity at $496/$497/$498 monthly spouse income.
  • Three narrow tests call the shared helpers through actual simulation populations, isolating separated-marriage retention, cross-household parent exclusion and co-resident parent identity when an ID repeats across households. The first two isolate the requested mutation checks.

Main merge and added SSI readers

Merged main cbe322b51c6c9f791a318a32f0b093abee683fab as 3765b00cde without conflicts: 554 files, +36,583/-627 lines since the previous merged main cce379ea00. Main brings per-person California CAPI, California food-preparation defaults and blind-rate corrections, eight heating programs (LA/ME/MO/MT/NV/PA/VT/WI), South Carolina TANF SSI exclusions, state tax-role invariance, Social Security PIA and student-loan changes, plus test/performance updates. #10532 is not pre-merged.

The new CAPI readers now use the identified spouse for facility/category/payment-standard counts, CAPI membership, countable income and spouse SSI/SSP receipts. Six third-adult cases isolate each reader. The existing California supplement attribution assumes spouses share an SPM unit and retains its pro rata child-share approximation. New energy programs intentionally count household SSI receipts; SC TANF intentionally excludes individual SSI recipients and their income/resources. Corrected capped payments feed those readers consistently. Montana LIHEAP's spouse categorical gate and SSI-standard counts retain an inherited default-unit identity limitation: holding reported SSI receipt flags fixed reproduces it unchanged on main. This independent limitation remains outside the supplement/Medicaid fixes; follow-up is proposed below.

Medicaid aggregation sweep

These non-MAGI budgets follow spouse financial responsibility under 42 CFR 435.602. Pair totals replace whole-marital-unit sums; existing medically needy parental expense/deeming treatment is retained. All regressions distinguish the unrelated adult's tax/family/SPM units while omitting marital units.

File Can an outsider enter the former sum? Treatment and regression
medicaid_optional_senior_or_disabled_countable_income.py Yes, premiums. SSI couple computation now deducts only pair premiums. CA pensions $36,000/$24,000 plus an unrelated $12,000 premium give $29,880 per spouse.
is_optional_senior_or_disabled_income_eligible.py Yes, countable income. Pair-only SSI responsibility; WV spouses at $8,946 each stay eligible beside unrelated $50,000 income.
is_optional_senior_or_disabled_asset_eligible.py Yes, resources; the third adult also removed the couple limit. Pair resources and recognized-spouse limit. WV spouses with $1,200 each qualify beside unrelated $50,000 resources. MSP standards are unchanged.
is_209b_ssi_recipient_income_eligible_for_medicaid.py Yes, income and expenses. Pair-only spenddown: IL couple income after expenses stays $30,000, above the supplied $25,000 limit, despite an unrelated $12,000 expense.
is_medically_needy_for_medicaid.py Yes, income/expenses/resources, plus couple-limit identity. SSI pair totals and spouse recognition, retaining responsible-parent treatment. MA couple income $7,000/resources $2,000 qualify beside unrelated $50,000 income/resources.
medicaid_optional_senior_or_disabled_income_deemed_from_ineligible_spouse.py A third singleton is already excluded by the SSI spouse-status mask; another couple's ineligible spouse could enter. MO's married-couple gross-income exception now uses the identified pair. Third-singleton case pins $2,004; a four-person/two-couple case pins separate $2,004/$17,364 deeming. The SSI earned/unearned inputs already read the identified spouse and need no change.
medicaid_optional_senior_or_disabled_income_limit.py No sum; a third adult changed the unit-size gate. Necessary companion fix uses recognized marriage. WV limits stay $17,892/$17,892/$11,928.
medicaid_household_income.py Its sums implement MAGI households. Unchanged: follows MAGI membership under 42 CFR 435.603.

Iowa facts and false defaults

ia_ssa_rcf_shares_room_with_spouse and ia_ssa_rcf_received_ssi_before_entry both default to false. No repository data builder sets or imputes either. Same-month entry does not establish a shared room; SSI awarded after separation does not establish receipt before entry. These defaults implement the supplied Iowa rulings and 441 IAC 51.4(3) / 6-B, printed p.60.

For co-resident legacy situations, current or reported SSI still approximates pre-entry receipt. Separated spouses require the explicit prior-SSI fact.

January 2026, both spouses aged 70, 22 covered entry-month days:

Scenario Previous main cce379ea00 This revision
Co-resident, monthly pensions $1,800/$100; neither fact supplied Couple budget; $771.84 each Individual budgets; care income $1,800/$100, payments $667.34/$846.34
Same, explicit shared room — Couple budget; care income $950 each, payments $771.84 each
Separate households, pensions $175/$100; neither fact supplied Individual budgets; care income $793/$718, payments $846.34 each Individual budgets; care income $1,014 each, payments $846.34 each
Same, explicit prior SSI Input absent Retained couple budget; care income $755.50 each, payments $846.34 each

The retained entry calculation uses couple SSI $1,491 - ($175 + $100 - $20) = $1,236 once, giving ($275 + $1,236) / 2 = $755.50 care income each. The later entrant retains the couple budget in their own qualifying entry month while the spouse already resident remains individual, as the supplied staggered-entry ruling directs.

Validation

Validation head: 4e4136e6ea66deab720b03677ac2e34c6895476a.

464 unique tests passed in serial foreground runs, one file per process. The full invariants file, every listed state-supplement file and the supplied probes passed again after the final co-resident-parent identity correction. The Medicaid, CAPI and joint-claim files passed before that narrow correction. Every run used the supplied 4 GB/1,800-second cap, load-at-start gate of 100, thread limits of four and OMP_WAIT_POLICY=PASSIVE. make format passes. No microsimulation or full local suite ran.

File Passed
ia_ssa.yaml 121
test_ssi_spousal_deeming_invariants.py 79
medicaid_ssi_couple_three_adult.yaml 6
ca_capi_three_adult.yaml 6
ca_capi_person.yaml 15
ca_capi_payment_standard.yaml 20
mo_ssp.yaml 35
va_ag.yaml 32
sd_ssp.yaml 39
or_ssp.yaml 38
ssi_state_supplement_three_adult.yaml 37
ssi_claim_is_joint.yaml 9
co_oap_deemed_income.yaml 20
earlier-probes.yaml (supplied probes) 7

All four Iowa default scenarios above were freshly recomputed at this revision; none of the reviewed values moved. CI: Pull request run 41177118616 concluded success at the validation head, with all 33 checks passed and no failed or cancelled checks. The latest exact-head Pull request run was verified as completed/success.

Mutation checks

Each mutant runs one direct helper test against a real simulation population, under the supplied 2 GB/900-second cap. Both tests pass without mutation. Both mutants were rerun and killed after the final co-resident-parent identity correction; each patch was then reversed and the source was verified clean.

Mutant Selected test Result
Co-resident-only shared helper test_retained_state_spouse_helpers_keep_separated_marriage Killed: the declared separated marriage becomes false for both people; assertion failure, exit 1, 83 seconds.
Drop parent-link exclusion test_retained_state_spouse_helpers_exclude_cross_household_parent Killed: the cross-household parent/child pair becomes married; assertion failure, exit 1, 164 seconds.

Limits and follow-ups

  • Impact remains for the hub to recompute. Residence/separation timing, sponsored-noncitizen allocations, married-minor rate treatment, mixed-citizenship income methodology, Medicaid citizenship gating, the facility deeming exception and the SSI two-month lag retain the disclosed limitations from the earlier rounds.
  • MSP's own whole-unit budgets and Florida's OSS maximum are unchanged. Ordinary state supplement budgets use the actual co-resident pair; CO/MO/OR/SD/VA/IA retain only their existing program-specific separated-spouse rules. Missing temporary-absence/event facts remain an inherited representation limit.
  • A lone married pair with one spouse inferred as the other's tax dependent remains indistinguishable from a possible default group; explicit appropriate tax roles are required. Unlabelled default groups can still infer a marriage; parent/dependent facts now rule out known nonspouses even apart.
  • Proposed follow-up (not filed): Identify actual spouses in Montana LIHEAP categorical and SSI-standard budgets. The newly merged readers use whole marital-unit SSI recipient counts, permitting nonspouse coverage or incorrect standards in omitted-unit situations. Audit ARM 37.70.401 and manual sections 3.10/3.11 and 9.5, then add omitted-unit and third-adult regressions.

Impact

impact: pending (hub)

axiom: TheAxiomFoundation/rulespec-us#1706 queued (20 CFR 416.1163(d)-(f), 416.1801(c), 416.1806, 416.1160(d); same corpus-release blocker as #1626). Resource deeming: TheAxiomFoundation/rulespec-us#1626 queued.

MaxGhenis and others added 2 commits October 12, 2026 05:12
SSI under spousal income deeming was capped at the individual Federal
benefit rate. 20 CFR 416.1163(e)(2) makes it the lesser of the couple
computation and the individual rate less the claimant's own countable
income, so a claimant with income of their own could get more with
deeming than without it, and lower income could lower SSI. Add
uncapped_ssi_without_spousal_deeming and take the lesser in
ssi_if_takes_up; deem nothing while the $30 rate applies (416.1163(f)(5)).

Joint claims and the ineligible spouse whose income is deemed were tied
to tax-unit head and spouse roles, which go to the two oldest adults of a
tax unit. Use the co-resident spouse test that resource deeming already
uses (416.1801(c), 416.1806, 416.1160(d)), require both members of a
joint claim to meet the citizenship condition, and combine couple income
and resources over the two spouses rather than the marital unit.

Fixes #10138.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 12, 2026 09:36
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Local results at 2924cd90da (macOS, not Linux CI):

  • policyengine_us/tests/core/test_ssi_spousal_deeming_invariants.py: 8 passed. 19 s user CPU, 1.0 GB peak RSS.
  • test_ssi_resource_deeming_invariants.py and test_ssi_state_supplement_medicaid_dependency.py: 24 passed. 73 s user CPU, 4.9 GB peak RSS (mostly the dependency module).
  • All 33 YAML files under tests/policy/baseline/gov/ssa/ssi, run one process at a time: pass, after the three is_ssi_spousal_resource_deeming_applies.yaml updates described in the body. The new cases in ssi_if_takes_up.yaml (10), ssi_claim_is_joint.yaml (10) and the deemed-income file (7) also pass.
  • The same invariant module, with the new variable replaced by the oracle's no-deeming amount, fails 7 of 8 tests on main.

A real microsimulation of the impact (merge base b2aaef3391 against this head, 2026, default dataset) is queued under the shared heavy lock and will be added to the body.

MaxGhenis and others added 3 commits October 12, 2026 08:09
Review round 1 found three regressions. Requiring the citizenship
condition in ssi_claim_is_joint broke California CAPI's couple rate and
Medicaid's senior/disabled countable income, which read the joint claim
as the SSI couple methodology, so the joint claim and ineligible-spouse
status test only aged, blind or disabled status again (still through the
co-resident spouse test). The resource test keeps #10040's treatment of a
citizenship-ineligible spouse through _ssi_resource_couple.

Alabama's supplement read uncapped_ssi > 0 and paid when SSI was zero, so
the lesser-of rule moves into uncapped_ssi before the floor. The
416.1163(f)(5) facility rule covered only the payment and is dropped for
a follow-up. The invariant test drops the citizenship axis, adds mixed
household sizes, and suppresses Hypothesis's slow-data check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The test omitted tax and marital units, so the model grouped all nine
disabled people together and made person0 and person1 a head-and-spouse
couple, which the co-resident spouse test now reads as a joint claim.
The test checks citizenship status, so each person is single.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review round 2 found that a situation omitting marital units, with three
aged adults, now pays more in MA and AK. The joint claim now covers only
the head-and-spouse couple, but both supplements still summed the whole
marital unit. _ssi_couple_total adds the co-resident spouse's value, which
equals the marital-unit sum for units of one or two people. MA's maximum
and payment, AK's payment, and AK's claim type now use it, so the
household gets the same supplements as with explicit marital units
($100.86, $100.86, $128.82 in MA; $264, $264, $362 in AK).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 9 commits October 28, 2026 00:13
One textual conflict, in ssi_amount_if_eligible.py: main corrected the
medical treatment facility citation from 42 USC 1382(e)(1)(A) to (e)(1)(B)
(#10283), while this branch moved the living-arrangement adjustment into
_ssi_living_arrangement_amount.py. Keep the branch's helper call and carry
main's citation into the helper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Exercise five state supplement budgets across two households and correct Connecticut and Pennsylvania source comments.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SSI: deemed benefit is capped at the individual rate instead of the no-deeming amount, and couples are identified by tax roles

1 participant