Back to Horizons Β·

πŸ‡ΊπŸ‡¦ Ukraine calculation walkthrough

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.

Monthly cost
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 on savings
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.

Effective tax
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
annual_income = monthly_income Γ— 12

Year-1 gross annual income before tax, in €.

Annual tax
annual_tax = annual_income Γ— effective_tax_rate

Year-1 tax owed at the country's effective rate.

Annual cost
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_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
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
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
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 (year y)
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 (year y)
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 deposit (year y)
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 add (year y)
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
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
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.

Heading (end-of-horizon total)
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)
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.

Inflation drag (nominal)
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
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
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 Ukraine

Monthly cost
€20.00
Annual cost
€240.00
Annual income
€48,000.00
Effective tax rate
5.00%
Annual tax (Y1)
€2,400.00
Annual save (Y1)
€45,360.00
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.

Cash saves (Ξ£ cash_y above starting)

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 βˆ’β‚¬2,400 βˆ’β‚¬240 €45,360 €0 €45,360 €0 €0 €45,360 €45,360 €0
2 €45,120 βˆ’β‚¬2,256 βˆ’β‚¬240 €42,624 €0 €42,624 €0 €0 €87,984 €87,984 €24
3 €42,413 βˆ’β‚¬2,121 βˆ’β‚¬240 €40,052 €0 €40,052 €0 €0 €128,036 €128,036 €50
4 €39,868 βˆ’β‚¬1,993 βˆ’β‚¬240 €37,635 €0 €37,635 €0 €0 €165,671 €165,671 €79
5 €37,476 βˆ’β‚¬1,874 βˆ’β‚¬240 €35,362 €0 €35,362 €0 €0 €201,033 €201,033 €111
6 €35,227 βˆ’β‚¬1,761 βˆ’β‚¬240 €33,226 €0 €33,226 €0 €0 €234,259 €234,259 €147
7 €33,114 βˆ’β‚¬1,656 βˆ’β‚¬240 €31,218 €0 €31,218 €0 €0 €265,477 €265,477 €185
8 €31,127 βˆ’β‚¬1,556 βˆ’β‚¬240 €29,331 €0 €29,331 €0 €0 €294,808 €294,808 €228
9 €29,259 βˆ’β‚¬1,463 βˆ’β‚¬240 €27,556 €0 €27,556 €0 €0 €322,364 €322,364 €274
10 €27,504 βˆ’β‚¬1,375 βˆ’β‚¬240 €25,889 €0 €25,889 €0 €0 €348,253 €348,253 €326

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)
€348,252.51

= Cash pot + Invested pot Β· last row of the Total column above.

Cash pot
€348,252.51

= starting_savings + Ξ£ cash_y Β· last row of "Cash cum.".

Invested pot
€0.00

Final value of the compounding pot Β· last row of "Pot after dep.".

Compound interest
€0.00

= invested_pot βˆ’ Ξ£ invest_y Β· pure interest-on-interest at real_return. Matches the chart's "Compound interest" band.

Raise gain (real)
€-110,892.09

= Ξ£ (real_income_y βˆ’ annual_income) Β· already folded into the heading.

Inflation drag (nominal)
€1,424.98

= Ξ£ Drag column Β· pure communication, NOT subtracted from the heading.