User guide · Modules

Inventory

Stock on hand by department, reorder levels that flag low and empty items, suppliers with their catalogues, and purchase orders from creation to receipt.
Whole guide

Purpose and who uses it

Restaurant MgrAccountantHotel Manager

One list of everything the hotel keeps in store, with the suppliers who restock it.

Inventory tracks every consumable the hotel holds, kitchen ingredients, bar stock, linen, cleaning supplies, spare parts, stationery, grouped by department and category. Each item carries a quantity on hand, a unit and a reorder level. When the quantity falls to the reorder level the item turns amber; at zero it turns red, and the people who restock get a notification.

Inventory sits under the Payments permission module, so the Restaurant Manager, Accountant and managers work here; a Receptionist can look but not order. Kitchen sales reach stock automatically: when a POS ticket closes, the ingredients linked to each menu item are deducted.

Screen anatomy

Two tabs, Stock and Suppliers, with department cards, KPI tiles and a filterable table.

Inventory → Stock tab
1723458
  1. 1
    Tabs
    Stock (the item table) and Suppliers (the directory). Below the page head, above the department cards.
  2. 7
    Department cards
    All departments plus one card per department with its item count. A red or amber badge on a card is the number of items needing attention. Click a card to filter.
  3. 2
    KPI tiles and category chips
    Items tracked · Low stock · Out of stock · Perishable / tracked expiry · Pending POs. Clicking Low stock or Out of stock filters the table. Chips below switch category.
  4. 3
    Filter bar
    “Search item, category, supplier…” and a Stock level dropdown (Any stock level / In stock / Low stock / Out of stock). Clear resets all three.
  5. 4
    Item rows
    Item (with “Expires …” when an expiry date is set), Department, Category, Supplier, In stock, Reorder at, a Level bar, and the Status badge.
  6. 5
    Reorder
    Per-row button (Edit access) that opens the purchase-order dialog with just that item ticked.
  7. 8
    Purchase order
    Primary action. Opens the dialog with every low or empty item pre-ticked.

Two extra cards appear when they have something to say: an amber banner , “N items need attention across all departments”: with a Reorder all button, and a Pending purchase orders card listing orders that are still on order, each with a Receive stock button. Selecting the Kitchen department also shows how many perishable ingredients have tracked expiry dates.

Creating a purchase order

Restaurant MgrAccountant

Tick the items, pick a supplier and delivery store, and the order is on its way with a PO- code.

  1. 1
    Open the dialog
    Click Purchase order in the page head (all low/empty items ticked), Reorder all on the amber banner, Reorder on one row, or Order N on a supplier.
  2. 2
    Tick the items to reorder
    The “New purchase order, Restock items below their reorder level” dialog lists only items that are low or out of stock, each with its department tag and current quantity. Untick anything you do not want yet. If nothing is short you see “No items need reordering”.
  3. 3
    Choose Supplier and Deliver to
    Supplier defaults to Auto (from items), the first ticked item’s supplier is used. Deliver to offers Main Store, Kitchen Store or Bar Store. Expected date is optional.
  4. 4
    Click Create order (N)
    The order is created straight into On order with a PO-… code; the toast reads “PO-12 created (3 items)”. It appears in Pending purchase orders and on the supplier’s drawer.

Receiving stock

Restaurant MgrAccountant

One click books every outstanding quantity on the order into stock and records the movement.

  1. 1
    Find the order
    Stock tab → Pending purchase orders card, or Suppliers tab → open the supplier → Recent purchase orders.
  2. 2
    Click Receive stock (or Receive in the drawer)
    Every line that still has quantity outstanding is received in full. Each item’s quantity on hand goes up and a stock movement with reason receive and the PO code is written.
  3. 3
    The order becomes Received
    Toast: “PO-12 received into stock”. The KPI tiles, department badges and status badges refresh immediately.

Suppliers tab

A directory of suppliers with profiles, the items each one can deliver (with SKU, cost and lead time), stock health and recent orders.

