Operational KPIs — metrics reference
Route: /reports/v2/operations/operational-kpis
Permission: order.reports.operational_kpis
Load = count of discrete operational events in the selected half-open date range [from, to) in browser timezone (p_tz).
Dimensions
| Dimension | Rule |
|---|---|
| Warehouse | Fulfilling warehouse for orders/picklists; source WH for STR raised; destination WH for STR received |
| Date range | URL ?from= / ?to= |
| Buckets | Hourly and daily arrays returned together; UI toggles display |
Fulfilment pipeline (tracked)
| Key | Label | Automation | Load definition |
|---|---|---|---|
order_punching | Order punching | Mixed | Orders created in range |
items_cancelled | Line items cancelled | Mixed | order_items.status = cancelled, updated in range |
picklist_generated | Picklist generated | Auto | Fulfillment picklists created |
picking | Picking | Manual | Lines with pick_list_items.picked_at in range (not pick_lists.started_at) |
packing | Packing completed | Manual | Packed picklists; packer from pick_list_items.notes (Packed N by uuid) |
dispatch | Dispatch / rider handoff | Mixed | Dispatched/delivered picklists with rider; credits dispatched_by or historical packer backfill |
deliver | Delivered | Mixed | Delivered picklists; credits delivered_by or assigned rider backfill |
Other tracked sections (summary)
| Section | Keys | Notes |
|---|---|---|
| IPD processes | manual_order_creation, hospital_orders, pending_lines, … | Hospital QR split via notes ILIKE '%Patient QR:%' |
| Order processing | stock_not_found, invoice_created | Unavailable lines; sales linked to picklists |
| STR | str_auto_morning, str_raised, str_received | Morning window 07:00–09:00 local for auto-STR |
| Refunds | order_refunds | Return sales tied to fulfillment invoices |
Not tracked (v1)
SKU mapping review, zero-dispatch marking, ward liaison, bag labelling, QC verify, handover documents, compounding/IV/TPN, discharge summary, pending ETA updates, ad-hoc STR reason — UI shows Not tracked badge.
RPC
reports_oms_operational_kpis(p_from, p_to, p_tz, p_warehouse_ids) → { metrics[], totals }