Skip to main content

Stock take statuses, fields & list

A stock take is a warehouse-scoped count document that reconciles what SKU.io thinks is on your shelves with what a physical count finds. Every take carries a status, a mode, a count date, a variance direction, and a set of items — one line per product. This page is the field-level lookup for all of it: the three statuses and what each allows, the variance-direction and root-cause codes, the list (filters, sorts, tabs, view modes) and detail sub-views, the CSV export, and every field on the StockTake, StockTakeItem, and reconciliation objects.

For why the model works the way it does — full-count vs adjustment mode, the snapshot-vs-count-date split, and what finalizing does to your books — read the concept How stock takes work. For the tasks themselves, see Create a stock take, Count stock, Finalize a stock take, and Amend a stock take.

You manage stock takes under Inventory → Stock Takes.

Two modes decide the path

The mode is chosen when you create a take and never changes. It decides which statuses a take passes through and how each item records its variance.

ModeOn-screen labelItem recordsLifecycle
full_countFull CountA qty_counted per line; variance is counted minus system on-hand.Draft → Open → Closed (a snapshot is captured at Open).
adjustmentAdjustmentA signed adjustment_qty per line; the delta is the variance.Draft → Closed (finalized directly, no snapshot).

The status tables below call out which actions apply to which mode.

Status

A stock take has exactly one status at a time, stored in the status field. New takes start Draft.

ValueOn-screen labelMeaningInventory effect
draftDraftEditable staging. Items are added and scoped; adjustment-mode deltas are entered here.None — no snapshot, no movements, no accounting.
openOpenFull-count only. A system snapshot is captured and counters enter qty_counted.Snapshot recorded; no movements yet.
closedClosedFinalized. Variance is written to stock, cost, and the books.Movements and FIFO layers created; value and accounting posted.

draft — staging, no inventory effect

Draft is the editable staging state. You add items, set the warehouse, and — in adjustment mode — enter each line's adjustment_qty. Nothing is committed: there is no snapshot, no movement ledger entry, and no accounting transaction. A draft take is freely editable and freely deletable.

Where a draft goes next depends on mode:

  • Full-count draft → Open. Initiate captures the snapshot and moves the take to Open. Initiate is rejected on an adjustment-mode take with a clear message (use finalize-adjustment instead), and a take must have at least one item to initiate.
  • Adjustment draft → Closed. Finalize adjustment posts the deltas and closes the take directly, skipping Open.

open — snapshot taken, counting in progress

Open exists only for full-count takes. When you initiate, SKU.io stamps each item with a point-in-time snapshot (snapshot_inventory, snapshot_available, snapshot_committed_to_fulfillment) and the take's snapshot_at. Counters then enter qty_counted per line. Available actions while Open:

ActionWhat it does
Re-snapshotRecaptures the system quantities against current stock, re-baselining the count if inventory moved since Open.
Zero outBulk-sets qty_counted for every line, in one of three modes: zero all (0 everywhere), keep submitted (each line's submitted / committed-to-fulfillment quantity), or keep all allocated (each line's full allocated total — pending + submitted). Keep all allocated preserves stock that orders have already claimed rather than counting it to zero.
Revert to draftClears the snapshot fields and value, returning the take to Draft for re-scoping.
Finalize & reconcilePosts the variance and closes the take. Every item must have a qty_counted first — hasFullQuantities() blocks finalize while any line is uncounted.

Movements that happen after the snapshot but before you finalize are tracked separately as during-count movements — see Detail sub-views and the reconciliation flow in Finalize a stock take.

Blind counts hide the system quantity

When a take is created with blind on (is_blind), the system on-hand for an item that hasn't yet been counted is withheld, so the counter records what they physically find without anchoring to the expected number. Once a line's qty_counted is set, its snapshot is revealed for variance review.

closed — finalized, inventory and accounting posted

Closing is terminal. Finalizing (full count) or finalize-adjustment (adjustment) writes the variance into FIFO layers and the movement ledger, sets value_change and variance_direction, and posts the accounting transaction. A closed take isn't re-approved, but it supports these post-close actions:

