Skip to content

Limit SSI spousal-deeming child allocations to the couple's co-resident children - #10146

Open
MaxGhenis wants to merge 28 commits into
mainfrom
ssi-ineligible-child-allocation-scope
Open

MaxGhenis wants to merge 28 commits into
mainfrom
ssi-ineligible-child-allocation-scope

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

20 CFR 416.1163(b) deducts an allocation for each ineligible child from an ineligible spouse's income before it is deemed to an SSI claimant. 416.1160(d) defines an ineligible child as "your natural child or adopted child, or the natural or adopted child of your spouse ... who lives in the same household with you, and is not eligible for SSI benefits". PolicyEngine-US summed the allocations over the claimant's tax unit, with an ineligible child defined as anyone under 18 who is not aged, blind or disabled. As a result:

  • grandchildren and other relatives in the claimant's tax unit were allocated;
  • the couple's children filed in another tax unit were not;
  • tax-unit members living in another household were.

This PR sums the allocations over the couple's co-resident children. It also brings the child test and the allocation amount into line with the regulation.

What changes

  • New ssi_spousal_deeming_child_allocations (Person, in from_ineligible_spouse/). For each person, it sums ssi_ineligible_child_allocation over the members of their household who are their child or their co-resident spouse's child. The person and their spouse are excluded. The spouse comes from the SSI spouse test _ssi_spouse_index (_ssi_spouses.py).
    • Child with parent ids (parent_1_id, parent_2_id): counts when an id names the person or the spouse among the household's members. Ids include step parents, which covers "the natural or adopted child of your spouse". An id naming a parent who lives elsewhere does not resolve, so a child living elsewhere never counts.
    • Child without ids: the documented no-link proxy in _parent_links.py applies. The child counts when they are in the person's or the spouse's tax unit and live in the person's household. In a household where anyone has ids, the child also needs the person or the spouse to be an unlinked parent: a parent some of whose children no id names. Without ids, a grandchild in that tax unit still cannot be told apart from a child; the docstring and a YAML case say so.
    • Spouse-to-spouse scope. 416.1160(d) also lists "the natural or adopted child of your parent or of your parent's spouse". SSA gives spouse-to-spouse deeming only the children of either member of the couple. POMS SI 01310.115 A.3: "an ineligible child is either a natural or adopted child of an: Eligible individual or the eligible individual's spouse; or An ineligible parent or the ineligible parent's spouse". POMS SI 01310.140 A: "Any of the couple's children (or children of either member of the couple)". So the claimant's own siblings are not counted.
  • ssi_earned_income_deemed_from_ineligible_spouse, ssi_unearned_income_deemed_from_ineligible_spouse read that total instead of add(person.tax_unit, ...). The earned side no longer multiplies the allocations by the person's own is_ssi_aged_blind_disabled. See "The earned-side ABD flag" below.
  • is_ssi_ineligible_child applies 416.1856 (via 416.1101), which 416.1160(d) uses for "child".
    • Under 18, or a student regularly attending school under the deeming-specific limit: under 21 before 2008-06-16, under 22 afterward (POMS SI 01310.115 A.3). The general SSI child age parameter remains distinct. Full-time students stand in for the latter, as in the student earned income exclusion. New parameter gov.ssa.ssi.eligibility.child.student_age_limit (22; 42 U.S.C. 1382c(c)).
    • Unmarried, using a separate legal-marriage classification that recognizes spouses living apart and preserves the default-group safeguards. The co-resident spouse lookup remains separate.
    • Not the head of a household.
    • "Not eligible for SSI" now also covers aged, blind or disabled children who fail the citizenship or qualified-noncitizen condition, as is_ssi_eligible_individual does. The income and resource tests are not read: they depend on deemed income and so on these allocations.
  • ssi_ineligible_child_allocation:
    • No allocation for a child receiving public income-maintenance payments (416.1163(b)), read from a new input, ssi_receives_public_income_maintenance, which defaults to false.
    • Student wages: a student child's earned income is excluded up to the 416.1112(c)(3) amounts before it reduces the allocation (416.1161(c); POMS SI 01320.185 applies this to any student child). The exclusion runs month by month until its yearly limit is used up (POMS SI 00820.510).
    • Losses: a child's net loss counts as no income. On main, a child with a $20,000 business loss got a $25,964 allocation, above the $5,964 maximum, and negative unearned income raised the allocation or offset wages. Earned and unearned income are now each floored at zero.
    • Monthly budgeting: each month's allocation is floored at zero (416.1163(b)(2)), with annual income spread evenly over the year. Allocations remain monthly through spouse and parent deductions, exclusions, deeming thresholds, SSI countable income, benefit floors and caps. Annual outputs aggregate completed monthly calculations.

The earned-side ABD flag

main multiplied the child allocations by the person's own aged/blind/disabled flag on the earned side only. That changes no benefit:

  • SSI reads the two deemed variables only through is_ssi_spousal_deeming_applies and ssi_income_deemed_from_ineligible_spouse, both defined_for = "is_ssi_eligible_individual", which requires aged, blind or disabled status. Whenever SSI uses the values, the flag is 1.
  • The values are nonzero for someone who is not aged, blind or disabled only when their co-member is an is_ssi_ineligible_spouse. On main that test uses tax roles, so in a couple where neither is aged, blind or disabled each carries the other's income as "deemed" (Apply 416.1163(e)(2) to deemed SSI and identify SSI couples by marriage, not tax roles #10141 replaces that test).
  • Connecticut SSP and Minnesota MSA read the raw values. Their benefits are gated on is_ssi_eligible (CT, ct_ssp_categorically_eligible) and on aged, blind or disabled status (MN, mn_msa_eligible_person).

I checked this directly. For a couple in CT, MN and TX where neither spouse is aged, blind or disabled, earning $24,000 and $30,000 with unearned income of $1,200 and $600 and two children:

  • The raw earned deemed amounts change from $30,000 and $24,000 on main to $18,672 and $13,272 here, and CT's ct_ssp_gross_income and ct_ssp_countable_income change with them.
  • ssi, ct_ssp, mn_msa_person and mn_msa_guardian_fee are identical on both: all zero.

The symmetric version follows 416.1163(b)(3): allocations come out of unearned income first, then earned.

Worked cases

All amounts are annual model outputs for the claimant. Each row is a YAML case with expectations from the regulation, POMS or SSA's rate tables.

