Skip to content

Add Vermont state supplementation for 2026 - #10171

Open
hua7450 wants to merge 5 commits into
mainfrom
vt-ssp-2026
Open

hua7450 wants to merge 5 commits into
mainfrom
vt-ssp-2026

Conversation

@hua7450

@hua7450 hua7450 commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

What and why

Vermont's Aid to the Aged, Blind or Disabled (AABD) was missing from PolicyEngine-US. Add vt_aabd for 2026 (33 V.S.A. ch. 13). It has two parts.

The federally administered optional supplement (vt_aabd_federal; POMS SI 01415.058 M; AABD rules 2760–2767).

  • The 2026 rates by OS code:

    Code Arrangement Individual Couple
    A / B Independent $55.68 $105.80
    E Household of another $42.05 $51.69
    C Level III residential care $51.77 $103.54
    G Level IV residential care $239.62 $601.40
    H Custodial care $105.60 $356.12
    I Title XIX facility $49.93 $99.85
  • The payment is the rate less countable income above the FBR (rule 2760), with SSA rounding and the $1 minimum. Spouse deeming follows POMS SI 01320.430 D, through the shared state supplement helper.

  • Care settings come from the vt_aabd_care_setting input, and vt_aabd_living_arrangement derives the code in this order: Title XIX facility, care setting, household of another, independent.

The state-administered Essential Person grant (vt_aabd_ep; rules 2780–2786; ESD Procedure P2740B).

  • The standard is the maximum SSI/AABD payment plus the certified share (100, 67 or 34 percent) of the difference to the Essential Person maximum, less the group's countable income, with cents dropped.
  • An eligible couple gets one grant, at the higher certified level, split between the spouses.
  • The group's income counts only household members (rule 2782). SSI and AABD count in full.
  • The plain inputs vt_aabd_ep_level, vt_aabd_ep_nonspouse_essential_person and vt_aabd_ep_passes_state_resource_test default to off, so entering one for one person leaves other household members unchanged.

AABD is added to the household and SPM benefit totals and to SNAP and HUD unearned income.

References

Additional section and page citations are included alongside the parameters and formulas.

Coverage limits

The registry marks Vermont as partial, verified for 2026.

Not modeled:

  • mandatory grandfathered payments;
  • the state-administered Level III home with limited nursing care (rule 2764.2), and OS code Y (supplement waived).