ActionWhen it's available
ReverseUndoes all inventory effects — allowed only while no FIFO layer created by the take has been consumed, and not for channel-managed (Amazon FBA/AWD/WFS) stock.
Compensating adjustmentCreates a child adjustment take to correct a closed take whose FIFO layers have already been consumed (so it can't be reversed).
Cost correctionRe-costs the closed take's lines and reposts accounting, without touching quantities.
Edit notes / re-dateEdits notes or moves date_count. Re-dating replays FIFO consumption and COGS; preview the impact first with the reallocation preview.

Delete on a closed take reverses its inventory effects, but is blocked when any FIFO layer it created has been consumed (fulfilled_quantity above zero). The deletable flag and delete_blocked_reasons on the take report this per item; the list's Deletable check exposes the same result in bulk.

Re-dating into a locked period is refused

Editing a closed take's date_count into a locked accounting period is rejected (StockTakeDateInLockedAccountingPeriodException), as is a reallocation that would cross a locked period. Amend the accounting period first.

variance_direction

At finalize, SKU.io summarizes the whole take's variance into a single variance_direction value. It compares each item's variance — adjustment_qty in adjustment mode, qty_counted for an initial count, otherwise qty_counted − snapshot_inventory — and rolls the signs up.

ValueOn-screen chipChip colorSet when
(null)(no chip)No item had a non-zero variance.
positivePositiveGreenEvery non-zero item was a gain.
negativeNegativeRedEvery non-zero item was a loss.
mixedMixedAmberThe take had both gains and losses.

variance_direction is a stored column, so it's a filterable and sortable list dimension. It's null until the take closes.

Variance root-cause codes

Each item can optionally carry a variance reason (variance_reason) — a cycle-counting root-cause code that records why the counted quantity differs from the system on-hand, so variance can be analysed by cause rather than as one undifferentiated adjustment. It's nullable and backwards-compatible: leaving it blank is fine.

ValueOn-screen labelTypical use
receiving_errorReceiving ErrorStock was mis-counted or mis-booked at receipt.
picking_errorPicking ErrorA pick took the wrong quantity or wrong SKU.
mislabelMislabelProduct was labelled as the wrong SKU.
damageDamageUnits were damaged and pulled from sellable stock.
shrinkageShrinkageLoss with no identified cause (theft, spoilage).
unknownUnknownCause not determined.

The reason is chosen per line on the count table and stored on the item; it doesn't change the quantity or cost math, only the analytics.

The stock takes list

The list at Inventory → Stock Takes is server-paginated (10 per page by default) and built on the standard datatable stack — search, filters, saved views, sorts, column selector, and three view modes (table, grid card, and mobile card).

Filters

The following filters are exposed (via StockTakeListRepository), most also as quick tabs and dropdowns above the table:

FilterTypeNotes
SearchtextMatches take ID (exact), notes, and warehouse name.
Statustab / selectAll, Draft, Open, Closed.
ModeselectAll, Full Count, Adjustment.
WarehouseselectFilters by warehouse.
Initial countselectAll, Yes, No (is_initial_count).
Variance directionselectAll, Positive, Negative, Mixed.
Count datedate rangedate_count between two dates.
Created / Updateddate rangecreated_at / updated_at ranges.
Value changenumericFilters on value_change.
ArchivedselectDefault hides archived; only shows archived, all shows both.

Sorts

Sortable columns: ID, Count Date (date_count), Status, Value Change, Variance Direction, Created, and Updated. The default sort is newest first (-id).

Columns

The table shows ID, Status, Mode, Warehouse, Count Date, Value Change, Variance Direction, Notes, Created, and Updated. The list endpoint returns a lightweight resource (StockTakeListResource) that omits the item lines — those load only on the detail page.

Detail sub-views

Open a take to its detail page. Beneath the header, a set of tabs exposes the take's data. Which tabs appear depends on status:

TabShown whenContents
ItemsAlwaysOne row per product — SKU, snapshot, counted/adjustment quantity, unit cost, variance reason, and lot fields. Includes the Export action.
FIFO LayersClosedThe FIFO layers the take created, with product, warehouse, and cost.
Inventory MovementsClosedThe movement ledger entries the take wrote (type Stock Take).
Reconciliation LogWhen entries existThe audit of reconciliation actions taken at finalize (see below).
ActivityAlwaysThe activity log filtered to this take as subject.

While a take is Open, the header separately surfaces a Movements Since Snapshot count and dialog — the during-count movements that landed after the snapshot (and aren't this take's own). These feed the reconciliation preview when you finalize.

Reconciliation log actions

The Reconciliation Log records what finalize did when a count collided with in-flight orders. Each entry carries an action:

ActionMeaning
adjustment_appliedThe item's variance was written to stock.
count_adjustedA line's qty_counted was changed during reconciliation (for example, to absorb during-count movement).
item_removedA line was dropped from the take during reconciliation.
fulfillment_cancelledAn open shipment was cancelled to free stock the count removed.
fulfillment_cancel_failedA cancellation was attempted but failed (see the entry detail).
order_deallocatedAn order's allocation was released.
order_backorderedAn order line was pushed to the backorder queue because the count left it short.
allocation_downgradedA committed allocation was downgraded to planned.

Export count lines

The Export button on the Items tab downloads the take's lines as CSV (stock_take_lines.csv). The columns depend on status:

ColumnAlwaysNotes
idYesThe product ID.
skuYesProduct SKU.
barcodeYesProduct barcode.
nameYesProduct name.
snapshot_inventoryPast draft onlyThe captured system quantity.
qty_countedPast draft onlyThe counted quantity.
adjustmentPast draft onlyqty_counted − snapshot_inventory.
unit_costPast draft onlyThe item's unit cost (falls back to the product's).

