Manual · Engineering
Manual15 min read

Inventory & Spares

Warehouses, products, SKU variants, stock levels, movements, adjustments, transfers and bin locations.

ForWarehouseOperationsFinance

This is the first operational module

Everything else depends on the warehouses and variants you create here. Procurement receiving, sales fulfilment and the port warehouse bridge all read from stock records that start in this chapter.

The module has four tabs: Products, Warehouses, Stock Levels and Movement Ledger.

Inventory & SparesInventory → Inventory & Spares

Roles

Action classRoles allowed
Create and edit master dataOPERATOR — CEO, COO, CFO, USER
Delete master dataMANAGER — CEO, COO, CFO
Adjust stock, transfer stock, set bin locations, manual movementsMANAGER — CEO, COO, CFO
View everythingAny member

Reading a stock row

For every warehouse and variant the system shows three numbers. Understand them before you act.

FieldMeaningChanged by
On handPhysical quantity in the warehouseReceipt, issue, adjustment, transfer, return
AllocatedReserved by an approved sales order, not yet shippedSales-order approval up, fulfil or cancel down
On orderCommitted on an approved purchase order, not yet receivedPurchase-order approval up, receive or cancel down
ATP (Available To Promise)On hand − Allocated. What a new sales order can promiseDerived

ATP is colour-coded in the Stock Levels table: red when negative (over-allocated), muted at zero, otherwise positive.

Which form to open first

You want to…TabButtonMinimum role
Add a stocked itemProductsNew Product, then New VariantOPERATOR
Group itemsProductsManage CategoriesOPERATOR
Add a stock locationWarehousesNew WarehouseOPERATOR
Correct a count or write offStock LevelsAdjust StockMANAGER
Move stock between depotsStock LevelsTransfer StockMANAGER
Set a bin locationStock LevelsClick the Bin cellMANAGER
Record a return or AI ingestionMovement LedgerNew MovementMANAGER
Audit historyMovement LedgerView onlyAny member

Adjust stock (count corrections, write-offs)

  1. S1

    Open Adjust Stock

    From Stock Levels, choose Adjust Stock.

    Inventory & Spares → Stock Levels → Adjust Stock
  2. S2

    Enter the change

    Choose the warehouse and product variant, enter the quantity change (positive to add, negative to remove) and an optional note.

  3. S3

    Save

    The system writes one ADJUSTMENT movement and updates on-hand.

  • Quantity cannot be zero; the magnitude is capped at ±1,000,000.
  • Stock cannot go negative — an adjustment that would take on-hand below zero is rejected.
  • No journal entry is posted. Record the accounting effect (such as shrinkage expense) separately if you need it in the books.
  • Editing after posting is not supported — post a compensating adjustment instead.

Transfer stock between warehouses

  1. T1

    Open Transfer Stock

    From Stock Levels, choose Transfer Stock.

    Inventory & Spares → Stock Levels → Transfer Stock
  2. T2

    Choose the route

    Source warehouse, destination warehouse (must differ), product variant and quantity, plus an optional note.

  3. T3

    Save

    The system writes two movements sharing one reference: an ISSUE at the source and a RECEIPT at the destination.

Note

No journal entry

A transfer is a pure stock movement. The source must have enough on hand, or the transfer is rejected.

Bin locations

From Stock Levels, click the Bin cell for a row, type a short location code and press Enter (Escape cancels). A bin can only be set on a row where a stock record already exists — adjust or receive stock first. The code holds up to 50 characters.

Manual movements (returns and AI ingestion)

Use the Movement Ledger's New Movement form only for RETURN (goods coming back) and AI_INGESTION (stock created from an AI-extracted document). Choose warehouse, variant, type, quantity, optional unit cost and note.

Watch

Use the right door

For receipts use a purchase order (CH 05). For issues use a sales order (CH 06) or the port gate-out bridge (CH 07). Adjustments and transfers have their own forms above.

Movement types reference

TypeDirectionCreated byAuto-posts to GL?
RECEIPTINPO fulfil/receive; port gate-in; stock transfer (destination)Yes — via the PO: Dr 1300 Inventory / Cr 2050 GRNI
ISSUEOUTSO fulfil; port gate-out; stock transfer (source)No
ADJUSTMENTIN or OUTAdjust Stock (signed quantity)No
RETURNINNew Movement (customer or supplier return)No
AI_INGESTIONINNew Movement from an AI-extracted documentNo