Case main This PR Rule
416.1163(g) Ex. 1, the Todds (1986): no deeming after Mike's $168 same same 416.1163(b), (d)(1)
416.1163(g) Ex. 2, the Joneses (1986): countable $232, SSI $272/month same same 416.1163(b), (d)(2)
POMS SI 01320.400 D.2, Jack (2024): countable $495 same same 416.1163(b)
Ex. 1 with Mike receiving public income-maintenance payments: $252 deemed, countable $232 n/a (no input) $2,784/yr deemed 416.1163(b) exception
Grandchild in the grandparents' tax unit, ids name the father: spouse unearned $600 allocated; no deeming; SSI $11,928 not allocated; deeming; SSI $10,932 416.1160(d)
Spouse's son from another relationship, lives with the couple, claimed by his mother elsewhere not allocated; SSI $10,932 allocated; SSI $11,928 416.1160(d) "child of your spouse"
The couple's daughter, claimed by a co-resident grandmother not allocated; SSI $10,932 allocated; SSI $11,928 416.1160(d)
The couple's 19-year-old full-time student who files her own return, $300/month wages not a child allocated in full 416.1856(a)(2), 416.1161(c)
Tax-unit son living permanently in another household (no ids) allocated; SSI $11,928 not allocated; SSI $10,932 416.1160(d) "lives in the same household"
Linked household, a second child without ids, no unlinked parent allocated not allocated _parent_links.py contract

is_ssi_ineligible_child.yaml and ssi_ineligible_child_allocation.yaml add the 416.1856 cases (21-year-old student, 22-year-old student, 16-year-old household head, married 17-year-old, disabled undocumented child). They also add the allocation cases:

  • public income-maintenance payments;
  • unearned income;
  • student wages below the monthly exclusion;
  • student wages after the yearly limit is used up: $1,000 a month gives $4,700 = 9 × $497 + $227;
  • student wages above the monthly exclusion: $2,600 a month gives $1,228 = 4 × $307;
  • a non-student's wages.

Run against main with the new variables stripped, 14 of the first 26 new YAML cases fail. The 416.1163(g) and POMS examples pass on both, as they should.

Invariants

policyengine_us/tests/core/test_ssi_spousal_deeming_child_allocations.py runs three derandomized Hypothesis batches of 30 random households each. A household has a married couple and up to five others: children of either or both spouses, grandchildren of a co-resident adult, unrelated children and other adults. Some live elsewhere and are filed in assorted tax units, and parent ids are given to everyone, no one or some people.

  1. Differential. Every person's total equals an oracle written in the test from the regulation and the parent-link contract, without the model.
  2. Spouses agree. Both spouses of a couple see the same total.
  3. Order-free. Listing people in reverse gives the same totals.
  4. Monotone. Raising every child's unearned income never raises a total.
  5. Deemed unearned income is the spouse's unearned income less the total, floored at zero (416.1163(b)(3)).

A second test checks each child's ssi_ineligible_child_allocation against a month-by-month oracle of 416.1163(b)(1)-(2) and 416.1161(c), on three batches of 60 random children. It also checks that allocations are never negative, never exceed 12 × $497, and never rise with income.

Mutation check: 5 of 6 seeded bugs fail the test:

  • dropping the spouse's children;
  • ignoring the parent-link contract;
  • dropping the spouse's tax unit from the proxy;
  • treating ids and the proxy as alternatives;
  • testing links per tax unit instead of per household.

The survivor removes the child != spouse guard. It is equivalent: a co-resident spouse is married, so is_ssi_ineligible_child is false for them. The guard stays as a statement of the rule. The month-by-month test fails on the earlier annual computation of the allocation.

Tests run locally

Validated for review r4 at 9968f387224e43cec90e17d6546cfb57ee352ea5. 20 YAML files, 182 cases passed, plus 2 property tests passed. This includes every changed test file and every file from the round-2 table. Every file ran alone, serially, in the foreground, using the assigned interpreter and local PYTHONPATH, with OMP, OpenBLAS, MKL, VECLIB and NumExpr threads capped at four and OMP_WAIT_POLICY=PASSIVE. make format and git diff --check pass. No folder suite or microsimulation was run.

File (under policyengine_us/tests/) Passed
policy/baseline/gov/ssa/ssi/eligibility/income/deemed/ssi_unearned_income_deemed_from_ineligible_parent.yaml 3
policy/baseline/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_spouse/ssi_income_deemed_from_ineligible_spouse.yaml 11
policy/baseline/gov/ssa/ssi/eligibility/status/is_ssi_ineligible_child.yaml 12
policy/baseline/gov/ssa/ssi/eligibility/income/deemed/ssi_ineligible_child_allocation.yaml 10
policy/baseline/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_spouse/ssi_spousal_deeming_child_allocations.yaml 13
policy/baseline/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_parent.yaml 4
policy/baseline/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_spouse.yaml 5
policy/baseline/gov/ssa/ssi/eligibility/income/deemed/ssi_income_deemed_from_ineligible_spouse.yaml 6
policy/baseline/gov/ssa/ssi/ssi_countable_income.yaml 10
policy/baseline/gov/ssa/ssi/ssi_amount_if_eligible.yaml 10
policy/baseline/gov/ssa/ssi/ssi_if_takes_up.yaml 4
policy/baseline/gov/ssa/ssi/eligibility/income/ism/ssi_in_kind_support_and_maintenance.yaml 5
policy/baseline/gov/ssa/ssi/eligibility/resources/deemed/ssi_resources_deemed_from_ineligible_parent.yaml 39
policy/baseline/gov/ssa/ssi/integration_tests.yaml 10
policy/baseline/gov/hhs/medicaid/income/deemed/from_ineligible_spouse/medicaid_optional_senior_or_disabled_income_deemed_from_ineligible_spouse.yaml 6
policy/baseline/gov/hhs/medicaid/income/deemed/from_ineligible_parent/medicaid_optional_senior_or_disabled_unearned_income_deemed_from_ineligible_parent.yaml 8
policy/baseline/gov/hhs/medicaid/income/medicaid_optional_senior_or_disabled_countable_income.yaml 8
policy/baseline/gov/hhs/medicare/savings_programs/income/msp_countable_income.yaml 7
policy/baseline/gov/states/ca/chhs/wdp/eligibility/ca_wdp_eligible.yaml 10
policy/baseline/gov/states/ca/chhs/wdp/eligibility/ca_wdp_ssi_ssp_income_eligible.yaml 1
core/test_ssi_spousal_deeming_child_allocations.py 2

Known limitations

  • SNAP and other public income-maintenance payments. From 30 Sept 2024, SNAP is a public income-maintenance payment (POMS SI 01320.141). SSA makes no allocation for a child recorded as receiving it (EM-24047 REV, C.5). The new input is not derived from modeled SNAP, because SNAP counts SSI as income and that would make SSI depend on itself. Until it is supplied, allocations are overstated for children in SNAP households.
  • Child's income. It is ssi_earned_income and ssi_unearned_income less the student exclusion. The other 416.1161(a) items are not removed separately.
  • SSI eligibility of children. A blind or disabled child who meets the citizenship condition is treated as SSI-eligible even if they would fail the resource test. The 416.1166 rules for an eligible child living with an eligible individual and an ineligible spouse are not modeled.
  • Data without parent ids. The proxy cannot tell a grandchild in the tax unit from a child. Enter a temporarily absent child, such as one away at school under parental control, in the household they remain a member of (416.1167, POMS SI 01310.165).
  • Parent-to-child deeming. This PR now scopes child allocations to the relevant co-resident children in SSI and Medicaid, aligns each recipient divisor with its own immigration rules, and excludes recipients from their allocation pool. Parent income and living-allowance grouping still use the existing tax-unit expressions; Deem SSI parental income from the child's co-resident parents, not the tax unit #10159 replaces those expressions with co-resident parent pools.
  • Timing. Current-income budgeting remains the model convention; statutory retrospective payment timing is not modeled. Historical monthly status uses month-start parameters, without mid-month proration. California WDP retains its documented annual screen approximation through an explicit annual helper instead of treating the new monthly flag in December as a whole-year result.

