Repository navigation
Apply 416.1163(e)(2) to deemed SSI and identify SSI couples by marriage, not tax roles - #10141
Conversation
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>
|
Local results at
A real microsimulation of the impact (merge base |
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>
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.
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
GitHub reported a conflict with main (ba9bfde). Only nj_medical_expense_deduction.yaml conflicted, on the 72-year-old dependent's case. Main (#10667) moves the dependent's Schedule C income and self-employed health insurance deduction to the dependent's own return, so NJ AGI is 100,000. This branch stops deeming the head's income to the dependent, so the state pays the Part B premium and the subtotal is 0. Together the deduction is max(0, 0 - 0.02 x 100,000) = 0. The other files both sides changed merged cleanly and keep every case: co_oap_deeming_exempt.py, co_oap_deemed_income.yaml, medicaid_optional_senior_or_disabled_countable_income.py and its YAML. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's Colorado AND-CS rules (#10161) found a client's spouse through the marital unit. In a situation that omits marital units, that unit holds every member, so a married client got the full $20 disregard and a third adult's income was deemed as a spouse's. The $20 disregard split (3.549(A)(2)(c)(1)) now reads state_is_married, and spouse deeming (3.549(C)-(D)) reads state_couple_total, as Old Age Pension does. Both keep a declared spouse who lives apart and count only SSI's identified spouse in a default unit. Case 42 covers a couple beside a claimed third adult. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The merge gave AND-CS's new spouse readers the same couple test as Old Age Pension, so the fragment now names both programs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review I picked this up at
Main now stands 79 commits past the merge base 1. Merge mainOne conflict:
Auto-merged, both sides changed. I read each result against both parents:
Nothing else references a variable main deleted, and the merged system builds (7,583 variables). 2. New readers
Why LTSS keeps the marital unit. Its couple budgets apply only when
Why
3. Cases that moveOne case moves: the conflict case in
Derivation on the merged tree.
Why the premium is paid. I probed both trees with the case's household:
The case's comment now names both payers. The resolution changes no other case. No other case moves. All 99 files below pass with their existing expected values, among them main's 30 SSI, supplement and Medicaid files and this branch's 63. The 56 partner files that name SSI, supplement, MSP, Medicaid or Part B variables all pass, so none of their cases moves. 4. MutantsEach mutant restores main's read in its own run. Each run covers
No case on
5. TestsOne file per process on the merged tree at
The named files: Per-file countsNamed or conflict-touched: Brought in by the merge: This branch's test files: Partner files: CIThe Judgment calls
Proposed follow-upMedicaid LTSS: rule out parent and child pairs as community spouses. Generated by Claude Code |
|
David, here's where each item of your review stands at
An independent review of the commits since your review confirmed each code and test change above at 🤖 Generated with Claude Code |
I answered each item in the commits since this review, the description and two comments on TheAxiomFoundation/rulespec-us. In the reply above, I map each one to its commit, file or comment.
|
US + core hub merge audit, us#10141 at
🤖 Generated with Claude Code |
Main's SSI couples change (#10141) moved the spouse sums of the SSI supplements into helpers such as _ssi_couple_total, so 11 FORMULA_READS rulings stopped matching and test_formula_rulings_are_current failed at the merge. The third code review also proved three ways to count a source twice with every test green: a source that reads other sources through a loop over a parameter list (M3), a ruled formula that changes how it uses a read (M4), and a ruled formula that adds a read through a helper defined beside it (M5). - formula_sources() reads each formula and every helper it calls by name, recursively. helpers_called() matches helpers by source path under policyengine_us/variables, because core loads each variable file under a generated module name. - CROSS_PERSON_HELPERS lists the helpers that combine a value across people by indexing; the scan counts a call to one as a sum, and the rulings test fails when one is no longer defined in a scanned formula. - reads_by_variable() flags a formula that reads a variable by a name held in a variable (M3). - RULED_READS pins the variables each ruled formula reads that another listed source reaches; any change fails test_formula_rulings_are_current (M5). The docstring states M4 as a limit. - Rulings: capital_gains_behavioral_response, wi_cts, employment_income_behavioral_response, mt_ssp, nh_ssp, nj_ssp, nv_oss and vt_aabd_federal added after reading each with its helpers; ca_capi_person, co_tanf, ne_adc and sd_ssp_care relabelled OFFSET, or_ssp RECEIPT. Text, from the third sources review: disability_benefits holds the survey's Black lung and railroad disability payments (DIS_SC 8 and 6) in the default data; survivor_benefits also holds workers' compensation and Black lung survivor payments (Appendix A, source 8); the means-tested list names ca_capi apart from the state SSI supplements. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes #10138.
Summary
We apply 20 CFR 416.1163(e)(2) before the SSI zero floor. Under spousal income deeming, a claimant receives the lesser of the couple computation and the individual benefit after their own countable income. State readers of
uncapped_ssireceive the same federal shortfall.SSI calculations identify each person's co-resident spouse through the existing resource-deeming helper. Joint claims, combined income and resources, spouse-deemed income and facility counts use that spouse. Explicit marital units preserve marriages for tax dependents and separate filers. We exclude a third adult's income and resources from the identified couple's budget.
The public variable
ssi_marital_both_eligibleremains available and uses the spouse test. The marital earned-income and unearned-income labels describe the two spouses' combined income.is_ssi_eligible_spouseretains its tax-unit-spouse label, and both qualifying spouses carryssi_claim_is_joint.For the individual comparison, we value in-kind support with the regular individual presumed maximum value and reapply income exclusions. SSA describes the individual computation in POMS SI 01320.150 B.1.b, SI 01320.400 C.2 and SI 00835.300.
For example, a claimant whose only income comes from in-kind support, with a spouse earning $500 monthly in 2026, receives $662.67 monthly: $994 − ($351.33 − $20). Using the reduced deeming PMV would pay $755.50.
California and other state readers
CAPI and the per-person state supplement use the identified spouse for category counts, facility separation, CAPI membership, countable income and SSI/SSP receipts. An unrelated recipient's income, payment or eligibility cannot enter the mixed couple's calculation.
When one spouse occupies a Title XIX facility and the other doesn't, CAPI computes the spouses separately, even when only the California facility input identifies the stay. An unrelated facility resident cannot separate the couple or contribute a payment-standard share.
We set exhausted mixed-couple CAPI benefits to zero when floating-point cancellation leaves a residual within the stored payment standard's precision. This prevents a residual from creating CAPI income eligibility.
For joint computations, the optional senior or disabled Medicaid income calculation combines the identified spouses' premiums and qualifying dependent premiums. The medically needy and 209(b) income calculations likewise exclude unrelated adults from couple budgets. California's Working Disabled income test excludes unrelated adults from spouse income.
We replace marital-unit sums with spouse totals in the changed state supplement readers. Colorado, Missouri, Oregon, South Dakota, Virginia and Iowa retain an explicitly declared marriage across households in specified state calculations.
Iowa and Oregon
Iowa's shared-room and prior-SSI inputs default to false. Same-month entry alone does not establish a shared room, and SSI awarded after separation does not establish prior receipt. See 441 IAC 51.4(3) and 6-B, PDF p.60.
For co-resident legacy situations, current or reported SSI approximates pre-entry receipt. Separated spouses need the explicit prior-SSI fact. Iowa retains the qualifying entry-month couple budget while excluding unrelated adults.
Oregon pays legally married spouses who each receive SSI and community-based care services, whether they occupy one facility or two. See OAR 461-155-0630(3) and the spouse definition in OAR 461-001-0000(62).
Validation
312e3ff4ca, 47 YAML files covering SSI, Medicaid, CAPI and state supplements passed 850 cases, including 660 cases in the 34 destination files. The property file passed 80 cases in Rest, Python shard 1, processcore-1.core-2. That contributed about 12% of the group's 1,656.749 pytest seconds.312e3ff4ca, run 42153104620 recorded 93.159 seconds across the property's 80 cases, including fixtures. Its sharedcore-1process ran 977 tests, took 29:06.43 including collection and peaked at 8,475,532 KiB (8.083 GiB).core-2process ran 340 tests, took 28:39.95 including collection and peaked at 6,723,600 KiB. The two process measurements cover different groups of files.7e5c7a2cde, run 42650265254 ran the property file's 80 tests in Rest, Python shard 4, in a process that passed 662 tests in 1,920.71 seconds.7e5c7a2cdepassed all 36 jobs on GitHub's merge with main052f399495.Merge of
mainatba9bfdea75(head7e5c7a2cde). Onlynj_medical_expense_deduction.yamlconflicted. Main (#10667) keeps the 72-year-old dependent's income and self-employed deduction on the dependent's own return. With this branch, MSP and the SSI buy-in pay the dependent's Part B premium, so the deduction comes to 0 (main: 220). Main's new Colorado AND-CS readers (#10161) now use this branch's couple test, as Old Age Pension does:state_is_marriedfor the $20 disregard split andstate_couple_totalfor spouse deeming.co_state_supplement.yamlCase 42 pins a couple beside a claimed third adult. At this head, one file per process: 99 files passed 1,931 tests with none failing, and 56 partner files that name SSI, Medicaid or supplement variables passed 252, none edited.Not in this PR
With omitted marital units, spouses who file separately receive different couple budgets: only the spouse who claims a child includes that child's term. California's dependent-child premium case produces $23,880 of annual countable income per spouse with omitted marital units and $29,880 with explicit units. Main has the same difference.
Remaining SSI-methodology readers include
is_optional_senior_or_disabled_income_eligible,medicaid_optional_senior_or_disabled_income_limit,is_optional_senior_or_disabled_asset_eligible,msp_asset_eligible,msp_countable_income,ms_hmw_resource_eligible,ms_wd_resource_eligible,ms_wd_countable_earned_income,ms_wd_countable_unearned_income,ms_wd_fpgandms_wd_premium. They retain marital-unit calculations.Medicaid's LTSS screen (#9184) keeps its marital-unit couple budgets, because a community spouse lives apart and SSI's co-residence test would drop them. Colorado's AND-CS Medicaid gate,
co_state_supplement_deeming_exempt, keeps its reach across the marital unit, tax unit and household, so it still covers every spouse or parent the deemed-income reader can find.We still omit SSI's citizenship condition when classifying income couples (#10481). Spousal income deeming still omits the $30 medical-facility exception and related separation rules (#10455).
We still omit a non-applicant spouse's premiums under California Medicaid deeming. We also omit that spouse's maintenance need deduction (#10543). When only California's facility input separates a CAPI couple, the own-income calculation still omits in-kind support and the student earned-income exclusion.
A lone married pair with one spouse inferred as the other's tax dependent needs explicit tax roles. Parent and dependent facts exclude known nonspouses; unlabelled default groups can still infer a marriage.
Microsimulation impact
We estimate that this PR lowers SSI by $29.3m (0.05%) in 2026 on the default dataset, and household net income by $20.6m. We compared
mainatba9bfdea75with this branch at7e5c7a2cde.SSI falls for 6 sampled people (22,516 weighted), each by at most $2,957. Other benefits in their households rise by $8.7m in total, so household benefits and household net income each fall by $20.6m, by at most $2,483 in one household. At this head,
is_ssi_ineligible_spouseholds only for a person without aged, blind or disabled status who lives with an aged, blind or disabled spouse. It now holds for 8.8 million weighted people, against 179.6 million onmain, and the deeming flagis_ssi_spousal_deeming_appliesdoesn't change.Federal and state income taxes, Medicaid eligibility and enrollment, SSI eligibility, joint claims and the resource test don't change. Neither do state benefits, the California supplement, Colorado's Old Age Pension, Medicare Part B premiums, MSP coverage of those premiums or New Jersey's medical expense deduction. California's CAPI and the Colorado State Supplement come to $0 on
mainand on this branch.ssiis_ssi_ineligible_spouseis_ssi_spousal_deeming_appliesssi_claim_is_jointis_medicaid_eligiblemedicaid_enrolledhousehold_state_benefitsca_state_supplementca_capico_state_supplementco_oapmedicare_part_b_premiummsp_part_b_premium_coveragenj_medical_expense_deductionincome_taxstate_income_taxhousehold_benefitshousehold_net_incomeimpact: SSI −$29.3m (−0.05%) in 2026 on the default dataset, for 6 sampled people (22,516 weighted); household net income −$20.6m; income taxes and Medicaid eligibility don't change
axiom: TheAxiomFoundation/rulespec-us#1706 queued, extended with a comment (20 CFR 416.1163(d)-(f), 416.1801(c), 416.1806, 416.1160(d); same corpus-release blocker as TheAxiomFoundation/rulespec-us#1626). Resource deeming: TheAxiomFoundation/rulespec-us#1626 queued, extended with a comment.
🤖 Generated with Claude Code