The Suppliers tab opens with four tiles, Suppliers (active ones; the tile notes how many are inactive), Need an order (suppliers with at least one low or empty item), Open purchase orders and Items they cover: department chips, a Show inactive chip, the Add supplier button (Payments Edit), and a filter bar (“Search supplier, contact, category, item…” plus an Attention dropdown: Any status / Needs an order / Open purchase order / Inactive).

  • Table columns: Supplier (with the contact name or “2 open POs” underneath), Category badge, Contact (phone and email are tap-to-call / mail-to links), Departments, Items (the number of connections), Stock (“3 out”, “2 low”, In stock, or a dash when the supplier is not primary for anything), Last order (or Never), and an Order N button when something is short.
  • Inactive suppliers are hidden by default. Turn on Show inactive (or pick Inactive in the Attention dropdown) to list them; they carry an Inactive badge and no Order button.
  • Supplier drawer: click a row. The header shows the name with an Active / Inactive badge and the category; the sub-line lists its departments (or “No stock items linked”). Inside: Contact, Phone, Email, Website, Payment terms and Lead time cards, Address and Notes when set, Linked items / Preferred / Need reorder counters, Recent purchase orders (up to eight, newest first, each with a status badge and a Receive button while open) and the Connections table. The footer offers Close and Order N items.
  • Connections: one row per item the supplier can deliver, with the supplier's SKU, the last quoted unit cost, the lead time in days, the item's stock and status, and a Preferred badge where this supplier is the item's primary source. An item can be connected to several suppliers but has at most one preferred.
  1. 1
    Add supplier
    Click Add supplier above the filter bar. Name is required (2 to 80 characters); Category, Contact name, Phone, Email, Website, Address, Payment terms (type or pick a preset such as Net 30), Lead time in days (0 to 365) and Notes are optional. Save supplier creates it and opens its drawer.
  2. 2
    Edit the profile
    Open the supplier and click Edit. The same form updates any field; clearing a field removes the value.
  3. 3
    Manage items
    In the drawer, click Manage items. Every stock item is listed by department with a search box; tick an item to connect it and fill in Supplier SKU, Unit cost (whole currency units) and Lead time (days). Tick Preferred supplier to make this supplier the item’s primary source, which is what Order N and Auto (from items) use on purchase orders. Unticking an item removes the connection. The footer counts “14 items linked, 9 preferred”; Save connections replaces the supplier’s list.
  4. 4
    Deactivate or reactivate
    Deactivate (with a confirmation) hides the supplier from the directory and from the Supplier dropdown on new purchase orders. Its profile, connections and order history are kept, and Reactivate restores it.

Stock status, movements and expiry

Status is derived from quantity and reorder level every time the list loads, it is never stored.

Derived stock status
Derived stock statusqty ≤ reorder levelqty reaches 0receive POreceive POIn stockLow stockOut of stock
  • In stockLow stock (qty ≤ reorder level)
  • Low stockOut of stock (qty reaches 0)
  • Out of stockIn stock (receive PO)
  • Low stockIn stock (receive PO)
  • In stock: quantity above the reorder level. Low stock: at or below it. Out of stock: zero. The Level bar shows quantity against roughly one-and-a-half times the reorder level.
  • Movements are written for every change: receive (from a PO, referenced by its code), consume (a closed POS ticket) and adjust. The adjust movement is exposed by the API (PATCH /inventory/items/:id/adjust, Payments Edit) but there is no adjust button on this screen yet. There is no movement history screen either.
  • Low-stock notifications fire the moment a movement takes an item from above its reorder level to at or below it: “Tomatoes low stock, 4 kg remaining (reorder at 5)” or “Tomatoes out of stock, Reorder level reached. Create purchase order.” in the Operations category, linking to this page.
  • POS recipes: each menu item may list the stock items and quantities it uses. When a ticket closes, those quantities are deducted (never below zero). If there is not enough on hand the sale still goes through and a “Stock short: …” notification asks the kitchen to count and adjust. Recipes are set per menu item through the menu API; there is no recipe editor screen in this version.
  • Expiry: an item with an expiry date shows “Expires 2026-09-30” under its name, and the Perishable / tracked expiry tile counts items that carry a date. Nothing is auto-removed on expiry; the date is a reminder for the kitchen.

Purchase-order fields

What the New purchase order dialog asks for and what the server fills in.