Impact

Rerun at the current head (2026-10-20). Main 1661d715bd against head 66bbf518d4 (2026) gives the same figures as the earlier run at 47f4a1a770, shown below:

  • SSI +$12.11M on 3 records;
  • household net income and household benefits +$12.10M;
  • federal and state income tax unchanged;
  • the deemed-income intermediates as listed.

The CI repair didn't change the microsimulation paths, so the earlier figures stand; an earlier note here wrongly said they were probably affected.

Impact (hub, 2026-10-19). A real microsimulation on the default dataset for 2026, main at the merge base f9b55fc4dd against head 47f4a1a770, under the shared heavy lock. Sums are weighted.

Output 2026 change Records changed (weighted)
ssi +12.11M 3 (12,165)
household_benefits +12.10M 3 (12,165)
household_net_income +12.10M 5 (14,073)
income_tax +0 0 (0)
state_income_tax +0 0 (0)

SSI rises by $12.1M on 3 records (12,165 weighted), and household benefits and net income rise by the same amount. Federal and state income tax don't change.

Intermediate deeming variables. These are weighted sums over all records, so they aren't program dollars:

Output 2026 change Records changed (weighted)
ssi_countable_income -880.29M 9650 (16,851,078)
ssi_income_deemed_from_ineligible_spouse -868.24M 1275 (2,775,928)
ssi_unearned_income_deemed_from_ineligible_spouse -9.64bn 4768 (10,396,855)
ssi_earned_income_deemed_from_ineligible_spouse -396.89bn 27928 (55,553,629)
ssi_unearned_income_deemed_from_ineligible_parent -12.06M 26 (46,028)
ssi_ineligible_child_allocation +22.01bn 3278 (8,014,271)
is_ssi_ineligible_child +4.05M 1222 (4,412,493)
is_ssi_spousal_deeming_applies -26,040 6 (26,040)

medicaid_income_deemed_from_parents is not a variable on either side, so it wasn't compared. Comparison file: ~/reviews/us-hub/fixes/10146-impact/compare.2026.json.

Review r2: responses

All six executed review scenarios were rerun on merged head ff19c9dee1 before formula fixes; each reproduced the reported defect. The ordinary YAML runs recorded two parent, two status, and two spousal-budget failures. The later net-loss clamp did not address these nonnegative-income cases.

Finding Change Evidence: before → after
1. Adult student living elsewhere allocated in parental deeming SSI and Medicaid sum allocations only for relevant co-resident children using the parent-link contract. New parent YAML: deemed income $5,868 → $11,832; claimant SSI $6,300 → $336.
2. Immigration classification versus recipient divisor SSI uses citizen/SSI-qualified status; Medicaid uses its own immigration eligibility. Recipients are excluded from their allocation pool, and nonrecipients receive zero deemed income. TX sibling case: citizen deemed $2,934 → $5,868; undocumented sibling $2,934 → $0; citizen SSI $9,234 → $6,300. CA case also checks broader Medicaid coverage: $4,656 deemed to each Medicaid recipient while SSI remains separately classified.
3. Marriage required a co-resident spouse Separate marriage classification recognizes tax head/spouse roles and established marital units across households, with parent/default-group guards. Status YAML: married student allocation $5,964 → $0; claimant SSI $11,928 → $10,932.
4. Historical student age limit New deeming-specific age parameter: 21 before 2008-06-16, 22 afterward; general SSI limit unchanged. 1986 age-21 case: allocation $2,016 → $0; SSI $4,032 → $3,264. May/July 2008 status cases check the transition.
5. Monthly allocations averaged before thresholds/caps Keep monthly deductions, exclusions, deeming thresholds, floors and SSI benefit caps through aggregation; update Medicaid/MSP consumers to read monthly amounts. Spouse YAML: $1,000/month student wages gives SSI $11,928 → $11,762 and spouse deemed $1,160; $2,600/month gives SSI $11,928 → $11,264 and spouse deemed $4,640. Individual monthly benefits are asserted too.

Authorities: 416.1165(b), (e)(2), 416.1856(b), 416.1806(a)(1), POMS SI 01310.115 A.3, 416.1163(d), (e)(2). Medicaid's separate child immigration categories follow 42 U.S.C. 1396b(v); MSP income uses SSI methodology under 42 U.S.C. 1396d(p)(1)(B).

Merge with main

Merged gh/main at f9b55fc4dd05f1bed921a4dd06cb8c81f6ceb2c7 using merge commit ff19c9dee1. The sole conflict was ssi_ineligible_child_allocation.yaml; both sides' cases were preserved. Main's pretax-premium fixtures now explicitly set nonstudent status to isolate that rule from this PR's student exclusion; their expected amounts are unchanged.

Read-only inspection confirms #10159 at c7fa16172c90388404a173cce6f0c2350b54a62c already restricts parental allocations by co-residence and applies SSI immigration status. This PR has standalone fixes. The trial git merge-tree reports two content conflicts, in the SSI and Medicaid parent-income formulas; no add/add conflict occurs. Resolution must retain #10159's parent-pool grouping together with this PR's monthly units and Medicaid-specific recipient mask. The stacked branch was not changed. A suggested integration patch is retained as untracked hub evidence; it is not a tested combined head.

Review r3: responses

Starting PR head was 204532dad75f84002e7e1f07958407e34e4f89ba, as requested. git merge gh/main reported “Already up to date” at f9b55fc4dd05f1bed921a4dd06cb8c81f6ceb2c7; no new conflict or resolution was needed. The earlier round-2 merge/resolution above remains part of this branch.