A Draft take exports only the four identity columns — it has no snapshot yet. The same shape is the round-trip template for the import-lines upload, so an exported file can be edited and re-imported.

StockTake fields reference

The fields on the take itself (StockTake model / StockTakeResource):

FieldTypeDescription
idintPrimary key and the take's reference.
date_countdate-timeThe effective date the count applies to — drives FIFO placement and the accounting date.
snapshot_atdate-time, nullableWhen the system snapshot was captured (full count, at Open). Null for adjustment mode.
warehouse_idintThe warehouse the take counts. Every line and movement is scoped to it.
modestringfull_count or adjustment.
conditionstring, nullableOptional condition label; combined with warehouse it enforces initial-count uniqueness.
is_initial_countboolAn opening count that establishes stock from zero (snapshot_inventory treated as 0).
is_blindboolHides the system quantity for uncounted lines during counting.
statusstringdraft, open, or closed.
value_changefloatTotal cost value the take moved once finalized.
variance_directionstring, nullablepositive, negative, mixed, or null.
notesstringFree-text notes; searchable and editable after close.
parent_stock_take_idint, nullableLinks a compensating adjustment back to the take it corrects.
source_type / source_idstring / int, nullablePolymorphic origin when a take is created by another process (for example, an FBA inbound).
batch_accounting_transaction_idint, nullableThe batch accounting transaction the finalized take posted into.
archived_atdate-time, nullableSet when archived; archived takes are hidden from the default list.

The resource also returns derived fields — deletable, delete_blocked_reasons, during_count_movement_count (open takes), and the parent_stock_take / child_stock_takes summaries.

StockTakeItem fields reference

One item per product on the take (StockTakeItem model / StockTakeItemResource):

