Inventory & stock items
Build your stock file with the four-step item wizard: pricing, reorder thresholds, unit conversions, batches and variants — plus bulk CSV import.
Create categories first
Dashboard → Inventory → Categories
Every item belongs to a category. Categories drive the filter chips at the till, category-scoped discounts, and the category breakdown in the profit report. Ten to twenty categories is usually right — one per aisle or section, not one per product.
Open Dashboard → Inventory → Categories and click Create.
Enter the Category Name and pick an icon.
Click Create.
Add an item — the four-step wizard
Dashboard → Inventory → Items → Create
Only step 1 is compulsory. Next validates the step you are on, so you can save a sellable item in a minute and come back for the rest.
Read this diagram as text
- Click Create → 1. Details
- 1. Details → Step valid?
- Step valid? → Fix the highlighted field (no)
- Fix the highlighted field → 1. Details
- Step valid? → 2. Stock control (yes)
- 2. Stock control → 3. Units & classification
- 3. Units & classification → 4. Variants
- 4. Variants → Item is sellable
Next validates the current step before moving on, and Back never loses what you typed. Only step 1 is compulsory — an item saved with just those fields is sellable immediately, and you can return to fill in the rest.
Step 1 — Details
- Namerequired
- What the cashier searches for. Put the distinguishing word first.
- Descriptionoptional
- Longer note shown on the item record.
- Quantity On Handrequired
- Current stock in base units. Sales decrement it automatically; receipts and transfers increment it.
- Unit of Measurerequired
- How the item is counted — piece, kg, litre, packet.
- Pricerequired
- Selling price per unit. This is the authoritative price the till charges; a cashier can only change it if they hold the Change prices permission.
- Average Costrequired
- What one unit costs you. Drives cost of goods sold, gross profit and margin in reports — a wrong cost silently corrupts every profit figure.
- Spoilt and Soldoptional
- Running counters. Record spoilage here so waste is visible instead of hiding as a stock discrepancy.
- Categoryrequired
- The category you created above.
Barcodes make the till fast
Put the product's barcode on the item. A hardware scanner then adds it to the cart with one beep — no searching, no mis-taps.
Step 2 — Stock control
These thresholds are what turn a stock list into a reorder system. They are all in base units and all optional, but without them low-stock alerts have nothing to fire on.
- Minimum stock
- The floor. Below this you are at risk of disappointing a customer.
- Reorder level
- The trigger. When on-hand falls to this number it is time to raise a purchase order — set it to cover supplier lead time plus a buffer.
- Safety stock
- Cushion held for demand spikes and late deliveries.
- Maximum stock
- The ceiling. Stops over-ordering perishables and tying up cash.
- Min. order qty
- The smallest quantity your supplier will sell. Used when drafting purchase orders.
A worked example
A supplier delivers weekly and you sell about 20 crates a week. Reorder level 25 gives you a week of cover plus a few days of slack; minimum stock 10 is the point at which you chase the order; maximum stock 60 stops a well-meaning manager buying a month of stock at once.
Step 3 — Units & classification
This step exists because you rarely buy in the unit you sell in. You buy a 750 ml bottle and sell 30 ml tots; you buy a crate and sell a bottle. Model that here once and every receipt, sale and report converts itself.
A 750 ml bottle bought by the crate and sold as 30 ml tots: three different units, one stock number.
Read this diagram as text
- Purchase unit → Base units per purchase unit
- Base units per purchase unit → Base unit
- Purchase unit → Receive 2 bottles
- Base unit → Variant base quantity
- Variant base quantity → Sell 5 tots
- Base unit
- The unit stock is actually counted in — ml, g, piece. On-hand is always expressed in this unit.
- Purchase unit
- The unit you buy in — Bottle, Crate, Carton.
- Base units / purchase unit
- How many base units one purchase unit contains. A 750 ml bottle with base unit ml is 750.
- SKU
- Your internal stock code, used on labels and supplier paperwork.
- Storage location
- Where it physically sits — Cold room A, Aisle 3 — so counts go faster.
Other classification fields on the item
- Preferred supplier
- Pre-selected when you raise a purchase order for this item.
- Tax profile
- A specific tax rate for this item. Left as Branch default, the branch VAT rate applies.
- Assigned kitchen / bar
- Routes the line to a station badge on the kitchen display: no station, kitchen, or bar.
- Track expiry (batches)
- Turns on batch tracking. Goods receipts then capture a batch number and expiry date for each delivery.
- Product family, Brand, Warehouse
- Grouping labels used as filters in the profit report.
Step 4 — Variants
A variant is a different way to sell the same stock: a Large, a double, a 30 ml tot. It carries a price difference and, optionally, how much stock one sale consumes.
- Variant namerequired
- What the cashier picks — Large, Double, 30 ml.
- Price deltarequired
- Added to the item's price. Use a negative number for a cheaper variant; 0 for same-price options.
- Base quantityoptional
- Base units consumed per unit sold. A 30 ml tot from a 750 ml bottle is 30 — sell 5 tots and on-hand falls by 150, not 5.
- SKU and barcodeoptional
- Variant-specific codes, so a scanner can pick the exact size.
Variants are validated against their item
The till will not apply a variant that belongs to a different product, and the price is always recomputed on the server as item price plus variant delta. A tampered request cannot understate the bill.
Bulk import from CSV
Dashboard → Inventory → Items → Import
Prepare a CSV with the columns productName, price, quantity, category, averageCost, unitOfMeasure.
category is optional; the rest are required on every row.
Open the import dialog and upload the file. CSV only.
Read the import summary before committing.
Valid rows and invalid rows are listed separately, with the reason each bad row failed.
Fix the invalid rows in your file and re-upload, then import.
Import brings in the valid rows only — nothing partial is silently dropped without being shown to you.
Import is for the first load
Use CSV to seed a catalog on day one. Afterwards, let goods receipts and transfers move stock so the cost history stays intact.
Keeping stock honest day to day
- Sales decrement on-hand automatically as orders are placed; refunds put stock back.
- Receiving against a purchase order is the only way stock should ever go up from a supplier.
- Move stock between locations with a stock transfer, never by editing two numbers.
- Record breakage and waste in Spoilt so shrinkage is measured rather than discovered.
- Set reorder levels on the lines you cannot run out of; low-stock notifications key off them.