Finding Response Evidence
P2: Missouri imported SSI adult-student allocations Apply the state's allocation-child scope before the shared co-resident relationship sum and deduction sequence. Missouri admits only under-18 allocation children. The Medicaid recipient mask remains separate from SSI eligibility. Added Missouri does not allocate to a co-resident adult student. Single parent with $24,000 unearned income; disabled citizen claimant 10; co-resident student 20. Before: $5,868, one failed/four passed. After: $11,832 = ($2,000-$20-$994)*12. SSI's student allocation remains $5,964.
Other states affected by the same import Added sourced allocation-age ceilings and state child-definition filters before aggregation. Tests keep several households from different states in one population, plus boundary and below-boundary controls. A Georgia age-21 control caught and fixed the parameter expansion's generated zero limits; only positive sourced ceilings constrain allocations. Medicaid parent YAML now has 7 scenarios, including two new vectorized scenarios covering 26 households. These checks preserve the existing shared income/deduction amounts; they are not certification of every pre-existing state budget.
P2: Axiom scope overstated Posted one dispatch-ready #1706 extension under d1142. It queues historical POMS age limits, explicit 416.1165 parental recipient/allocation scope, Medicaid binding to the already encoded 1396b(v) module, and the newly constrained state allocation scope. Comment supplies proposed module/corpus paths, verbatim official law, exact YAML companions pinned to e9794af1c0fa25ee8ed1bcd1e315d581f8921754, and the current corpus-admission/signed-encoder blockers. No encoding run or PR comment/review request was made.

The fail-before YAML run reports:

medicaid_optional_senior_or_disabled_unearned_income_deemed_from_ineligible_parent@2026:
[0, 5868, 0] differs from [0, 11832, 0]
1 failed, 4 passed

The same Missouri witness passes after the correction. The final parent file, including the added state controls, passes all seven scenarios.

State allocation scope checked

The formula's callers and parameters route it across all 50 states and DC; it is not a Missouri/Connecticut-only formula. The review was expanded accordingly. Confirmed outer age ceilings now constrain SSI allocation candidates before the shared deduction:

Allocation scope States Official authority examples
Under 18 MI, MO, NJ, NY, OH MO step 1, MI BEM540, NJ 10:71-5.5, NY Allocation, OH B2/B8
Under 21 outer limit, including the state's student conditions CA, FL, ID, LA, MT, NC, TX, VA Sources are cited individually in income/deeming/ineligible_child_age_limit.yaml; NC IV.A, FL 2240.0606.03, TX G-2312
Minor or dependent 18-year-old; neither blind nor disabled WI Medicaid Eligibility Handbook 15.1.2; the dependent-18 condition uses full-time secondary-school (or equivalent-level training) attendance under MEH 1.1.3.3, independent of tax role. Enrollment proxies expected completion before 19; see choice 7 below.

FL, LA, NY, VA and WI additionally require allocation children to be nonblind/nondisabled, independently of immigration eligibility. The two mixed-state scenarios are named Review r3 state age ceilings exclude adult students from Medicaid parental allocations. and Review r3 state allocation definitions preserve eligible students and exclude disabled children. They assert unchanged SSI allocations alongside Medicaid outputs, so a Medicaid-only filter cannot silently change SSI.

Other jurisdictions checked: AK, AL, AR, AZ, CO, CT, DC, DE, GA, HI, IA, IL, IN, KS, KY, MA, MD, ME, MN, MS, ND, NE, NH, NM, NV, OK, OR, PA, RI, SC, SD, TN, UT, VT, WA, WV, WY. Available official manuals, rules, state plans and source excerpts were inspected; these checks did not establish a new narrower parental allocation age ceiling beyond those implemented. Some sources instead establish a different pre-existing budget structure, while some current manual/route bindings remain unresolved. Those cases are expressly not treated as verification of the shared SSI budget.

Broader pre-existing differences found include CT's AFDC tax-dependent needs budget, CA's maintenance-need family budget, AZ allocations for other eligible children, state application/receipt predicates, and TX/ID/MT allocations for nonstudents 18–20. Those broader definitions/amounts have not been rebuilt in this response. Primary-source access or interpretation gaps remain for AK's current manual, CO's current consolidated rule and the binding of its unemancipated-child definition to allocation children, IN's age-21 wording, ME's full current manual, OK's current parental allocation-age binding, and some programme-to-formula bindings. State ceilings use the shared income model's existing 2015 coverage baseline; the parameter dates do not claim a legal change in 2015. Validation here is for the 2026 witnesses, not a complete historical state-law audit.

For the hub to queue for Max, proposed follow-up title: Rebuild and verify state-specific ABD Medicaid parental allocation budgets.
Reconcile family-needs amounts, nonstudent adult-child allocations, application/receipt predicates and state recipient rules with each programme's manual.
Complete unresolved current-source and programme-to-formula checks before claiming full all-state parity; no public issue was opened.

Methodology — for the hub to queue for Max

The seven review choices are recorded below. Choices 1–6 retain their behaviors; choice 7 records the remaining Wisconsin completion proxy after replacing tax dependency with the education condition. “Pre-existing” refers to the main merge base; new applications of an older proxy are called out separately.

Choice PR's pick Alternative and reviewer's number New in this PR or pre-existing PolicyEngine convention
1. Regular-attendance proxy Use is_full_time_student for regularly attending school. Apply SSA's attendance criteria, including eight college hours weekly. A qualifying part-time student can receive $5,964/year versus $0 under the PR proxy. New application in this PR of a pre-existing proxy. Full-time attendance already governed the SSI student earned-income exclusion; this PR newly extends deeming allocations to adult students using that proxy.
2. Tax-unit relationship proxy for grandchildren When parent IDs are unavailable, presume the tax-unit dependent is the claimant's or spouse's child, subject to the household/link safeguards. Explicit genealogy distinguishes grandchildren. An otherwise qualifying grandchild yields $5,964 with the proxy versus $0 with explicit parentage. Pre-existing convention retained, with new safeguards and support for separately filing spouses. The base spouse formulas summed child allocations across the tax unit; the PR now honors explicit parent links and co-residence.
3. Recipient eligibility without financial test Use aged/blind/disabled status plus SSI immigration eligibility for the recipient/divisor and ineligible-child classification; omit income/resource tests because of their dependency on deemed income. Include resource eligibility. In the reviewer's hand illustration, a disabled sibling with $3,000 countable resources changes deemed income from $5,916 to $5,868. Pre-existing omission retained. The base allocation classification and parent divisor used ABD status without the financial test; this PR newly adds the immigration condition.
4. Historical limit applied at month start Read the dated deeming student age parameter at the month's start; the June 16, 2008 increase from under 21 to under 22 first affects July. Apply the change during June; the allocation difference can be $319. The required June treatment remains unverified. New in this PR. Both the historical deeming-age parameter and the decision to apply it through monthly status were introduced here.
5. Current-month budgeting versus retrospective Calculate current-month budgets; spread annual income evenly across months, apply monthly exclusions/floors/caps, then sum. Model retrospective budgeting under §416.1160(b). For a January initial claimant in the $1,000-wage case, retrospective benefits are $11,928 versus $11,762 under current-month budgeting in 2026. Pre-existing current-period/no-retrospective convention retained; monthly execution is new. The base formulas used the current annual period's income and no prior-period payment lag; the PR introduces monthly execution to enforce monthly student exclusions and caps.
6. California WDP annual approximation Preserve an annual comparison of aggregate post-allocation spouse income with the annualized FBR differential. Apply the monthly SSI deeming flag in the WDP screens. $2,500 < $5,964 suppresses annual deeming, although monthly SSI deeming applies in two months. Pre-existing approximation retained. The new WDP helper preserves the base annual threshold comparison after the federal SSI flag became monthly.
7. Wisconsin expected completion before 19 At age 18 require is_in_secondary_school (including equivalent-level vocational/technical training) and is_full_time_student, regardless of tax role. Full-time secondary enrollment proxies expected completion before 19 because the model has no expected-completion or remaining-credit input. Apply the complete MEH 1.1.3.3 test. For an 18-year-old full-time secondary student who will not finish before 19, the proxy yields $5,868 deemed income versus $11,832 under the full legal test, a $5,964 allocation difference. Students carrying only the credits needed to finish must be classified as full-time under the manual. New application of existing attendance inputs/proxy in this PR. Review r4 replaces the unsupported tax-role gate; expected completion remains approximated and is queued for Max as choice 7.

