CEO Revenue Cockpit
Bookings against expected revenue, what is at risk, and how much pipeline covers the next quarter.
- xREVExpected revenue (xREV)Derive
- WPA$Win probability addedDerive
- COV90Pipeline coverage · next 90 daysLive
- RARRevenue at riskLive
Traced to its query
What the open book should close for, each deal at a probability adjusted down for its open risk signals.
- Formula
SUM(value × p_adj) WHERE p_adj = deal-probability.ts basis adjusted down for active crm_signals (stalled_stage, going_quiet); finishing = BKW − xREV- Sources
- crm_dealscrm_signalsservices/crm/deal-probability.ts
- League stat
- Expected goals (xG)
- Window
- the page’s own range
- Note
- Needs a calibrated adjustment table (signal kind → probability haircut); every input exists. Until then the tile shows "—" and xDUE carries the unadjusted figure.
How much deal value each kind of play moved toward closing — the change in win probability times the deal's value, credited to the touch that preceded the move.
- Formula
For each deal, Δprobability between crm_event_log diffs / crm_deal_stage_events × value, attributed to the actor (agent_id / user_id) or the nearest preceding communication or call- Sources
- crm_event_logcrm_deal_stage_eventscommunicationsvoice_call_logs
- League stat
- Win probability added (WPA)
- Window
- the page’s own range
- Note
- crm_deal_stage_events snapshots deal_value, not probability; the play-by-play shows the real moves and their value, the WPA bars stay empty until a probability snapshot is recorded per move. Dollar-weighted — the Sales board's WPA (reports.sales_wpa) is in probability points.
How many times over the open pipeline due in the next ninety days covers what is still needed to hit this quarter's revenue goal.
- Formula
SUM(d.value) FROM crm_deals d WHERE open AND d.expected_close_date BETWEEN today AND today + 90 days ÷ NULLIF(SUM(sales_goals.target WHERE metric = 'revenue_won' AND period = 'quarter' AND the current quarter AND archived_at IS NULL) − won value closed this quarter, 0)- Sources
- crm_deals.valuecrm_deals.expected_close_datesales_goals.targetGET /api/v1/crm/boards/ceo?weeks=12 → coverage
- League stat
- Magic number
- Window
- last 90 days
- Note
- null when no quarterly revenue goal is set (Setup ▸ Goals), when the goal is already met, or before migration 478. The gauge marks 3.0× as the target. Different rule from reports.coverage (pipeline ÷ weighted forecast).
Open deal value that carries an unresolved risk signal — going quiet, stalled in its stage, or a reply nobody followed up.
- Formula
SUM(d.value) FROM crm_deals d WHERE open AND EXISTS (SELECT 1 FROM crm_signals s WHERE s.entity = 'deals' AND s.record_id = d.id AND s.resolved_at IS NULL AND s.kind IN ('going_quiet', 'stalled_stage', 'replied_no_task'))- Sources
- crm_deals.valuecrm_signals (kind, resolved_at)GET /api/v1/crm/boards/ceo?weeks=12 → risk.total / risk.deals
- League stat
- Injury report
- Window
- today
- Note
- null (not 0) before migration 444 (crm_signals absent). The treemap colours each deal by days to its expected close.