A spouse who declines SSI still makes a joint federal claim (#10243).

Earlier years use parameter backfilling and are unverified historical estimates; no historical coverage is claimed.

Related:

Test plan

  • 51 Vermont AABD YAML cases (16 in vt_aabd.yaml, 23 in vt_aabd_ep.yaml, 12 in integration.yaml). They cover:
    • each OS code, the income reduction, rounding and the $1 minimum;
    • couples, one spouse in a facility, and two people with an input on one only;
    • every Essential Person level and arrangement, couples with one or two certified levels, and state-only resource determinations;
    • SNAP, HUD, household and SPM benefit wiring.
  • After merging main: all 1,031 Vermont cases pass locally, and the aggregate list integrity and program registry tests pass (677 passed, 10 skipped).
  • ruff format and git diff --check.
  • Changelog fragment in changelog.d/.

axiom: 33 V.S.A. ch. 13; POMS SI 01415.058 M; Vermont AABD rules 2760-2786; ESD Procedure P2740B TheAxiomFoundation/rulespec-us#1786 queued

hua7450 and others added 3 commits October 12, 2026 14:35
…ima and tests

- Count the AABD payment, including the Essential Person grant, as HUD income; drop the HUD helper and shared metadata edit
- Derive Essential Person maxima from the SSI and AABD rates plus one increment parameter
- Name the unmodeled limited-nursing Level III arrangement; clarify the Level III label and POMS citation
- Essential Person gates: receives_ssi auto-pass, no unsourced immigration gate, take-up period, eligible-member couple count
- Spouse flag defaults from the marital unit; drop the application-month proration input
- Registry placement and comments, SNAP reference title, programs.yaml note, page anchors
- Realistic state-only cases; exercise the living-arrangement mapping and HUD counting

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

DTrim99 commented Oct 14, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add Vermont state supplementation for 2026

PR #10171 (author: hua7450, head 6842ff568d, merge-base 2e9eea7e6e). 25 files (+1161/−4), 3 commits.

Summary

The PR adds Vermont's Aid to the Aged, Blind or Disabled (AABD) program. It has two parts: the federally administered optional state supplement, and the state-administered Essential Person (AABD-EP) grant.

  • Parameters (gov.states.vt.dcf.aabd, dated 2026-01-01 unless noted):
    • amount.individual and amount.couple, broken down by vt_aabd_living_arrangement:

      OS code Enum Individual Couple
      A / B INDEPENDENT 55.68 105.80
      E HOUSEHOLD_OF_ANOTHER 42.05 51.69
      C RESIDENTIAL_CARE_LEVEL_III 51.77 103.54
      G RESIDENTIAL_CARE_LEVEL_IV 239.62 601.40
      H CUSTODIAL_CARE 105.60 356.12
      I MEDICAID_INSTITUTION 49.93 99.85
      Y NONE 0 0
    • ep.couple_increment of $183.84 (dated 2025-01-01 and 2026-01-01), ep.employment_expense of $90, and ep.rate by care level (1, 0.67, 0.34, 0).

    • The shared federal gov.ssa.ssi.state_supplement.minimum_payment of $1.

  • Variables (all Person, MONTH):
    • vt_aabd_living_arrangement (defined_for = StateCode.VT) maps a federal medical treatment facility to I and a federal another person's household to E, and everything else to A/B. Residential and custodial care are input-only.
    • vt_aabd_federal calls the shared helper variables/gov/ssa/ssi/_ssi_state_supplement.py. The helper handles the income reduction, couple halving, SI 01320.430 deeming, SSA rounding and the $1 minimum.
    • vt_aabd_ep, the Essential Person grant. It uses five supporting variables:
      • vt_aabd_ep_level: certified care level, input only
      • vt_aabd_ep_is_spouse: defaults from the marital unit
      • vt_aabd_ep_resources_eligible: passes automatically on SSI/AABD receipt; otherwise an input
      • vt_aabd_ep_countable_income: the rule 2786 group income
      • vt_aabd_ep_additional_countable_income: nonspouse and parental income, input only
    • vt_aabd adds vt_aabd_federal and vt_aabd_ep.
  • Aggregates and registry. household_state_benefits (all four year blocks), spm_unit_benefits, SNAP unearned income, HUD unearned income, and a programs.yaml entry (partial, verified_years: "2026").
  • Tests: 42 YAML cases: 14 in vt_aabd.yaml, 17 in vt_aabd_ep.yaml and 11 in integration.yaml.

The 2026 policy content is right:

  • Amounts. All twelve nonzero rate cells match POMS SI 01415.058 M.2, January 2026. The Vermont DVHA 2026 standards table repeats them.
  • Codes. The mapping matches the M.1 code definitions and Vermont AABD rules 2761–2767.
  • Formula. It follows rule 2760: SSI eligibility tests except the income test, and the benefit is the combined level minus countable income.
  • Administration. Federal administration, so SSA rounding and the $1 floor apply (rules 2700 and 2761; 20 CFR 416.2020(c)).
  • Essential Person. The design reproduces all nine published 2026 P2740B maximums from rule 2784, and the income test follows rule 2786.
  • Tests and branch. All 42 expectations check by hand and pass at the head. The branch merges cleanly with main.
  • CI. The one red check is an infrastructure timeout: the job was cancelled at the 1h30m limit with no failed test. It should simply be re-run.

One should-fix item remains: the axiom: needed line isn't valid for a staff PR that adds a program.

Critical (must fix)

None.

Should address

1. axiom: needed isn't valid here, and this PR adds a program.

  • Where: the last line of the PR body, axiom: needed.
  • The rule. main's CLAUDE.md, "Axiom Parity (required for policy changes)":
    • "Put one line in the PR body: axiom: <legal id> encoded-correct | <rulespec PR> encoded | <rulespec issue> queued | n/a: <reason>."
    • "If you are an external contributor and cannot complete the Axiom work, use axiom: needed; a maintainer will follow up." The author is PolicyEngine staff.
    • CONTRIBUTING.md#axiom-parity: "That covers a new program, a parameter or threshold update, an eligibility rule and a bug fix." None of the n/a grounds applies.
  • Nothing to point to yet.
  • Precedent:
  • Fix: file a dispatch-ready pe-parity issue on the Add AMT parameters for 2020-2023 #1467 / DC CDCC #1708 model. Then add a line such as axiom: 33 V.S.A. ch. 13; POMS SI 01415.058 M; Vermont AABD rules 2760-2786; ESD Procedure P2740B TheAxiomFoundation/rulespec-us#NNNN queued. The issue needs:
    • Module paths, mirroring the Delaware modules:

      • us-vt/policies/ssa/poms/si-01415-058/2026/vt-ssp-living-arrangement-variations.yaml
      • us-vt/policies/ssa/poms/si-01415-058/2026/vt-ssp-individual-state-supplement-levels.yaml
      • us-vt/policies/ssa/poms/si-01415-058/2026/vt-ssp-couple-state-supplement-levels.yaml
      • us-vt/regulations/dcf/aabd/2760.yaml for eligibility and benefit, and 2761.yaml for the individual and couple definitions
      • us-vt/regulations/dcf/aabd/2784.yaml and 2786.yaml for the Essential Person payment levels and income
      • us-vt/policies/dcf/esd-procedures/p2740b/2026/aabd-ep-payment-maximums.yaml
    • Corpus citations, plus the blocker if a source isn't in the corpus yet. main's CLAUDE.md: "Use queued only when the signed encoder is blocked; record the blocker in the issue."

    • Verbatim law: the M.1 definitions, the M.2.a and M.2.b rows, rules 2760, 2761, 2784 and 2786, and the 2786 memo, all quoted under Verified correct.

    • Required outputs (Person, monthly):

      • the rate table by OS code
      • Money: max(0, rate − max(0, countable − FBR)), with SSA rounding and the $1 floor
      • the SI 01320.430 deeming step: the lesser of the individual computation and couple rate − excess over the couple FBR
      • the Essential Person standard: max SSI/AABD + share × (EP maximum − max SSI/AABD), minus countable income, with cents dropped
    • Companion tests from POMS M.2 and P2740B, not from PolicyEngine output:

      Case Expected
      A individual, no income SSP 55.68 (total 1,049.68)
      E individual, no income SSP 42.05 (total 704.72)
      G individual, no income SSP 239.62 (total 1,233.62)
      I individual, Title XIX facility SSP 49.93 (total 79.93)
      A couple, no income SSP 105.80 (total 1,596.80)
      H couple, no income SSP 356.12 (total 1,847.12)
      Essential Person maximum, individual, 100% 1,596.80
      Essential Person maximum, couple, 67% 1,719.97
      Essential Person maximum, another's household, 34% 822.00
      Essential Person grant, spouse of an SSI/AABD recipient with no income 1,596.80 − 1,049.68 = 547.12, so 547

Suggestions

  1. Amounts before 2024 (deferral documented in the PR body and Vermont SSP 2017, 2018, 2019 #8346).

    • The deferral. The PR body says "Parameter backfilling does not establish verified historical coverage" and "historical backdating remains separate". programs.yaml claims only verified_years: "2026", and Vermont SSP 2017, 2018, 2019 #8346 ("Vermont SSP 2017, 2018, 2019") is open.

    • The leak. Every rate is dated only 2026-01-01, so each one carries back to 2015. The probe at the head gives each arrangement its 2026 rate for 2015-01, 2019-01, 2020-01 and 2023-01: 55.68, 42.05, 51.77, 239.62, 105.60 and 49.93.

    • What SSA paid. The POMS January charts show:

      Code Jan 2015–Jan 2023 (individual / couple) Jan 2024–Jan 2026 Model, every year
      A / B 52.04 / 98.88 55.68 / 105.80 55.68 / 105.80
      C 48.38 / 96.77 51.77 / 103.54 51.77 / 103.54
      E 39.30 / 48.31 42.05 / 51.69 42.05 / 51.69
      G 223.94 / 562.06 239.62 / 601.40 239.62 / 601.40
      H 98.69 / 332.82 105.60 / 356.12 105.60 / 356.12
      I 17.66 / 35.33 (to Jan 2019); 42.66 / 85.32 (Jan 2020–Jan 2023) 49.93 / 99.85 49.93 / 99.85
      • The sources are SI 01415.047 (Jan 2015), .051 (Jan 2019), .052 (Jan 2020), .055 (Jan 2023), .056 (Jan 2024) and .057 (Jan 2025).
      • Bulletin 23-38, P-2740A (PDF p. 10) dates the step: the new amounts are "Effective 1/1/24", next to an "Effective 1/1/23 – 12/31/23" column with the old ones.
      • The January charts don't show the exact month of the 2019–2020 code I change.
    • The Essential Person couple increment.

      • Bulletin 23-38, P-2740B (PDF p. 11) gives the 2024 couple maximum as "$1,696.25" against $1,520.80, an increment of 175.45. The 2023 figures, $1,641.69 against $1,469.88, give 171.81.
      • The 2025-01-01 value of 183.84 carries back to 2024 and earlier. It overstates the 2024 couple maximum by $8.39 a month.
      • The individual and another's-household Essential Person maximums for 2024–2025 are right, because they derive from the FBR and the (unchanged) AABD share. For example, the model's 2024 individual maximum is 1,415 + 105.80 = 1,520.80, which matches the bulletin.
    • Size of the error. For 2015–2023, the model overstates the supplement per person per month by:

      • $3.64 (A/B), $3.39 (C), $2.75 (E), $15.68 (G) and $6.91 (H)
      • $32.27 for code I to January 2019, and $7.27 for code I from January 2020 to 2023
    • Fix: widen Vermont SSP 2017, 2018, 2019 #8346 to 2015–2023, with a 2024-01-01 step for every row and a 2019–2020 step for code I. Add ep.couple_increment values of 171.81 (2023) and 175.45 (2024).

  2. The Texas rebate reform's copy of spm_unit_benefits now omits vt_aabd.

    • Where: policyengine_us/reforms/states/tx/rebate/tx_rebate.py:53-127 redefines spm_unit_benefits nationwide with a hard-coded list. It lacks vt_aabd, and it already lacks ca_state_supplement.
    • Probe at the head: a Vermont aged SSI-only single in 2027.
      • spm_unit_benefits is 15,901.42 at baseline and 15,233.26 under the reform, a drop of exactly the $668.16 of vt_aabd.
      • spm_unit_net_income falls by the same amount.
      • household_net_income is unchanged at 16,552.42.
    • Fix: insert "vt_aabd", # Vermont benefits after "fl_oss", at line 65, as spm_unit_benefits.py does. Add ca_state_supplement while there, consistent with Add Wyoming state supplementation for 2026 #10174.
  3. Vermont's renter-credit household income omits SSI and the new supplement. The gap is pre-existing and reaches only the TAXSIM aggregate.

    • Where: variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit_income.py:16-20 adds only adjusted_gross_income, vt_renter_credit_countable_tax_exempt_ss and tax_exempt_interest_income.
    • The law counts both.
      • 32 V.S.A. § 6061(5)(B) adds to modified AGI "cash public assistance and relief (not including relief granted under this subchapter)" and "payments received under the federal Social Security Act".
      • The 2025 instructions for Schedule HI-144 (Income Booklet, PDF p. 43) say, for line a: "Enter all payments from the State of Vermont Agency of Human Services except for foster care payments, difficulty of care payments, food stamps, and fuel assistance."
      • For line b: "Social Security benefits also include SSI and SSDI payments."
    • Probe at the head: an aged SSI-only single in 2026 has vt_renter_credit_income of 0. The law gives 11,928 + 668.16 = 12,596.16.
    • Why it is only a suggestion.
      • The SSI omission predates this PR.
      • vt_renter_credit feeds only taxsim_state_property_tax_credit (through state_property_tax_credits.yaml), not net income.
      • An SSI-only renter stays below the lowest one-person 30% AMI limit in the parameter ($21,800, Caledonia County), so the credit doesn't change. Only households near a band edge move.
      • The model has no Vermont homestead property tax credit, so nothing else reads this income.
    • Fix: open a follow-up issue to add ssi and vt_aabd (and other Agency of Human Services cash payments) to vt_renter_credit_income. rulespec-us#1678 treats the § 6061 definitions as leaf inputs, so the change is PolicyEngine-side.
    • Other Vermont programs are already consistent.
      • CCFAP Regulations II B 2 exclude "Public assistance income" (item 5) and "Supplemental Security Income (SSI)" (item 10). Leaving vt_aabd out of vt/dcf/ccfap/income/sources.yaml is right.
      • Reach Up counts tanf_gross_unearned_income, which lists neither SSI nor any supplement.
  4. Write down and pin the couple, deeming and Essential Person readings.

    • Deeming where the couple computation binds. This is correct but untested.
      • Probe at the head: an aged recipient with a 40-year-old spouse earning $3,250 a month.
      • Deemed countable income is (3,250 − 20 − 65) / 2 = 1,582.50. The excess over 1,491 is 91.50, so SSI is 0.
      • vt_aabd is 14.30, which is min(55.68, 105.80 − 91.50).
      • At $3,150 a month, the result is SSI 0 and vt_aabd 55.68.
      • This follows SI 01320.430 D.3.b: "The State supplement amount is the lesser of" the two computations. No case exercises the couple branch; integration Case 10 pins only the individual branch, indirectly.
    • One spouse in a Medicaid facility. Probe: SSI [30, 994] and vt_aabd [49.93, 55.68]. That is right under 20 CFR 416.414(b)(3) but unpinned.
    • An aged, blind or disabled spouse who declines SSI.
      • Probe: two people aged 70, where the spouse has takes_up_ssi_if_eligible: false, get SSI [745.50, 0] and vt_aabd [52.90, 0].
      • SSA would compute the claimant as an individual with an ineligible spouse: 994 + 55.68.
      • Rule 2761 defines a couple as "a husband and wife who are both aged, blind, or disabled". That supports the couple rate at the state level, but SSA computes the combined payment from federal couple status.
      • The cause is the federal ssi_claim_is_joint. Add New Jersey state supplementation for 2026 #10157 documents the same limitation in a NOTE; add one to vt_aabd_federal.py.
    • An Essential Person couple where only one spouse is flagged.
      • vt_aabd_ep.py:33-34 counts the members whose own vt_aabd_ep_level is set.
      • Probe: two SSI recipients aged 70 with only one flagged FULL get vt_aabd_ep [0, 0]. Countable income is 1,596.80, against an individual maximum of 1,596.80.
      • The rule 2784(C) couple maximum of 1,780.64 gives 183, or 91.50 each (integration Case 9).
      • The variable's documentation says "Set both eligible spouses to the same level", but nothing enforces it.
      • Fix: detect the couple from both members being aged, blind or disabled in an Essential Person household (for example marital_unit.any(level != NONE) with both ABD), or add a test pinning the documented behavior.
  5. Assert the spm_unit_benefits wiring.

    • Integration Cases 7, 8 and 11 assert household_state_benefits, SNAP and HUD income, but not spm_unit_benefits. Removing vt_aabd from spm_unit_benefits.py would pass every test.
    • Probe at the head: an aged SSI-only single in 2026 has spm_unit_benefits of 15,608.16.
    • Fix: assert vt_aabd inside a spm_unit_benefits difference, or add a spm_unit_benefits expectation to Case 7.
  6. Polish.

    • Blank lines. The PR adds a stray blank line before metadata: in household_state_benefits.yaml (line 412) and in hud/annual_income/sources/unearned.yaml (line 33). Neither relates to Vermont.
    • Anchors.
      • amount/individual.yaml:11 and amount/couple.yaml:11 title the reference "M.2" but link #m, which opens the M.1 definitions.
      • Point them at #m2a (individual) and #m2b (couple), which both exist, as suggested on Add New Jersey state supplementation for 2026 #10157.
    • Redundant value. ep/couple_increment.yaml repeats 183.84 at 2026-01-01. Drop it, or replace it with the 2023/2024 history in Suggestion 1.
    • Statutory basis. vt_aabd.py cites POMS and the AABD rules but no statute. SSA gives "Statutory basis for payment: Vermont Statutes Annotated, title 33, chapter 13, Aid to Aged, Blind, and Disabled". Add 33 V.S.A. ch. 13: § 1301(3) "Be a recipient of federal Supplemental Security Income, if eligible", and § 1309(a) on federal administration.

Verified correct

  • Rates. POMS SI 01415.058 M.2, "effective January 1, 2026":
    • M.2.a, individual:
      • "A | A | All (Except Chittenden County) | 994.00 | 55.68 | 1049.68"
      • "B | All (Restricted to Chittenden County) | 994.00 | 55.68 | 1049.68"
      • "C | All | 994.00 | 51.77 | 1045.77"
      • "G | All | 994.00 | 239.62 | 1233.62"
      • "H | All | 994.00 | 105.60 | 1099.60"
      • "B | E | All | 662.67 | 42.05 | 704.72"
      • "C | A | ... | 994.00 | 55.68 | 1049.68"
      • "D | I | All | 30.00 | 49.93 | 79.93"
    • M.2.b, couple:
      • "A | A | ... | 1491.00 | 105.80 | 1596.80"
      • "C | All | 1491.00 | 103.54 | 1594.54"
      • "G | All | 1491.00 | 601.40 | 2092.40"
      • "H | All | 1491.00 | 356.12 | 1847.12"
      • "B | E | All | 944.00 | 51.69 | 1045.69". Footnote: "Not the FBR; the amount represents the FBR less VTR". The 944.00 is SSA's misprint for 994.00, as the 1,045.69 total shows.
      • "D | I | All | 60.00 | 99.85 | 159.85"
    • Corroboration.
      • The Vermont DVHA "Standards Change for Healthcare 2026", SSI/AABD Payment Maximums (2700) (PDF p. 7), gives the same AABD shares.
      • ESD Procedure P2740A (Bulletin 25-26) points to that table.
      • Chittenden County and the rest of the state share one rate in 2026, as the vt_aabd_living_arrangement documentation says.
  • Codes (M.1):
    • A: recipients who "are not living in the household of another; are not in a residential or custodial care situation; are under age 18 and live with a parent; reside in a private Title XIX facility where Medicaid is not paying more than 50 percent of the cost of care; reside throughout a month in a publicly operated emergency shelter."
      • The default branch covers these.
      • Probes: a disabled 10-year-old with parents gets 55.68.
      • A facility resident with Medicaid not paying the majority maps to A, with SSI 994 and vt_aabd 55.68. ssi_federal_living_arrangement requires ssi_medicaid_pays_majority_of_care for the medical facility code.
    • E: "recipients who live in the household of another and receive support and maintenance from them (subject to the Federal one-third reduction provisions)". That is the federal another person's household branch.
    • I: "an optional State supplementary payment to residents in Title XIX facilities". Rule 2767 (PDF p. 34) adds "with Medicaid paying 50 percent or more of the cost of care".
    • C, G and H need state certification ("identified by the State"; custodial care to "two persons or less"), so input-only is right.
    • Y: "Optional supplementation waived" maps to NONE.
    • Privately insured children. SI BOS01415.970 says "Effective 12/1/96 Vermont State OS Codes A and B apply to children under the age of 18 who are in Federal living arrangement D because of private health insurance payments." That supports the documentation's note.
    • The state-administered limited-nursing Level III home.
      • SI BOS01415.013: "All of the homes that were in this category when SSA administered the State supplement have converted their license so that their residents are eligible for Federally-administered State L/A category C."
      • Rule 2764.2 (PDF p. 31): "This is the only state-administered living arrangement."
      • Leaving it unmodeled (documented in programs.yaml) is reasonable.
  • Eligibility and formula.
    • Rule 2760 (PDF p. 27):
      • "a person must be a Vermont resident and pass all the eligibility tests for federal SSI benefits except for the SSI income test."
      • "The amount of the benefit is the difference between the combined SSI/AABD payment level for the applicable living arrangement and the recipient's countable income."
    • The helper's is_ssi_eligible (no income test) and max_(standard − max_(countable − federal_amount, 0), 0) implement this. That includes the supplement-only case (Case 9: 39.68 with SSI 0).
  • Individuals and couples. Rule 2761 (PDF p. 28):
    • "Individual. A single person or a person living with a spouse. The spouse of such a person is not aged, blind, or disabled".
    • "Couple. A husband and wife who are both aged, blind, or disabled and live in the same household or facility."
    • Both match the helper's joint and deeming branches.
  • Administration.
    • Rule 2700 (PDF p. 2): "For persons in federally administered living arrangements, SSA also determines eligibility for the AABD state supplement to SSI and issues a combined SSI/AABD benefit".
    • Rule 2761: "All living arrangements are federally administered except for a residential care home with limited nursing care, level III".
    • SSA, State Assistance Programs for SSI Recipients, January 2011, Vermont (read via the Internet Archive; ssa.gov returned 403):
      • "Administration: Social Security Administration. Effective date: January 1, 1974."
      • "Countable income is deducted first from the federal payment. Any income that remains to be counted after the federal payment has been reduced to zero is then deducted from the state supplementary payment."
    • POMS SI 01415.058 A lists Vermont among the federally administered states.
  • Rounding and the minimum.
    • 20 CFR 416.2020(c): "optional supplementary payment amounts of less than $1 will be raised to a dollar." Case 11 pins it at 0.01 raised to 1.
    • SI 02001.005: "When the computation yields a total benefit ... that is more than $0 but less than $1, we pay $1.00."
    • Couple halves round up to the cent (25.845 → 25.85; 49.925 → 49.93), as the helper does for every sibling.
  • The shared helper. _ssi_state_supplement.py is byte-identical to Add New Jersey state supplementation for 2026 #10157, Add New York state supplementation for 2026 #10158, Add Pennsylvania state supplementation for 2026 #10167 and Add Rhode Island state supplementation for 2026 #10168. minimum_payment.yaml is also identical to Add Nevada optional state supplementation for 2026 #10001.
  • Essential Person.
    • Structure. Rules 2780–2783 (PDF pp. 36–43). The grant goes to an aged, blind or disabled person who "has a needy essential person ... living in his or her (or their) home" and is either ineligible for SSI/AABD or has "net income, including his or her (or their) SSI/AABD payment, below the applicable State AABD-EP payment level".
    • Another's household. Rule 2783.2: "Non-spouse essential persons are not included in this living arrangement for either eligible individuals or eligible couples." That is independent | (other & spouse) plus independent | ~couple (Cases 9, 11 and 12).
    • Levels. Rule 2784(A) (PDF p. 44):
      • 67 percent is "the maximum SSI/AABD payment in addition to 67 percent of the difference between the maximum AABD-EP payment and the maximum SSI/AABD payment".
      • 34 percent applies only "when the essential person is not the spouse". That is the spouse & PARTIAL_34 exclusion (Case 5).
    • Maximums. Rule 2784(B)(1) sets the individual maximum "equal to the current maximum combined SSI/AABD payment for a couple". (B)(3) sets another's household "for an individual living independently". (C) adds "an increment for the essential person's needs" for a couple.
    • All nine P2740B cells (Bulletin 25-26, PDF pp. 12–13) match the formula:
      • 100%: 1,491 + 105.80 = "$1,596.80"; 1,596.80 + 183.84 = "$1,780.64"; 994 + 55.68 = "$1,049.68"
      • 67%:
        • 1,049.68 + 0.67 × 547.12 = "$1,416.25"
        • 1,596.80 + 0.67 × 183.84 = "$1,719.97"
        • 704.7167 + 0.67 × 344.9633 = "$935.84"
      • 34%:
        • 1,049.68 + 0.34 × 547.12 = "$1,235.70"
        • 1,596.80 + 0.34 × 183.84 = "$1,659.31"
        • 704.7167 + 0.34 × 344.9633 = "$822.00"
      • 2025. The 1/1/25 column (1,555.80 and 1,739.64) also gives the 183.84 increment.
    • Income. Rule 2786 (PDF p. 49):
      • "Reach Up earned income exemptions (rule 2254) are not allowed; and SSI/AABD benefits, if received, are counted as unearned income".
      • "$20 of total monthly income received by all assistance group members as: unearned income only (other than VA pension or SSI/AABD benefits)".
      • "$65 plus one-half of the balance of any remaining earned income received by the aged, blind or disabled member(s) only."
      • The memo (PDF p. 50) adds "$ 264.25 (Drop cents to $264.00)" (the np.floor) and "an additional $90 (each) employment expense deduction if the individual and/or the EP is working".
      • The VA-pension NOTE is accurate: the model has no pension-specific veterans input.
    • Resources. Rule 2785 (PDF p. 47): "An individual (or couple) receiving SSI/AABD automatically passes the resources test." That is the formula in vt_aabd_ep_resources_eligible. State-only applicants need the input (Cases 13 and 14).
    • Probes:
      • an ineligible spouse at the 67% level: 1,416.25 − 1,049.68, so 366
      • a spouse with $1,200 of Social Security:
        • deeming gives SSI 311 and vt_aabd_federal 55.68
        • countable income is 1,180 + 311 + 55.68 = 1,546.68
        • the grant is 50
  • Kept out of SSI income. 20 CFR 416.1124(c)(2) excludes "Assistance based on need which is wholly funded by a State ... includes State supplementation of Federal SSI benefits". Neither AABD variable is in the SSI income sources, so there is no circularity. vt_aabd holds only state money, so summing it with ssi doesn't double-count.
  • Counted for SNAP and HUD. 7 CFR 273.9(b)(2)(i) counts "other assistance programs based on need", which covers both the supplement and the state Essential Person grant. The SNAP reference consolidation and the HUD addition match the batch.
  • Code:
    • Vectorized. Enum breakdown indexing, select, where/max_/min_/np.floor, and no Python branching on arrays.
    • Periods. YEAR stocks use period.this_year (is_ssi_aged_blind_disabled, takes_up_ssi_if_eligible, is_ssi_spousal_deeming_applies). YEAR flows (ssi_earned_income, ssi_unearned_income, veterans_benefits) auto-divide.
    • No hard-coded policy values. The 2 in np.round(..., 2) is cent precision.
    • References.
      • One entry per document. The variable tuples carry # PDF pages comments with the href opening the first page, as main's CLAUDE.md requires.
      • couple_increment.yaml quotes its "#page 44-45" title.
      • All the AABD-rule anchors open the cited rule: 2760 on p. 27, 2761 on p. 28, 2780 on p. 36, 2781 on p. 38, 2784 on p. 44, the 2786 memo on p. 50, and Bulletin 25-26 P2740B on p. 12.
    • Descriptions follow the template, for example amount/individual.yaml: "Vermont provides this amount as the optional state supplement for an eligible individual under the Aid to the Aged, Blind or Disabled program."
    • Callers. vt_aabd appears only in the lists this PR edits. It is missing from tx_rebate.py (Suggestion 2). It is in all four household_state_benefits blocks (2023–2026), so the integrity guard passes.
  • Hand checks: all 42 expectations. The 2026 FBR is $994 for an individual and $1,491 for a couple.
    • vt_aabd.yaml:
      • Cases 1–4: 55.68, 51.77, 239.62 and 105.60.
      • Case 5: SSI is 662.67 and E pays 42.05.
      • Case 6: SSI is 30 and I pays 49.93.
      • Cases 7 and 8: NONE gives 0; the default gives 55.68.
      • Case 9: 12,360 / 12 = 1,030; 1,030 − 20 = 1,010; the excess of 16 leaves 39.68.
      • Case 10: 12,836.16 / 12 = 1,069.68; 1,069.68 − 20 = 1,049.68; the excess of 55.68 leaves 0.
      • Case 11: 12,836.04 / 12 = 1,069.67; 1,069.67 − 20 = 1,049.67; 0.01 is raised to 1.
      • Cases 12–14: resources of 2,001, age 30 and New Hampshire each give 0.
    • integration.yaml:
      • Cases 1–4: 105.80 / 2 = 52.90; 103.54 / 2 = 51.77; 601.40 / 2 = 300.70; 356.12 / 2 = 178.06.
      • Cases 5 and 6: 51.69 / 2 = 25.845, rounded up to 25.85; 99.85 / 2 = 49.925, rounded up to 49.93.
      • Case 7: 55.68 × 12 = 668.16; SNAP income is 11,928 + 668.16 = 12,596.16.
      • Cases 8 and 11: floor(1,596.80 − 1,049.68) = 547; 547 × 12 = 6,564; vt_aabd is 7,232.16; SNAP and HUD income are 19,160.16.
      • Case 9: floor(1,780.64 − 1,596.80) = 183, or 91.50 each; 52.90 + 91.50 = 144.40.
      • Case 10:
        • SSI is 994 and vt_aabd_federal 55.68
        • countable income is (500 − 90 − 20) + 994 + 55.68 = 1,439.68
        • floor(157.12) = 157
    • vt_aabd_ep.yaml:
      • Cases 1–3: 547; 1,416.25 − 1,049.68 gives 366; 1,235.70 − 1,049.68 gives 186.
      • Cases 4 and 5: NONE gives 0; a spouse at 34% gives 0.
      • Cases 6–8: 1,149.68 gives 447; 1,596.80 gives 0; 1,000 gives 596.
      • Cases 9 and 12: 1,049.68 − (662.67 + 42.05) = 344.96, so 344.
      • Cases 10 and 11: Level III gives 0; a nonspouse in another's household gives 0.
      • Case 13: 15,665 / 12 = 1,305.42; 1,305.42 − 20 = 1,285.42 is above 994; the excess of 291.42 is above 55.68; no resources, so 0.
      • Case 14: floor(1,596.80 − 1,285.42) = 311.
      • Case 15:
        • earnings are 29,993.60 / 12 = 2,499.47
        • SSI: (2,499.47 − 85) × 0.5 = 1,207.23, above 994, so 0
        • Essential Person: (2,499.47 − 90 − 85) × 0.5 = 1,162.23, so 434
      • Case 16: 17,441 / 12 = 1,453.42 with no $20, so 143.
      • Case 17: New Hampshire gives 0.
  • Changelog: changelog.d/vt-ssp-2026.added.md is top-level, typed added, and accurate.
  • Registry:
    • The programs.yaml entry sits under ssi_state_supplement.state_implementations with the WA/MO fields.
    • partial fits the unmodeled grandfathered and limited-nursing paths. parameter_prefix resolves.
  • PR body. The body's description matches the code, and its "42 source-based YAML cases" is right (14 + 17 + 11).

Batch checks

  1. Axiom line: SHOULD (Should 1). axiom: needed is invalid for a staff PR. rulespec-us has no Vermont AABD module or issue, so a dispatch-ready pe-parity issue and a queued line are needed.
  2. Parameter descriptions: pass. All five Vermont files follow the "[State] [verb] ... under the Aid to the Aged, Blind or Disabled program" template, and the federal minimum_payment.yaml matches the siblings.
  3. Backdating: SUGGESTION (Suggestion 1). 2024–2026 are right. 2015–2023 leak the 2024 AABD shares (A/B +3.64, G +15.68, I +7.27 to +32.27) and the 183.84 couple increment (175.45 in 2024). The PR documents the deferral, and Vermont SSP 2017, 2018, 2019 #8346 is open.
  4. tx_rebate.py copy: SUGGESTION (Suggestion 2). It omits vt_aabd, cutting spm_unit_benefits by $668.16 in 2027. ca_state_supplement is still missing too.
  5. Aggregate wiring: pass. spm_unit_benefits, all four household_state_benefits blocks, HUD, SNAP and programs.yaml are present, with no double count with ssi. Vermont's renter-credit income omits SSI and AABD, but that predates the PR and reaches only the TAXSIM aggregate (Suggestion 3); CCFAP and Reach Up correctly exclude it.
  6. Income attribution: pass, with suggestions. Pinned: joint couples halved and rounded up, VTR and facility rates, the supplement-only reduction, Essential Person group income and the individual deeming branch. Unpinned: the couple deeming branch (14.30), one spouse in a facility, the declining-spouse federal limitation, and the one-flag Essential Person couple (Suggestion 4).
  7. Sibling conflicts (branch note): trial merges with Add New Jersey state supplementation for 2026 #10157 and Add Wyoming state supplementation for 2026 #10174 conflict in HUD unearned, programs.yaml and spm_unit_benefits.py. The helper and minimum_payment.yaml are byte-identical across the siblings.
  8. CI: infrastructure, not PR-caused; re-run it. "Python tests / Full Suite - Rest (Python + variables)" was cancelled at "The job has exceeded the maximum execution time of 1h30m0s", with 0 failed tests and the last test at 97%. The other 25 checks pass.
  9. State law first: done. Read 33 V.S.A. §§ 1301–1309, AABD rules 2700–2786, P2740A/B (Bulletins 25-26 and 23-38), DVHA 2026 standards, POMS SI 01415.058 M and the 2015–2025 January charts, SI BOS01415.013/.970 and SSA's 2011 Vermont description. Every 2026 amount, federal administration and the January 2026 effective date check out, and all 42 expectations check by hand.

Axiom line assessment

Invalid (Should 1).

CI status

25 of 26 checks pass. The one failure is an infrastructure timeout, and the job should simply be re-run (gh pr checks 10171). Three "skipping" entries belong to the superseded run 38359688491.

  • The failing job. "Python tests / Full Suite - Rest (Python + variables)" (job 115199178017, run 38367938384 on head 6842ff568d).
    • It ran from 09:45:20 to 11:15:38 UTC and ended cancelled.
    • The check annotation reads "The job has exceeded the maximum execution time of 1h30m0s", and the log ends "##[error]The operation was canceled."
    • The log shows 4,207 PASSED lines and no FAILED or ERROR line.
    • The last batch ("rest-python-remaining") was at 97% when the limit hit. The following "Run tests/variables YAML tests" step was skipped.
    • test_aggregate_list_integrity.py, test_programs_registry.py and the reference-URL tests had already passed.
  • Not PR-caused.
  • Fix: re-run the failed job. If it times out again, the cause is the job's wall-clock budget, not this PR.
  • Main since then. In the files this PR touches or reads, main has changed only:
    • the unemployment_compensation → total_unemployment_compensation rename in the shared income lists and tx_rebate.py
    • three programs.yaml lines (the California entry)
    • Vermont renter-credit FMR/AMI updates
    • None of it touches the lines this PR adds.
  • Local run. The three new test files at the head with policyengine-core 3.33.3: 42 passed.
  • Partner tests. The PR touches no partner test files, and the Household API Partners job passes.

Branch status

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 2026 policy is correct: all 12 rate cells match POMS SI 01415.058 M.2 and the DVHA 2026 schedule, the code mapping and formula follow rules 2760-2767, the Essential Person design reproduces all 9 P2740B 2026 maximums, and all 42 cases check by hand. One should item (see the comment above): 'axiom: needed' isn't valid for staff, and rulespec-us has no Vermont AABD module, so file a dispatch-ready pe-parity issue and add a queued line. The one red CI check is the Rest job hitting its 1h30m limit with 0 failures; I've re-run it.

hua7450 and others added 2 commits October 15, 2026 18:50
- Enter residential and custodial care through a new vt_aabd_care_setting
  input, and the nonspouse essential person and state resource test through
  plain inputs, so formulas no longer reset other household members.
- Give an eligible couple one Essential Person grant at the highest level
  certified for either spouse, and leave a spouse in a facility out of the
  group income (rule 2782).
- Note that a spouse who declines SSI still makes a joint claim (issue
  10243), cite 33 V.S.A. ch. 13 and the POMS M.1/M.2 anchors, drop a
  duplicate parameter value, and add tests.

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

hua7450 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks, David. The changes are in 61b5d44, followed by a merge of main (0693646). The shared helper and minimum_payment.yaml are unchanged.

Should 1 (Axiom line): filed TheAxiomFoundation/rulespec-us#1786 (pe-parity). It has:

  • your module paths, alongside the existing Delaware POMS modules;
  • the verbatim POMS M, AABD rule and P2740B text;
  • the required outputs;
  • your companion cases mapped to the PE cases.

The source conflicts are in a separate comment, and the axiom line now points to it. They include POMS M.2.b's "944.00" E couple FBR, which its own total shows should be 994.

Suggestion 1 (history): out of scope, and I didn't widen #8346. I did drop ep/couple_increment.yaml's repeated 2026-01-01 value.

Suggestion 2 (Texas rebate copy): #10226 tracks one spm_unit_benefits list that reforms append to, so this PR leaves tx_rebate.py unchanged.

Suggestion 3 (renter credit): I didn't file the follow-up, because the renter credit doesn't use the income you quote.

  • § 6066(b)(1) tests the claimant's "income" under § 6061(18). Its Social Security add-back follows 26 U.S.C. § 86(d), which doesn't cover SSI.
  • The HI-144 lines (all Agency of Human Services payments; "Social Security benefits also include SSI") belong to the § 6061(4)–(5) household income of the homestead Property Tax Credit, which PE doesn't model.
  • One source does conflict: the RCC-146 Line 11 instruction for people who don't file a federal return counts 75% of SSI. The model follows the statute.
  • An SSI-only renter's credit is the same either way ($1,091), since a one-person filer can't reach the lowest income band from SSI alone.

Suggestion 4 (readings):

  • Couple deeming branch: not added here. Its band of spouse earnings is about $111 a month wide, and we avoid incomes set inside a narrow band. The branch lives in the shared helper and is pinned by Rhode Island integration Case 6 (243 = min(332, 332 − 89)).
  • One spouse in a Medicaid facility: new integration Case 12: SSI [30, 994], vt_aabd [49.93, 55.68].
  • A spouse who declines SSI: a NOTE in vt_aabd_federal.py points to Fix SSI spousal deeming for in-kind support and for aged, blind or disabled spouses who are not eligible #10243. That issue covers the federal couple classification, which ignores take-up.
  • One-flag Essential Person couple: fixed.
    • An eligible couple now gets one grant at the highest level certified for either spouse (rules 2780(A), 2783.1, 2784(C)), split equally.
    • vt_aabd_ep.yaml Case 21 pins your one-flag couple at [91.50, 91.50], and Case 22 pins a 67%/34% couple at [61.50, 61.50].
    • The rules don't say which level applies when the spouses' levels differ, so "highest" is a modeling choice; the conflict comment says so.

Suggestion 5 (wiring): integration Case 7 now asserts spm_unit_benefits: 12_596.16 with SNAP take-up off, so it doesn't depend on projected SNAP amounts. Removing vt_aabd from the list fails the case.

Suggestion 6 (polish):

  • I kept the blank lines before metadata:; they come from our formatting pass and are harmless.
  • The rate files point at #m2a and #m2b, the arrangement at #m1 and vt_aabd at #m2.
  • vt_aabd.py cites 33 V.S.A. ch. 13 (§§ 1301(3), 1309(a)).

Other fixes I found:

  • Input-reset trap. Three variables were formulas that users had to set as inputs:

    • vt_aabd_living_arrangement, the only way to enter a care setting;
    • vt_aabd_ep_is_spouse, overridden for a nonspouse essential person;
    • vt_aabd_ep_resources_eligible, overridden for state-only applicants.

    Entering a care setting for one person set everyone else to NONE. In one probe, a second recipient got 0 instead of 55.68.

    • They now read new plain inputs: vt_aabd_care_setting, vt_aabd_ep_nonspouse_essential_person and vt_aabd_ep_passes_state_resource_test.
    • New cases pin two people with an input on one only.
  • A spouse in a facility in the group's income. The Essential Person group counted a spouse in a Medicaid facility. Rule 2782 limits the group to members "living in the same household", and the facility spouse's income cost the at-home spouse the grant. vt_aabd_ep.yaml Case 23 pins [0, 547].

On the merged head, these pass locally: all 1,031 Vermont cases, and the aggregate list integrity and program registry tests (677 passed, 10 skipped).

@hua7450
hua7450 requested a review from DTrim99 October 15, 2026 22:54

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.

2 participants