All seven remain for the hub to queue for Max.

Review r4: responses

Starting PR head was e9794af1c0fa25ee8ed1bcd1e315d581f8921754, matching the assignment. git merge gh/main reported “Already up to date” at f9b55fc4dd05f1bed921a4dd06cb8c81f6ceb2c7; no conflict or new resolution was required.

Finding Response Evidence: before → after
P2: Wisconsin used tax dependency instead of the dependent-18 education condition Require age 18, is_in_secondary_school (which includes equivalent-level vocational/technical training), and is_full_time_student; retain the minor exception and existing under-19 ceiling. Tax role does not determine Wisconsin's education condition. Parent with $24,000 unearned income, disabled claimant age 10, and co-resident high-school senior age 18 earning $9,000 in a separate tax unit: $11,832 → $5,868. Tax-dependent senior stays $5,868.
School-level and tax-role controls Replace the former tax-proxy expectation with the separate-tax-unit senior witness. Add a vectorized scenario with tax-dependent and independent college students, a secondary student without full-time status, and a minor without student status. Tax-dependent full-time college student: $5,868 → $11,832; independent college student remains $11,832. Secondary/non-full-time student remains $11,832; minor/nonstudent remains $5,868. The college students' raw SSI allocations remain $5,964, confirming the school-level restriction applies to Medicaid.
Methodology choice 7 No expected-completion-before-19 or remaining-credit input exists. Full-time secondary enrollment is the closest existing proxy. Add explicitly numbered choice 7 above for Max, including the financial consequence and the manual's remaining-credit rule. This removes tax dependency as the legal-condition proxy. Expected completion remains approximated; it is not represented as fully modeled.

Authorities: MEH 1.1.3.3 defines dependent 18-year-olds through full-time secondary/equivalent attendance and expected completion before 19; MEH 15.1.2 applies that definition to allocation children; MEH 15.5.8 supports excluding the seniors' $9,000 earnings. The hand calculation is ($2,000 - $497 - $20 - $994) * 12 = $5,868.

Fail-before (new legal-condition YAML expectations, unchanged formula):

Independent high-school senior: 11832.0 differs from 5868.0
Tax-dependent college student: 5868.0 differs from 11832.0
2 failed, 6 passed, 1 warning in 12.81s

Pass-after (same file and expectations):

8 passed, 1 warning in 11.76s

Review r4 validation reran all 20 YAML files / 182 cases in the table above and 2 property tests. Every file ran in its own process, serially and in the foreground with the assigned Python interpreter, local PYTHONPATH, all five thread caps at four, and OMP_WAIT_POLICY=PASSIVE. make format and git diff --check pass. One property-test import was interrupted while diagnosing a slow WDP invocation; the direct retry passed both tests and is the result counted here. No microsimulation was run. No PR comment or review request was made.

Review r5: responses

P2: Wisconsin now accepts is_in_secondary_school | is_in_k12_school inside the age-18/full-time gate, so younger K–12 pupils cannot enter this extension; both original r4 witnesses retain is_in_k12_school without is_in_secondary_school and change $11,832 → $5,868, while college controls remain $11,832. The unchanged witness passes 2/2; Medicaid parent-income and SSI parent/spouse deeming pass 10 + 3 + 11 = 24 cases, each file alone in the foreground with thread caps at four; make format passes.

CI regressions: responses

Validation boundary: the complete 230-file / 2,122-test sweep and the original nine-file comparison below were completed before merging current main, at 9dabd073bf99f0c2989def4678b6ec894baca3be (222 YAML files / 1,979 cases and eight Python files / 143 tests). They are historical pre-merge results; they do not claim a complete sweep on the merged head. Completed validation after the merge is reported separately below.

Confirmed the original PR head 47f4a1a770260db71a0473e76ffd5c6e20c2b87a against clean main f9b55fc4dd05f1bed921a4dd06cb8c81f6ceb2c7. All nine files passed on main; the original head failed 26 of 126 cases. Every existing numerical expected value remains unchanged; six monthly assertion targets in two PR-added witnesses were renamed as listed below.

Root cause Fix and retained behavior
Public annual income variables had changed to monthly definitions, changing unchanged scalar inputs in monthly fixtures by a factor of 12. Louisiana's annual ssi_countable_income: 60 was read as $60/month instead of $5/month; Connecticut read annual spouse amounts of $7,200 and $3,600 as monthly, raising countable income from $155.50 to $8,405.50. The PMV/spouse witness likewise read $2,160 instead of $180 and raised SSI countable income from $411.67 to $2,391.67. Restore the 11 existing public annual currency interfaces and the annual public is_ssi_spousal_deeming_applies flag. Separate internal *_monthly variables retain monthly exclusions, floors, allocations, thresholds and benefit caps. Route monthly state supplement, Medicaid/MSP, SSI benefit and resource consumers directly through those monthly budgets.
Splitting exact annual Medicaid input amounts into float32 months and summing them again could move income just above an inclusive limit. Florida's $13,772 became $13,772.0009765625. Mississippi's $22,000 + $7,214 became $29,214.001953125, exceeding its $29,214 couple limit. Keep supplied annual inputs in the annual public variables, preserving their exact annual values. Monthly formulas read one twelfth only when an annual amount was supplied; calculated annual aggregates never replace individual monthly budgets.

The living-arrangement witness also exposed the same input-contract issue in is_ssi_spousal_deeming_applies: a scalar override in a January fixture affected only January after that public flag became monthly, so an annual PMV calculation used it for only one twelfth of the year. Its public input is annual again; monthly benefit calculations read is_ssi_spousal_deeming_applies_monthly, while a calculated public annual flag keeps the original PR stock semantics by returning December's value. The shared annual-input helper records the input-presence dependency so Core invalidates cached monthly budgets when a branch supplies its first annual override. It honors annual neutralization/abolition and keeps the existing override-branch fallback for older supported Core versions. The Python API regression has 25 cases: annual and monthly-period input overrides for 11 currency inputs and the flag, plus branch/cache isolation using a calculated $10,800 annual aggregate with distinct $1,000 January and $800 July budgets. The monthly budgets remain distinct after the annual cache is populated.

