Skip to content

Back office

Inventory

Stock on hand per store, an item's page and ledger, receiving without an order, issues, transfers, waste, counts, batches and expiry, and reorder levels.

20 min read

On this page

Inventory (/inventory) shows one store at a time: what is on hand, what is reserved for approved requisitions, what is available, the minimum and reorder level, and — for those who may see costs — the average cost and the value. Every change is a movement on the item’s ledger: a delivery, an issue, a transfer, waste, a count, a sale. Nothing is edited or deleted; a mistake is put right with the opposite movement.

Sales take their ingredients out of the stores by themselves, through the recipes (see See what sales used). This manual covers everything people do by hand. The stores themselves, units and conversions are in Stores; asking another store for stock is in Requisitions; buying from suppliers is in Procurement.

The screens are the demo business, Jupita Restaurant Demo, at its Kampala — Kololo branch. Isaac is the storekeeper, Chef Okello runs the kitchen and Moses is the branch manager.

Who can do what

Task Permission Usually
See stock, items and ledgers inventory.view storekeeper, chef, bartender, barista, supervisor, managers
Receive stock, record a Return (in) inventory.receive storekeeper, store manager, managers
Issue, Return to supplier and Transfer stock inventory.issue storekeeper, chef, bartender, store manager, managers
Record Waste, Damage, Expiry, Write-off, Adjust (±), write off an expired batch inventory.adjust chef, sous chef, store manager, managers
Count stock inventory.count, inventory.issue or inventory.receive storekeeper, chef, store manager
Post a count (write its differences to the ledger) inventory.count chef, store manager, managers
Set minimum, maximum and reorder levels inventory.manage store manager, managers
See average costs and values menu.costs or inventory.manage managers, chef, accountant

The buttons follow the permissions: on the Inventory page and on an item’s page you only see Receive, Issue, Transfer and Waste / adjust if you may use them.

Stock screens need the connection to the server. When the till is offline they show what they last loaded and refuse changes; sales go on and take their stock when they reach the server.

Find an item and its stock

Purpose

Answer “how much rice do we have in the kitchen store?” in a few seconds, and see at a glance what is running low.

Role / permission required

Anyone with inventory.view: storekeepers, chefs, bartenders, baristas, supervisors and managers.

Prerequisites

  • You are signed in at your branch (see Sign in).

Steps

  1. Open Inventory from the sidebar.
  2. Choose the store in Location (1), here Kololo Kitchen Store. Under the list you see its kind and rules (2): Kitchen store · issues FIFO · batches tracked.
  3. Type part of a name, SKU or category in Search ingredients… (3), for example sugar.
  4. To see only what needs attention, tap a filter (4): Low stock, Reserved or Negative. All shows everything again.
  5. Read the row: On hand, Reserved, Available and Min · reorder. Tap the name to open the item’s own page.

Expected result

One row for Sugar at Kololo Kitchen Store with what is on hand and available, and Min · reorder 2 · 3: below 2 kg the row turns red (below min), at 3 kg or less it shows reorder. The card Below minimum / reorder counts such rows for the store.

Screenshot

The Inventory page at Kololo Kitchen Store: 1 Location, 2 the store’s rules, 3 search, 4 the filters

Sugar found: 1 the item’s name (opens its page), 2 On hand, 3 Min · reorder

Common mistakes

  • Looking in the wrong store. A branch has several stores (kitchen, cold room, bar, coffee, bakery…). Rice in the Central Warehouse is not in the kitchen yet. The item’s page shows every store at once.
  • Reading On hand as what you can use. Stock reserved for an approved requisition is promised to another store; Available is what is free.

Troubleshooting

  • “No stock here yet”. Nothing has been received or transferred into this store. Most stores are filled from the warehouse (see Transfer stock between stores).
  • A number is red with negative. Sales took more than the ledger had — a delivery was not received, or stock is kept in another store than the one sales use. Receive the missing delivery or count the store.
  • No value columns. You do not see costs without menu.costs or inventory.manage.

See an item’s movements

Purpose

