QuantCalc QuantCalc State tax engine docs

State tax docs / Later years

Later tax years: how the engine projects the rules

The engine's rules are those of tax year 2026. A later year is estimated by projecting each dollar amount and each birth-year age cutoff the way the state's own law moves it: indexed by the index the statute names, tied to an indexed federal amount, fixed in law, or following a schedule the legislature has enacted. The retirement planner, the API's projection and the library all use the same function (state_tax_project_config(), backend/src/state_tax.c:6370).

Two modes; the law by default

As the law sets them ("law") is the default everywhere: the planner's stateThresholdIndexing, the API's projection.indexing and the library. Everything below describes it.

Rise with inflation ("inflation") is an option: the convention QuantCalc's planner used before September 2026, reproduced exactly. Of the 901 dollar amounts in the registry it multiplies 567 by the factor, unrounded, whatever the law says (252 of them are fixed in law), and holds the other 334 at their 2026 figures (cap_loss_limit, cap_loss_limit_mfs, blind_exemption among them; 28 of those the law does move). Enacted schedules and derived amounts are not applied, and the API does not refuse a result for an amount no official source settles, because the assumption is the caller's. Birth-year age cutoffs move one year per year in both modes. The response says which mode ran (projection.indexing; the planner's stateTaxProjection.indexing, whose heldAtRulesYear lists what this mode holds) and, in "inflation" mode, lists each schedule it did not apply under enactedChangesNotApplied.

The method

Each projected response says so (projected: true for a year after 2026, rulesYear, projectedYear) and lists every amount that bore on the result with its rules-year and projected values, the rule, and the rule's sources, so a caller can show the figure as an estimate on 2026 rules (API reference).

The registry

Every nonzero dollar amount and age test of every state's configuration, and every dollar table the engine holds in code, is in exactly one rule of the indexing registry (download), each rule with an official source and the wording quoted exactly as the source prints it; the weekly source check re-reads those quotes. A build gate fails on an amount in no rule, a rule without a source, or an engine build that does not carry the registry as it stands. 1047 amounts in all: 214 indexed, 94 tied to an indexed federal amount, 577 fixed in law, 35 enacted schedule, 5 birth-year cutoff, 106 attained age, 3 defined from another amount, 13 not established.

JurisdictionIndexedFederalFixedScheduledBirth yearAgeDerivedNot establishedEnacted changes not applied
Alabama0017002000
Arizona3015102000
Arkansas706004090
California18010201000
Colorado079402001
Connecticut0028001000
Delaware0018106001
District of Columbia178002000
Georgia0016205003
Hawaii009601000
Idaho777103000
Illinois3011001000
Indiana0023004000
Iowa0712103000
Kansas0016000001
Kentucky406001000
Louisiana554002000
Maine22410302000
Maryland7421009001
Massachusetts2020001000
Michigan1005032022
Minnesota28023002100
Mississippi0014002001
Missouri51111003002
Montana272601010
Nebraska1302001001
New Jersey0023008000
New Mexico0732003000
New York0025003002
North Carolina009001001
North Dakota475100100
Ohio4413005100
Oklahoma0522004001
Oregon10016402000
Pennsylvania004000000
Rhode Island2004001003
South Carolina4019005001
Utah4713011000
Vermont12518101000
Virginia2022213000
Washington101000000
West Virginia1011001011
Wisconsin15017005000

Amounts not established

Limits of an estimate