Skip to main content
Card class: StandardCategory: Ecommerce Platform
The share of orders sitting in each order status, the single view that shows where work is piling up and where money is leaking.

At a glance

OpenCart moves every order through a sequence of statuses (Pending, Processing, Shipped, Complete, Cancelled, Refunded, Failed and any custom ones a merchant adds). This donut breaks the window’s orders down by status share. It is the fastest read on operational health: a fat Pending slice means fulfilment is backing up, a growing Refunded slice means product or expectation problems, a rising Failed slice means checkout is breaking. There is no alert, because the healthy mix is store-specific, but the shape of the donut is diagnostic at a glance.
What it showsOrder count per status for the window, displayed as shares of a donut.
Statuses are configurableOpenCart order statuses are merchant-editable under System → Localisation → Order Statuses. Stores rename, add, and remove statuses freely. The connector reads your configured statuses, not a fixed list.
Default statusesA stock OpenCart install ships Pending, Processing, Shipped, Complete, Cancelled, Refunded, Voided, Denied, Canceled Reversal, Failed, Expired, Processed, Reversed, Chargeback, plus the missing-orders state (order_status_id = 0).
Missing ordersOrders with order_status_id = 0 are started-but-unconfirmed checkouts. The card can show or fold these depending on configuration.
Current status, not historyThe donut reflects each order’s current status, not every status it has passed through. Status history lives in oc_order_history.
Multi-storeThe mix can be split by store_id in the detail view; the headline donut sums all stores.
Currency / taxn/a, this is a count distribution. For value at risk see Revenue at Risk (live).
Time window30D (rolling 30 days)
Alert triggerNone
Rolesowner, operations

Calculation

COUNT(orders) GROUP BY order_status
  WHERE date_added BETWEEN [period_start, period_end]

Worked example

An Italian kitchenware merchant on OpenCart 3.0 reviews the 30-day window 14 May 26 to 12 Jun 26. They have kept the default statuses and added one custom status, Awaiting Stock.
StatusOrdersShare
Complete1,12056%
Processing36018%
Shipped24012%
Pending1407%
Awaiting Stock (custom)603%
Cancelled402%
Refunded241.2%
Failed160.8%
Order Status Distribution (this card)2,000100%
What’s interesting here:
  1. The Complete slice at 56 percent is the headline of a healthy store. Most orders reach a terminal, fulfilled state. The Processing and Shipped slices together (30 percent) are the work-in-progress that will mostly roll into Complete. A donut dominated by Complete and in-flight statuses is the shape you want.
  2. The Awaiting Stock slice is the custom-status payoff. Because OpenCart lets merchants define their own statuses, this store can see 60 orders held specifically because of inventory. A generic platform would bury those in Pending. The donut respects the merchant’s own operational vocabulary, which makes it far more actionable.
  3. Pending at 7 percent is worth a glance, not a panic. Some pending is normal (bank transfer awaiting payment, fresh orders not yet picked up). A pending slice that grows week over week is the early sign of a fulfilment backlog; pair with Order Processing Backlog.
  4. Refunded plus Cancelled plus Failed is 4 percent combined, which is healthy. Each is a separate card with its own diagnosis, but the donut is where you first notice if one of them is fattening. A jump in the Refunded slice points at product or expectation issues; a jump in Failed points at checkout or gateway problems.
  5. The mix is store-specific, so there is no alert. A bank-transfer-heavy store carries a large Pending slice permanently and that is fine. The value is in watching the shape change over time, not in comparing your donut to anyone else’s.

Sibling cards merchants should reference together

CardWhy pair it with Order Status Distribution
Pending OrdersZooms into the Pending slice. A growing slice here is a backlog forming.
Processing OrdersThe in-flight slice. Read with Pending to see where work sits.
Order Processing BacklogThe operational alarm when the early-stage slices swell.
Failed Orders (24h)The Failed slice in a live 24-hour view.
Refund RateThe Refunded slice as a rate over time.
Order VolumeThe total the donut divides up. Mix means little without knowing the size.

Reconciling against OpenCart

Where to look in OpenCart admin: Sales → Orders, with the Order Status filter, lets you count orders in each status for a date range. System → Localisation → Order Statuses is where the status list itself is defined, renamed, and extended. Reports → Sales → Orders can group totals by status for a periodic view. The underlying data is order_status_id on oc_order, the status names in oc_order_status, and the transition log in oc_order_history. Other OpenCart views that look like the same number but are not:
  • Sales → Orders default list: hides order_status_id = 0 (missing) orders, so the on-screen total can be smaller than the donut if missing orders are included.
  • Reports → Sales: usually reports confirmed-sales statuses only and excludes Failed, Missing, and sometimes Cancelled.
  • Dashboard order tile: typically a single confirmed-order count, not a status breakdown.
Why our number may legitimately differ:
ReasonDirection of divergence
Custom statuses. OpenCart statuses are merchant-configurable. If a store renames or splits statuses, our donut reflects the configured set, which may not line up with a simple admin label filter.Either direction
Missing orders. Whether order_status_id = 0 is shown depends on configuration. An admin default list hides them; the donut can include them.Vortex IQ higher when missing orders are shown
Time zone. OpenCart admin uses the store timezone; Vortex IQ evaluates the window in UTC by default. Boundary orders shift slices slightly.Boundary effects
Multi-store. A store_id-filtered admin view shows one store; the donut sums all by default.Vortex IQ higher than a single-store view
Sync lag. Status changes in the last few minutes appear on the next sync.Self-resolves at next sync
Cross-connector note: when a payment processor is connected, the Failed and Refunded slices should correspond to the processor’s declines and refunds. If the donut shows refunds the processor does not, a refund was recorded in OpenCart without being pushed to the gateway, which is a reconciliation flag worth chasing.

Known limitations / merchant FAQs

Why do my statuses not match the defaults you list? Because OpenCart statuses are merchant-configurable. Stores rename, add, and remove them under System → Localisation → Order Statuses. The donut reads your configured statuses, so a custom status like Awaiting Stock or Ready for Pickup will appear as its own slice. Does the donut show current status or status history? Current status only. Each order contributes one slice, its status right now. The full path an order took through statuses lives in oc_order_history and is not what this card draws. My Pending slice is large, is that a problem? Not necessarily. A bank-transfer-heavy or quote-driven store carries a permanently large Pending slice and that is fine. The signal is a slice that grows week over week, which points to a fulfilment or payment backlog. Pair with Pending Orders. Why are there no missing orders in my donut? Missing orders (order_status_id = 0, unconfirmed checkouts) are shown or folded depending on configuration. If you want them visible, enable them in the card settings; if the donut looks short of your total order count, missing orders are likely being folded. Why is there no alert on this card? Because the healthy mix is store-specific. A fixed threshold on any one slice would mislead some stores. The donut is a diagnostic shape; the slice-level alarms live on the dedicated cards (Failed, Refund Rate, Backlog). The Refunded slice grew, where do I dig? Move to Refund Rate for the trend, then look at which products drive it. A fattening Refunded slice usually points to a product quality or expectation issue rather than a payment one. Why does my admin order list total differ from the donut total? Most often because the admin default list hides missing orders while the donut can include them, and because the donut may sum multiple stores. Filter the admin for all statuses and the right store to reconcile.

Tracked live in Vortex IQ Nerve Centre

Order Status Distribution is one of hundreds of KPI pulses Vortex IQ tracks across OpenCart and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.