Follow every kilogram of an item: when it came in, where it went, who moved it and what is left after each movement — to answer a question or find a mistake.

Role / permission required

Anyone with inventory.view.

Prerequisites

  • None.

Steps

  1. Open Inventory, choose the store and tap the item’s name, here Rice.
  2. Read the top line: SKU, category, stock unit and Total on hand (1) in every store you can see.
  3. Tap Ledger (2).
  4. Read each row: When, the Movement (3) with its store (and the other store for a transfer), Qty (green for in, minus for out), Balance (4) after it, and Batch · reason (5) with who did it.

Expected result

The newest movements are at the top: Receive, Issue, Transfer in and Transfer out, Waste, Count, Sale consumption and Opening stock. The balance column lets you follow the store’s stock step by step.

Screenshot

Rice on the Ledger tab: 1 Total on hand, 2 Ledger, 3 Movement, 4 Balance, 5 Batch · reason

Common mistakes

  • Expecting to correct a row. The ledger cannot be edited. Put a mistake right with the opposite movement — receive what was issued by mistake, or count the store.

Troubleshooting

  • The ledger is long. It shows the latest movements. For a period and a summary, use Where did it go? on the same page (see Follow one ingredient).

Receive stock without a purchase order

Purpose

Put stock on the books when it arrives without a purchase order — a market purchase, a gift, a delivery a supplier made on the phone — with its cost, batch and expiry date, so the stock and its value are right.

Role / permission required

Storekeeper, store manager or manager (inventory.receive).

Prerequisites

  • The goods are in front of you, with the supplier’s delivery note if there is one.
  • A delivery against a purchase order is received on the order instead (see Receive goods against a purchase order).

Steps

  1. Open Inventory and choose the store that gets the goods, here Kololo Kitchen Store.
  2. Tap Receive. The Receive dialog opens with that store as Location. Leave What happened on Receive (choose Return (in) for stock coming back into the store, from an outlet or a customer).
  3. Choose the Ingredient (1): Rice · RICE.
  4. Type the Quantity (2): 25. Leave Unit on the stock unit, or choose the unit the goods came in (a crate, a sack) if a conversion exists.
  5. Type the Unit cost (UGX, per kg) (3): 4300. The hint shows the standard cost.
  6. Choose the Supplier.
  7. Leave Batch no. (4) empty for an automatic number, or type the one on the delivery note. Type the Lot no. and the Expiry date (5) if the goods have them.
  8. Type a Reason such as Market purchase, no order.
  9. Tap Receive (6).

Expected result

The message Receive: 25 kg of Rice appears and On hand for rice at Kololo Kitchen Store goes up by 25 kg. The item’s page shows a new batch with its cost and expiry, and the ledger a Receive row. The store’s average cost moves towards the new price.

Screenshot

The Receive dialog: 1 Ingredient, 2 Quantity, 3 Unit cost, 4 Batch no., 5 Expiry date, 6 Receive

After receiving: 1 the new on-hand figure, 2 the confirmation

Common mistakes

  • The cost of the whole delivery in Unit cost. It is the price of one unit (one kg here). 25 kg for USh 107,500 is 4,300.
  • Receiving into the wrong store. Check Location before you tap Receive; if it was wrong, transfer the stock to the right store.
  • Receiving goods that came with a purchase order here. The order then still shows them as not delivered, and the supplier’s invoice cannot be matched. Use the order.

Troubleshooting

  • The Unit list does not have the crate. A crate, carton or sack needs a conversion to the stock unit first (see Units and conversions).
  • The Receive button is missing. You do not have inventory.receive.

FAQ

Can I receive from an item’s page? Yes. Open the item and tap Receive: the dialog has the item already chosen, with the same units and suppliers as on the Inventory page.

Issue stock out of a store

Purpose

Record stock that leaves a store for use that is not a sale — oil for the fryer change, cleaning materials, stock for a function — so the store’s count stays right and the use is on the ledger with its reason.

Role / permission required

Storekeeper, chef, bartender, store manager or manager (inventory.issue).

Prerequisites

  • The stock is in the store.

