Repository navigation
Decide CA Premium Subsidy eligibility on the exact FPL ratio and adopt the Final 2027 design - #10305
Merged
Merged
Conversation
Gov. Code 100800(c) delegates the state premium subsidy design to the Covered California Board. The adopted 2026 Program Design runs its bands "100% up to 150%" (0%) and "Above 150% up to 165%"; the 2026 Policy Explainer labels the upper band "150% - At or Below 165%". The model now puts a fraction equal to a threshold in the lower band (searchsorted side="left"), keeping the existing whole-percentage FPL truncation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r1 P3s: searchsorted comments now say side="left"; Case 13 explains the continuous rate at 165% in 2027; Case 2b tests 1.505 instead of duplicating Case 7; a new case derives 150.49% from wages and shows the truncated fraction pays 0%; the threshold comment notes the truncation is the federal form's gap-fill; the eligibility test header matches the formula's FPL-band description. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ca_premium_subsidy_eligible compared the truncated aca_magi_fraction with <= 1.65, so every PY2026 income from 165.003% to 165.994% of FPL passed an "at or below 165 percent" test (Program Design (d)(7)). Compare the exact ratio of nonnegative ACA MAGI to prior-year FPG instead, as FTB 3849 Table 1-2 does for the predecessor program's band edges. The PY2027 limit was 1.99 on the truncated fraction, which equals "under 200 percent" only under truncation. Express it as 2.0 with a new fpl_limit_inclusive parameter (true in PY2026, false in PY2027), the same pattern as NM's benchmark_gross_up.boundary_inclusive. Tests: boundary cases from derived income at $25,822.50 / $25,823 / $25,978 / $25,979 (PY2026) and $26,335 / $31,919 / $31,920 (PY2027); supplied cases now set aca_magi and prior-year FPG instead of the fraction; a Hypothesis differential test against an exact-rational reading of (d)(7). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cases 1b and 2b test the PY2026 floor at $15,649 (99.994%, ineligible) and $15,650 (exactly 100%, eligible) of the 2025 one-person FPG, so the PE tests mirror the companion cases added to rulespec-us#1832. The two 2026 Program Design references differed only by #page=, so they become one entry per the repo's reference rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 20, 2026
Open
The model stores MAGI and FPG as float32. A float32 quotient can round a ratio a fraction of a cent above 165% of a fractional guideline down to 1.65 (e.g. $18,711.599609375 over $11,340.36328125), so the gate now divides in float64. On float32 inputs that classifies every ratio exactly against 1.00, 1.65 and 2.00. The property test built one simulation per year and reused it, deleting only the output array, so derived intermediates could stay cached across Hypothesis examples. It now builds a fresh simulation per example. Its reference reads (d)(7) on the stored float32 values, the generator adds fractional guidelines and incomes a few float32 steps from each edge, and explicit examples cover the float32 counterexamples and a 72-person household at exactly 166% that main's float32 truncation misrounds to 165.99%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts in ca_premium_subsidy.yaml Cases 4 and 11: keep this branch's whole-dollar boundary incomes ($25,822.50 and $15,650) and pin the 2025 FPG at $15,650, following #10301's FPG pinning. Drop this branch's duplicate ca_premium_subsidy_eligible input in Case 6. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Final 2027 Program Design replaces the V4 schedule this model carried: (d)(4) has one paying band, "Above 150% up to 200%", from 2.8% to 5.28% (V4: 2.69%-3.41% to 165%, then 3.41%-5.1%), and (d)(7) makes household income "at or below 200 percent" eligible (V4: "under 200 percent"). - Thresholds [1, 1.5, 2.0], initial [0, 0.028], final [0, 0.0528]. - Both years' limits are inclusive, so drop fpl_limit_inclusive and test the exact ratio with <=. - The OE27 enroller deck's summary slide says "up to under 200% FPL" while its own 200% example applies 5.28%; follow (d)(7) and record candidate us-ca:premium-subsidy-200-fpl-limit. - Rate, amount and eligibility cases move to the Final Design, including the deck's $31,920 example (5.28%, $478.80 a year) and incomes that truncate to 2.00 but exceed 200%; the property tests read 2027 as inclusive and #10301's rate properties now cover 2027. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The model stores aca_magi and tax_unit_fpg as float32. Their float32 quotient can round an exact ratio just above 150% of a fractional FPG down onto 1.5, which side="left" then puts in the 0% band. Divide in float64, as the eligibility gate already does, and add a float32 regression test for both plan years. Whole-dollar FPGs pick the same band either way. Amount Case 19 supplies aca_ptc at the official Rev. Proc. 2026-26 credit. Say why in the case: the federal parameters still carry the 2026 applicable percentages into 2027, so a derived credit would use 6.60% instead of 6.78% at 200% FPL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
October 24, 2026 17:12
Contributor
Author
|
Hand-off to the US + core hub, at head 93371bc.
|
Contributor
Author
|
#10443 (the 2027 applicable percentage table, Rev. Proc. 2026-26) merged first, as 15b2bdd. So this PR lands second and should change amount Case 19 in
The derived federal value is already pinned on main. 🤖 Generated with Claude Code |
Main now has #10301 squashed (81056c4) at #10301's final head cc1af12, which this branch already contains. Five files conflicted: - ca_premium_subsidy.yaml, ca_premium_subsidy_applicable_percentage.yaml, test_ca_premium_subsidy_applicable_percentage.py and ca_premium_subsidy_applicable_percentage.py: main's versions equal cc1af12's exactly, so this branch's side already includes them; took this branch's side. - source_conflicts/candidates.yaml: one hunk, this branch's new us-ca:premium-subsidy-200-fpl-limit candidate against nothing on main; kept it. Main's other candidate edits (#10315's Minnesota entry, #10350-#10352, #10441, #10444) auto-merged unchanged. Against main, the merged tree differs only in this PR's files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main now carries the federal 2027 applicable percentage table (#10443, Rev. Proc. 2026-26), which gives 6.78% at exactly 200% FPL. Case 19 no longer supplies aca_ptc; it derives it and pins the federal credit, 8,256 - 0.0678 * 31,920 = 6,091.824, as an output. The state subsidy stays 478.80. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
US + core hub merge audit, us#10305 at
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ready for review. The exact-ratio eligibility fix and the move to the Final 2027 Program Design are done, with tests, Axiom parity and a full-file impact run (see Impact). A GPT-6.1 Sol shell-backed review approved
93371bc7e8. The two commits since then, a merge ofmainand a test change for the federal 2027 table, are under review.#10301 has landed. It merged to
mainas81056c4acb, a squash of its headcc1af12cd1, which this branch already contained.05ff1686f9mergesmaininto this branch, so the diff now shows only this PR's changes (see Coordination).This PR makes two changes, one for each plan year:
1. PY2026: exact-ratio eligibility
ca_premium_subsidy_eligiblecompared the truncatedaca_magi_fraction(np.floor(100 * magi / fpg) / 100) with<= 1.65. Truncation maps every income from 165.00% to 165.99% of FPL to 1.65, so all of them passed. The adopted 2026 Program Design, (d)(7) limits an applicable return filer to household income "at or above 100 percent and at or below 165 percent of the federal poverty level".Reproduced on
main(bda23eac4c) for a single filer in CA in 2026, with the 2025 one-person FPG of $15,650:aca_magi_fractionFix: eligibility is now decided on the exact ratio
max(aca_magi, 0) / tax_unit_fpg(period.last_year), divided in float64.2. PY2027: the Final 2027 Program Design
On
main, PY2027 follows Program Design V4: it has a knot at 165% and "under 200 percent" eligibility. The Final 2027 Program Design, PDF p.2, replaces it.The Final Design's (d)(4) table:
Its (d)(7) defines an applicable return filer by household income "at or above 100 percent and at or below 200 percent of the federal poverty level".
The 2027 Program Insight (published 9/2/2026, Table 1) agrees: "150% – At or Below 200%: 2.8% – 5.28%".
Changes:
[1, 1.5, 2.0], initial[0, 0.028], final[0, 0.0528], andfpl_limit2.0, all re-cited away from V4 and Board Resolution 2026-22.in_effect's comment now names the Final Design.fpl_limit_inclusiveparameter it had added for V4's strict limit. The gate testsfloor <= r <= limit.side="left") puts exactly 200% at the top of the paying band, at 5.28%. The only change toca_premium_subsidy_applicable_percentage.pyis that its band ratio is now divided in float64, like the eligibility gate. A float32 quotient can round a ratio just above 150% down onto 1.5, and the 0% band would then catch it. Example: $24,600.00390625 over a supplied FPG of $16,400.001953125 is 1.50000006. Before this change it got 0%; now it gets the paying band's starting rate. This only matters for fractional FPGs; see invariant 3.Applicable percentage at the lookup fraction, V4 (
main) against the Final Design (this PR):The Final paying-band rate is above V4's at every lookup fraction from 1.50 to 2.00, since both are linear between knots and the gap is positive at each knot.
Who gains and who loses in PY2027, against
main, with the published whole-dollar guidelines:81056c4acb) already put exactly 150% in the Design's 0% band, choosing the band on the exact ratio withside="left", so main and this head both apply 0% there (for example, income $23,940 against an FPG of $15,960). Before Follow the adopted California Premium Subsidy design at the 150% FPL boundary #10301, main'sside="right"put a truncated 1.50 in the paying band at 2.69%, and for FPGs of $262,145 or more its float32 fraction also truncated some ratios up to 1.50 from as much as 1.4e-7 below 150%. Those gains are Follow the adopted California Premium Subsidy design at the 150% FPL boundary #10301's and are already on main.How this was checked. This search ran before #10301 merged, against main with V4's 150% boundary, so its at-or-below-150% statements describe #10301's change, now on main. #10301 changed only the band choice at and just below 150%, so the statements for (150%, 200%) and for 200% hold against current main as well. I replicated main's and this head's formulas in numpy, on float32 inputs as the model stores them. The search covered every whole-dollar FPG from $15,000 to $1,000,000. For each FPG it took 530 incomes at 150% and at 200%: the 129 float32 values within ±64 ulps, plus the 401 whole-cent incomes within ±$2. That is 522 million points per edge. The independent review ran a superset: every float32 income within the larger of 64 ulps and $2 of 100%, 150%, 165% and 200%, 776 million points in all. It confirmed each statement below.
Fractional FPGs are not covered by these statements.
tax_unit_fpgisfirst_person + additional_person × (size − 1)from whole-dollar guidelines, so no PE household has one. They can still be supplied. Sol's review found MAGI $240,703.03125 over FPG $120,351.5234375, an exact ratio just below 200%. Main's float32aca_magi_fractionrounds it up to 2.00, so main rejects the household (limit 1.99). This head admits it, as (d)(7) requires, so its subsidy rises from $0. The matching case just above 150% is fixed by the float64 band ratio above.Source conflict at 200% (candidate
us-ca:premium-subsidy-200-fpl-limit). The OE27 enroller deck disagrees with itself. Its summary slide (PDF p.38) says the subsidy "applies only to enrollees up to under 200% FPL". Its worked example of $31,920 at exactly 200% FPL (PDF pp.37, 39–40) applies "5.28% (6.78% - 1.5%)". This PR follows the adopted Design's (d)(7), and the Insight agrees with it. The candidate is insource_conflicts/candidates.yaml(follows: statute). The deciding line infpl_limit.yamldocuments the conflict, and that file is inKNOWN_UNMARKEDuntil the entry is registered.Why an allowance instead of a marker. A marker must name an entry in the pinned register that lists its file (
test_every_marker_names_a_registered_entry_that_lists_its_file). Marking here would mean registering in rulespec-us, landing that PR and bumping the pin, all inside this PR. The register pins shipped code ("Pin only commits onmain", CONTRIBUTING.md#source-conflicts), so the US hub keeps register entries and markers out of the PR that makes the ruling. #10301's 150% candidate takes the same path, and so did #10315's guardian-fee candidate, which merged on 2026-10-24 (1dc89f047f) with its ownKNOWN_UNMARKEDline:KNOWN_UNMARKEDline and a candidate naming this PR and its files;# Source conflict us-ca:premium-subsidy-200-fpl-limitat the deciding line.The guard forces the cleanup. A file with a valid marker is skipped by the count. So once the marker lands,
test_conflict_sounding_comments_do_not_growfails (itsshrunkassertion) until theKNOWN_UNMARKEDline is deleted.test_candidates_are_not_yet_registeredlikewise fails until the candidate is deleted.Federal 2027 table: now on
main, from another PR. When this PR was written,main's federal applicable percentages carried the 2026 table (Rev. Proc. 2025-25) into 2027. #10443 merged on 2026-10-25 as15b2bdd2cfand added the 2027 table from Rev. Proc. 2026-26 §3.01:mainsince #10443)The state subsidy is
max(0, slcsp − aca_ptc − ca_pct × income). Wherever it is positive, each dollar of federal credit is a dollar less of state subsidy.main's 2027 table, and pins it as an output (32004fd222). Before Add the 2027 ACA premium tax credit applicable percentage table #10443 landed, Case 19 supplied the official credit as an input, and this body said that whichever PR landed second would make this change. The federal work is tracked in Add the 2027 premium tax credit applicable percentages (Rev. Proc. 2026-26) #10442.aca_ptcis the same in the base and head runs, so the federal table cancels out of the head-minus-base change wherever the subsidy is positive in both runs. It does not cancel where one run's subsidy is clipped to 0, or for households that newly qualify at exactly 200%. The 2027 rerun againstmainwith the 2027 table (see Impact) gives the same change to the cent.Invariants
All of these are about this PR's head. They assume the non-income conditions hold (in effect, an APTC-eligible member, a filed return, residence in California).
rismax(MAGI, 0) / FPG(prior year), computed exactly on the stored float32 values.1 <= r <= L, where L is 1.65 in PY2026 and 2.0 in PY2027. Both bounds are inclusive.fractions.Fractionreading of the Designs (bounds transcribed from the PDFs, not read from the parameters).test_float32_ratio_just_above_150_uses_upper_band, which feeds the example above as float32 for both years. Restoring the float32 division fails it in both years.Differences from
main. These are descriptive, not invariants. With the published whole-dollar guidelines:main's float32 misrounding of exact multiples of 1%. Example: the 2025 FPG for 72 people is $406,150, and MAGI of $674,209 is exactly 166%. Main computes 165.99% and admits the household.main's float32 fraction can also round a ratio just below a 1% multiple up onto it.Tests
ca_premium_subsidy_eligible.yaml(34 cases). In the PY2026 boundary rows, the incomes are derived from wages, using the actual FPG.Supplied-ratio cases cover 199%, 199.5%, 200% (eligible) and 200.5% (ineligible) in PY2027. Supplied cases set
aca_magiand prior-yeartax_unit_fpginstead of the fraction, which the gate no longer reads.ca_premium_subsidy_applicable_percentage.yaml(25 cases). The PY2027 cases move to the Final Design: 1.575 → 3.172%, 1.65 → 3.544%, 1.825 → 4.412%, 1.99 → 5.2304% and 2.00 → 5.28%. New income-derived cases: $23,942 (150.0125%) → 2.8%, and $31,920 (exactly 200%) → 5.28%. #10301's $23,940 (exactly 150%) → 0% is kept.ca_premium_subsidy.yaml(19 cases).main's 2027 federal table (6.78% at exactly 200%) and pinned as an output at $6,091.824, as explained under "Federal 2027 table" above.Property tests:
test_ca_premium_subsidy_eligible_properties.py(4 tests): the eligibility differential test above, with PY2027 read as inclusive. New explicit examples: $31,919, $31,920, $31,921 and $32,079 at $15,960, and $32,001 at $16,000. Each example builds a fresh simulation.test_ca_premium_subsidy_applicable_percentage.py: now parametrized over 2026 and 2027, plustest_float32_ratio_just_above_150_uses_upper_band(12 tests). It calls the formula directly, without building a simulation. Its_rateshelper now takes an FPG and a dtype, so the new test can feed float32 values.Mutation checks (local):
<)test_float32_ratio_just_above_150_uses_upper_bandfails, both yearsLocal runs at
93371bc7e8, one file per process (macOS). At32004fd222, which adds the merge ofmainand the Case 19 change, CI runs these files; see the checks.household_health_benefits.yaml.test_source_conflicts.py: 103 passed.test_programs_registry.py: 765 passed, 10 skipped.Impact
A real microsimulation on the default dataset, run by the US hub one run at a time under its heavy-job lock. Sums are weighted.
main16a5e6cb6d, which has the federal 2027 table (Add the 2027 ACA premium tax credit applicable percentage table #10443), against this head32004fd222.mainat6a92d6a983against1238297ebf. It was not rerun, for the reasons below.ca_premium_subsidyassigned_ca_premium_subsidyhealthcare_benefit_valuehousehold_net_income_including_health_benefitsca_premium_subsidy_eligiblestate_income_tax,income_tax,household_net_income,household_benefitsmain6a92d6a983against1238297ebf) had the same change to the cent, −$21,865,720.65, in the same 113 tax units, on levels of $269.35M and $247.48M.aca_ptcis the same in the base and head runs, so this is what the cancellation under "Federal 2027 table" predicts when every changed tax unit has a positive subsidy in both runs.d9929e416a. The figure carries to this head:93371bc7e8changed only the dtype of the band ratio, which changes no record's output (below).05ff1686f9mergesmain. Follow the adopted California Premium Subsidy design at the 150% FPL boundary #10301, now onmain, changed nothing in either year in its own run. Add the 2027 ACA premium tax credit applicable percentage table #10443 adds 2027 values only. None ofmain's other changes since6a92d6a983reaches an input of the 2026 California subsidy. They change other states and Puerto Rico, labels and reform-only parameters, federal items that don't enter AGI (the car-loan interest and QBI deductions, the child and dependent care credit, and the NIIT's own MAGI;aca_magiis AGI plus Medicaid's MAGI modifications), and behavioral-response code that returns 0 in a current-law simulation. Fix Social Security secondary earnings threshold reform #10380's change has no current-law effect, per its own impact run.32004fd222changes a 2027 test case only.Why the 2026 run also covers
93371bc7e8. The delta from1238297ebfchanges the model in one place: the dtype of the band ratio inca_premium_subsidy_applicable_percentage. The rest of the delta is a test and a YAML comment.tax_unit_fpgisfirst_person + additional_person × (size − 1), with an integer size and the whole-dollar 2025 and 2026 CONTIGUOUS_US, AK and HI parameters.So every record's output at
93371bc7e8equals its output at1238297ebf.Comparison files are on the US hub host:
fixes/10305-impact/for 2027, andfixes/10305-impact/prev/for 2026 and the earlier 2027 run.Coordination
cc1af12cd1. Every conflict then was inca_premium_subsidy.yamlCases 4 and 11. They were resolved to this branch's whole-dollar boundary incomes, with Follow the adopted California Premium Subsidy design at the 150% FPL boundary #10301's FPG pinning. A duplicateca_premium_subsidy_eligibleinput in Case 6 was dropped.mainmerged after Follow the adopted California Premium Subsidy design at the 150% FPL boundary #10301 landed (05ff1686f9, withmainat16a5e6cb6d). Follow the adopted California Premium Subsidy design at the 150% FPL boundary #10301's head had not moved fromcc1af12cd1. Five files conflicted, the five this body predicted:ca_premium_subsidy.yaml,ca_premium_subsidy_applicable_percentage.yaml,test_ca_premium_subsidy_applicable_percentage.pyandca_premium_subsidy_applicable_percentage.py:main's versions equalcc1af12cd1's exactly, so this branch's side already contains them. This branch's side was taken.source_conflicts/candidates.yaml: one hunk, this branch's newus-ca:premium-subsidy-200-fpl-limitcandidate against nothing onmain. It was kept.main's other candidate edits, including Exclude county agency staff from Minnesota MSA guardian fees #10315's Minnesota entry, merged without conflict.main, the merged tree differs only in this PR's files.aca_magi_fractionwith a limit, with a PR for each. Its table (row 9) lists this PR and Follow the adopted California Premium Subsidy design at the 150% FPL boundary #10301 as covering the California gate. Treat income exactly at 400% FPL as premium tax credit eligible #10312, for the federal 400% ceiling, is one of its PRs.mainby Add the 2027 ACA premium tax credit applicable percentage table #10443 and tracked in Add the 2027 premium tax credit applicable percentages (Rev. Proc. 2026-26) #10442, as described under "Federal 2027 table" above.axiom: TheAxiomFoundation/rulespec-us#1832 queued: the (d)(7) eligibility extension, now updated for the Final 2027 Design. It carries:
review_finding;The encoder path is blocked. The Covered California designs are not yet in the pinned corpus release, and signed generation needs Max's approval.
🤖 Generated with Claude Code