ADJUSTMENT is the only type that can be negative. Every other type is always positive, with direction implied by the type.

Deletion rules

EntityCan be deleted when…
WarehouseNo active stock (on hand, allocated or on order) in it
ProductNone of its variants has active stock
VariantIt has no active stock
CategoryIt has no products and no children

Reports

ReportAnswers
Inventory ValuationOn-hand quantity × weighted-average cost, per product and variant
Stock ReportCurrent stock levels by warehouse and variant, with ATP
Movement HistoryFull movement ledger with filters by type, variant and date range

Note

About weighted-average cost

Cost is approximated from purchase-order unit costs. A variant with no purchase history shows cost 0. All monetary values convert to your base currency.

Worked example

Warehouse Main exists; variant CABLE-10MM has on hand 100, allocated 0, on order 0.

  1. 01

    Receive (procurement)

    Approve a PO for 50 → on order 50. Receive → on hand 150, on order 0, RECEIPT movement, GL Dr 1300 / Cr 2050.

  2. 02

    Count correction

    3 units damaged → Adjust Stock −3 → on hand 147, ADJUSTMENT −3, no GL.

  3. 03

    Transfer

    Move 10 units Main → Depot-B → ISSUE 10 in Main, RECEIPT 10 in Depot-B, no GL. Main on hand 137.

  4. 04

    Sell

    SO for 40 approved → allocated 40 (ATP 97) → Fulfil → on hand 97, allocated 0, ISSUE 40, no GL.

  5. 05

    Check

    The Movement Ledger shows the full audit trail; Stock Levels shows on hand 97, allocated 0, ATP 97.

Troubleshooting

MessageCauseFix
Cannot delete product/variant/warehouse with active stockStock is on hand, allocated or on orderClear it: ship or cancel allocated orders, receive or cancel POs, then adjust or transfer to zero
Insufficient stock. Current on-hand: X, adjustment: YAdjustment would take on-hand negativeCorrect the count or receive stock first
Source and destination warehouses must be differentSame warehouse on both sidesChoose a different destination
Insufficient stock in source warehouse. Available: X, requested: YTransfer exceeds on-hand at the sourceReduce the quantity or receive stock first
Cannot issue stock from empty warehouse. No stock record exists for this variant.No stock row for that warehouse and variantReceive or adjust stock into that warehouse first
Stock record not found (bin location)No stock row yetReceive or adjust stock first
No active warehouse foundNo active warehouseActivate or create a warehouse
Product variant not foundVariant id is not in your workspacePick a variant from the dropdown
Duplicate line item for variant…Same variant twice in one orderMerge quantities into one line

Ledger boundary and reconciliation

Inventory quantity moves do not post journals. Inventory is valued in the books only on a purchase-order goods receipt (Dr 1300 Inventory / Cr 2050 GRNI). Sales and issues reduce quantity but do not post Cost of Goods Sold.

  • Goods received and invoiced: GRNI (2050) should net to roughly zero for fully received and invoiced POs. A residual means a receipt or invoice is missing.
  • Inventory GL (1300) changes only on goods receipts and their reversals. Compare it to the Inventory Valuation report. Differences come from adjustments, transfers, issues and the warehouse bridge, which intentionally do not post.
  • If you need shrinkage or COGS in the books, post a manual journal from the adjustment and issue data, or raise a change request to wire it automatically.

Cheat sheet

Setup order
Warehouse → (Categories) → Product → Variant
Daily order
Receive (PO) → adjust or transfer → issue (SO or port gate)
New stock item
Inventory & Spares → Products → New Product, then New Variant
New location
Warehouses → New Warehouse
Correct a count
Stock Levels → Adjust Stock
Move between depots
Stock Levels → Transfer Stock
Set a bin
Stock Levels → click Bin
Return or AI ingestion
Movement Ledger → New Movement

Rule

Rules that never change

Stock is tracked at the variant, not the product. ATP = on hand − allocated. Adjustments, transfers and issues do not post to the GL. Active stock blocks deletion of products, variants and warehouses.