Calculation catalog › Optimizer and comparisons
Relocation tax comparison
Lifetime tax-plus-penalties delta of each candidate versus the baseline row, and each row's ending after-tax estate in the comparison's start-year dollars.
Field: Relocation candidate deltas and display basis Unit: US dollars Basis: nominal dollars Computed by: UI-native Status: Complete chain
Appears in: relocation-page (Ranked table "Δ vs your plan" column and "Ending after-tax estate (today's $)" column)
Calculation records
-
Relocation rows compared with your plan Composition record, justified by derivation
Purpose: Each relocation row's lifetime tax difference from the plan as it stands, and its ending after-tax estate in the comparison's start-year dollars.
Statement: projection/relocation.ts#compareRelocationCandidates publishes on each row lifetimeTaxesAndPenaltiesDeltaVsBaseline = compareScalars(baseline.lifetimeTaxesAndPenalties, row.lifetimeTaxesAndPenalties).delta, the row's sum minus the first (baseline) row's, null on the baseline row and on a row whose candidate failed; and endingAfterTaxEstateTodayDollars, the row's endingAfterTaxEstate divided by that row's own published inflation factor at its endYear (#runRow, through projection/dollarBasis.ts), null on a failed row and on a projection with no years. Every row covers the same years in the same nominal dollars, since a candidate changes only the residence, the flat state rate, the local rate and base spending. Lifetime sums of $433,212.40 (the baseline) and $363,292.60 differ by −$69,919.80; an after-tax estate of $4,058,000 at the end of 2059, at 2.5 percent inflation from 2026, is $1,796,488.68 in 2026 dollars. Units: nominal USD for the difference; start-year USD for the estate. Rounding: none.
Formula:
delta_r = L_r − L_baseline; estateToday_r = E_r / f_r(endYear_r)-
L_r: A row's lifetime taxes and penalties (unit: nominal USD summed over the plan's years) (domain: finite) -
E_r: A row's ending after-tax estate (unit: nominal USD of endYear_r) (domain: finite) -
f_r(y): The row's published inflation factor for year y, exactly 1 in the start year (unit: 1) (domain: > 0)
Timing: once per relocation comparison
Rounding: none; the page prints whole dollars
Limits:
- The difference is taken between the unrounded sums, so it can differ by $1 from the difference of the two printed sums (19 of the 87 candidate rows of the example library at FL, TX and CA); these sums are not published as rounded quantities, so the exact difference stays.
- The differences and sums are nominal and undiscounted: a dollar of tax in the last year counts the same as one in the first.
Provenance: derived by
claude, implemented byclaude-subagent.Independent review:
codexGates (6 of 6 pass): fixture registers a test: pass; pins resolve: pass; families exist: pass; worksheet exists: pass; mutation receipt exists: pass; provenance independent: pass
Worksheet: relocation-tax-comparison.md Mutation receipt: relocation-tax-comparison.mutation.md
Evidence tests: relocation.comparison.evidence.test.ts
Implemented in: relocation.ts; scalarComparison.ts; dollarBasis.ts
Is the number of: relocation-tax-comparison
-
Transformations
- projection/relocation.ts#compareRelocationCandidates: lifetimeTaxesAndPenaltiesDeltaVsBaseline = compareScalars(baseline, row).delta (null on the baseline row and a failed row); endingAfterTaxEstateTodayDollars = endingAfterTaxEstate / the row's own published inflation factor at its endYear.
The evidence links on this page (each record's worksheet, mutation receipt, evidence tests
and implementation, and the source links) are pinned to engine commit
2624dbdba9fd, committed 2026-10-11.
The live calculation index and
output-family census links point at the repository's main
branch, so you can check this snapshot against them.