New purchase order
FieldTypeNotes
Items to reorder *checkboxesOnly items currently Low stock or Out of stock. At least one, otherwise the toast “Select at least one item”.
SupplierselectAuto (from items) uses the first ticked item’s supplier; or pick any supplier. Mixed-supplier orders show “Mixed suppliers” in the pending list when no supplier is set.
Deliver toselectMain Store (default), Kitchen Store or Bar Store. Free text up to 120 characters on the API.
Expected datedateOptional. Shown as “due 12 Sep 2026” on the supplier drawer.
CodegeneratedPO-… from the hotel’s PO sequence (Settings → Numbering).
LinesgeneratedOne per ticked item; quantity = max(reorder level − on hand, reorder level). Quantity received starts at 0.
Supplier (Add supplier / Edit)
FieldTypeNotes
Name *text2 to 80 characters, unique per hotel. A duplicate is refused with “A supplier with that name already exists”.
CategoryselectFood & produce, Meat, fish & dairy, Beverages & bar, Housekeeping & amenities, Linen & textiles, Maintenance & parts, Office & stationery, Packaging & disposables, Services or Other. Shown as a badge in the table.
Contact name, Phone, Email, Website, AddresstextOptional. Email must be a valid address. Phone and email become tap-to-call / mail-to links; the website opens in a new tab.
Payment termstextOptional, up to 60 characters. Presets: Cash on delivery, Prepaid, Net 7, Net 14, Net 30, Net 60, Monthly account.
Lead time (days)numberOptional, 0 to 365. The supplier’s typical days from order to delivery; a connection can carry its own lead time per item.
NotestextOptional, up to 1000 characters. Delivery days, minimum order, who to ask for.
ActiveflagSet by Deactivate / Reactivate in the drawer. Inactive suppliers are hidden by default and not offered on new purchase orders.
Connection (Manage items)
FieldTypeNotes
Item *checkboxAny stock item; each item at most once per supplier.
Supplier SKUtextOptional, up to 60 characters. The supplier’s own code for the item.
Unit costnumberOptional whole currency units (no decimals). The date it last changed is stored with the connection.
Lead time (days)numberOptional, 0 to 365, per item.
Preferred suppliercheckboxMakes this supplier the item’s primary source (its Supplier on the Stock tab) and un-prefers the item’s other suppliers.
Stock item (read-only on this screen)
FieldTypeNotes
Name, unitUnique per hotel. Units are free text (kg, L, pcs…).
Department, categoryDepartment cards and category chips come from these. Categories are managed in Settings → Ops config.
SupplierOptional; the primary (preferred) supplier. Set from Manage items on the Suppliers tab.
Qty, reorder leveldecimalTwo decimals. Status is derived from these two numbers.
Expiry datedateOptional.

Permissions

Inventory follows the Payments module: View to look, Edit to order and receive.

Default Payments level per role (Inventory uses this module)
RolePayments
Super AdminFull
Hotel ManagerFull
ReceptionistView
AccountantFull
Housekeeping MgrNone
MaintenanceNone
Restaurant MgrEdit
HR ManagerView
SecurityNone
None No accessView View onlyEdit Can editFull Full access
  • View: summary, item list, suppliers and purchase orders.
  • Edit: Purchase order, Reorder, Reorder all, Order N, Receive stock / Receive, and stock adjustments via the API. Menu-item recipes also need Payments Edit.
  • Full: nothing extra on this screen.

Tips

Filters combine, department cards remember nothing, and the numbers are live.

Errors you may see

Every message the inventory API returns, and what to do about it.

400One or more stock items not found
Why
An item ticked in the dialog no longer exists (or belongs to another hotel).
Fix
Reload the page and create the order again.
400Cannot receive PO in status received
Why
The order was already received (the same text appears with cancelled).
Fix
Nothing to do, check the supplier drawer for the current status.
400Nothing left to receive on this PO
Why
Every line already has its full quantity received.
Fix
The order should already read Received; refresh the list.
400Adjustment would make quantity negative
Why
A stock adjustment (API) tried to remove more than is on hand.
Fix
Count the shelf and adjust by the real difference.
404Purchase order not found
Why
The order id is wrong or belongs to another hotel.
Fix
Open it from the pending list or the supplier drawer.
404Stock item not found
Why
The item was removed between loading the page and acting on it.
Fix
Reload.
400The same stock item is listed twice
Why
A Manage items save named one item twice.
Fix
Reload the page and try again; the checklist lists each item once.
400Unknown stock item
Why
An item in the connections list no longer exists (or belongs to another hotel).
Fix
Reload and save the connections again.
400Validation failed
Why
A supplier field broke a rule: name shorter than 2 characters, an invalid email, a lead time outside 0 to 365, or a unit cost that is not a whole number.
Fix
The form checks these before sending; correct the highlighted value.
404Supplier not found
Why
The supplier id is wrong or belongs to another hotel.
Fix
Reload the Suppliers tab and open it from the table.
409A supplier with that name already exists
Why
Supplier names are unique per hotel, including inactive ones.
Fix
Turn on Show inactive and reactivate the existing supplier, or choose a different name.
Reorder level
The quantity at which an item is flagged Low stock and included in Reorder all.
PO
Purchase order, a list of items and quantities requested from a supplier, coded PO-…
Stock movement
One dated change to an item’s quantity with a reason: receive, consume or adjust.
Recipe
The stock items and quantities a menu item consumes when its ticket closes.
Connection
A supplier-to-item link with the supplier’s SKU, last quoted unit cost and lead time.
Preferred supplier
The one connection per item that makes that supplier the item’s primary source on purchase orders.