Skip to content

Decide Marketplace CSR eligibility and tiers on the exact FPL ratio - #10326

Draft
MaxGhenis wants to merge 1 commit into
mainfrom
aca-csr-exact-fpl-ratio
Draft

MaxGhenis wants to merge 1 commit into
mainfrom
aca-csr-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

marketplace_csr_eligible (<= 2.5) and marketplace_csr_category (<= 1.5, <= 2.0, <= 2.5) compared the truncated aca_magi_fraction (np.floor(100 * magi / fpg) / 100) with the tier edges. Truncation maps every income from 150.00% to 150.99% of the poverty line to 1.50, so all of it got the 94% tier; likewise above 200% and 250%. 42 U.S.C. 18071(c)(2) sets the tiers by household income "not less than 100 percent but not more than 150 percent" (94%), "more than 150 percent but not more than 200 percent" (87%) and "more than 200 percent but not more than 250 percent" (73%). 45 CFR 155.305(g) says "less than or equal to 150 percent", "greater than 150 percent and less than or equal to 200 percent", and so on, and (g)(1)(i)(C) limits ordinary CSR to income that "does not exceed 250 percent". No source prescribes truncating the percentage.

Executed on main (645fcd3; the files are unchanged at 740e1eb), single silver enrollee in Texas, 2026, 2025 one-person guideline $15,650, wages only:

Income Exact % of FPL aca_magi_fraction Tier on main Tier here
$23,475 150.000% 1.50 94% 94%
$23,475.47 150.003% 1.50 94% 87%
$23,630.56 150.994% 1.50 94% 87%
$31,300.47 200.003% 2.00 87% 73%
$39,125 250.000% 2.50 73% 73%
$39,125.47 250.003% 2.50 73% none
$39,280.56 250.994% 2.50 73% none

Fix

Both variables read the exact ratio max(aca_magi, 0) / tax_unit_fpg(period.last_year), the pattern of #10305. marketplace_csr_category now also cites the statute.

Invariants

For every input, with a silver enrollee who receives Marketplace coverage, r = max(MAGI, 0) / FPG(prior year):

  1. Tiers = statute. 94% for r <= 1.5, 87% for 1.5 < r <= 2, 73% for 2 < r <= 2.5, none above 2.5.
  2. Monotone. The actuarial value never rises with income.
  3. Only slivers change, and only downward. Results differ from main only for r in (1.5, 1.51), (2, 2.01) and (2.5, 2.51), each one tier lower.

No Hypothesis test is added: the YAML cases hit every tier edge exactly and the slivers above them with the real guideline, and the existing cases cover each tier's interior. The repo's test-design rules keep such cases in YAML.

Tests

  • Every case in the three CSR YAML files that supplied aca_magi_fraction now supplies aca_magi against a prior-year tax_unit_fpg of $10,000.
  • marketplace_csr_category.yaml Cases 7-14, with the real guideline: 150% (94%), 150.003% and 150.994% (87%), 200% (87%), 200.003% (73%), 250% (73%), 250.003% and 250.994% (none, and ineligible).
  • Mutation check: main's variables fail exactly the five above-edge cases.
  • 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 marketplace_csr_eligible with an exact-rational reading of the source on the float32 values the model receives. 0 mismatches here; on main the same draws give 67 mismatches, all in the truncation sliver.
  • Local run: the CSR YAML folder, 17 passed.

Impact

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

Coordination

#10041 (draft) also edits marketplace_csr_eligible.py (it adds a shared-policy condition two lines from the income test) and marketplace_csr_eligible.yaml, and changes aca_magi_fraction's denominator to a new aca_fpg; whichever lands second resolves a small conflict and should give the exact ratio the same denominator. Part of the aca_magi_fraction audit (table: #10329) begun with #10305; federal PTC edge in #10312.

axiom: pending

🤖 Generated with Claude Code

42 U.S.C. 18071(c)(2) sets the cost-sharing tiers by household income
"not more than 150 percent", "more than 150 percent but not more than 200
percent" and "more than 200 percent but not more than 250 percent" of the
poverty line; 45 CFR 155.305(g) says "less than or equal to". The
eligibility and category variables compared the truncated
aca_magi_fraction with 1.5, 2.0 and 2.5, so every income from 150.00% to
150.99% got the 94% tier (and likewise above 200%), and 250.00%-250.99%
stayed CSR-eligible. Test the exact ratio of nonnegative ACA MAGI to the
prior-year guideline instead.

Tests that supplied aca_magi_fraction now supply aca_magi against a
prior-year guideline of $10,000; new cases use the real 2025 guideline at
each tier edge.

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