FieldTypeDescription
idintPrimary key.
product_idintThe counted product.
qty_countedfloat, nullableThe physical count (full-count mode). Null until counted.
adjustment_qtyfloat, nullableThe signed delta (adjustment mode).
quantity_adjustedfloat, derivedqty_counted − snapshot_inventory — the effective variance for a full count.
unit_costfloatCost basis, persisted at snapshot time from best-available COGS.
item_realized_unit_costfloat, closed onlyThe actual per-unit cost realized from FIFO once the take closed.
variance_reasonenum, nullableA root-cause code.
warehouse_location_idint, nullableThe counted bin; stamped onto the item's variance movements.
snapshot_inventoryfloatSystem on-hand captured at Open (0 for an initial count).
snapshot_availablefloat, nullableAvailable quantity at snapshot.
snapshot_committed_to_fulfillmentfloat, nullableUnits committed (submitted) to fulfillment at snapshot — the Rsv (Submitted) count-table column.
snapshot_reservedfloat, nullableTotal allocated units at snapshot (pending + submitted). Drives the Rsv (Pending) count-table column (snapshot_reserved − snapshot_committed_to_fulfillment) and the Keep all allocated zero-out mode. 0 for an initial count.
lotsarray, nullableLot rows (batch number, manufacture/expiry date, quantity, notes) for lot-tracked products.
lot_allocationarray, nullableThe chosen FIFO-layer consume allocation for a negative-variance override.
integration_unique_idstringDedupe key for items sourced from an integration.

Each item resource also echoes the product's lot configuration — is_lot_tracked, lot_tracking_method, shelf_life_days, near_expiry_threshold_days, min_remaining_shelf_life_days — so the count table can enforce lot entry.

"Reserved" on a count means allocated, not a stock state

SKU.io has no "reserved" inventory status — the product list column that once read "Reserved" is now On Hold. On a stock take, Rsv (Pending) and Rsv (Submitted) are allocation figures, not a status: snapshot_reserved holds the total allocated (pending + submitted) at snapshot and snapshot_committed_to_fulfillment holds the submitted portion, so Rsv (Pending) is the two subtracted. For the real states — on-hand, available, allocated, on-hold, non-sellable, incoming, and in-transit — see Stock states and the stock states and fields reference. On-hand reconciles as Available + Allocated + On Hold + Non-Sellable.

Reconciliation preview and result fields

When you finalize a full count, SKU.io builds a preview of the variance against current stock and any orders it touches, then returns a result after you execute. These objects power the reconciliation dialog in Finalize a stock take.

Preview — per item

Each item in the reconciliation preview (StockTakeReconciliationItemData) carries:

FieldMeaning
snapshot_inventory / qty_countedThe snapshot and the count.
varianceCount minus snapshot.
net_movement_during_countNet stock movement between snapshot and finalize.
adjusted_snapshot / adjusted_varianceSnapshot and variance re-based to absorb during-count movement.
current_availableAvailable stock right now.
current_reserved_pending / current_reserved_submittedAllocations pending vs submitted to a shipment.
current_on_handOn-hand right now.
shortfallHow far the count falls below what open orders need.
affected_ordersThe orders a negative variance would disrupt (see below).
during_count_movementsThe movements that landed during the count.

Preview — affected order

Each entry in affected_orders (AffectedOrderData) describes one order at risk:

FieldMeaning
sales_order_id / sales_order_referenceThe order and its reference.
sales_order_line_idsThe affected lines.
quantityUnits in contention.
order_date / statusOrder date and order status.
fulfillment_id / fulfillment_statusThe shipment, if any, and its status.
shipping_provider_name / is_sent_to_providerProvider and whether it was dispatched.
is_cancellableWhether SKU.io can cancel it as part of reconciliation.

Result

After you execute, the result (StockTakeReconciliationResultData) reports what happened:

FieldMeaning
success / stock_take_finalizedWhether reconciliation succeeded and the take closed.
total_value_changeThe cost value moved.
cancelled_fulfillments / failed_cancellationsShipments cancelled, and any that couldn't be.
adjusted_itemsLines whose qty_counted was changed during reconciliation.
removed_itemsLines dropped from the take.
backordered_itemsOrder lines pushed to backorder.
downgraded_allocationsAllocations downgraded from committed to planned.
finalization_errorThe error message if finalize failed.

Next steps

Last verified: