Skip to content
BracketsightFree · no signup

Methodology

Every number Bracketsight shows is produced by a deterministic, open-formula engine with zero AI in the calculation path. Money is integer cents; rates are basis points; every threshold lives in versioned JSON with citations (sources). Engine 0.1.0, ruleset cliffcheck-rules-2026.draft-1. What follows is the whole calculation in the order the engine performs it, including the places where it stops short of the law and what that costs you.

MAGI is adjusted gross income plus three add-backs, and nothing is subtracted

The engine builds household income as AGI + tax-exempt interest + excluded foreign earned income and housing + the non-taxable portion of Social Security benefits. That is the IRC §36B(d)(2)(B) definition and it is the only MAGI this section uses. It is not the MAGI that governs traditional-IRA deductibility and not the one that governs the net investment income tax; the three definitions differ, and assuming otherwise is a reliable way to be wrong by a few thousand dollars at exactly the wrong moment.

Two consequences of that arithmetic are worth stating plainly. First, AGI is an input, not a derivation — the engine never rebuilds it from gross income, so every above-the-line adjustment you intend to take must already be inside the figure you type. Second, nothing below the line moves MAGI: the standard deduction and itemised deductions both sit after AGI and cannot pull a household back from the cliff — only above-the-line adjustments, the ones already inside AGI, can. The three add-backs are rejected if negative. AGI is not, so a loss year can produce a MAGI of zero or less, which the engine reports as 0% of the poverty line rather than a negative percentage.

2026 coverage runs on the 2025 poverty guidelines, and the lag is the rule

Marketplace eligibility for a coverage year uses the HHS poverty guidelines in effect at the start of that year's open-enrollment period — that is, the guidelines published in the previous calendar year. A 2026 credit is therefore computed on the 2025 guidelines, and the newer figures published in January 2026 belong to 2027 coverage. Substituting them would inflate every poverty line by roughly two percent and move the cliff by hundreds of dollars in the wrong direction, so the engine keeps the guideline year and the coverage year as two separate, dated facts.

Annual poverty guideline by state group, as encoded
Contiguous 48 states and DC$15,650 + $5,500 per additional person
Alaska$19,550 + $6,880 per additional person
Hawaii$17,990 + $6,330 per additional person

The line is linear in family size — firstPerson + (familySize − 1) × additional — which reproduces every printed row of the Federal Register table exactly and matches the notice's own instruction for households larger than eight. Puerto Rico and the other outlying jurisdictions have no poverty guidelines at all; the engine maps every state that is not Alaska or Hawaii into the contiguous group, which is safe only because this tool covers the fifty states and DC.

The ceiling test runs before the truncation, so 400.9% is 401

if MAGI > 4.0 × FPL:  fplPct = 401                — Form 8962
                                                 Worksheet 2, step 4
else:                 fplPct = MAGI ÷ FPL, truncated to a whole
                                                 percent (line 5)
if fplPct > 400:  PTC = 0                        — THE CLIFF (2026 rules)
if fplPct < 100:  Medicaid / coverage-gap logic by state expansion status
applicablePct   = table lookup, linearly interpolated within its band
expectedContrib = MAGI × applicablePct
PTC             = max(0, benchmarkSilverPremium − expectedContrib)

The order of those two steps is worth real money. Form 8962 Worksheet 2 asks first whether household income is more than 4.0 × the poverty line; if it is, you write 401 on line 5 and stop, and line 6 says you are not eligible. Truncation is reached only in the “no” branch. So there is no grace band above the edge: 400.9% of FPL is 401, not 400, and the last eligible income is exactly four times the poverty line — $62,600.00 for one person and $128,600.00 for a family of four in the contiguous 48. Both figures are engine output pinned by tests, not typed into this page.

Truncation still governs every interior boundary, and there the arithmetic is different: floor(MAGI × 100 ÷ FPL) ≤ n holds until MAGI reaches (n+1) × FPL ÷ 100, so the highest MAGI still inside band n is ceil((n+1) × FPL ÷ 100) − 1 cents. The engine uses that formula at the applicable-percentage band edges and at the 250% cost-sharing ledge, and the strict multiple test only at the ceiling. Both percentages are reported: a precise basis-point figure drives the meter, and the Form 8962 whole percent drives eligibility.