Steps

  1. Open Inventory and choose the store, here Kololo Kitchen Store.
  2. On the item’s row tap Issue (or Issue at the top and choose the Ingredient). Leave What happened on Issue; choose Return to supplier when the goods go back to a supplier without a purchase-order return.
  3. Read what is on hand and available (1) under the ingredient.
  4. Type the Quantity (2): 3 (litres of cooking oil).
  5. Type the Reason (3): Deep-fryer oil change.
  6. Tap Post (4). (On the item’s own page the dialog also has a Batch list, to issue from one batch.)

Expected result

The message Issue: 3 L of Cooking oil appears and on hand at Kololo Kitchen Store goes down by 3 L. The oldest batch goes first (the store issues FIFO); a cold room or freezer set to FEFO issues the batch that expires first.

Screenshot

The Issue dialog: 1 on hand and available, 2 Quantity, 3 Reason, 4 Post

Common mistakes

  • Issuing what sales already take. A dish with a recipe takes its ingredients when it is sold; issuing them as well takes them twice.
  • Issuing to move stock to another store. Use Transfer: an issue takes stock out of the books, a transfer keeps it in another store.

Troubleshooting

  • “Only 3 kg of Sugar available at Kololo Kitchen Store.” You asked for more than is available. Part may be reserved for a requisition. Issue less, or receive or transfer stock in first.

Transfer stock between stores

Purpose

Move stock from one store to another in one step — from the warehouse to the kitchen, from the cold room to the bar — with its batches, costs and expiry dates, so both stores stay right.

Role / permission required

Storekeeper, chef, bartender, store manager or manager (inventory.issue).

Prerequisites

  • The stock is available in the store it leaves.
  • For a request that needs a manager’s approval first, use a requisition instead (see Request stock from the store).

Steps

  1. Open Inventory and choose the store the stock leaves, here Central Warehouse — Industrial Area.
  2. Tap Transfer. From (1) is that store.
  3. Choose To (2): Kololo Kitchen Store.
  4. Choose the Ingredient: Sugar · SUGAR. Read what is available (3).
  5. Type the Quantity (4): 10, and a Reason: Kitchen top-up.
  6. Tap Transfer (5).
  7. To check, tap the item’s name: the Locations tab shows both stores.

Expected result

The message Transfer stock: 10 kg of Sugar appears. The warehouse has 10 kg less and Kololo Kitchen Store 10 kg more (1 and 2 on the item’s page). The ledger shows Transfer out and Transfer in, each naming the other store. The batches move with their cost and expiry date.

Screenshot

The Transfer stock dialog: 1 From, 2 To, 3 what is available, 4 Quantity, 5 Transfer

Sugar’s page after the transfer: 1 the warehouse, 2 the kitchen store

Common mistakes

  • Choosing the wrong From store. The dialog starts from the store shown on the page; change From if needed before you type the quantity.
  • Transferring and then receiving the same stock. A transfer already puts the stock in the receiving store.

Troubleshooting

  • The quantity is refused. The store it leaves does not have that much available. Read the line under the ingredient.

Record waste and put stock right

Purpose

Write off stock that is spoiled, broken, expired or lost, and put a store’s figure right when stock turns up that was not on the books — with the reason, so the loss or gain shows in the variance report instead of being a mystery.

Role / permission required

Chef, sous chef, store manager or manager (inventory.adjust). Above the business’s limit (USh 500,000 in value by default) the change needs someone with approvals.decide.

Prerequisites

  • You know how much was lost (or found) and why.

Steps

  1. Open Inventory and choose the store, here Kololo Kitchen Store.
  2. On the item’s row tap Waste (or Waste / adjust at the top and choose the Ingredient).
  3. Choose What happened (1):
    • Waste — spoiled, spilled or thrown away;
    • Damage — broken or damaged;
    • Expiry — past its expiry date;
    • Write-off — lost for any other reason;
    • Adjust — put the figure right, up or down.
  4. Type the Quantity (2): 1.5 (kg of tomatoes). For Adjust the field is Adjustment (±): a positive number for stock you found, a negative one for stock that is gone.
  5. Type the Reason (3): Spoiled — soft and mouldy. A reason is required. Add a Note if it helps.
  6. Tap Post (4). Stock goes out of the oldest batch first; on the item’s own page the dialog also has a Batch list to name the batch.
  7. If the value is above the limit and you may not approve it yourself, the Supervisor approval dialog asks for the Supervisor employee no. and the Supervisor PIN. The supervisor types them on your screen.

