Skip to main content

Inventory & stocktake (if enabled for your store)

Track consumables (oils, towels) and retail products (creams, gift items). Stock deducts automatically — nobody at the counter presses a "deduct" button.

Current application screen

Key concepts​

ConceptMeaning
Inventory itemA tracked product (consumable or retail) with a current stock level
CategoryGrouping for items (e.g. "Oils", "Retail")
Stock movementAny change in quantity — goods-in, sale deduction, manual adjustment
Service linkA consumable item linked to a service (auto-deducts when service starts)
StocktakePhysical count that reconciles system stock with reality

Items & stock levels​

Admin → Inventory Management → Items tab

Each item has:

FieldNotes
NameDisplayed on POS (retail) or in reports (consumable)
SKU / CodeRead-only Store-scoped SKU-NNN generated by the server
CategoryGrouping
Typeconsumable (used during service) or retail (sold to customer)
UnitControlled code; packaging units (each/pack/box/bottle/tube/sachet/pair/roll) remain distinct from measurements (ml/l/g/kg)
Current stockLive quantity (updated by movements)
Low stock thresholdTriggers a notification when stock falls below
Cost price / Sale priceFor retail items

Creating an item​

  1. Inventory → Items → Create.
  2. Fill name, type, category, unit, threshold.
  3. Set initial stock via a goods-in receipt (see below).

Shared catalogue​

The Shared Catalogue tab lists products published by partner stores under a sharing policy. Adopt copies a product into your local stock as an independent item — it starts at zero stock and is not linked to the partner's quantities. You can set a local retail price that overrides the catalogue retail price.

Goods-in (stock receipts)​

Admin → Inventory Management → Stock Receipts tab

When new stock arrives:

  1. Create receipt → select store.
  2. Add lines: item + quantity received + optional cost per unit.
  3. Save. Stock levels update immediately.

Each receipt is a permanent record — you can't edit it after creation, but you can create a new receipt for corrections.

Stock movements​

Admin → Inventory Management → Stock Movements tab

A read-only log of every quantity change. Every movement is typed In / Out / Adjust and tagged with its source:

SourceTriggerType
stock_receiptStock receipt createdIn
retail_paymentCustomer pays for a retail item at POSOut
sale_lineRetail sale lineOut
sale_return_lineRetail returnIn
service_recordService with linked consumable startsOut
stocktakeStocktake appliedAdjust (aligns to counted)
manual_outboundStock Outbound recorded in AdminOut

Admin → Inventory Management → Service Links tab (or per-item detail)

Link a consumable item to a service so it auto-deducts when that service starts:

  1. Select the service (e.g. "Deep Tissue 60min").
  2. Select the consumable (e.g. "Massage Oil").
  3. Set quantity per service (e.g. 30ml).
  4. Save.

When a therapist starts that service on POS → 30ml is deducted from stock automatically (SYSTEM_AUTO).

Current application screen

note

Non-blocking at service start: if stock is at zero, the service still starts — the deduction clamps to zero and the shortage is recorded. Services are never blocked by inventory. Other movements (manual outbound, retail deductions, stocktake apply) are not clamped.

Retail sales at POS​

When a retail item is added to a visit and payment completes, stock deducts automatically. The deduction is attributed to SYSTEM_AUTO and linked to the payment.

POS staff see a read-only inventory view — they cannot manually adjust stock from POS.

Stock outbound (manual)​

From the Items tab, use Stock Outbound on an item to take stock out by hand — staff usage, wastage, damaged goods — with a quantity and a reason. It records a manual_outbound movement and is the only manual way to reduce stock outside a stocktake.

Low-stock alerts​

When an item's stock falls below its threshold:

  • A notification is sent to the store's POS (appears in the notification bell).
  • A banner may appear on the POS dashboard (dismissed per day).
  • Admin → Inventory Management → Dashboard tab shows the low-stock count and the five lowest items.
  • Alerts are deduplicated: no new alert is raised for an item while an earlier one for the same item is still unread or undismissed.

Stocktake (physical count)​

Admin → Inventory Management → Stocktake tab

A stocktake reconciles system quantities with what you physically count.

Creating a stocktake​

  1. Stocktake → New.
  2. The system pre-fills all items with their current system stock.
  3. For each item, enter the counted quantity (what you physically have).
  4. Lines where counted ≠ system are flagged as variances.

Confirming and applying a stocktake​

  1. Review all variance lines and enter a reason on every line where counted ≠ system — Confirm is rejected while any variance line has no reason.
  2. Confirm the stocktake. This freezes the sheet; stock is not changed yet.
  3. Apply the confirmed stocktake. Only now are adjustment movements written (source stocktake) and stock moved to the counted figures.

Statuses: draft → counting → confirmed → applied (or reopened).

Reopening a stocktake​

Found an error after confirming?

  1. Submit a reopen request (with reason).
  2. A different admin approves in the Approval Centre.
  3. A new draft stocktake version is created, seeded from current stock; the applied version stays as-is.
  4. Count, confirm and apply the new version.

Tips​

  • Count regularly — weekly for high-turnover items, monthly for stable stock.
  • Don't guess goods-in — enter the exact quantity received. Garbage-in = garbage-stocktake.
  • Service links save time — once linked, you never think about consumable deduction again.
  • Low-stock threshold — set it at "time to reorder" level, not "already ran out".