Transparent arithmetic is the operating system of this calculator.
This document publishes the formulae, computational structure, and assumptions used to generate the outputs displayed on the calculator page.
No opinions. No hidden assumptions. Just arithmetic.
This calculator answers: how much additional income tax will this capital gain cause, given income before the gain?
Primary model (default): progressive incremental personal tax. The calculator runs the shared Canada personal-tax engine twice — once without the capital gain and once with it — then reports additional tax as tax after minus tax before.
Optional model: manual marginal-rate estimate. Taxable (included) gain × one combined marginal rate you enter. That path is labelled as a sensitivity check; it does not walk brackets.
It is an educational tool only. It does not replicate every CRA rule for loss carryovers, reserves, special elections, or full T1 detail.
This version does not subtract outlays and expenses of disposition (such as selling commissions or legal fees); users should reflect those manually in their gross gain inputs if they want a closer estimate.
Let:
The primary input is gross capital gain G. Optionally, proceeds P and adjusted cost base A can fill G as:
If G ≤ 0, the calculator treats the result as a capital loss for this simplified view: included amount = 0 and additional tax = 0. Loss carryovers are not modelled.
If PRE is checked and G > 0, included taxable gain and additional tax are set to 0. The gross gain is still shown. Real eligibility depends on CRA rules; the toggle does not test those rules.
Progressive mode uses the shared engine constant CAPITAL_GAINS_INCLUSION_RATE = 0.5 (50%).
It is not user-editable in that mode.
Ibefore is the user’s taxable income before this capital gain. It is passed to
computePersonalTax as source-neutral otherIncome (not employment income),
with employment and self-employment incomes set to 0. The shared engine therefore does not generate
CPP or EI premiums/credits or the Canada Employment Amount from Ibefore alone.
Ordinary federal/provincial brackets, the basic personal amount, and other generally applicable mechanics still apply.
This is intentionally an approximation of the pre-gain tax position. It does not reproduce every source-specific credit or deduction that could appear on a T1. The calculator answers how much additional income tax the capital gain creates given that starting taxable-income level.
Two personal-tax runs share the same year, province, and Ibefore:
Manual mode is a labelled sensitivity. It does not use province brackets or the shared progressive run for the tax figure. Combined marginal rate and inclusion rate must be between 0% and 100%; values outside that range throw a clear validation error rather than producing silent nonsense.
getTaxDataBundle(year, { basePath: '/calculators/canada-income-tax/data' }).
v, mode, year, prov,
income, gain, pre, and when relevant incl, mtr,
proceeds, acb).
calculators/capital-gains-tax-canada/engine.js
(calculateProgressiveCapitalGainsTax, calculateManualMarginalRateEstimate).
computePersonalTax from the Canada personal income tax engine with an explicit immutable
taxData bundle.
ui.js) that imports the engine and getTaxDataBundle; it does not rely on a separate
non-module engine script tag.
If any discrepancy is identified between this documentation and the live calculator engine, the engine’s arithmetic
(calculateProgressiveCapitalGainsTax / calculateManualMarginalRateEstimate) is the source of truth.
This page will be updated to match the engine.