{% extends "core/base.html" %}{% load fmt %} {% block title %}Dashboard{% endblock %} {% block content %}

Cash outlook

{% include "core/_scenario_picker.html" %}

13 weeks from {{ fc.as_of|date:"j M Y" }}{% if scenario %} · scenario {{ scenario.name }}{% endif %} · {{ fc.n_sims }} Monte Carlo runs

{% if breach %}
Minimum-cash breach in week {{ breach.index|add:1 }} ({{ breach.start|date:"j M" }}): expected closing cash {{ breach.closing|inr }} against a threshold of {{ fc.min_cash|inr }}.
{% elif risk %}
Breach risk in week {{ risk.index|add:1 }}: expected cash stays above the threshold, but the p10 outcome ({{ risk.closing_p10|inr }}) dips below {{ fc.min_cash|inr }}.
{% else %}
No minimum-cash breach expected across the 13-week horizon, including the p10 downside.
{% endif %}
Opening cash{{ fc.weeks.0.opening|short }}
Lowest closing cash{{ fc.min_closing|short }}
Week 13 closing{{ fc.weeks.12.closing|short }}
DSO{{ kpi.dso|floatformat:1 }} d
DPO{{ kpi.dpo|floatformat:1 }} d
Cash conversion cycle{{ kpi.ccc|floatformat:1 }} dDIO {{ kpi.dio|floatformat:0 }}
Collection effectiveness{{ kpi.cei|floatformat:1 }}%
Open AR / AP{{ kpi.ar_total|short }} / {{ kpi.ap_total|short }}

Closing cash

expected p10–p90 minimum cash breach

{% include "core/_cash_chart.html" %}

AR aging

{% for k in kpi.ar_aging %}{% endfor %}{% for k, v in kpi.ar_aging.items %}{% endfor %}
{{ k }}
{{ v|short }}

Top overdue customers

{% for r in kpi.top_overdue|slice:":6" %}{% empty %}{% endfor %}
CustomerOverdueOldest
{{ r.party }}{{ r.overdue|inr }}{{ r.oldest_days }} d
Nothing overdue.
{% endblock %}