Annual currency interfaces: ssi_countable_income, ssi_unearned_income_deemed_from_ineligible_parent, ssi_earned_income_deemed_from_ineligible_spouse, ssi_unearned_income_deemed_from_ineligible_spouse, ssi_income_deemed_from_ineligible_spouse, ssi_ineligible_child_allocation, ssi_in_kind_support_and_maintenance, ssi_pmv_amount, medicaid_optional_senior_or_disabled_countable_income, medicaid_optional_senior_or_disabled_unearned_income_deemed_from_ineligible_parent, medicaid_optional_senior_or_disabled_income_deemed_from_ineligible_spouse. Annual status input: is_ssi_spousal_deeming_applies.

Test-only witness target renames are limited to the two PR-added cases in policyengine_us/tests/policy/baseline/gov/hhs/medicaid/income/deemed/from_ineligible_spouse/medicaid_optional_senior_or_disabled_income_deemed_from_ineligible_spouse.yaml:

  • Student earning $1,000/month: January 0, October 0, and November 580 now assert medicaid_optional_senior_or_disabled_income_deemed_from_ineligible_spouse_monthly; annual 1,160 remains asserted on the public annual name.
  • Student earning $2,600/month: January 0, April 0, and May 580 now assert that same *_monthly variable; annual 4,640 remains asserted on the public annual name.

These are six assertion-target renames across two new witnesses. Every input and numerical expected amount is unchanged; no test inherited from main was modified. The source audit found zero pre-existing nested-month assertions on the affected public interfaces across 218 main-existing surface files, and all 94 legacy scalar assertions remain unchanged. The monthly targets preserve the allocation and deeming threshold checks required by 20 CFR 416.1163(b), (d), and (g). The pre-merge production implementation was 9d5777d3ccb5de922f5c47824d046321c5408ece; no Core monkeypatch was introduced.

Per-file comparison below uses passed / failed; each file ran alone in each state.

File under policyengine_us/tests/ Clean main Original head Fixed pre-merge head
policy/baseline/gov/hhs/medicaid/eligibility/categories/is_optional_senior_or_disabled_income_eligible.yaml 32 / 0 31 / 1 32 / 0
policy/baseline/gov/states/la/hhs/oss/la_oss.yaml 13 / 0 9 / 4 13 / 0
policy/baseline/gov/ssa/ssi/ssi_living_arrangement_integration.yaml 15 / 0 14 / 1 15 / 0
policy/baseline/gov/states/ms/dom/hmw/eligibility/ms_hmw_income_eligible.yaml 5 / 0 4 / 1 5 / 0
policy/baseline/gov/states/in/fssa/ssp/integration.yaml 9 / 0 7 / 2 9 / 0
policy/baseline/gov/states/fl/dcf/oss/fl_oss.yaml 8 / 0 4 / 4 8 / 0
policy/baseline/gov/states/fl/dcf/oss/fl_oss_eligible.yaml 7 / 0 6 / 1 7 / 0
policy/baseline/gov/states/fl/dcf/oss/edge_cases.yaml 28 / 0 17 / 11 28 / 0
policy/baseline/gov/states/ct/dss/ssp/income/ct_ssp_countable_income.yaml 9 / 0 8 / 1 9 / 0

Reviewed witnesses rerun: 20 YAML files / 184 cases passed, plus 2 allocation property tests passed. This includes absent students, immigration/divisor agreement, married children, historical student ages, the $1,000/$2,600 monthly cap witnesses, Missouri and all 14 state ceilings, Wisconsin's age-18 education rule and both unchanged r4/r5 K–12 witnesses, pretax premiums, and California's annual WDP screen.

Full affected surface, counting unique files across the focused and remaining-surface phases on pre-merge production code (unchanged-file results reused after the test-only refactor): 222 YAML files / 1,979 cases passed: 36 SSI files, 161 state-program files (direct SSI income/deeming and supplement-helper readers plus SSI benefit consumers), 21 Medicaid-category files, and 4 Medicaid/MSP income witness files. All 8 Python files passed (143 tests). No files in that pre-merge sweep were left unfinished; that complete sweep was not repeated in full on the merged head.

Python file under policyengine_us/tests/ Passed Skipped
core/test_ssi_spousal_deeming_child_allocations.py 2 0
core/test_ssi_resource_deeming_invariants.py 9 0
core/test_ssi_state_supplement_medicaid_dependency.py 15 0
core/test_ssi_disability_criteria_inputs.py 2 0
unit/test_medicaid_abd_ssi_rate_standard_properties.py 81 0
utilities/test_ssi_payment_timing.py 4 0
core/test_medicaid_household_income_invariants.py 5 0
core/test_ssi_annual_income_inputs.py 25 0

The new API file uses 29 production classes (five dependencies plus 12 public/monthly pairs), passed 25 tests, and measured 30.78s wall time / 1.18 GiB peak RSS for its standalone process, including country import. It uses one small Core system with production variable classes and shared read-only country parameters; it runs in the existing Rest/core group. No CI runner was added.

All validation ran one file per foreground process, serially, with OMP, OpenBLAS, MKL, VECLIB and NumExpr capped at four threads and OMP_WAIT_POLICY=PASSIVE. No microsimulation was run. make format passed. At the current head, git diff --check flags one trailing space at ssi_income_deemed_from_ineligible_spouse_monthly.py:19, a docstring line copied verbatim from main. Numerical expectation changes made by this CI repair: none. Six monthly assertion targets in two PR-added witnesses were renamed as detailed above; no inherited main tests were modified.

Main merge and post-merge validation

Merged current main 05b9da3e9283160355b41614d36422f6111a7540 (advanced from f9b55fc4dd05f1bed921a4dd06cb8c81f6ceb2c7) into the repaired branch at merge commit e5d2604aa3efb61f8b4cc5c4e7af95c8a5539c29. That validation ran at 8573f6ada38a3ac51e59fed709ad780a0fdeff3f, which has since been superseded: the current head is 66bbf518d4, after the North Carolina revert and a main merge. The prior complete sweep was on 9dabd073bf99f0c2989def4678b6ec894baca3be. Completed results below belong to the serial post-merge validation phase, with no claim that the complete earlier sweep was repeated after each follow-up commit.

The Colorado conflict retains main's new co_state_supplement_countable_income helper, which counts each AND-CS client's own income rather than half the couple's pooled SSI income. Four references were then routed to the extracted monthly calculations: Colorado's new helper reads ssi_in_kind_support_and_maintenance_monthly and ssi_countable_income_monthly; Texas eligibility reads ssi_countable_income_monthly and ssi_income_deemed_from_ineligible_spouse_monthly. New Mexico's SSI-receipt gate remains as merged from main. Public annual input interfaces are preserved.

