Docs
Suggested Restock

Suggested Restock

Stock Replenishment metrics, inventory status badges, and how suggested restock is calculated

Suggested Restock

The Stock Replenishment experience (Suggested Restock table) helps you manage inventory using forecast-driven targets, reorder points, and purchase order context—per inventory item and location.

Overview

Each row shows product/variant context, availability, forecast demand, open PO exposure, and a suggested order quantity when policy says it is time to reorder. You can adjust lead time and days of stock, assign suppliers, filter and search, and create purchase orders from selections.

Inventory status badges

Statuses are evaluated in a fixed order. The pill styling matches what you see in the app.

Snoozed

Snoozed

The SKU/location is snoozed in product location settings (review is deferred).

On Order

On Order

Open PO quantity for that row is greater than zero (incoming supply exists on an active PO).

Excess

Excess

Days of stock remaining (from suggested restock / forecast) is far beyond what your policy implies you need before the next reorder cycle. Concretely, we flag excess when:

daysOfStockRemaining > 2 × (lead time days + days of stock target)

Both lead time and days of stock come from product location settings (with shop defaults when unset). The sum is your typical “cover through lead time plus forward buffer” horizon in days; means you are carrying enough cover that you would not expect to reorder for an unusually long time. This replaces the old rule that treated any on-hand amount above desired stock as excess.

Critical

Critical

Available < 1 (out or effectively out), or available is below safety stock.

Order Now

Order Now

Reorder point is known and on-hand ≤ reorder point (time to place an order). If reorder point is missing in data, the app may fall back to a positive suggested restock so the row is not stuck as Good.

Good

Good

None of the above—healthy relative to targets and ROP.

Subtext under the badge

  • Usually days of stock remaining (forecast-based).
  • For Excess, days beyond the policy horizon (same formula as above), not units above desired stock.
  • For On Order, open PO quantity coming.

Filters use the same rules as the table so counts stay aligned with what you see on screen.

Calculation pipeline (forecast service)

Targets and suggested quantities are produced by the forecast / suggested restock service (Inventory Mate Flask API). Values are synced into the app and joined with Shopify inventory and purchase orders.

Raw components (then rounded up)

Let z = 1.65 (~95% service level). Per row, after demand and forecast fields are merged:

  1. Lead time demand (LTD) — from the forecast for the lead-time window (variable by SKU/location).
  2. Days-of-stock demand (DSD) — demand cover for your configured days of stock window.
  3. Safety stock (SS)
    SS_raw = z × σ_daily × √(lead time days)
    where σ_daily is the standard deviation of daily sales (with a small floor when variability is zero).

Each of LTD, DSD, and SS is then rounded up to a whole unit so stored targets align with integer on-hand and suggested order quantities:

  • LTD = ceil(LTD_raw)
  • DSD = ceil(DSD_raw)
  • SS = ceil(SS_raw)

Desired stock and reorder point

  • Desired stock level = LTD + DSD + SS (sum of whole units).
    A defensive step ensures desired is at least that sum if any merge drift occurred.

  • Reorder point (ROP) = LTD + SS
    (safety + lead-time cover—not including the “days of stock” bucket, which is the buffer up toward full target).

Suggested restock quantity

Define the gap to the order-up-to target:

gap = desired_stock_level − available − usable_open_po_quantity

  • Usable open PO reflects open purchase order lines matched to the item/location; it reduces how much more you need to buy.

The base suggested quantity is ceil(max(gap, 0)) in whole units.

ROP gate (default): a non-zero suggested restock is only persisted when you are at or below reorder point (or out of stock):
available ≤ 0 or available ≤ ROP.
Above ROP, suggested restock is 0 even if there is a fractional “gap” to desired—so you reorder when you hit the ROP, not to “top up” a sliver under the full target.

Legacy mode: if the API is configured with RESTOCK_QUANTITY_IGNORE_ROP_GATE=1, suggested quantity can follow the gap without that ROP gate (older behavior).

Display

  • Desired stock in the grid may show one decimal when the target is not a whole number after rounding, so it does not look identical to available when they differ slightly.
  • Suggested restock is always a whole number of units.

Settings that affect the math

Lead time

Supplier lead time (per product/location or defaults) scales lead time demand and safety stock (via √LT).

Days of stock

How many days of forward cover you want beyond the lead-time window drives days-of-stock demand and therefore desired level.

Open purchase orders

Open PO lines reduce the suggested order quantity. Status shows On Order whenever open PO quantity on that row is > 0, before other statuses (except snooze).

Bulk actions and PO creation

Select multiple rows to set lead time, days of stock, or supplier in bulk, or to Create PO using the current suggested quantities and suppliers.

Tips

  1. Keep lead time and days of stock realistic so ROP and desired levels match how you actually buy.
  2. After changing forecasting or rounding rules, run a full suggested restock refresh so historical rows pick up new targets.
  3. Use status and filters together to focus on Order Now or Critical SKUs.
  4. If a row looks wrong, check open POs, snooze, and per-location settings before the global forecast.

Troubleshooting

If numbers look stale:

  1. Confirm inventory and orders have synced.
  2. Re-run suggested restock / refresh for the shop.
  3. Verify lead time, days of stock, and suppliers for that item/location.
  4. Check open POs—usable quantity affects the gap.

For product issues or policy questions, contact support.