Repository navigation
Audit: ACA-related gates that compare the truncated aca_magi_fraction with an income limit #10329
Description
PolicyEngine-US, upstream/main 645fcd3 (gate files unchanged at 740e1eb), 2026-10-20.
aca_magi_fraction = floor(100 * max(aca_magi, 0) / tax_unit_fpg(prior year)) / 100 (Form 8962 line 5).
Truncation maps every exact ratio in [L, L+0.01) to L: fraction <= L admits up to L+0.0099 and fraction > L excludes
up to L+0.0099; fraction < L and fraction >= L equal the exact tests for whole-percentage L.
"Main" columns were executed with a single filer and the real prior-year guideline ($15,650 for 2026), at the limit,
limit + 0.003% and limit + 0.994%. "e2e" = wages only, nothing supplied; "gate" = the gate alone, with its non-income
conditions supplied. Every quoted source was fetched and read this session unless marked otherwise.
| # | Gate (variable) | Edge | Governing wording | Truncation prescribed for this test? | Main at limit + 0.003% / + 0.994% | Verdict | PR |
|---|---|---|---|---|---|---|---|
| 1 | Federal PTC income test (is_aca_ptc_eligible via gov.aca.ptc_income_eligibility) |
400% ceiling, 2026+ | 26 U.S.C. 36B(c)(1)(A) "does not exceed 400 percent"; Form 8962 Worksheet 2 asks whether income is "more than" 4 x FPL in dollars, then truncates | Only for line 5 (the table); "more than 400%" is decided on dollars | Exactly 400% ineligible (bracket starts at 4.00); 400.003% ineligible (correct) | Bug at exactly 400%; fixed | #10312 |
| 2 | Same | 100% floor | "equals or exceeds 100 percent" | Line 5 truncation is exact for >= |
Correct | No change | — |
| 3 | BHP payment PTC component (basic_health_program) |
400% | Reuses the PTC scale | — | Same as row 1; unreachable in baseline (BHP enrollment caps at 200%/250%) | Fixed with row 1 (reads aca_ptc_income_eligible) |
#10312 |
| 4 | pays_aca_premium coverage gap |
100% floor, < |
— | — | fraction < floor is exact |
No change | — |
| 5 | aca_ptc_below_fpl_immigration_exception |
< 1 |
— | — | Exact | No change | — |
| 6 | aca_required_contribution_percentage |
Applicable-figure table | Form 8962 line 5 | Yes (table lookup) | — | No change (amount table; truncation prescribed) | — |
| 7 | CSR eligibility (marketplace_csr_eligible) |
250% | 42 U.S.C. 18071(c)(2)(C) "not more than 250 percent"; 45 CFR 155.305(g)(1)(i)(C) "does not exceed 250 percent" | No | e2e eligible / eligible | Bug; fixed | #10326 |
| 8 | CSR tiers (marketplace_csr_category) |
150%, 200% | 18071(c)(2)(A)-(B) "not more than 150 / 200 percent"; 155.305(g)(2) "less than or equal to" | No | e2e 150.003% and 150.994% 94% tier; 200.003% 87% | Bug; fixed | #10326 |
| 9 | California Premium Subsidy | 150%, 165%, 200% | — | — | — | Out of scope (#10301, #10305) | — |
| 10 | Colorado Premium Assistance (co_premium_assistance_eligible) |
400% | Reg 4-2-78 (3 CCR 702-4) §4.C "no greater than 400% of the Federal Poverty Level" | No | gate eligible / eligible; e2e masked by the federal gate (binds under a reform extending the credit) | Bug; fixed | #10318 |
| 11 | Covered Connecticut (ct_covered_connecticut_eligible) |
175% | C.G.S. 19a-754c(b)(1)(C)(iv) "up to one hundred seventy-five per cent"; DSS "up to an[d] including 175%" | No | e2e eligible / eligible | Bug; fixed | #10316 |
| 12 | Maryland Premium Assistance (md_premium_assistance_eligible) |
400% | MHBE PY2026 "No state subsidy above 400% FPL"; PY2027 "400% FPL or below" | No | gate eligible / eligible; e2e masked by the federal gate | Bug; fixed | #10320 |
| 13 | ConnectorCare (ma_connector_care_eligible) |
400% | 956 CMR 12.04(3)(b)3.c "not over 400% of the FPL" | No | gate eligible / eligible; e2e masked by the federal gate | Bug; fixed | #10321 |
| 14 | ConnectorCare | 100% floor, >= |
"at least 100%" | — | Exact | No change | — |
| 15 | ConnectorCare Plan Types (ma_connector_care via enrollee_premium) |
150/200/250/300% | 956 CMR 12.04(3)(b) "at or below 150%" (2A), "over 150% and not over 200%" (2B), ... | No (the Overview's "150.1%" labels set no rounding rule) | 150.003% and 150.994% 2A ($0) instead of 2B ($53); same above 200/250/300% | Bug; fixed | #10321 |
| 16 | NJ Health Plan Savings (nj_njhps_member_eligible, nj_njhps_eligible) |
600% | DOBI 2027 Rate Filing Requirements §7 (plan year 2026 amounts) "At least 550% FPL but less than or equal to 600% FPL"; "Above 600% FPL" $0 | No | e2e eligible / eligible | Bug; fixed | #10323 |
| 17 | Same | 138% floor, >= |
Medicaid boundary | — | Exact (float32 1.38 compares equal) | No change | — |
| 18 | NJHPS per-member bands (pmpm) |
150/200/250/400% | DOBI table: "At least 150% FPL but less than 200% FPL", ... (lower-inclusive) | No | Exactly 150% and up to 150.99% got $20 instead of $40 (x.0001 thresholds, upper-inclusive) | Bug (closure and truncation); fixed | #10323 |
| 19 | NM base program (nm_premium_assistance_eligible) |
400% | PY2026 manual "over 400% of the FPL do not qualify" | No | gate eligible / eligible; e2e masked by the federal gate | Bug; fixed | #10328 |
| 20 | NM Middle Income Household (nm_premium_assistance_mih_eligible) |
400%, > |
Addendum 1 §I.A(3) "above 400% of the FPL" | No | Ineligible / ineligible: 400.003%-400.994% got neither component | Bug; fixed | #10328 |
| 21 | NM PY2026 gross-up (nm_premium_assistance) |
200%, <= |
PY2026 manual "up to 200% FPL"; next range "200.01-400%" | No | 200.003% and 200.994% grossed up | Bug; fixed | #10328 |
| 22 | NM PY2027 gross-up | 200%, < |
PY2027 manual "under 200% (< 200%)" | — | Exact | No change | — |
| 23 | Vermont Premium Assistance (vt_premium_assistance_eligible) |
300% | 33 V.S.A. 1812(a)(1) "less than or equal to 300 percent" | No | e2e eligible / eligible | Bug; fixed | #10313 |
| 24 | Washington Cascade Care Savings (wa_cascade_care_savings_eligible) |
250% | WAHBE PY2026 and PY2027 policy §4(1)(c) "up to 250% of the Federal Poverty Level" | No | e2e eligible / eligible | Bug; fixed | #10314 |
| 25 | MD and NM target-contribution schedules | band interpolation | — | Not checked | Interpolate on the truncated fraction | Not in scope (amount tables); follow-up | — |
Open questions recorded, not decided
- Exactly at the limit, "up to" (WA 250%, CT statute 175%) leaves inclusive vs strict open; the model's existing
inclusive reading is kept, and CT's DSS wording ("up to an[d] including") supports it. Only above-limit incomes change. - NM PY2026 gross-up: the manual says "up to 200%", "under 200%" and "200.01-400%" in one section. The existing
boundary_inclusive(from a 2026-08-10 review) keeps exactly 200% grossed up; the exact ratio puts 200.003% above it. - CSR floor: 42 U.S.C. 18071(b)(2) says "exceeds 100 percent", (c)(2)(A) "not less than 100 percent", and 45 CFR
155.305(g)(2)(i) "greater than or equal to 100 percent". The model matches the regulation; truncation is not involved. - BHP enrollment (
is_basic_health_program_eligible) uses the untruncatedmedicaid_income_level, so it is outside
this audit; its floor>= 1.33reads 42 U.S.C. 18051(e)(1)(B) "exceeds 133 percent" inclusively (Medicaid covers
that income in practice). - Federal ACA PTC income gate zeroes the credit at [400%, 401%) FPL (truncation boundary vs Form 8962) #9264 proposes moving the federal threshold to 4.01 on the premise that 400.x% is eligible
under Form 8962. Worksheet 2 enters 401 for any income above 4 x FPL, so 400.x% is ineligible; only exactly 400% was
misclassified (Treat income exactly at 400% FPL as premium tax credit eligible #10312).
Coordination
#10041 (draft) changes aca_magi_fraction's denominator to aca_fpg and moves the PTC
income test into is_aca_ptc_eligible_before_premium. Every exact-ratio gate here and in #10305 divides by
tax_unit_fpg(period.last_year); whichever lands later must use the fraction's denominator.
🤖 Generated with Claude Code
Activity