Skip to main content
Card class: HeroCategory: Ecommerce Platform
A single live currency figure that rolls up value tied up in at-risk states, orders stuck too long, lost demand on out-of-stock best-sellers, and failed orders, so you can see exposure at a glance.

At a glance

Most cards answer one question. This one answers “how much money is currently in trouble?” by combining several at-risk signals into one live figure: the value of orders stuck in a pre-completion state too long, the lost demand on top-selling products that have gone out of stock, and the value of orders that have failed outright. It is deliberately a composite estimate, not an accounting total. Its job is to turn scattered operational problems into a single dollar number an owner can react to, then drill into the contributing cards to act.
What it estimatesA live, composite currency value of revenue currently exposed across at-risk states, not a single ledger figure.
What feeds itBroadly: value of orders stuck in pending/processing beyond a healthy age, estimated lost demand on out-of-stock best-sellers, and the value of failed orders. The exact blend is a Vortex IQ composite, not a fixed OpenCart formula.
Order / value sourceOrder totals live in oc_order; OpenCart stores order totals and tax separately and supports multiple currencies. Stock comes from oc_product.
Tax / shippingBecause it draws on order totals, the figure reflects the totals as OpenCart stores them; it is an exposure estimate, not a tax-reconciled number.
CurrencyOpenCart supports multiple currencies and does not apply FX here; a multi-currency store mixes units unless filtered to one currency.
Not an accounting figureThis is an operational early-warning estimate. Do not reconcile it line-for-line against your books; reconcile its components instead.
Multi-storeOrders and stock carry / share store_id; by default the estimate spans the whole estate.
Time windowRT (live)
Alert trigger> $0
Rolesowner, finance

Calculation

APPROX:
  value_of_orders_stuck_too_long
+ estimated_lost_demand_on_oos_bestsellers
+ value_of_failed_orders
= revenue_at_risk (live composite estimate, not a fixed formula)

Worked example

A US outdoor-gear store on OpenCart 4.x. The snapshot is taken at 14:00 on 19 Mar 26, during a week with a payment-callback hiccup and a stock-sync slip. Figures are illustrative.
Contributing signalEstimated value at riskSource card
Orders stuck in Pending beyond a healthy age$6,400Pending Orders
Orders stuck in Processing too long$2,100Processing Orders
Lost demand on out-of-stock best-sellers$3,800Out-of-Stock Products
Failed orders (last 24h)$1,500Failed Orders (24h)
Revenue at Risk (this card)$13,800composite estimate
What’s interesting here:
  1. One number replaces a morning of clicking around. Instead of the owner checking four separate queues, the card surfaces $13,800 at risk and points to the four contributors. The value is triage, it tells you a problem is worth acting on today, before you know exactly which.
  2. The biggest slice is stuck Pending orders. At $6,400, the pending pile dominates, and it traces straight back to the payment-callback hiccup. Fixing the callback both clears those orders and drops this figure fastest, so it is the first lever to pull.
  3. It is an estimate, not the ledger. The out-of-stock lost-demand component is modelled from recent velocity, not booked revenue, so $13,800 is a directional exposure figure, not a number to journal. The owner reconciles each component against its own card, never this total against the books.
  4. Any non-zero reading fires the alert. Because risk above zero always deserves a look, the trigger is > $0. In a perfectly healthy hour the card reads zero and stays quiet; the moment money is exposed, it speaks up.

Sibling cards merchants should reference together

CardWhy pair it with Revenue at Risk (live)
Pending OrdersA primary contributor. Stuck pending value is often the largest slice of the figure.
Processing OrdersOrders aging in Processing add to the at-risk pile.
Out-of-Stock ProductsLost demand on out-of-stock best-sellers feeds the estimate.
Failed Orders (24h)Failed-order value is a direct component.
Stock-Out BurstA burst that zeros best-sellers spikes the lost-demand component sharply.
Order Processing BacklogThe aging view that explains why pending/processing value is at risk.

