Cash (PF-aligned)
PF split on “Money in”
Profit =
money_in_7d × TAP.profitOwner Pay =
money_in_7d × TAP.ownerTax =
money_in_7d × TAP.taxOPEX =
money_in_7d × TAP.opex
Bank for bills
bank_for_bills = bank_now + OPEXCushion
cushion = bank_for_bills − must_pay_soonDaily burn
daily_burn = opex_month / 30Runway (days)
runway_days = bank_for_bills / daily_burn(ifopex_monthis 0, runway = 0)
Profit (monthly mix on Real Revenue)
Real revenue
real_revenue = rev_month − dir_costs_monthProfit now ($)
profit_now = max(0, real_revenue − ownerpay_month − tax_month − fixed_opex_month)Percentages (for display)
pct_owner = ownerpay_month / real_revenuepct_tax = tax_month / real_revenuepct_opex = fixed_opex_month / real_revenuepct_profit= profit_now / real_revenue
(Shown as whole % in the UI.)
Scores (simple mode, whole numbers)
Cash score
if cushion < 0 → 20
else if runway_days < 15→ 60
else → 100
Profit score
if real_revenue <= 0 → 20
else:
s = 100
gap_pp = max(0, round((TAP.profit - pct_profit) * 100)) // percentage points short
over_pp = max(0, round(((fixed_opex_month/real_revenue) - TAP.opex) * 100))
s -= min(100, gap_pp * 2) // lose 2 pts per pp below target profit
s -= min(40, over_pp) // lose 1 pt per pp OPEX over cap (cap 40)
profit_score = clamp(s, 0, 100)
Revenue score
gm_ok = (avg_sale > 0) && (1 - avg_cost_per_sale/avg_sale >= 0.30)
demand_ok = (leads_or_jobs_month * (win_rate_pct/100)) >= 1
revenue_score = 50 + (gm_ok ? 25 : 0) + (demand_ok ? 25 : 0) // 50, 75 or 100
Overall type
overall = pillar with the lowest score:
- Cash Control issue
- Profit Power issue
- Revenue Engine issue
Transfers to make today
From step (1): move the three amounts and keep OPEX in operating:
Move
Profit→ Profit accountMove
Owner Pay→ Owner Pay accountMove
Tax→ Tax accountKeep
OPEXin Operating
If you want me to change any thresholds (e.g., Cash “tight” from 15 days to 30, or margin floor from 30% to 35%), tell me and I’ll adjust the code lines for you.