Expected result

The message Waste: 1.5 kg of Tomatoes appears and on hand goes down by 1.5 kg. The tomatoes’ ledger shows a Waste row with its value, the batch, the reason and your name; an approver’s name is added to the note and the audit trail. The consumption page counts it as explained waste.

An Adjust of +2 puts 2 more on hand at the average cost and shows as an Adjust row on the ledger.

Screenshot

The Waste / adjust dialog: 1 What happened, 2 Quantity, 3 Reason, 4 Post

The tomatoes’ ledger: 1 the waste line

Adjust chosen: 1 What happened, 2 Adjustment (±)

Common mistakes

  • Adjusting stock that is simply not there. If you do not know why stock is missing, count the store (see Count stock); the difference is posted as a count and shows as unexplained until you find out.
  • A positive number for a loss in Adjust. In Adjustment (±) a loss is negative (-1.5). For waste, damage or expiry choose that kind instead, so the variance report explains it.
  • Waste for a café remake or a bar spill. Those have their own buttons on the café and bar screens (see Record café waste and Record a spill or breakage).

Troubleshooting

  • “A reason is required.” Type a reason, then Post.
  • The supervisor’s PIN is refused. The employee number or PIN is wrong, or that person may not approve (approvals.decide). Try again or ask another supervisor.
  • There is no Waste / adjust button. You do not have inventory.adjust.

Count stock

Purpose

Compare what is really on the shelf with what the books say, and put the books right — the whole store at month end (a full count) or a few ingredients any day (a cycle count).

Role / permission required

Counting: storekeeper, chef or store manager (inventory.count, inventory.issue or inventory.receive). Posting the differences: inventory.count — chef, store manager, branch manager.

Prerequisites

  • No other count is open at the same store.
  • Nothing moves in or out of the shelves you count while you count.

Steps

  1. Open Inventory and tap Counts, then Start a count.
  2. Choose the Location (1): Kololo Kitchen Store.
  3. Choose the Kind (2): Cycle count (chosen ingredients), or Full count (every ingredient). Give it a Name such as Friday dry goods.
  4. For a cycle count, tick the ingredients in Ingredients to count (3): cooking oil, rice, sugar.
  5. Tap Start (4). The count sheet opens with the Expected quantity of each line at this moment.
  6. Count the shelf and type what you find in Counted (2) for each line. Enter or Tab saves the line; the Variance (3) appears.
  7. When every line is counted, tap Submit. The count waits for someone who may post it (4).
  8. The chef or manager opens the count and taps Post, then confirms.

Expected result

After Submit the sheet shows submitted and each line’s variance: rice 0.5 kg short, cooking oil 0.25 L short, sugar exact. After Post — with nothing used from the store in between — the same differences are posted: the status is posted, the Variance in shillings shows at the top, and each difference is a Count movement on the ledger. The count is final.

Screenshot

The Start a count dialog: 1 Location, 2 Kind, 3 Ingredients to count, 4 Start

The submitted count sheet: 1 Expected, 2 Counted, 3 a variance, 4 the status

The count posted by the manager: 1 the variance in shillings, 2 posted

Common mistakes

  • Using the store between counting and posting. Post records, for each line, what you counted minus what is on hand at the moment of posting. A sale or issue after you counted a line but before Post is therefore wiped out by the count (it shows as a gain), and the variance on the submitted sheet is not the one posted. Count before service or with the store closed, and post straight after counting.
  • Leaving lines empty. An empty line is not counted and posts nothing.
  • Counting in the wrong unit. Type the stock unit the line shows (kg, L, ea).

