Skip to content

Decide Vermont Premium Assistance eligibility on the exact FPL ratio - #10313

Draft
MaxGhenis wants to merge 1 commit into
mainfrom
vt-premium-assistance-exact-fpl-ratio
Draft

MaxGhenis wants to merge 1 commit into
mainfrom
vt-premium-assistance-exact-fpl-ratio

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Draft. Done: the fix and YAML cases. Pending: full-file impact, Axiom parity line, GPT-6.1 Sol review.

Bug

vt_premium_assistance_eligible compared the truncated aca_magi_fraction (np.floor(100 * magi / fpg) / 100) with <= 3.0. Truncation maps every income from 300.00% to 300.99% of the poverty line to 3.00, so all of them passed. 33 V.S.A. § 1812(a)(1) covers "an individual or family eligible for federal premium tax credits under 26 U.S.C. § 36B with income less than or equal to 300 percent of federal poverty level". No source I found prescribes truncating the percentage for this test. (A research pass reported the same inclusive wording in HBEE Part 7 § 56.03; the agency PDFs now return 404, so that quote is not relied on here.)

Executed on main (645fcd3; the file is unchanged at 740e1eb), single filer in Vermont, 2026, 2025 one-person guideline $15,650, is_aca_ptc_eligible supplied:

Income Exact % of FPL aca_magi_fraction Eligible on main Eligible here
$46,950 300.000% 3.00 yes yes
$46,950.47 300.003% 3.00 yes no
$47,000 300.319% 3.00 yes no
$47,105.56 300.994% 3.00 yes no
$47,106.50 301.000% 3.01 no no

The federal credit ends at 400%, so these households are federally eligible and the Vermont gate alone decided them.

Fix

Decide eligibility on the exact ratio max(aca_magi, 0) / tax_unit_fpg(period.last_year), the pattern of #10305. vt_premium_assistance and its required-contribution lookup still use aca_magi_fraction; only the eligibility edge moves.

Invariants

For every input, with the program in effect and an APTC-eligible member:

  1. Band = statute. Eligible if and only if r <= 3, r = max(MAGI, 0) / FPG(prior year).
  2. Only the sliver changes. Relative to main, eligibility can only be lost, and only for r in (3.00, 3.01). Deduced: floor(100r)/100 <= 3 holds exactly when r < 3.01.

No Hypothesis test is added: the gate is one comparison on a ratio, and the YAML cases below hit the limit itself, 0.003 and 0.994 points above it, and 300.32% end to end. The repo's test-design rules keep such cases in YAML.

Tests

  • vt_premium_assistance_eligible.yaml: cases that supplied aca_magi_fraction now set aca_magi and a prior-year tax_unit_fpg of $10,000 (the gate no longer reads the fraction). Case 10, which supplied 3.0001, a value truncation can never produce, now supplies $30,001 against $10,000 and exercises the fix. New income-derived cases with the real guideline: $46,949 (299.994%) and $46,950 (300%) eligible, $46,950.47 (300.003%) and $47,105.56 (300.994%) ineligible.
  • integration.yaml Scenario 2 expected a $47,000 single filer (300.32%) to stay eligible; its comment said "47_000 sits just above it but the model still rounds aca_magi_fraction to 3.00, so the inclusive ceiling holds". It now uses $46,950 (exactly 300%; VPA $704.25), and Scenario 2b keeps $47,000 as an ineligible case (VPA $0, federal APTC unchanged at $10,906.80).
  • integration.yaml Scenario 8 and vt_premium_assistance.yaml Case 13 supplied a 3.00 fraction with $100,000 of MAGI for three people, which is 375% of the $26,650 guideline. They now use $79,950, exactly 300% (VPA $1,199.25).
  • Mutation check: main's gate fails exactly Scenario 2b and eligibility Cases 10, 12 and 13.
  • Local differential sweep (a script, not committed, per the repo's test-design rules): 256 tax units per year, 60% with income in cents within $2 of an edge and the rest uniform, guidelines $10,000-$80,000 including $20 multiples, comparing the eligibility gate with an exact-rational reading of the source on the float32 values the model receives. 0 mismatches here; on main the same draws give 63 mismatches, all in the truncation sliver.
  • Local run: the three premium-assistance YAML files, 39 passed.

Impact

Pending: full-file microsimulation via the US hub impact queue, 2026 and 2027.

Coordination

#10041 (draft) changes aca_magi_fraction's denominator to a new aca_fpg; if it lands, this gate's exact ratio should use the same denominator. Part of the aca_magi_fraction audit (table: #10329) begun with #10305; federal edge in #10312.

axiom: pending

🤖 Generated with Claude Code

33 V.S.A. 1812(a)(1) covers income "less than or equal to 300 percent of
federal poverty level". The gate compared the truncated aca_magi_fraction
with 3.0, so every income from 300.00% to 300.99% passed. Test the exact
ratio of nonnegative ACA MAGI to the prior-year guideline instead.

Integration Scenario 2 expected a $47,000 single filer (300.32%) to stay
eligible because the fraction truncates to 3.00; it now tests exactly
300% ($46,950), and Scenario 2b keeps $47,000 as an ineligible case. Two
three-person cases supplied a 3.00 fraction with $100,000 of MAGI (375%
of $26,650); they now use $79,950.

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