Expectation changes inherited from upstream are separate from this CI repair: main corrected Colorado couple eligibility and own-income treatment, New Mexico's separate benefit groups for spouses receiving SSI, and Texas's reduced-facility-rate and personal-needs rules. The corresponding CO/NM/TX tests and Colorado partner-contract expectations were imported from current main without local expectation edits. Their sources are 9 CCR 2503-5, §§3.546–3.549, 8.106.400.10(C) NMAC, 8.106.500.10 NMAC, 1 TAC 358.381(c)(2), and HHSC H-6000.

The original CI repair changed no numerical expected values; separate post-merge corrections and their validation status are listed below. Its original witness adaptations remain the six assertion-target renames in the two PR-added Medicaid monthly-cap cases, preserving January/October/November 0/0/580, January/April/May 0/0/580, and public annual totals 1,160/4,640. Those extracted monthly targets preserve the same allocation/deeming rules under 20 CFR 416.1163. The original nine regression files retain all numerical expected values.

Completed post-merge results recorded at 2026-10-19 17:53:21 UTC: 35 fully passing files / 531 passed cases/tests (26 YAML files / 356 cases; 9 Python files / 175 tests). These counts come only from complete successful records in postmerge/results.jsonl, postmerge-nc/results.jsonl; unrecorded or failing files are not credited as passing. A file present in multiple phases is counted once using its latest selected record.

The targeted post-merge plan contains 77 files: 42 have no completed result record and 0 have a latest nonpassing/unparseable record. The complete affected surface was not rerun on the merged head; 199 of 234 full-surface/additional checks lack a complete successful merged-head record.

Original nine-file comparison uses passed / failed. The pre-merge columns retain the completed historical comparison; the last column reports only completed merged-head reruns.

File under policyengine_us/tests/ Clean original main Original PR head Fixed pre-merge head Merged head
policy/baseline/gov/hhs/medicaid/eligibility/categories/is_optional_senior_or_disabled_income_eligible.yaml 32 / 0 31 / 1 32 / 0 32 / 0
policy/baseline/gov/states/la/hhs/oss/la_oss.yaml 13 / 0 9 / 4 13 / 0 13 / 0
policy/baseline/gov/ssa/ssi/ssi_living_arrangement_integration.yaml 15 / 0 14 / 1 15 / 0 15 / 0
policy/baseline/gov/states/ms/dom/hmw/eligibility/ms_hmw_income_eligible.yaml 5 / 0 4 / 1 5 / 0 5 / 0
policy/baseline/gov/states/in/fssa/ssp/integration.yaml 9 / 0 7 / 2 9 / 0 9 / 0
policy/baseline/gov/states/fl/dcf/oss/fl_oss.yaml 8 / 0 4 / 4 8 / 0 8 / 0
policy/baseline/gov/states/fl/dcf/oss/fl_oss_eligible.yaml 7 / 0 6 / 1 7 / 0 7 / 0
policy/baseline/gov/states/fl/dcf/oss/edge_cases.yaml 28 / 0 17 / 11 28 / 0 28 / 0
policy/baseline/gov/states/ct/dss/ssp/income/ct_ssp_countable_income.yaml 9 / 0 8 / 1 9 / 0 9 / 0

Completed successful merged-head files:

File under policyengine_us/tests/ Passed Skipped
policy/baseline/gov/hhs/medicaid/eligibility/categories/is_optional_senior_or_disabled_income_eligible.yaml 32 0
policy/baseline/gov/states/la/hhs/oss/la_oss.yaml 13 0
policy/baseline/gov/ssa/ssi/ssi_living_arrangement_integration.yaml 15 0
policy/baseline/gov/states/ms/dom/hmw/eligibility/ms_hmw_income_eligible.yaml 5 0
policy/baseline/gov/states/in/fssa/ssp/integration.yaml 9 0
policy/baseline/gov/states/fl/dcf/oss/fl_oss.yaml 8 0
policy/baseline/gov/states/fl/dcf/oss/fl_oss_eligible.yaml 7 0
policy/baseline/gov/states/fl/dcf/oss/edge_cases.yaml 28 0
policy/baseline/gov/states/ct/dss/ssp/income/ct_ssp_countable_income.yaml 9 0
policy/baseline/gov/states/co/ssa/state_supplement/co_state_supplement.yaml 19 0
policy/baseline/gov/states/co/ssa/state_supplement/co_state_supplement_countable_income.yaml 3 0
policy/baseline/gov/states/co/ssa/state_supplement/co_state_supplement_eligible.yaml 11 0
policy/baseline/gov/states/nm/hca/ssi_supplement/integration.yaml 9 0
policy/baseline/gov/states/nm/hca/ssi_supplement/nm_ssi_state_supplement.yaml 4 0
policy/baseline/gov/states/nm/hca/ssi_supplement/nm_ssi_state_supplement_eligible.yaml 8 0
policy/baseline/gov/states/nm/hca/ssi_supplement/nm_ssi_state_supplement_historical.yaml 3 0
policy/baseline/gov/states/tx/hhsc/ssi_state_supplement/integration.yaml 15 0
policy/baseline/gov/states/tx/hhsc/ssi_state_supplement/tx_ssi_state_supplement_eligible.yaml 11 0
policy/baseline/partners/analytics_coverage/edge_cases/state/co/state_supplement.yaml 3 0
core/test_ssi_state_supplement_couple_invariants.py 6 0
policy/baseline/parameters/test_uprating_extensions.py 31 0
core/test_ssi_annual_income_inputs.py 25 0
policy/baseline/gov/hhs/medicaid/eligibility/categories/medicaid_category.yaml 12 0
policy/baseline/gov/states/in/fssa/ssp/medicaid_snap_cycle.yaml 9 0
policy/baseline/gov/states/ks/kdhe/sspp/medicaid_snap_cycle.yaml 7 0
policy/baseline/gov/states/mo/dss/ssp/mo_ssp_eligible.yaml 48 0
policy/baseline/gov/states/mo/dss/ssp/mo_ssp_immigration_status_eligible.yaml 19 0
policy/baseline/gov/states/nc/ncdhhs/sa/nc_sa.yaml 40 0
core/test_ssi_spousal_deeming_child_allocations.py 2 0
core/test_ssi_resource_deeming_invariants.py 9 0
core/test_ssi_state_supplement_medicaid_dependency.py 15 0
core/test_ssi_disability_criteria_inputs.py 2 0
policy/baseline/gov/states/nc/ncdhhs/sa/nc_sa_rate.yaml 9 0
unit/test_medicaid_abd_ssi_rate_standard_properties.py 81 0
utilities/test_ssi_payment_timing.py 4 0

North Carolina: this PR no longer changes North Carolina. Commit 9852fb964a removes the 2027 Special Assistance rate update that 8573f6ada3 had added, because #10288 sets those rates to the approved COLA ($1,447 / $1,857, G.S. 108A-42.1) and #10279 already updated main's Case 37. At head 66bbf518d4, every North Carolina SA parameter and test file is identical to main. The two NC rows in the table above are from the earlier head.

