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 rules | Finnish 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 assumptions | Stocks 7 %, bonds 3 %, cash 1.5 % per year (nominal). Editable in Pro mode. |
| Inflation assumption | 2 %/yr (editable). Inflation adjustment with the exact Fisher formula (1+r)/(1+i). |
| Monte Carlo | 5 000 paths, fixed per-path seeds (CRN) — the same result on every run, deltas comparable. |
| Verified | 25 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 code | laskenta.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.
| Check | Formula | By hand | Engine |
|---|---|---|---|
| Lump sum of 50 000 €, 10 y | S·1,0710 | 98 357,57 € | 98 357,57 € |
| Monthly savings of 500 €/mo, 10 y | C·(k120−1)/(k−1) | 85 525,87 € | 85 525,87 € |
| Growing savings, +1.5 %/yr wage growth | C·Σ 1,015(j−1)/12·k120−j | 91 397,36 € | 91 397,36 € |
| Withdrawal phase: 1 M€, withdrawing 2 000 €/mo, 10 y | S·k120 − W·(k120−1)/(k−1) | 1 625 047,89 € | 1 625 047,89 € |
| Inflation adjustment (Fisher), 50 000 €, 10 y | S·(1,07/1,02)10 | 80 687,46 € | 80 687,46 € |
| Asset of 220 000 €, +2 %/yr, 10 y | P·1,0210 | 268 178,77 € | 268 178,77 € |
| Annuity loan of 187 000 €, 3.5 %, 25 y | P·r/(1−(1+r)−300) | 936,17 €/kk | 936,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 price | 220 000 € · 1,0210 = 268 178,77 € |
| Actual gain | 268 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 bracket | 30 000 · 30 % + 18 178,77 · 34 % = 9 000,00 + 6 180,78 = 15 180,78 € |
| Engine result | 15 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 sale | need / (1 − profit share · tax) = 2 000 / (1 − 0.5 · 0.30) = 2 352,94 € |
| Tax | profit share · gross · 30 % = 0.5 · 2 352.94 · 0.30 = 352,94 € |
| In hand | 2 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 cap | The 100 000 € cap isn't modelled in the calculation (the interface warns when it's exceeded). |
| Loss deduction | Not modelled — only gains are taxed; deductions for loss years aren't credited. |
| Deemed acquisition cost on withdrawals | Pro 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 items | One-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 capacity | When 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. median | The 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 pension | Your 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 correlation | The 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 distribution | Monthly returns from a normal distribution with no autocorrelation (Pro: fat-tailed Student's t). Real markets can deviate from this. |
| Inflation | A constant assumption for the whole plan — real inflation varies. |
| Changes to tax rules | The 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:
- Get the source code: github.com/olavikurola/varallisuuspolku
- Run the unit tests:
node testit/laskenta.test.js— no dependencies, plain Node.js is enough. - 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