Inputs you supplied
- Monthly income
- €4,000
- Employment
- freelance
- Lifestyle
- comfortable
- Horizon
- 10 years
- Starting savings
- €0
- Invest fraction
- 0%
- Annual return (nominal)
- 7.0%
- Income growth (nominal)
- 4.0%
Formulas & explanations
Every line in the year-by-year walkthrough below is computed by one of these. Read this section once and the math becomes auditable.
cost_of_living.monthly_budget_single_{tier}_eur · converted to € from native currency
Country-specific cost-of-living estimate for your selected lifestyle tier (tight or comfortable). Stored in the country's native currency, converted to € at current FX.
survival_days = starting_savings ÷ monthly_cost × 30.44
Income-blind: how many days your starting lump sum alone funds this country's monthly cost. Doesn't assume any income — pure runway from the lump sum.
freelance: taxes.freelance_effective_rate · employee: progressive bracket sum ÷ annual_income
Freelance mode reads a single flat percentage. Employee mode walks the country's income-tax brackets and divides total tax by income to get an effective rate.
annual_income = monthly_income × 12
Year-1 gross annual income before tax, in €.
annual_tax = annual_income × effective_tax_rate
Year-1 tax owed at the country's effective rate.
annual_cost = monthly_cost × 12
Year-1 cost of living. Held flat in real terms across the horizon (because the projection runs in today's purchasing power).
annual_save = annual_income − annual_tax − annual_cost
Year-1 surplus. Subsequent years differ when raises beat or lag inflation — see the year-by-year walkthrough.
inflation_rate = 5-year CPI avg (per country, hard-coded in HorizonCalculator::INFLATION_5Y_AVG)
World Bank CPI 2019–2023 average, rounded to 0.5%. Default 5% when no country-specific value is set. Drives both real_growth and real_return.
real_growth = income_growth_rate − inflation_rate
How fast your income grows in today's purchasing power. Positive when raises beat inflation; negative when raises lag. Simple subtraction (Fisher exact form would be (1+nominal)/(1+inflation)−1).
real_return = annual_return − inflation_rate
How fast your invested pot grows in today's purchasing power. Same simple-subtraction approximation as real_growth.
real_income_y = annual_income × (1 + real_growth)^(y−1)
Year-1 income compounded by real_growth each year. y=1 equals annual_income; y=2 has one round of growth applied.
real_save_y = real_income_y × (1 − effective_tax_rate) − annual_cost
Year y's surplus. Cost stays at annual_cost because it's already in real terms. Tax scales with income.
invest_y = max(0, real_save_y) × invest_fraction
Year y's contribution to the invested pot. Negative real_save means no deposit (we don't auto-borrow).
cash_y = real_save_y − invest_y
Year y's contribution to the cash pot. Stays negative if real_save is negative — the deficit is funded by your lump sum.
invested_pot_y = invested_pot_(y−1) × (1 + real_return) + invest_y
End-of-year deposits. The previous balance grows by real_return first, then this year's deposit is added (it doesn't earn interest the year it's deposited).
cash_pot = starting_savings + Σ cash_y · for y = 1..horizon
Cumulative cash savings, including your starting lump sum. Cash earns no return in this model.
horizon_total = cash_pot + invested_pot
Real-€ total at the end of the horizon. Already accounts for raises, taxes, cost of living, and compound returns — all in today's purchasing power.
raise_gain = Σ (real_income_y − annual_income) · for y = 1..horizon
Cumulative real € your raises added above year-1 income. Always 0 in year 1; grows each year if raises beat inflation. Already folded into the heading — this is a decomposition, not a side number.
drag = Σ (annual_cost × (1 + inflation)^(y−1) − annual_cost) · for y = 1..horizon
Cumulative nominal € you'd pay extra at the till for the same cost-of-living basket. Pure communication metric — not subtracted from the heading (the heading is already in real terms).
compound_interest = invested_pot − Σ invest_y · for y = 1..horizon
Pot value minus the actual sum of deposits put into it. Pure interest-on-interest at the real_return rate — no raise-driven money mixed in. Matches the "Compound interest" band in the chart.
runway_years = first y where (cash_pot_y + invested_pot_y) ≤ 0
Year your starting savings + ongoing saves first dip below zero. Null if you stay solvent the entire horizon.
Derived constants for Moldova
- Monthly cost
- €47.37
- Annual cost
- €568.42
- Annual income
- €48,000.00
- Effective tax rate
- 7.00%
- Annual tax (Y1)
- €3,360.00
- Annual save (Y1)
- €44,071.58
- Inflation rate
- 10.00%
- Real growth
- -6.00%
- Real return
- -3.00%
- Deposits (actual)
- €0.00
- Deposits (Y1 baseline)
- €0.00
Where the heading came from
Stacked decomposition. Each band's height at year y is the contribution of that source to the total at that point. Top band of any column equals the Total cell in the row below.
Only one layer is contributing to your projection. Set a starting savings amount or move the Invest % slider above zero on /horizons to see the decomposition come alive.
Year-by-year walkthrough
| Y | Real income | Tax | Cost | Save | Invest dep. | Cash add | Pot grown | Pot after dep. | Cash cum. | Total | Drag (nom.) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | €48,000 | −€3,360 | −€568 | €44,072 | €0 | €44,072 | €0 | €0 | €44,072 | €44,072 | €0 |
| 2 | €45,120 | −€3,158 | −€568 | €41,393 | €0 | €41,393 | €0 | €0 | €85,465 | €85,465 | €57 |
| 3 | €42,413 | −€2,969 | −€568 | €38,875 | €0 | €38,875 | €0 | €0 | €124,340 | €124,340 | €119 |
| 4 | €39,868 | −€2,791 | −€568 | €36,509 | €0 | €36,509 | €0 | €0 | €160,849 | €160,849 | €188 |
| 5 | €37,476 | −€2,623 | −€568 | €34,284 | €0 | €34,284 | €0 | €0 | €195,133 | €195,133 | €264 |
| 6 | €35,227 | −€2,466 | −€568 | €32,193 | €0 | €32,193 | €0 | €0 | €227,326 | €227,326 | €347 |
| 7 | €33,114 | −€2,318 | −€568 | €30,227 | €0 | €30,227 | €0 | €0 | €257,554 | €257,554 | €439 |
| 8 | €31,127 | −€2,179 | −€568 | €28,380 | €0 | €28,380 | €0 | €0 | €285,933 | €285,933 | €539 |
| 9 | €29,259 | −€2,048 | −€568 | €26,643 | €0 | €26,643 | €0 | €0 | €312,576 | €312,576 | €650 |
| 10 | €27,504 | −€1,925 | −€568 | €25,010 | €0 | €25,010 | €0 | €0 | €337,586 | €337,586 | €772 |
Hover any column header to see its formula. All € figures are rounded to whole euros for readability — the underlying calc keeps two decimals.
How card numbers map back
- Heading (end-of-horizon)
- €337,586.14
- Cash pot
- €337,586.14
- Invested pot
- €0.00
- Compound interest
- €0.00
- Raise gain (real)
- €-110,892.09
- Inflation drag (nominal)
- €3,374.96
= Cash pot + Invested pot · last row of the Total column above.
= starting_savings + Σ cash_y · last row of "Cash cum.".
Final value of the compounding pot · last row of "Pot after dep.".
= invested_pot − Σ invest_y · pure interest-on-interest at real_return. Matches the chart's "Compound interest" band.
= Σ (real_income_y − annual_income) · already folded into the heading.
= Σ Drag column · pure communication, NOT subtracted from the heading.