Calculation validation
How Varallisuuspolku's numbers are verified
Open the planning tool

You have to be able to trust a calculator, so this page shows the calculation in the open: every number below has been computed in two independent ways — by hand with a closed-form compound interest formula, and with Varallisuuspolku's calculation engine (laskenta.js). The results match to floating-point precision (a difference of less than a millionth of a cent). The same checks run automatically as unit tests with every change, and anyone can repeat them — instructions at the end of the page.

Assumptions and versioning

Tax rulesFinnish capital income taxation, tax year 2026 parameters: 30 % of annual gains up to 30 000 €, 34 % above that. Deemed acquisition cost 40 % (ownership ≥ 10 y) / 20 %.
Return assumptionsStocks 7 %, bonds 3 %, cash 1.5 % per year (nominal). Editable in Pro mode.
Inflation assumption2 %/yr (editable). Inflation adjustment with the exact Fisher formula (1+r)/(1+i).
Monte Carlo5 000 paths, fixed per-path seeds (CRN) — the same result on every run, deltas comparable.
Verified25 July 2026 — tax rules and assumptions are reviewed at least every tax year. Change on 25 July 2026: when Pro mode's deemed acquisition cost trims a monthly withdrawal, the taxable gain is now booked from the deemed share (previously from the actual gain — the reported tax and the 34 % bracket's annual accrual were overstated; the wealth curve was correct). Change on 25 July 2026: assets already owned (current value + remaining loan) are included in the calculation; taxable sales use the deemed acquisition cost. Change on 24 July 2026: loan payments exceeding savings are financed from investments (previously the model assumed the difference came from outside the model, which underestimated the cost of a large loan).
Source codelaskenta.js (the engine) · testit/ (automated checks)

Compound interest checks closed-form formula vs. the engine

Notation: k = 1.071/12 (the monthly factor at a 7 % annual return), n = number of months. All examples use a 100 % equity weight with no taxes or costs, so that a closed-form formula exists.

CheckFormulaBy handEngine
Lump sum of 50 000 €, 10 yS·1,071098 357,57 €98 357,57 €
Monthly savings of 500 €/mo, 10 yC·(k120−1)/(k−1)85 525,87 €85 525,87 €
Growing savings, +1.5 %/yr wage growthC·Σ 1,015(j−1)/12·k120−j91 397,36 €91 397,36 €
Withdrawal phase: 1 M€, withdrawing 2 000 €/mo, 10 yS·k120 − W·(k120−1)/(k−1)1 625 047,89 €1 625 047,89 €
Inflation adjustment (Fisher), 50 000 €, 10 yS·(1,07/1,02)1080 687,46 €80 687,46 €
Asset of 220 000 €, +2 %/yr, 10 yP·1,0210268 178,77 €268 178,77 €
Annuity loan of 187 000 €, 3.5 %, 25 yP·r/(1−(1+r)−300)936,17 €/kk936,17 €/kk

The annuity formula is the same one banks' loan calculators use — you can verify the monthly payment with any bank's calculator or a spreadsheet's PMT function: PMT(3.5 %/12; 300; −187000) = 936.17 €. The saving and withdrawal phase formulas match the spreadsheet's FV function with monthly interest rates.

Worked tax examples computed step by step

Capital gains tax and deemed acquisition cost (asset sales)

A home is bought for 220 000 € and sold 10 years later, appreciating 2 %/yr. Not marked as a tax-free own home.

Sale price220 000 € · 1,0210 = 268 178,77 €
Actual gain268 178,77 − 220 000 = 48 178,77 €
Deemed acquisition cost (ownership ≥ 10 y)taxable at most 60 % of the sale price = 160 907.26 € → the actual gain is smaller, so 48 178.77 € is taxed
Tax by bracket30 000 · 30 % + 18 178,77 · 34 % = 9 000,00 + 6 180,78 = 15 180,78 €
Engine result15 180,78 € — matches

Retirement withdrawal: gross → net (profit-share tax)

Only the profit share of a withdrawal is taxed. Example: portfolio value 500 000 €, of which 250 000 € is acquisition cost (profit share 50 %), and the retiree needs 2 000 € in hand.

Gross saleneed / (1 − profit share · tax) = 2 000 / (1 − 0.5 · 0.30) = 2 352,94 €
Taxprofit share · gross · 30 % = 0.5 · 2 352.94 · 0.30 = 352,94 €
In hand2 352.94 − 352.94 = 2 000.00 € — exactly the need