What this rests on: the 2026 Form 8962 and its instructions are not published — the IRS releases a tax year's form around January of the following year. The step order encoded here comes from the 2025 and 2020 editions, which agree word for word across the ARPA boundary. That is strong evidence and it is not the 2026 document, so the two edge figures above are re-confirmed rather than assumed once the form appears. The open item is tracked on the changelog.

The applicable percentage is interpolated inside its band, not stepped

Applicable percentage of MAGI by Form 8962 FPL percentage
At least 100% but less than 133%2.10%
At least 133% but less than 150%3.14% → 4.19%
At least 150% but less than 200%4.19% → 6.60%
At least 200% but less than 250%6.60% → 8.44%
At least 250% but less than 300%8.44% → 9.96%
At least 300% and not more than 400%9.96%

Each band declares a percentage at its lower edge and a percentage at its upper edge, and the figure that applies to a household is interpolated linearly between them on the truncated whole percent, then rounded to the nearest whole basis point — one hundredth of a percent. A household at 175% of the poverty line sits 25 points into the 150–200 band, so its applicable percentage is 5.40% rather than the 4.19% at the band floor. Expected contribution is then MAGI × applicablePercentage, annual, on the whole MAGI.

Two boundary details matter. The final band includes 400% exactly, which is why a household landing precisely on four times the poverty line still gets a credit at 9.96%. And the 100% floor on the first band is not from the indexing revenue procedure — that table starts open-ended below 133% — it comes from the statutory applicable-taxpayer definition. The engine will throw rather than guess if a lookup is ever attempted outside the table, which is why eligibility is gated first and the lookup happens second.

The benchmark is a plan you may never enrol in

The credit is measured against the second-lowest-cost Silver plan available in your county for the members enrolling — not against the plan you buy. Per member, the engine takes the county's age-21 base monthly premium, multiplies by that member's age factor from the federal default curve, rounds half away from zero at that point, sums across members, and multiplies by twelve. Rounding therefore happens per member per month, before annualisation, which is the convention premiums are actually quoted in.

The curve spans 0.765 for ages 0–14 through 1.000 at age 21 to 3.000 at 64 — the binding 3:1 maximum age variation. Ages are clamped into the 0–64 range because the top key means “64 and older”, so a member older than 64 is priced at the 64 factor rather than falling through. All 65 factors were diffed against the CMS age-curve guidance with zero mismatches. The curve is only a federal default, though: it applies where a state has not set its own, and New York and Vermont use a 1:1 individual-market ratio, meaning premiums there do not vary by age at all. No New York or Vermont county is in the sample table, so that mismatch is latent today and becomes live the moment real data lands.

The benchmark premiums themselves are sample data. The engine ships 6 counties — Travis County, TX (Austin), Los Angeles County, CA, Cook County, IL (Chicago), Maricopa County, AZ (Phoenix), Miami-Dade County, FL, Denver County, CO — and their age-21 base premiums are invented, plausible-magnitude figures written so the engine and interface could be built and tested. There is nothing in them to verify; they must be replaced from the CMS Marketplace public use files. Every premium, credit and dollar figure derived from them is illustrative. The engine also never asks which plan you enrolled in, so what it reports is the credit computed against the benchmark; confirm the amount that applies to your own plan with the marketplace.

Everything is annual; the monthly figure is the annual one divided by twelve

The engine computes an annual benchmark, an annual expected contribution and an annual credit, then reports a monthly credit as the annual figure divided by twelve and rounded half away from zero. It models twelve months of identical coverage: same household, same family size, same enrolled members, same benchmark premium, every month. It does not model a mid-year enrolment, a member ageing into a higher factor part-way through the year, a birth, a marriage, a move to another rating area, or a month in which someone became eligible for employer coverage. If any of those describe your year, treat the annual figure as a planning estimate and let the marketplace and your return handle the months separately.

Cost-sharing reductions stop at 250% and take the whole band with them

Cost-sharing reduction bands, Silver plans only
100–150% of the poverty lineabout 94% actuarial value
151–200% of the poverty lineabout 87% actuarial value
201–250% of the poverty lineabout 73% actuarial value

Cost-sharing reductions lower deductibles, copays and the out-of-pocket maximum; they do not lower the premium, and they exist only inside a Silver plan. One dollar past a band boundary drops the whole band, which is a second cliff with smaller dollars attached — the meter draws it as a ledge. For one person in the contiguous 48 the top of the ladder falls at $39,281.49 of MAGI, computed with the truncation formula rather than the strict multiple, because unlike the 400% ceiling this genuinely is a truncation boundary.