Reconciling against OpenCart

Where to look in the OpenCart admin: There is no single OpenCart screen that shows “revenue at risk”, because this is a Vortex IQ composite. You reconcile its parts. Sales → Orders, filtered by status, gives you the stuck-pending and stuck-processing populations and their totals (oc_order holds totals, with tax stored separately). Catalog → Products, sorted by quantity, plus Reports → Products Purchased, shows which out-of-stock items had real demand. Reports → Sales → Orders summarises order value by status across a period. OpenCart admin views that look like the same number but aren’t:
  • Reports → Sales → Orders total is realised or booked order value by status, not a forward-looking risk estimate; it has no lost-demand component.
  • The Dashboard revenue tile is recent sales, not exposure.
  • A gateway’s pending-settlement figure overlaps with the stuck-order component but excludes stock-driven lost demand entirely.
Why our number may legitimately differ from the OpenCart admin:
ReasonDirection of divergence
It is an estimate, not a ledger. The lost-demand component is modelled from velocity, so no OpenCart report will match the total exactly.By design, not reconcilable as a single figure
Timezone. Aging thresholds are evaluated in UTC by default; OpenCart timestamps follow the store timezone. Which orders count as “too long” can shift at the boundary.Cosmetic timing shift
Multi-store. Orders and stock span store_id; the estimate covers the whole estate unless filtered.Card higher than a single-store view
Multi-currency. OpenCart supports multiple currencies and no FX is applied here, so a multi-currency store mixes units.Mixed-units total for international stores
Status-name customisation. Renamed pending/processing/failed statuses need mapping for the right orders to feed the estimate.Either direction
API / DB sync lag. A just-stuck order or a just-zeroed best-seller may not yet be reflected.Self-resolves at next sync
Cross-connector note: the stuck-order component overlaps with what a payment gateway calls pending settlement, and the lost-demand component overlaps with a marketplace’s out-of-stock exposure. Neither external system sees the whole picture the way this composite does, which is the point: it unifies signals that otherwise live in separate tools.

Known limitations / merchant FAQs

Is this a number I can put in my accounts? No. It is an operational early-warning estimate, not an accounting figure. The lost-demand component is modelled from recent product velocity rather than booked revenue, so the total is directional. Reconcile its components against their own cards and your books, never this single number against the ledger. Why does it fire at any value above zero? Because money in trouble always deserves a look. In a healthy hour the figure is zero and the card stays quiet; the moment value is exposed (a stuck order, a zeroed best-seller, a failed payment), it should be visible. There is no “safe amount” of at-risk revenue to ignore by design. What exactly goes into the number? Broadly: the value of orders stuck in a pre-completion state past a healthy age, the estimated lost demand on out-of-stock best-sellers, and the value of failed orders. The precise blend is a Vortex IQ composite rather than a fixed OpenCart formula, which is why we describe the inputs rather than publish an exact equation. The figure jumped, how do I find out why? Open the contributing cards: Pending Orders, Processing Orders, Out-of-Stock Products, and Failed Orders (24h). Whichever moved is the driver. Vortex Mind can also investigate the cause automatically when the figure spikes. My store uses multiple currencies, what currency is this in? OpenCart supports multiple currencies and no FX conversion is applied here, so a multi-currency store produces a mixed-units total unless you filter to a single currency. Treat the figure as directional for international estates. Does it cover all my storefronts? Yes by default. Orders and stock span or share store_id, so the estimate covers the whole estate unless you filter to one store. It reads zero, does that mean nothing is wrong? It means none of the tracked at-risk states currently hold value: no over-aged stuck orders, no out-of-stock best-sellers with modelled lost demand, no failed orders. Other problems outside these signals can still exist, which is why this card sits alongside the rest of the Nerve Centre rather than replacing them.

Tracked live in Vortex IQ Nerve Centre

Revenue at Risk (live) 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.