Troubleshooting

  • “Kololo Kitchen Store already has an open count (CNT-…).” Finish or cancel the open one first (Cancel count on its sheet).
  • The Post button is missing. You do not have inventory.count; Submit and ask the chef or manager to post.
  • The variance shows “—”. You do not see costs; the quantities are still right.

Batches and expiry dates

Purpose

Know which delivery each kilogram came from, what it cost and when it expires — so the oldest stock is used first and expired stock is taken off the books instead of being served.

Role / permission required

Seeing batches: inventory.view. Writing off an expired batch: inventory.adjust (chef, store manager, managers).

Prerequisites

Steps

  1. Open Inventory, choose the store (here Kololo Cold Room) and tap the item, Fresh milk.
  2. Tap Batches. Each row shows the batch number, the store and supplier, Remaining, Received, the Expiry (1) date and, if you may see costs, the unit cost and value.
  3. Look at the badges: a number of days (2 d) means it expires within three days; expired (2) means the date has passed.
  4. For an expired batch, tap Write off (3) and confirm.

Expected result

The message Batch written off appears. The expired 2 L leave the cold room and the ledger shows an Expiry movement of 2 L with its value. The batch no longer counts as stock.

Screenshot

Fresh milk’s batches: 1 Expiry, 2 the expired badge, 3 Write off

The ledger after the write-off: 1 the Expiry movement

Common mistakes

  • Serving from the newest batch. Stores issue FIFO (oldest first) or FEFO (first to expire first); put new deliveries behind the old ones on the shelf so what you take matches the books.
  • Receiving without an expiry date. Then the batch never warns you. Type the date on the packet.

Troubleshooting

  • There is no Write off button. The batch has not expired yet, or you do not have inventory.adjust. For stock that went bad before its date, record waste and choose the batch (see Record waste and put stock right).
  • “No open batches”. The store does not track batches, or everything from it has been used.

Reorder levels and low-stock alerts

Purpose

Tell JupitaPos when an item is running low in a store, so the storekeeper sees it in time to order or requisition more.

Role / permission required

Store manager or manager (inventory.manage).

Prerequisites

  • The item is stocked in the store.

Steps

  1. Open Inventory, choose the store and tap the item, here Passion fruit at Kololo Kitchen Store.
  2. On the Locations tab tap Thresholds on the store’s row.
  3. In Thresholds at Kololo Kitchen Store type the Minimum (kg) (1): 2 — below this the row turns red.
  4. Type the Reorder level (kg) (2): 6 — at or below this the row shows reorder — and the Reorder quantity (kg) (3): 10, what to order. A Maximum (kg) of 20 stops over-ordering.
  5. Tap Save (4).
  6. On Inventory, tap Low stock (1) to see every item at or below its reorder level or minimum.

Expected result

The message Thresholds saved appears and the row reads 2 · 20 · 6 (10) with the reorder badge, because 5 kg are on hand. The Low stock filter lists passion fruit with the badge (2), and the Below minimum / reorder card (3) counts it. The Low stock report in Reports lists the same items with days of cover and a suggested order.

Every hour (at ten past) JupitaPos also checks each store: for an item at or below its reorder level, everyone at the branch who sees stock (inventory.view) gets a notification — Low stock: Passion fruit at Kololo Kitchen Store, with what is on hand, the reorder level and the quantity to reorder — once a day. It is critical when nothing is left. Tapping it opens the Inventory page at that store. The same hourly check flags batches past their expiry date.

Screenshot

The Thresholds dialog: 1 Minimum, 2 Reorder level, 3 Reorder quantity, 4 Save

Low stock at Kololo Kitchen Store: 1 the filter, 2 the reorder badge, 3 the count

Common mistakes

  • One level for every store. A level is per store: the warehouse reorders from suppliers, the kitchen store from the warehouse.
  • A reorder level below the minimum. Then below min comes before reorder and you order too late. Keep the reorder level above the minimum.

Troubleshooting

  • There is no Thresholds button. You do not have inventory.manage.
  • No low-stock notification arrived. The check runs every hour (at ten past) and alerts once a day per item and store. An item above its reorder level, an inactive store, or a person without inventory.view at that branch gets nothing.