The percentages are approximate by regulation, not by our rounding: issuers must file Silver variations at those actuarial values plus or minus a de minimis variation, so a real plan lands near the band figure rather than on it. Cost-sharing eligibility also rides on premium-credit eligibility — no credit, no reduction — which is why crossing the 400% cliff removes both at once.

For 2026 there is no cap on repaying advance credit, at any income

Advance payments are reconciled on Form 8962: the engine subtracts the final credit from the advance credit actually paid to the insurer. A negative difference is refunded as net premium tax credit. A positive difference is repaid, and for 2026 the whole of it is repaid at every income level. The statutory limitation of IRC §36B(f)(2)(B), which used to cap the damage below 400% FPL, was struck by Pub. L. 119-21 §71305 for tax years beginning after 31 December 2025. A household at 250% of the poverty line repays exactly what one at 405% does: everything.

Whether a limitation exists at all is carried as data, not logic. The rules file holds limitation.inEffect = false with 0 bands, and the empty array is the encoded rule rather than missing data. A future year that reinstates a cap is a new dated ruleset, not a code change. The reconciliation code refuses to run at all if a ruleset ever declares a limitation in effect while shipping no bands — it throws rather than reaching an uncapped answer by coincidence. The repealed band structure is retained in the file under a provenance-only key that the engine does not read, so a reinstatement has a shape to copy.

Below the poverty line the answer depends on your state, and a boolean cannot carry it

The engine holds an expansion flag for all 51 jurisdictions: 41 expanded, and 10 not — AL, FL, GA, KS, MS, SC, TN, TX, WI, WY. In an expansion state, a household below 138% of the poverty line is routed to Medicaid rather than a marketplace credit. In a non-expansion state, a household below 100% falls into the coverage gap — generally no credit and no Medicaid — while the 100–138% range stays credit-eligible, which is the one place where not expanding leaves a household with more marketplace help rather than less.

The 138% figure surprises people who look up the statute and find 133%. Both are right: the expansion group is written at 133% of the poverty line and the eligibility rules apply a five-percentage-point income disregard on top, so the operative number is 138%.

Three things the flag cannot express, each of which changes the advice:

  • Georgia is not simply “not expanded”. It runs a partial programme covering adults to 100% of the poverty line conditioned on 80 hours a month of work or qualifying activity. A Georgia household at 90% FPL is told by the flag that it is in the coverage gap and may in fact be Medicaid-eligible.
  • Wisconsin has no coverage gap. It never adopted the expansion group, so the flag is correctly false, but it covers childless adults to 100% of the poverty line under a waiver. A blanket coverage-gap message is wrong there.
  • Several expansion states go well above 138% — DC, Minnesota and New York among them — so any copy saying “Medicaid up to 138% in your state” understates them.

One more open item sits in this branch. The 2025 form instructions describe two below-100% paths to a credit, and the statutory hook for the second — the treatment of certain lawfully present non-citizens — was struck for tax years after 2025 by the same public law that removed the repayment cap. The below-100% logic therefore needs re-derivation for 2026 and is recorded as open rather than quietly assumed. Separately, married filing separately is generally ineligible for the credit under §36B(c)(1)(C); the survivor-of-abuse and abandonment exception is surfaced as a note and is not modelled.

Money is integer cents and rates are integer basis points

Every currency value is an integer number of cents and the engine throws if a non-integer reaches a money function, because floats are never money. Rates are integer basis points — 9.96% is stored as 996. Division rounds half away from zero, matching everyday tax-form arithmetic rather than JavaScript's default, which rounds negative halves toward positive infinity. That single rule governs the applicable-percentage multiplication, the age-factor multiplication, the precise FPL percentage and the monthly credit.

Truncation is the deliberate exception, it applies only to the Form 8962 FPL percentage, and it lives in one module so it cannot leak. Currency formatting is hand-rolled rather than delegated to the platform's internationalisation library, so the same inputs produce byte-identical output on every runtime — determinism is an invariant, not a preference.

The self-employed health insurance deduction is circular with the credit

