1. What the calculator answers
The calculator compares uses of the same RRSP deduction amount D:
- Claim all now: claim D against current employment income, then compound that tax saving for the waiting period.
- Claim all later: claim D against expected future employment income.
- Optimized split: claim x now and carry D − x forward, choosing x to maximize future-dated value.
All strategy values are expressed at the future date in nominal dollars:
Value(x) = TaxSavingNow(x) × (1 + r)^n + TaxSavingLater(D − x)
Deferral Advantage (corners) = TaxSavingLater(D) − TaxSavingNow(D) × (1 + r)^n
2. Inputs
- Current tax year: official Canadian tax tables for the claim-now year.
- Province or territory: residence for provincial or territorial tax purposes.
- RRSP deduction amount: contribution amount already available to deduct.
- Current employment income: before claiming the deduction now.
- Expected future employment income: nominal dollars in the future claim year.
- Years until future income: whole tax years only (integer 1–40 in the calculator UI). Fractional values are rejected, not rounded or truncated. Future tax year = current year + years (same integer used for compounding). A zero-year delay is not offered as a normal input because both claims would belong to the same tax year.
- Expected inflation: used only to project indexed tax parameters when an official future table is unavailable.
- Annual return or debt-interest savings: rate actually retained on today’s refund after fees and investment taxes, or debt interest avoided.
3. Shared tax engine
The calculator uses the existing Canadian personal income tax engine:
calculators/canada-income-tax/js/tax.engine.js
computePersonalTax(input, { dataOverride })
Official year folders load through tax.data.js. Future unpublished years resolve through:
calculators/canada-income-tax/js/tax.projection.js
resolveTaxDataForYear(year, { loadOfficialYear, federalInflationRate, ... })
Indexation rules live in tax.indexation.js. Official folders always override projections.
4. Tax saving
TaxSaving(income, deduction) =
tax(income, RRSP = 0) − tax(income, RRSP = deduction)
The comparison uses federal plus provincial or territorial income tax. CPP and EI are excluded because an RRSP deduction does not reduce payroll contributions.
5. Future tax tables
- If The Long Math has an official
data/{year}/folder, that folder is used unchanged. - Otherwise the latest official year is projected mechanically:
- indexed dollar parameters grow by the inflation factor;
- tax rates and non-indexed parameters stay fixed;
- payroll maxima are recomputed from rates × indexed bases where applicable;
- Ontario Health Premium statutory bands in the engine stay fixed.
Federal and provincial inflation factors may differ in the projection API. The calculator UI currently applies one user inflation rate to both unless a caller overrides provincial rates in tests.
This is not a prediction of future tax policy.
6. Refund opportunity cost
Future Value of Current Refund = Current Tax Saving × (1 + r)^n
When n = 0, future value equals the current tax saving. When 1 + r ≤ 0, compounding is treated as undefined.
Compare only amounts at the same date in the same dollar units. Do not compare a compounded nominal refund with an inflation-discounted present value of a future refund.
7. Partial-deduction optimizer
Canadian tax is piecewise in deduction space. The optimizer evaluates economically meaningful breakpoints:
- x = 0 and x = D;
- deduction amounts that land current taxable income on federal/provincial/OHP kink points;
- deduction amounts that land future taxable income on those kink points;
- a deterministic coarse grid as a safety net.
Each candidate uses the shared tax engine for actual incremental tax savings. Tiny splits that do not beat both corners by a meaningful dollar threshold are collapsed to the better corner.
8. Break-even return
Break-Even Annual Return =
(Future Tax Saving ÷ Current Tax Saving)^(1 ÷ n) − 1
Defined only when n > 0 and current tax saving > 0. If future tax saving is 0, the break-even rate is −100%.
Invariant at the break-even rate: FV(current tax saving) ≈ future tax saving.
9. Assumptions and limitations
Included in the income-tax difference
- Federal and provincial/territorial bracket tax on employment income.
- Federal enhanced Basic Personal Amount with income-dependent phase-out.
- Provincial/territorial BPA and other non-refundable credits modeled by the shared engine (employment path).
- Ontario surtax, Ontario Tax Reduction (basic amount only; no dependants), and Ontario Health Premium.
- Yukon-style enhanced territorial BPA where configured.
Not included (benefits / transfers — not the same as omitted income-tax lines)
- Canada Child Benefit, GST/HST credit, GIS, and other income-tested benefits or clawbacks.
- OAS recovery tax.
Income-tax engine limitations
- Employment income path only.
- Specialized credits out of scope (for example BC tax reduction, Alberta supplemental credit, tuition, medical, spousal, AMT).
- RRSP contribution room is not calculated here.
- Future tax legislation is not predicted; only mechanical indexation of current rules when official tables are missing.
- Multi-year allocation across several future incomes is not in this release.
10. Sources and related implementation
- Canada Personal Income Tax Calculator — shared tax engine and tax data.
- Inflation-Adjusted Investment Calculator — shared investment growth engine.
- RRSP Deduction Timing: Claim Now or Save It for Later? — article explaining the decision framework.
- CRA Schedule 7 — RRSP contributions and unused contributions.
- CRA line 20800 — RRSP deduction.
- CRA T4032-ON 2026 — Ontario brackets, BPA, surtax, health premium.