Repository navigation
Conversation
The Colorado AND-CS, Texas Medicaid-facility and New Mexico adult residential care supplements gated on is_ssi_eligible_individual, which is false for the tax-unit-spouse member of an SSI couple. Each state's rule pays every SSI recipient on their own (9 CCR 2503-5 3.546-3.548; HHSC MEPD H-1500 and H-6000; 8.106.400.10(C) and 8.106.500.10 NMAC), so gate on SSI receipt instead, the repo's convention for SSI-recipient programs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One vectorized simulation of 48 married couples checks that eligibility is SSI receipt, that the result does not depend on which spouse is the tax-unit head, that two citizen spouses are treated alike, and that a spouse failing the SSI citizenship condition is never eligible. main fails the first three; the is_ssi_eligible_individual | is_ssi_eligible_spouse alternative fails the fourth. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review round 1 (GPT-6.1 Sol): - Colorado: 9 CCR 2503-5 3.549(A) counts each AND-CS client's own income, with the $20 disregard split between spouses and no deeming between SSI-recipient spouses (3.549(F)). The model used ssi_countable_income, which halves a joint claim's pooled income. New co_state_supplement_countable_income does the per-client count where SSI's couple computation applies and keeps the federal amount elsewhere. - Texas: H-6000 keeps a facility resident eligible for SSI when countable income "does not exceed" the $30 reduced standard, and 42 USC 1382(a)(1)(A) agrees, so gate on SSI eligibility within the limit (a $0 payment included) plus take-up, or reported receipt. - One reference per document for the CO rule PDF. Also reverts the partner fixture edit: partner API contract tests change only after Ziming Hua approves (CLAUDE.md). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ients 3.549(A)(2)(f) applies "the difference between the gross unearned income and the $20.00 deduction" to earnings only when the client's unearned income is under $20, and (A)(2)(a) counts unearned income "from all sources", SSI included. So an AND-CS client, who always receives SSI, gets no share of the disregard on earnings unless their gross unearned income is under $20. This matches Axiom's encoding of 3.549 (us-co:regulations/9-ccr-2503-5/3.549). co_state_supplement_countable_income becomes MONTH so it can read that month's SSI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n CO Review round 2 (GPT-6.1 Sol): - Texas: testing uncapped_ssi admitted an SSI-abolished resident and a resident on the own-household rate whose income equalled it. Test H-6000's condition directly: countable income not over the $30 reduced standard, with SSI not abolished. - Colorado: a joint couple's in-kind support and maintenance is one presumed maximum value (ssi_pmv_amount), which SSI splits between the spouses; count half of it for each spouse, not all of it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9 CCR 2503-5 3.546(E) sets a $13 AND-CS payment floor from January 1, 2026, and 3.549(B), (H) raise a grant below it with a state supplementary payment. Under 3.520.781(A) a client whose total countable income equals or exceeds the grant standard is not eligible, so the floor tops up only positive grants. co_state_supplement_countable_income now applies 3.549 to every client, not only SSI couples: own income under 3.549(A), plus income deemed from a spouse (3.549(C)-(D)) or from a child's parents (3.549(E)), except from a spouse or parent on SSI, Old Age Pension or Medicaid with income within the SSI limit (3.549(F), dated March 1, 2020). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test_co_and_cs_invariants.py checks, over Hypothesis-drawn single and married clients in one simulation per example: the payment rule and its bounds, that 3.549(A) never counts less than SSI for a single client (and the same where SSI's and Colorado's disregards coincide), that the 3.549(F) Medicaid exemption only lowers countable income, monotonicity in a non-exempt spouse's earnings, and invariance to tax-unit roles. AND-CS now reads medicaid_enrolled_for_ssi_state_supplement for the 3.549(F) exemption, so Colorado joins the SSP/SNAP/Medicaid calculation order test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Stacked follow-up: #10183 (draft) does this PR's 'Colorado ISM for clients in another person's household' follow-up, based on head 🤖 Generated with Claude Code |
…oat floor - 3.549(F) Medicaid prong: read co_state_supplement_medicaid_enrolled, computed in a private branch with January's AND-CS set to zero. It keeps the SNAP route to Medicaid's community engagement exemption (SNAP counts AND-CS as income) and gives the same answer whatever is calculated first. medicaid_enrolled_for_ssi_state_supplement drops that route and answers from the cache when Medicaid was calculated first. - 3.549(E): deem from the parents the child's parent ids name, whatever their age; without ids, the tax unit's unlinked parents other than the child. A grandparent named only as the mother's parent no longer counts, and a 17-year-old parent now does. - Before March 2020, 3.545(F) excluded only the benefit income itself, so no spouse or parent is exempt from deeming, SSI recipients included. - The payment floor tests eligibility on the grant in cents: a single client whose 3.549(A) income equals SSI's sits exactly at the standard, and single precision left a grant of $0.00006 that the floor raised to $13 (found by the property test; YAML Case 32). - Property tests compare countable income only for clients who receive SSI, as 3.546 requires; regression test for the review's examples. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
co_state_supplement_medicaid_enrolled now computes medicaid_enrolled in a branch where it is itself false for everyone, rather than one where January's AND-CS is zero. AND-CS in the branch deems every Medicaid spouse's or parent's income, so it is no higher than its final value and SNAP is no lower: one step from the final fixed point, from the conservative side. The parent never holds this variable before computing it, so get_override_branch always shares the parent's cache. This matches co_oap_medicaid_enrolled in #10176, so the two can merge into one Adult Financial variable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.520.79(B)(6) charges an AND-CS client the ISM SSA charges, and SSA's presumed maximum value halves once spousal deeming starts. Spousal earnings that cross SSI's deeming threshold therefore lower the client's ISM by about as much as the deemed earnings rise, and countable income can fall by cents. Found by Hypothesis in the ISM session (#10183); pinned by test_ism_basis_switch_at_ssi_deeming_threshold. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hua7450
left a comment
There was a problem hiding this comment.
Review at aaa00d545d: the policy checks out; the tests and the merge need work
The payment floor ($13 from 2026-01-01, positive grants only), 3.549(A) for every client, (C)–(E) deeming and the 2020-03-01 date for (F) all match 9 CCR 2503-5.
Please fix
co_state_supplement_medicaid_enrolledignoresreceives_medicaid. 3.549(F) and 3.534(C) both say "receiving ... Medicaid", and #10176'sco_oap_medicaid_enrolledcounts reported coverage. Keep that route when the two variables merge.co_state_supplement_deeming_exempt.yaml:- Cases 1, 2 and 4 pass through Medicaid: the default person is an enrolled adult with no income, so the SSI and OAP routes are untested. Add
co_state_supplement_medicaid_enrolled: false, as Case 7 does. - Cases 8–10 use
2020-02/2020-03with scalar inputs for YEAR variables (co_state_supplement_medicaid_enrolled,state_code). Those inputs are stored for a year starting that month and ignored, so Case 9 passes through the default CA household's Medicaid. Useperiod: 2020with month-keyed outputs, or key the inputs by year.
- Cases 1, 2 and 4 pass through Medicaid: the default person is an enrolled adult with no income, so the SSI and OAP routes are untested. Add
- Merging main (#10145 and #10176 have landed; 7 files conflict, each changed on one side only):
- Merge the two Medicaid branches into one Adult Financial variable, with the reported-coverage route and OAP's skip guard, so AND-CS and OAP don't open nested branches.
- Judge OAP receipt by month, as main's OAP does, rather than
co_oap(year) > 0. - Use one reading in both programs for the (f) spillover (full $20 here, the married half in OAP) and for whether an SSI recipient needs the income test (OAP applies it, AND-CS doesn't).
- The PR body puts the Medicaid dependency test in Rest/core; the Makefile runs it in heavy-a. Re-measure after the merge.
Optional
- 2014–2020: 3.545(B)(1) based the spillover on "unearned income from all sources except SSI". It changes countable income only, not payments; worth a line under "Readings to check".
- References:
earned_share.yamlputs a single page in its title;assistance_exemption_applies.yamldates 3.545(F) January 1, 2020, but the section is marked "Eff. 3/2/14";payment_floor.yamlcould cite packet page 1. - Invariant 4: scope only the countable-income assertion; the supplement check still holds.
Stacked on #10145 (base
ssi-supplement-couple-spouse-eligibility). This retargets tomainonce #10145 merges. Review only the commits after3d1da21317.Summary
Colorado AND-CS (
co_state_supplement) gets two changes under 9 CCR 2503-5 (ruleVersionId 12428):ssi_countable_income. Now:The payment floor
History. I extracted 3.546 from all 51 versions of 9 CCR 2503-5 on the SOS site (2012-09-15 through 2026-03-02). The floor first appears in the January 1, 2026 emergency rule (ruleVersionId 12318). Before then, 3.546(C) allowed only discretionary "MOE" lump sums, and SSA's 2002 and 2011 Colorado reports give the pass-along method as "maintaining total expenditures". So
payment_floor.yamlis $0 until 2026 and $13 from 2026-01-01.Who gets it. CDHS's rulemaking packet (2025-00596) gives the AND-CS caseload as "approximately 250 individuals" and the "Estimated amount to meet payment floor" as $285. If the floor paid every disabled SSI recipient under 60 with a $0 grant, it would cost thousands of times that. The 3.520.781(A) reading matches.
3.546's "but are not receiving the full SSI benefit standard". 3.510 defines the SSI benefit standard as the maximum federal SSI amount (20 CFR 416.405-415). Since 2012 the AND-CS grant standard has equaled the individual rate ($994 in 2026). A single client receiving the full individual rate therefore already has total countable income of at least $994, which 3.520.781(A) excludes. So the PR adds no separate gate. A member of an SSI couple (each $745.50) is not on the full individual standard and stays a client, as #10145 and SSA's 2011 Colorado table (couple standard $1,398 = 2 × $699) have it. Axiom's
and_cs_client_qualifies_for_programtakes this as a leaf input,client_receives_full_ssi_benefit_standard_under_section_3_510.3.549 outside SSI couples
ssi_countable_income(before)Dating (F). The current (F) took effect March 1, 2020 (ruleVersionId 8577). The 2014–2020 rule (3.545(F), effective 3/2/14) read: "If a spouse or parent is receiving assistance under another category of public assistance, SSI benefits, or medical assistance, the income from those benefits shall not be considered as available to the client". That excludes only the benefit income, which the deemed sources here never include, so
income/deeming/assistance_exemption_applies.yamlis false before 2020-03-01 and no one is exempt. Two consequences:Medicaid enrollment for (F). From 2027 the Medicaid community engagement requirement can be met by belonging to a household that receives SNAP (42 CFR 435.554(c)(7)). SNAP counts AND-CS as income, so a spouse's Medicaid enrollment can depend on the client's supplement.
co_state_supplement_medicaid_enrolledcomputesmedicaid_enrolledin a private branch where the variable itself is false for everyone. Before work requirements apply, it ismedicaid_enrolled. In the branch, AND-CS deems every Medicaid spouse's or parent's income, so it is no higher than its final value and SNAP is no lower: one step toward the fixed point, from the conservative side. The branch keeps the SNAP route to enrollment, which matters for spouses: PE's caretaker exemption covers disabled dependents, not a disabled spouse. The parent never holds the variable before computing it, so the branch always shares the parent's cache, and the answer is the same whatever is calculated first. #10176 uses the same design for OAP (co_oap_medicaid_enrolled). Whichever PR lands second merges the two into one Adult Financial variable.medicaid_enrolled_for_ssi_state_supplement, used by IN and KS, would drop the SNAP route, and it answers from the cache when Medicaid was calculated first.The disregard amounts ($65, one half, $20) are Colorado parameters (
income/disregards/), not SSI's. A reform to SSI's exclusions no longer changes AND-CS.Worked cases (all in YAML)
2026, monthly unless noted. "Before" is #10145's head.
Clients with a positive grant are mostly members of SSI couples (#10145), people in another person's household, and clients whose spouse is exempt under (F) while SSI deems the spouse's income. A single client in their own household has no positive grant: 3.549(A) never counts less than SSI does, and the standard equals the SSI rate. The property tests check this. Eligibility is tested on the grant in cents: in single precision such a client could otherwise be left a grant of $0.00006, which the floor would raise to $13. The property test found this; YAML Case 32 pins it.
Invariants
policyengine_us/tests/core/test_co_and_cs_invariants.pychecks these on Hypothesis-drawn single and married clients (15 examples of up to 8 households, one simulation each). Each married household appears four ways: spouse on Medicaid, spouse not, more spousal earnings, roles swapped.#10145's six couple invariants (
test_ssi_state_supplement_couple_invariants.py) still pass. A mutation check confirmed both files and the YAML fail when the floor is paid on $0 grants or the (F) exemption is dropped.Tests
YAML:
co_state_supplement.yamlCases 20-32, plus Cases 1-13 now feedingco_state_supplement_countable_income(they fedssi_countable_income, which the variable no longer reads). New files:co_state_supplement_own_countable_income.yaml(7),co_state_supplement_deemed_income.yaml(10),co_state_supplement_deeming_exempt.yaml(10).co_state_supplement_countable_income.yamlCase 1 is rewritten and Case 4 added. Every expectation is computed from the rule in the case's comment. All 74 CO AND-CS cases pass, as do all CO YAML (6 batches) and 314 cases in 16 files elsewhere with CO households.test_ssi_state_supplement_medicaid_dependency.py: AND-CS now reads Medicaid for (F), so CO joins the SSP/SNAP/Medicaid calculation-order test (2027, 2030, 2035). Newtest_co_and_cs_spouse_medicaid_through_snapchecks a 2030 couple both ways, with SNAP computed and SNAP supplied: a spouse on Medicaid through SNAP receipt is exempt, and the results do not depend on calculation order. The all-states poverty test there already covers CO. Measured locally on macOS:test_co_and_cs_invariants.py: about 20-30 s, 1.3 GB peak RSS, nearly all of it model import.Both files run in the Rest/core group. Linux CI times are not measured.
Partner fixtures: all CO fixtures and
my_friend_ben/2025.yamlpass exceptco_state_supplement_disabled_ssi_couple_positive. That case is Pay CO, TX and NM SSI supplements to both members of an SSI couple #10145's change, already put to @hua7450 there. This PR changes no other partner output.Readings to check
Not modeled
ssi_parental_deemors, which could replace the local selection once it merges.Impact
No microsimulation yet. The hub's impact queue compares merge-base(main) with the head, so it runs at the final head after #10145 merges (
co_state_supplement).Axiom
axiom: us-co:regulations/9-ccr-2503-5/3.549 (A), (C)-(D), (F) encoded-correct for the cases both encode (companion tests
client_income_disregards_and_grant,ssi_only_client_has_no_unearned_disregard,married_client_standard_spouse_deeming,spouse_assistance_exception_blocks_standard_deeming) | TheAxiomFoundation/rulespec-us#1716 queued (3.546/3.549 floor must require 3.520.781(A)) | TheAxiomFoundation/rulespec-us#1717 queued (3.549(E) parental deeming, (H) total, combined $20, effective dates)Review
Round 1 (GPT-6.1 Sol,
96f5c6e2d4): REQUEST_CHANGES. It confirmed the floor gate (total $994 gives $0; $993.50 gives $13). Five findings, all addressed in87281e2751:medicaid_enrolled_for_ssi_state_supplementdropped the SNAP route and answered from the cache, so a spouse's exemption depended on calculation order. Fixed withco_state_supplement_medicaid_enrolled, plus a regression test.Round 2: pending.
🤖 Generated with Claude Code