The engine tracks the portfolio's acquisition cost month by month: savings increase it, sales decrease it proportionally, and returns only grow the value. Annual realised gains are summed up for the 30 000 € tax threshold, and the calculator resets them every calendar year.

The dividend tax drag in a book-entry account

Of the dividends from directly held shares, 85 % is taxable capital income. If the dividend yield is set to 3.5 %/yr, a book-entry account loses 3.5 % · 85 % · 30 % ≈ 0.89 percentage points of annual return on the equity portion. In an equity savings account and an insurance wrapper dividends accrue untaxed — this difference is the heart of the account comparison.

Monte Carlo: repeatability and properties

The success probability is computed from thousands of random market paths. The randomness is seeded (path i always gets the same shock sequence), so the same plan gives exactly the same result on every run, and comparisons between plans are fair — both experience the same market histories. Automated tests additionally verify that the range's lower bound (P10) never exceeds the upper bound (P90), that the range starts from the initial capital, and that the depletion curve's final value is exactly 1 − success probability.

Example: the default plan's success probability is 99.0 % — bit-for-bit the same on every run and on every device.

Known simplifications what the model does NOT account for

Every model simplifies. These are the known deviations from reality — the calculation is an indicative illustration, not a tax return:

Equity savings account deposit capThe 100 000 € cap isn't modelled in the calculation (the interface warns when it's exceeded).
Loss deductionNot modelled — only gains are taxed; deductions for loss years aren't credited.
Deemed acquisition cost on withdrawalsPro mode's deemed-cost rule for monthly retirement withdrawals estimates the holding period from the start of the plan, not per lot.
Financing one-off itemsOne-off expenses financed from investments (e.g. a renovation) don't realise capital gains tax — tax is computed only on retirement withdrawals and asset sales.
Loan payments beyond savings capacityWhen loan payments exceed the monthly savings, the difference is financed from investments (tax-free, like one-off items). So the model doesn't assume extra income from anywhere — monthly savings are the only modelled income stream during the working years.
Holdings (current state)A home or cottage you already own is entered as its current value and remaining loan — the purchase price isn't asked, so in a taxable sale the taxable share is always computed with the deemed acquisition cost (20 % / 40 % by holding period; an optional purchase year extends the holding period, without it the holding period counts only from today). Your own permanent home is tax-free to sell by default.
Expected path vs. medianThe chart's main line is the expected-value path of returns (arithmetic mean). When returns fluctuate, the typical — i.e. median — outcome ends up below it (so-called volatility drag, σ²/2 ≈ 1–2 pp/yr at typical equity weights). The gap is deliberately visible rather than hidden: the uncertainty range (P10–P90) and the success probability are computed from the Monte Carlo distribution, where the drag is fully included — you can see the median in the middle of the range, and goals can be sized to a 75–95 % confidence level instead of the expected value alone.
Earnings-related pensionYour own estimate as monthly income — not an ETK calculation. Income tax on the earnings-related pension, the national pension and the guarantee pension aren't modelled.
Asset class correlationThe basic version's uncertainty range assumes full correlation (a conservative simplification — the real diversification benefit is larger). In Pro mode you can set the correlations yourself.
Return distributionMonthly returns from a normal distribution with no autocorrelation (Pro: fat-tailed Student's t). Real markets can deviate from this.
InflationA constant assumption for the whole plan — real inflation varies.
Changes to tax rulesThe calculation applies today's rules across the whole lifecycle — future law changes aren't predicted.

Check it yourself

All the checks on this page — and dozens more — run automatically with every code change. You can repeat them yourself:

  1. Get the source code: github.com/olavikurola/varallisuuspolku
  2. Run the unit tests: node testit/laskenta.test.js — no dependencies, plain Node.js is enough.
  3. Compare for yourself: the app's annual table (below the chart) shows the numbers year by year and exports them as CSV to a spreadsheet, where you can build your own comparison.

The tests cover, among other things, compound-interest identities, tax calculation, annuity loans, Monte Carlo determinism, the inverse solvers (bisection), goal points, confidence levels, family calculation coherence and the bit-level equality of Pro mode's defaults with the basic state.

The calculation is an indicative illustration, not investment advice or tax advice. Past returns are no guarantee of future returns. Back to the planning tool · Accessibility