The SEHI deduction and the credit define each other: the deduction lowers MAGI, a lower MAGI raises the credit, a higher credit lowers the out-of-pocket premium that is deductible, which raises MAGI again. Rev. Proc. 2014-41 blesses an iterative method. Bracketsight iterates d ← min(premium − PTC(MAGI − d), earned-income limit) until successive values differ by no more than $1.00, capped at 50 iterations. Because the credit multiplies each step by roughly the applicable percentage, the sequence contracts and converges in a handful of steps in ordinary cases. The earned-income ceiling is net self-employment profit less half of self-employment tax less any SEP contribution already made.

The cliff-edge oscillation: when the deduction is the only thing holding the household under 400%, the iteration can bounce between an over-the-cliff and an under-the-cliff answer. When that two-cycle is detected, the engine returns the smaller (conservative) deduction and flags the result for professional review rather than picking the flattering answer.

Levers are ranked by credit recovered per dollar committed

Each lever's remaining legal room is computed from the rules file and from what you have already contributed this year: the elective deferral limit of $24,500 with an age-50 catch-up of $8,000; HSA limits of $4,400 self-only and $8,750 family plus $1,000 from age 55; an IRA limit of $7,500 with $1,100 more from age 50, ratably phased out against employer-plan coverage and floored at $200 while inside the range; and a SEP ceiling of 25% of compensation net of the contribution itself, capped at $72,000. Deferrals are additionally capped at your W-2 wages and IRA contributions at your earned income, because you cannot defer money you did not earn.

Each lever is then re-run through the whole credit calculation at the reduced MAGI, and ranked by dollars of credit recovered per dollar committed. A lever that cannot on its own bring the household back under the ceiling says so and reports how much of the required reduction it covers. Landing exactly on the edge triggers its own warning, because a December mutual-fund distribution does not care how carefully you planned. Income timing is listed advisory-only, carries no computed amount, and is never auto-advised.

Documented simplifications and what each one costs

  • Benchmark premiums are invented sample data. Every credit, clawback and lever figure computed from them is illustrative until the CMS public use files are ingested. Those files also cover only the states using the federal marketplace, so roughly a third of the population needs separate state adapters.
  • The model is annual. No month-by-month variation in coverage, family size, ages or premium.
  • The IRA phase-out uses §36B MAGI as a proxy for the IRA-specific MAGI. Near a phase-out edge the deductible amount can be slightly off, in either direction.
  • The SEP lever models the employer contribution only. A Solo 401(k) employee deferral can add more room on top if you have no workplace deferrals — the engine flags this rather than modelling it, so the room shown is a floor.
  • The HSA catch-up is modelled for the primary taxpayer only, and the engine does not check that your plan actually meets the high-deductible definition. Confirm eligibility before contributing.
  • The age 60–63 catch-up is not modelled at all, which understates available room for precisely the pre-Medicare age group most likely to be near the cliff. Both this and the high-deductible-plan gate are set out on about.
  • Employer-coverage affordability is not modelled. §36B carries its own affordability test for an offer of employer-sponsored coverage, with a required contribution percentage published annually alongside the applicable-percentage table. The engine has no input for an employer offer and applies no such test, so a household with one should not read this output as an eligibility answer.
  • The federal default age curve is applied everywhere, including in states that use their own.

What Bracketsight never does

  • No AI computes, adjusts, or sanity-checks any number.
  • No specific insurance plan is ever recommended.
  • Income timing is never auto-advised.
  • Nothing you enter leaves your browser — no accounts, no database.
  • No figure ships without a citation. Every threshold above traces to a primary source with a verification date on sources, and the standard those citations are held to is set out in the editorial policy. Run your own household through the planner to see these formulas applied to real inputs.

This is an independent estimate engine. It is not the Marketplace, not your insurer and not tax advice, and it cannot see your actual plan or your actual enrolment. Confirm any figure with healthcare.gov or your state exchange before you act on it. Nothing you enter leaves your browser.

Pre-launch build, and one limitation matters more than the rest. The second-lowest-cost Silver premium — the benchmark every credit on this site is calculated from — is sample data. The 6 county base premiums in the rule file are plausible invented figures, put there so the arithmetic could be built and tested; the real table is the annual CMS public-use landscape file, county by county, and it has not been ingested. The percentages, poverty guidelines, repayment limits and cost-sharing bands around it are verified against their primary sources, so the shape of the cliff and the direction of every lever are right — the dollar amounts are not yours until that table lands. The age curve the premiums are scaled by is the federal default and has been checked value by value. What is settled and what is not is set out on sources and methodology.