RuleSpec: the SSI allocation and deeming work remains queued under the existing issue; no new public issue was opened.

Targeted checks without a completed merged-head record:

  • core/test_medicaid_household_income_invariants.py
  • policy/baseline/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_parent.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_spouse.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_spouse/ssi_income_deemed_from_ineligible_spouse.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_spouse/ssi_spousal_deeming_child_allocations.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/income/deemed/ssi_income_deemed_from_ineligible_spouse.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/income/deemed/ssi_ineligible_child_allocation.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/income/deemed/ssi_unearned_income_deemed_from_ineligible_parent.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/income/is_ssi_blind_or_disabled_working_student_exclusion_eligible.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/income/ism/ssi_in_kind_support_and_maintenance.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/income/ssi_blind_or_disabled_working_student_exclusion.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/resources/deemed/is_ssi_spousal_resource_deeming_applies.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/resources/deemed/ssi_resources_deemed_from_ineligible_parent.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/resources/deemed/ssi_resources_deemed_from_ineligible_spouse.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/resources/meets_ssi_resource_test.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/ssi_marital_both_eligible.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/status/is_ssi_ineligible_child.yaml
  • policy/baseline/gov/ssa/ssi/eligibility/status/ssi_federal_living_arrangement.yaml
  • policy/baseline/gov/ssa/ssi/income/ssi_earned_income.yaml
  • policy/baseline/gov/ssa/ssi/income/ssi_engaged_in_sga.yaml
  • policy/baseline/gov/ssa/ssi/income/ssi_marital_earned_income.yaml
  • policy/baseline/gov/ssa/ssi/income/ssi_marital_unearned_income.yaml
  • policy/baseline/gov/ssa/ssi/income/ssi_unearned_income.yaml
  • policy/baseline/gov/ssa/ssi/integration_tests.yaml
  • policy/baseline/gov/ssa/ssi/is_ssi_aged_blind_disabled.yaml
  • policy/baseline/gov/ssa/ssi/is_ssi_disabled.yaml
  • policy/baseline/gov/ssa/ssi/is_ssi_eligible.yaml
  • policy/baseline/gov/ssa/ssi/is_ssi_qualified_noncitizen.yaml
  • policy/baseline/gov/ssa/ssi/meets_ssi_disability_criteria.yaml
  • policy/baseline/gov/ssa/ssi/ssi.yaml
  • policy/baseline/gov/ssa/ssi/ssi_amount_if_eligible.yaml
  • policy/baseline/gov/ssa/ssi/ssi_claim_is_joint.yaml
  • policy/baseline/gov/ssa/ssi/ssi_countable_income.yaml
  • policy/baseline/gov/ssa/ssi/ssi_couple_computation_applies.yaml
  • policy/baseline/gov/ssa/ssi/ssi_if_takes_up.yaml
  • policy/baseline/gov/ssa/ssi/uncapped_ssi.yaml
  • policy/baseline/gov/hhs/medicaid/income/deemed/from_ineligible_spouse/medicaid_optional_senior_or_disabled_income_deemed_from_ineligible_spouse.yaml
  • policy/baseline/gov/hhs/medicaid/income/deemed/from_ineligible_parent/medicaid_optional_senior_or_disabled_unearned_income_deemed_from_ineligible_parent.yaml
  • policy/baseline/gov/hhs/medicaid/income/medicaid_optional_senior_or_disabled_countable_income.yaml
  • policy/baseline/gov/hhs/medicare/savings_programs/income/msp_countable_income.yaml
  • policy/baseline/gov/states/ca/chhs/wdp/eligibility/ca_wdp_eligible.yaml
  • policy/baseline/gov/states/ca/chhs/wdp/eligibility/ca_wdp_ssi_ssp_income_eligible.yaml

axiom: TheAxiomFoundation/rulespec-us#1706 queued (SSI allocation/couple and parental deeming provisions already queued; POMS SI 01310.115 A.3 historical age limits; 20 CFR 416.1160(d), 416.1165; Medicaid recipient binding to 42 U.S.C. 1396b(v); state allocation-age and child-definition producers; extension TheAxiomFoundation/rulespec-us#1706 (comment); corpus admission and protected signed encoder blocked)

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 12, 2026 06:30
…nt children

20 CFR 416.1163(b) deducts an allocation for each ineligible child, which
416.1160(d) defines as the claimant's or the spouse's child who lives in the
same household and is not eligible for SSI. The allocations were summed over
the claimant's tax unit, so grandchildren and other relatives filed there
counted, the couple's children filed elsewhere did not, and tax-unit members
living in another household did.

- New ssi_spousal_deeming_child_allocations sums allocations over
  co-resident children whose parent ids name the claimant or the spouse.
  Without ids it keeps the tax-unit grouping (extended to a separately
  filing spouse), restricted to co-residents and, in households with
  links, to unlinked parents, as the parent-link contract requires.
- is_ssi_ineligible_child applies 416.1856 (under 18, or under 22 and a
  student; unmarried; not a household head) and treats aged, blind or
  disabled children without qualifying immigration status as ineligible.
- ssi_ineligible_child_allocation makes no allocation for a child receiving
  public income-maintenance payments (new input) and excludes a student
  child's wages up to the 416.1112(c)(3) amounts (416.1161(c)).
- Earned and unearned deeming now read the same allocation total; the
  earned side no longer multiplies it by the person's ABD flag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….400 Jack case

POMS SI 01310.115 A.3 and SI 01310.140 A limit spouse-to-spouse allocations
to children of either member of the couple; SI 01320.141 adds SNAP to the
public income-maintenance payments from 30 Sept 2024 and SI 01320.410 keeps
the allocation for a TANF family-cap child; SI 01320.185 applies the student
earned income exclusion to any student child.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 12, 2026 08:10
…clusion monthly

416.1163(b)(2) reduces each month's allocation by that month's income, and
the 416.1112(c)(3) student exclusion runs month by month until its yearly
limit is used up (POMS SI 00820.510). The annual computation let income left
over in months after the yearly limit ran out reduce the allocation for
earlier months. Add a month-by-month differential test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
416.1163(b)(1)-(2) caps the allocation at the couple rate less the individual
rate, reduced by the child's income. On main a child with a $20,000 business
loss got a $25,964 allocation, and negative unearned income raised it or
offset wages. Floor earned and unearned income at zero separately.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 23 commits October 19, 2026 01:42
#10288 sets North Carolina's 2027 Special Assistance rates to the approved COLA, and #10279 already updated main's Case 37. This PR is about SSI child allocations, so the North Carolina change belongs there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings in main through 1661d71, including #10279's update to North Carolina SA Case 37.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings in main through f198773 (#10185, #10133, #10279 and others) so CI runs on the combined tree. The two sides share no files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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.

1 participant