{% extends "base.html" %} {% block title %}{{ _("Forecast") }} · Wealth Dashboard{% endblock %} {% block heading %}{{ _("Forecast") }}{% endblock %} {% block lede %}

{{ _("Where the money is heading, starting from what the accounts add up to today. The return is your assumption, not a prediction — the page only does the arithmetic, and shows how much of the result is your own deposits.") }}

{% endblock %} {% block content %}

{{ _("Before inflation. Broad stock-market funds have averaged around 6–8 % a year over long periods, savings accounts far less; a cautious plan uses a lower number than history did.") }}

{{ _f("Starting from {amount}: what {who} adds up to today across {n} accounts.", amount=money(s.net_worth, s.base_currency), who=(view_person.name if view_person else _("the household")), n=s.account_count) }} {% if s.unconverted %}{{ _("Amounts in a currency with no rate on file are not in that figure.") }}{% endif %}

{% if plan.mode == 'target' %}
{{ _("Save per month") }}
{{ money(plan.monthly, s.base_currency) }}
{% if plan.already_there %}{{ _("The goal is already met — nothing more is needed.") }} {% else %}{{ _f("to reach {target} by {year}", target=money(plan.target, s.base_currency), year=plan.end_year) }}{% endif %}
{% else %}
{{ _f("In {year}", year=plan.end_year) }}
{{ money(plan.end_value, s.base_currency) }}
{{ _n(plan.years, "{n} year from now", "{n} years from now") }} {%- if plan.target %} · {% if plan.reach_years is not none %}{{ _f("the goal is reached in {year}", year=plan.points[0].year + plan.reach_years) }}{% else %}{{ _("the goal is not reached in this time") }}{% endif %}{% endif %}
{% endif %}
{{ _("You put in") }}
{{ money(plan.end_contributed, s.base_currency) }}
{{ _f("today's {start} plus {monthly} a month", start=money(plan.start, s.base_currency), monthly=money(plan.monthly, s.base_currency)) }}
{{ _("Returns earn") }}
{{ money(plan.end_returns, s.base_currency) }}
{{ _f("at {rate} % a year, compounding monthly", rate=('%g' | format(plan.rate))) }}

{{ _("Year by year") }}

{{ s.base_currency }}
{{ _("Show as a table") }}
{% for p in plan.points %} {% endfor %}
{{ _("Year") }}{{ _("Value") }}{{ _("You put in") }}{{ _("Returns") }}
{{ p.year }}{{ money(p.value, s.base_currency) }} {{ money(p.contributed, s.base_currency) }} {{ money(p.returns, s.base_currency) }}
{# ── Retirement ──────────────────────────────────────────────────── #}

{{ _("Retirement outlook") }}

{% if retirement.no_people %}

{{ _("Add the people in your household under Settings → People, each with a birthday, and this page will say where each of them stands for retirement.") }}

{% elif not retirement.blocks and retirement.without_birthday %}

{{ _f("No birthday on file for {names}. Add one under Settings → People and the outlook appears here.", names=retirement.without_birthday | join(", ")) }}

{% endif %} {% for b in retirement.blocks %} {% set o = b.outlook %}

{{ b.person.name }}

{{ _f("{age} today · {n} accounts · {amount}", age=('%g' | format(b.age_now)), n=b.accounts, amount=money(b.net_worth, s.base_currency)) }}
{% if b.from_plan %}{{ _("The monthly amount is taken from this person's Forecast plan; type one to override it.") }}{% else %}{{ _f("Overrides the Forecast plan's {amount}; clear the field to follow it again.", amount=money(b.plan_monthly, s.base_currency)) }}{% endif %}
{% if o.retired_already %}

{{ _f("{name} is already {age} — past the retirement age set here.", name=b.person.name, age=('%g' | format(b.age_now))) }}

{% endif %}
{{ _f("At {age}, in {year}", age=o.retire_age, year=o.retire_year) }}
{{ money(o.at_retirement, s.base_currency) }}
{{ _n(o.years_to_go | round | int, "{n} year from now", "{n} years from now") }} · {{ _f("{part} of it returns", part=money(o.returns, s.base_currency)) }}
{{ _("Supports, per month") }}
{{ money(o.monthly_income, s.base_currency) }}
{{ _("at a 4 % yearly withdrawal — the usual rule of thumb, before tax and pension") }}
{% endfor %} {% if retirement.blocks and retirement.without_birthday %}

{{ _f("No birthday on file for {names}. Add one under Settings → People and the outlook appears here.", names=retirement.without_birthday | join(", ")) }}

{% endif %}
{% endblock %} {% block scripts %} {% endblock %}