Inventory logic & stock control
Stock, reservations, serial numbers and stock movements explained simply
→ Open stock levels in SimpliServ
This document explains how stock is tracked in SimpliServ, when products are reserved and how serial numbers are handled. It helps you understand day-to-day stock movements better – from goods receipt to sale.
The basic principle of stock control
For each product and warehouse the system works with three stock values:
quantity_total– total physical stock in the warehousequantity_reserved– reserved stock (e.g. for orders)quantity_available– currently free, available stock
The central rule is:
quantity_available = quantity_total - quantity_reserved
That way it's always clear what's physically there and how much of it is already tied to open orders.
Goods receipt
A goods receipt increases the stock in the warehouse.
Non-serialized products
Typical examples are screws, cables or consumables.
When a quantity is booked on receipt (e.g. +10), stock increases directly:
quantity_totalrisesquantity_availablerisesquantity_reservedstays unchanged
Example:
- Before:
total = 5,reserved = 1,available = 4 - After goods receipt (+10):
total = 15,reserved = 1,available = 14
Serialized products
Typical examples are iPhones, laptops, routers or other devices with a serial number.
For serialized products you can, on goods receipt, capture a list of serial numbers alongside the quantity.
Example:
- Goods receipt:
10 units - Serial numbers captured:
7 units
Then this happens:
- A serial-number entry is created for each captured serial number
- The remaining quantity is still booked as stock (even without a serial number)
That means:
- Stock rises to the full booked quantity
- Part of it is already cleanly captured via serial numbers
- Part of it is temporarily in stock without a serial number yet
This is deliberately allowed so that goods receipt isn't blocked.
Reservations
Reservations arise from orders.
Important:
- An invoice alone doesn't reserve stock
- Only an order builds up a reservation
When an order is created:
quantity_reservedrisesquantity_availablefallsquantity_totalstays the same
So the goods are still physically in the warehouse but already earmarked for an order.
Example:
- Before:
total = 10,reserved = 0,available = 10 - Order for 3 units
- After:
total = 10,reserved = 3,available = 7
When is stock actually taken out?
This is the most important distinction day to day:
- Creating an order = goods are reserved (warehouse stock unchanged)
- Sale / dispatch / installation = goods are actually booked out
There are four different trigger points for booking out:
| Trigger | When | Delivery note? |
|---|---|---|
| Order → Dispatch (delivery-note mode) | Shipment to customer | Created + sent immediately |
| Order → Dispatch (pickup mode) | Customer picks up in store | No |
| Order → Parts installed | Service repair, parts used in the device | No |
| ShopOrder → Finalize delivery note | Shipping a shop order | Delivery note was a prerequisite |
| POS quick sale | Counter sale without a prior order | No |
POS quick sale / quick invoice
In a POS quick sale (fast sale at the register) the goods are taken out of stock immediately.
This also applies when a quick invoice is created internally in the background.
A direct stock outflow happens here:
quantity_totalfallsquantity_availablefallsquantity_reservedstays the same
There's no upstream reservation here like with an order.
Order — dispatch or install parts
With a CRM order the flow is two-stage:
-
Create the order Goods are reserved (no physical outflow yet)
-
Ship, dispatch or install parts Only now are the goods actually booked out of the warehouse
In every booking-out case (dispatch with or without a delivery note, parts installed):
quantity_reservedfallsquantity_totalfallsquantity_availablenormally stays the same (because the goods were already reserved beforehand)
Difference between dispatch and parts installed:
- Dispatch: goods leave the store (shipment, pickup) — optionally with a delivery-note document
- Parts installed: goods go into the customer's device during a repair — no delivery note, since the device itself isn't a shipping object
Both paths trigger the same stock operation (SHIP_RESERVED).
ShopOrder — delivery note as the trigger
For shop orders (Shopify, Wix) processing is also two-stage, but always via a delivery note:
-
Receive the order from the shop Stock is reserved immediately (webhook-triggered)
-
Create the delivery note Status
draft, stock still unchanged. Serves as a picking list. -
Mark the delivery note as shipped Only now:
quantity_reservedfalls,quantity_totalfalls. Shipping status updates automatically. Stock is pushed back to the shop.
More on this in Shop orders and Delivery notes.
Dispatch for serialized products
For serialized products it must be clear on dispatch which specific devices leave the warehouse.
That's why the serial numbers have to be selected or scanned on dispatch.
The system assigns these serial numbers to the shipment or sale and reduces stock accordingly.
Direct sale and serial numbers
In a direct sale (e.g. a POS quick sale) stock is reduced immediately.
Non-serialized products
Stock is reduced directly:
quantity_totalfallsquantity_availablefallsquantity_reservedstays the same
Serialized products
There are two possible cases here.
Serial numbers already captured
If serial numbers already exist in the system:
- The system shows available serial numbers
- The user selects or scans an existing serial number
- Exactly that serial number is sold
Serial number not yet captured
If not all serial numbers were captured on goods receipt, a serialized product may have stock but not yet a serial number in the system for every unit.
In that case, on sale or dispatch a new serial number can be entered – as long as there's still free stock without a serial number.
The system then creates that serial number automatically and processes the sale straight through.
Important rule for serialized products
For serialized products, by the time of sale, dispatch or stock count at the latest, every unit should be uniquely traceable via a serial number.
Stock count
A stock count is a stock correction based on the real warehouse stock.
The principle: the stock count is the "truth from the warehouse".
Non-serialized products
In a stock count you enter the actually present quantity (actual stock). The system sets the stock directly to that value.
Example:
- Actual quantity:
23
Then:
quantity_total = 23quantity_available = quantity_total - quantity_reserved
Reservations remain in place.
This means quantity_available can even go negative if more is reserved than is physically present.
Example:
quantity_total = 5quantity_reserved = 8quantity_available = -3
This indicates a shortfall.
Serialized products
For serialized products the stock count is stricter.
Here you don't just enter a quantity – the actual present serial numbers are captured (e.g. by scanning).
The system syncs stock exactly to that list:
- Serial numbers in the system but not scanned → are removed or treated as not present
- Serial numbers scanned but not yet in the system → are created or assigned to the right warehouse
Afterwards stock matches the number of captured serial numbers.
The stock count is therefore the point at which serialized stock is fully and cleanly reconciled.
Transfer between warehouses
In a transfer, stock is moved from one warehouse to another.
Non-serialized products
For quantity items, the system checks whether there's enough free stock in the source warehouse.
Then the quantity is moved:
- In the source warehouse,
quantity_totalandquantity_availablefall - In the target warehouse,
quantity_totalandquantity_availablerise
Serialized products
For serialized products, specific serial numbers are transferred.
The system checks:
- Does the serial number exist in the source warehouse?
- Is it available (
available)? - Is there no conflict in the target warehouse?
Only available serial numbers may be transferred. Already reserved, shipped or sold devices can't be transferred.
How reservations behave day to day
Reservations remain in place until they're actively released.
Typical cases:
- Goods receipt → reservation stays, available stock rises
- Create an order → a reservation is built up
- Dispatch an order or install parts → the reservation is released, stock falls
- ShopOrder received → a reservation is built up (channel reserve, no echo push to the shop)
- Finalize a ShopOrder delivery note → the reservation is released, stock falls, new stock is pushed to the shop
- ShopOrder cancelled in the shop → the reservation is returned (Shopify/Wix decides on restocking itself)
- Order cancelled → the remaining, not-yet-delivered reservation is released automatically
- POS quick sale → direct stock outflow without a reservation
- Stock count → reservations remain (availability can go negative)
- Transfer → only available stock may be moved
Capturing serial numbers on goods receipt or later
In SimpliServ, serial numbers for serialized products can be captured as early as goods receipt – that's the cleanest way.
If that isn't fully possible on receipt, missing serial numbers can also be added later, for example:
- on sale
- on dispatch / delivery
- during a stock count
This gives day-to-day flexibility without blocking the stock logic.
Recommendation for daily use
For clean traceability we recommend:
- capturing serial numbers on goods receipt where possible
- fully scanning serialized devices during stock counts
- assigning POS registers to a fixed warehouse so sales are unambiguously booked from the right stock
POS and warehouse assignment
For quick sales (POS quick sale) each register should be assigned to a warehouse.
Only then is it unambiguously defined:
- which warehouse is sold from
- which serial numbers are shown
- which stock is reduced
This is especially important for serialized products, since serial numbers are tracked per warehouse.
Summary
The stock logic in SimpliServ follows a clear principle:
- Goods receipt increases stock
- Order and ShopOrder reserve stock
- Dispatch, install parts and finalize delivery note reduce reserved stock physically
- POS quick sale reduces stock directly
- Stock count reconciles system stock with reality
- Transfer moves available stock between warehouses
That way it stays traceable at all times what's present, reserved and actually available in the warehouse.
Audit trail of all stock movements
Every movement is recorded in an immutable movement log (append-only). You can view the full history per product or per warehouse:
- Who triggered the movement (user)
- Which type (goods receipt, reserve, release, dispatch, cancellation, transfer, stock-count correction, …)
- Which quantity change per stock value (
available,reserved,total) - Which serial numbers affected
- Which document reference (order, shop order, delivery note)
That way, even months later, it's traceable why stock is what it is — important for accounting, stock-count clarification and error analysis.
Related topics
- Manage inventory — create locations, track stock and follow movements
- Scanning & serial numbers — find devices by barcode and manage serial numbers of individual units
- Create & process an order — how orders reserve stock, dispatch and install parts
- Point of sale (POS) — counter sales that book out stock directly
- Set up channel sync — sync stock to Shopify, Wix and other channels
How is this guide?