Requisitions (/inventory/requisitions)
A store asks another location for stock. Every requisition records who requested, approved, issued and received it, the reason, the priority, when it is needed, and four quantities per line: requested → approved → issued → received.
| Step | Who | What happens |
|---|---|---|
| New requisition → Save draft / Submit for approval | procurement.create (chefs, bar managers, storekeepers’ supervisors) |
from (warehouse or store), to (your store), department, priority, reason, needed by, lines in any unit |
| Approve | procurement.approve (store manager, branch manager — not the requester) |
set what the issuing location can spare (defaults to requested; 0 drops a line); the approved quantity is reserved there so nobody else can issue it |
| Reject | procurement.approve |
with a reason; nothing is reserved |
| Issue | inventory.issue at the issuing location |
defaults to the approved quantities, never more; the stock moves now (a transfer with its batches) and the reservation is released |
| Receive | inventory.receive at the receiving store |
what actually arrived; anything short of what was issued is written off at the receiving store, with your note |
| Cancel | the requester or procurement.approve |
until issued; an approved requisition’s reservation is released |
Reserved stock shows on the inventory page (“reserved”) and is subtracted from available, so a warehouse never promises the same bag of sugar twice. The timeline on the requisition shows every step with its time and person.
Consumption — where did each kilogram go?
Every sale, the moment it closes, is exploded through its recipe (and sub-recipes, with trimming and waste allowances) — or its bottle link for resale items — into the ingredients it used, which are deducted from the store that serves the item’s kitchen, bar or barista. Staff meals, events and complimentary orders are deducted too, but kept apart.
Consumption & variance (/inventory/consumption): pick a period and,
optionally, one location.
Where did it go? — pick an ingredient:
1 kg Sugar received 1 kg
Sold African tea 250 g ██████████
Sold Fresh passion 150 g ██████
Sold Chocolate cake 80 g ███
Staff African tea 50 g ██
Losses Waste 50 g ██
Losses Count shortfall 20 g █
Remaining now 400 g
Variance table — per ingredient:
| Column | Meaning |
|---|---|
| Opening · In · Closing | book stock at the start, receipts + transfers in + returns, book stock at the end |
| Theoretical | what recipes say the sales used |
| Actual | opening + in − transfers out − returns out − issues − closing |
| Variance | actual − theoretical |
| Explained | waste, damage, expiry, write-offs, count corrections, adjustments already on the ledger |
| Unexplained | variance the ledger cannot account for (shrinkage, over-portioning, a recipe that is wrong) |
| Cost variance | variance × average cost |
A positive unexplained variance on sugar with a clean count means the recipe under-states the spoon, or the spoon is heavier than the recipe.
Resale items
Bottled and packaged items sell as themselves: link the menu item to its
stock ingredient (one Nile Special sold = one bottle) on the item page’s
Sold as line (inventory.manage), and receive them by the crate with a
crate → bottle conversion.
Reopened or voided sales
Reopening a closed sale (or a payment that fails / is reversed) puts its consumption back with a consumption reversed movement; closing it again deducts again.
When deduction is switched off
inventory.deduct_on_sale = false (settings) keeps the theoretical
entries — the reports still work — but the stores are only moved by
issues and counts.