{% extends 'base.html' %} {% block title %}Finance — Shiba Meals{% endblock %} {% block page_title %}Finance{% endblock %} {% block content %}
Finance & Reconciliation
{{ today }} · Cash + MPesa vs Expected Sales · Profit Engine
Daily Profit Engine — {{ today }}
Loading profit breakdown…
⚖ Daily Reconciliation — Lock & Close
Once locked, a day's reconciliation cannot be changed without manager override. Lock only when all cashiers have submitted their EOD counts.
{% for outlet in outlets %}
{{ outlet.name }}
Loading…
{% endfor %}
Net Profit
KES {{ "{:,.0f}".format(profit) }}
Revenue − daily cost
Expected Revenue
KES {{ "{:,.0f}".format(total_rev) }}
Stock movement × price
Daily Cost
KES {{ "{:,.0f}".format(ing_cost + other_total) }}
Requisitions + expenses
{% if payroll %}
Payroll (est. daily)
KES {{ "{:,.0f}".format(payroll.daily) }}
Add to expenses when paid
{% else %}
Outlets Active
{{ recon|length }}
Today
{% endif %}
{% if payroll %}
Payroll Summary
Daily
KES {{ "{:,.0f}".format(payroll.daily) }}
today
Weekly
KES {{ "{:,.0f}".format(payroll.weekly) }}
this week
Monthly
KES {{ "{:,.0f}".format(payroll.monthly) }}
this month
{% for u in payroll.breakdown %} {% endfor %}
NameRolePay PeriodAmountDailyWeeklyMonthly
{{ u.name }} {{ u.role.replace('_',' ') }} {{ u.pay_period }} KES {{ "{:,.0f}".format(u.pay_amount) }} KES {{ "{:,.0f}".format(u.daily) }} KES {{ "{:,.0f}".format(u.weekly) }} KES {{ "{:,.0f}".format(u.monthly) }}
{% endif %}
Daily Reconciliation by Outlet
Variance = Total Collected − Expected Revenue. When recording M-Pesa manually, enter the M-Pesa reference number to prevent double-counting with auto-IPN entries.
{% for r in recon %}
{{ r.outlet.name }} Till: {{ r.outlet.till_number or '—' }}
Expected Revenue
KES {{ "{:,.0f}".format(r.exp_rev) }}
From stock movement
M-Pesa / Bank (auto: KES {{ "{:,.0f}".format(r.manual_mpesa) }} manual + {{ "{:,.0f}".format(r.mpesa - r.manual_mpesa) }} IPN)
KES {{ "{:,.0f}".format(r.mpesa) }}
Enter ref to prevent double-counting with auto IPN
Cash Revenue
KES {{ "{:,.0f}".format(r.cp.cash_revenue) }}
Declared − Float + Drop + Till Exp
Variance
{% if r.variance >= 0 %}+{% endif %}KES {{ "{:,.0f}".format(r.variance) }}
{% if r.variance|abs < 5 %}Balanced {% elif r.variance < 0 %}Shortfall — check cash count, M-Pesa sync, or wastage records {% else %}Surplus — possible unrecorded M-Pesa or float error{% endif %}
FloatCash DeclaredTill Exp.Cash DropTotal Collected
KES {{ "{:,.0f}".format(r.cp.float) }} KES {{ "{:,.0f}".format(r.cp.declared) }} KES {{ "{:,.0f}".format(r.cp.till_exp) }} {% if r.cp.drop %}KES {{ "{:,.0f}".format(r.cp.drop) }}{% else %}pending EOD{% endif %} KES {{ "{:,.0f}".format(r.tc) }}
{% endfor %}
Daily Cost Breakdown
{% for e in other_exp %} {% endfor %}
ComponentSourceNoteAmount
Ingredient Cost Approved requisitions Recipe-based reference prices KES {{ "{:,.0f}".format(ing_cost) }}
{{ e.category }} Expense log {{ e.note }} KES {{ "{:,.0f}".format(e.amount + e.tx_cost) }}
TotalKES {{ "{:,.0f}".format(ing_cost + other_total) }}
Ingredient Receipts (audit)
{% for r in receipts %} {% else %} {% endfor %}
DateIngredientNoteAmount
{{ r.date }}{{ r.ing_name or '—' }}{{ r.note }}KES {{ "{:,.0f}".format(r.amount + r.tx_cost) }}
No receipts today.
{% endblock %} {% block scripts %} {% endblock %}