M masamenu.tr
🍽️ Hall, Kitchen & Back Office

🗃️ Inventory

Stock, recipes, preps, suppliers, AI invoice photo import

Documentation

Inventory

The Inventory section tracks stock of ingredients and goods. The core idea: you describe each dish's recipe once, and then components are deducted automatically when an order is completed — stock stays accurate without manual bookkeeping.

Open: Admin panel → Inventory. Three tabs: Stock, Documents, Suppliers.


Stock#

  • A product = an ingredient or a stock item: name, unit, current quantity.
  • Minimum stock — when the quantity drops below this level the row is highlighted: time to reorder.
  • A product can be archived — it disappears from the list but stays in the document history.

Recipes: auto-deduction on orders#

Each dish (in the Menu section) gets a recipe — which products and how much go into one serving. When an order is completed:

  • components of every order item are deducted according to their recipes;
  • for combo sets, the deduction unfolds the recipe of every dish inside the combo;
  • all movements are visible in the Documents tab.

To link products to dishes quickly there are AI suggestions: the system analyzes your menu and proposes which dishes use a product — you just confirm.


Semi-finished products (preps)#

For preps (sauces, dough, broths) a product gets its own recipe. The "Produce" button creates a production document: the prep is added to stock while its components are deducted. In dish recipes a prep is used like any other product.


Goods receipt#

Two ways to register incoming goods:

  1. Manually — the "Receipt" button: pick products, quantities, prices and the supplier.
  2. By invoice photo — snap a photo of the delivery note: AI recognizes line items, quantities and prices and matches them to your products. You review and confirm. New products can be created right from the recognized invoice.

Every receipt is stored as a document linked to a supplier — purchases flow into Finance (food cost, gross profit).

Purchase price control on receiving#

On receiving, every line is compared with the median price of that product over the last 30 and 90 days. If the price is noticeably higher, a "+N % vs median" badge lights up next to the line — the storekeeper sees the increase at the moment of receiving, not a month later in a report.

A few details that matter:

  • the sample unit is the invoice, not the line: a supplier who splits a delivery into five lines does not shift the median five times harder;
  • fewer than three deliveries is not a sample, so no badge appears;
  • a discrepancy confirmed by the storekeeper lands in the supplier's journal — the counterparty gets a history of price shifts and a marker on the "Suppliers" tab;
  • the same median feeds the "purchase price spike" risk rule — the owner sees it in the "Cash risks" block, see Loss control. The storekeeper's and the owner's numbers match, because they are computed once, on the server.

Suppliers#

The Suppliers tab is your counterparty database: legal name, tax ID, bank and account, address, contact persons, phone, email. A supplier is selected when registering a receipt, so each counterparty has a purchase history. An archived supplier disappears from the list but stays in documents.

A supplier can have several contact persons — each with a role and their own channels. For every contact you pick where the order should be sent — the "Send via" field: e-mail, WhatsApp or Telegram. The list only offers channels that are actually filled in for that person, so an order can never be addressed to nowhere. The chosen channel comes first in the send dialog and is marked with a star; and it decides what the daily auto-order does: e-mail is sent by the system itself, while for a messenger it prepares a ready draft order — nobody but a human can write into a messenger first — and you send it in one click.


Procurement#

The Procurement tab covers the cycle from low stock to ordering and receiving. Set each product's purchasing parameters once, and the system tracks when it needs reordering.

Product parameters#

The product editor's Procurement section has three fields:

  • Reorder point — the minimum stock level that puts the product in What needs ordering.
  • Target stock — the level to replenish to. The recommended quantity is target stock minus current stock.
  • Default supplier — used to group products into supplier orders.

What needs ordering#

When a product falls below its reorder point, Procurement shows a count badge and Stock shows a warning with a link to procurement.

Products are grouped by supplier, with current stock, reorder point and recommended quantity on each row. Adjust quantities or deselect items. Create order creates an order for the selected supplier group; ⚡ Generate orders creates orders for all groups.

Notifications#

The Notifications block controls how you learn that stock needs replenishing:

  • Low-stock push — notifies the owner on the phone, using the same app as order notifications.
  • Daily ordering email digest — lists products below their reorder points. Enable this channel separately and enter a Digest email; leave it empty to use the owner's email.
  • Price-increase alert threshold — the percentage increase in a supplier's reimported price list that triggers a warning, calculated across that supplier's basket. The default is 10%.
  • Automatically email supplier orders — once a day, the system creates orders for products below their reorder points. Only products with a Preferred supplier and no open supplier order are included, avoiding repeated orders. Delivery depends on the channel selected for the supplier contact:
    • Email — the system sends the message itself. The order appears as Sent with an auto-order note, and the supplier card records the event.
    • WhatsApp or Telegram — a person must initiate the conversation, so the system leaves a prepared draft in Supplier orders. Click Send; the appropriate channel is already selected. Suppliers without a contact channel are skipped. The toggle shows how many suppliers have no channel and how many orders will remain drafts.

Sending a supplier order#

A new order appears in Supplier orders as Draft. Send opens an editable message. If the supplier has several contacts, choose the recipient at the top; their preferred channel appears first and is marked with a star:

  • WhatsApp — opens a chat with the supplier's number;
  • Email — opens the mail app with a prepared message;
  • Telegram — opens a chat with the supplier's account;
  • Copy text — send it by another method;
  • Send in Cenaly — sends the order within the platform if the supplier also uses it.

After sending, the order becomes Sent. If you sent it outside the system, mark it Sent manually. Further statuses are Confirmed, Partially received and Received. Orders past their expected delivery date are highlighted.

Receiving an order#

Receive opens the standard goods-receipt form with the expected products and quantities. Correct actual quantities and prices as needed; the supplier catalog is updated too. For a partial delivery, receive the delivered items and use Receive more later. Full receipt changes the order to Received. Cancelling an order changes it to Cancelled.


Extended stock operations#

Open + Operations in the page header for manual movements.

Write-off#

Select products and quantities and provide a reason: spoilage/expiry, processing waste, damage, staff meals, tasting/spillage, shortage/theft or other. Explain other reasons in the document comment.

Supplier return#

Choose the supplier and returned quantities. Stock decreases and the document retains its supplier link.

Transfer between locations#

Choose the destination warehouse and item quantities. Transfers can be between warehouses at one location or between locations; the system creates an outgoing and incoming document pair.

Stocktake#

Choose the scope, enter counted quantities, then review the variance statement. Search accepts names, barcodes and PLU. The draft is saved so counting can continue later. Posting, available to the owner or manager, creates one adjustment document and aligns stock.

Repricing and labels#

Repricing derives retail prices from purchase cost and the selected markup/rounding. Automatic repricing can be enabled during receipt. Print price tags or stock labels on a normal printer or through the hardware bridge.


Variance: where the difference went#

The "Variance" tab answers a question invisible in both sales and receipts: between two stocktakes more left the store than was sold. Consumption over the cycle is split into three parts:

Part What it is
Sales cost of goods sold, recorded at the moment of sale from recipes
Explained waste write-offs, production of semi-finished items, transfers between locations
Unexplained (variance) what the stocktake found: expected quantity minus counted quantity

The third line is the loss: an inaccurate recipe, portions served "by eye", unrecorded waste, or theft. It has to be read together with the first two — otherwise you cannot tell "we served more than the norm" from "we wrote it off as waste".

An honest caveat: a manual stock adjustment inside the cycle stores an absolute value rather than a delta, so part of the "unexplained" is in fact explained by an operator's hand — such documents are counted separately and shown alongside.

Losses exceeding theoretical consumption by more than a configured percentage raise the "consumption above norm" rule — see Loss control.


Demand forecast and prep plan#

The "Forecast" tab turns sales history into a plan for tomorrow: how many dishes will sell on this weekday, what has to be prepped (with recipes exploded and a "be ready by" hour), what to order from suppliers, and what risks running out before the day ends.

Details — Demand forecast.


Products by weight and labels#

Products by weight. A product can be measured in kilograms/litres rather than pieces: stock, recipes and write-offs all use those units. If scales are connected to the till through the hardware bridge, the weight is filled in automatically — both on receiving and when selling a dish priced by weight (canteen, deli). Price-by-weight is configured on the dish card, see POS.

Shelf labels. Products get warehouse labels with a barcode, name, price and an expiry date: if the product has a shelf life in days, the expiry is computed as the print date plus that period. This is not the same as order stickers — those are printed by the kitchen, see Kitchen and front-of-house printing.

There is no batch tracking or FEFO yet: the system knows a product's shelf life and prints a label from it, but does not keep separate batches with different dates.


Chestny ZNAK marking (Russia)#

Russian locations have the Marking tab with five areas: Receipt, Kegs, Codes, Tasks and Journal. Receipt accepts scanned codes or UPD XML and remembers supplier-item mappings. Unexpected codes are flagged as discrepancies. Kegs tracks tapping, poured volume and removal; a whole-keg code is not placed on each glass’s receipt.

Codes shows status, movement documents, expiry and reference checks. Tasks prepares files for submission to Chestny ZNAK and records the submission receipt; Journal lists checks, exports and submissions. Sales produce code retirements from receipts, including after offline synchronization, while marked ingredients can be consumed through recipes. Open packs are tracked fractionally.

The extension card controls the tab. The neighbouring EGAIS tab handles alcohol waybills, write-offs and balances through your UTM connected to the hardware bridge. See the limitations below for the external-system boundaries.


What you need to get started#

  • The "Inventory" section — it is on by default; at 30 or more SKUs the system will suggest setting it up itself.
  • Ingredient and product cards with units of measure and pack sizes.
  • Recipe cards on dishes — without them automatic write-off on sale will not work.
  • Purchase prices — otherwise cost of goods, food cost and menu engineering cannot be calculated.
  • Permissions: running a stocktake is available to the owner and the manager.
  • The bridge and a label printer — for prep labels and price tags.

Limitations#

  • Inventory analytics runs on the AWS contour. On the Russian brand functions built on the analytics databases are unavailable — parity is tracked as an open task.
  • Negative stock is allowed deliberately: an incoming delivery "forgives" the shortfall rather than blocking a sale.
  • There is no batch tracking or FEFO in stock quantities. FEFO exists only in marking (which opened pack to finish) and does not affect quantities.
  • There are no automatic unit conversions — grams and kilograms are described by the card's pack size rather than converted on the fly.
  • Recipe cards for variants and add-ons are not counted: the base dish composition is what gets written off.
  • There is no mobile stocktake with a phone scanner.
  • Auto-ordering uses the reorder point, not the forecast. Enable it in Procurement → Alerts: once a day the system prepares orders for shortages. Email orders are sent automatically; WhatsApp and Telegram orders remain drafts for a person to send. A preferred supplier and a contact are required; items already on open orders are skipped.
  • The purchasing email digest is a separate opt-in. Set its recipient or use the owner’s email. Auto-ordering and the email digest are implemented for both clouds; push notifications are AWS-only.
  • EGAIS and Chestny ZNAK are Russian specifics: those views appear only for locations with the country set to Russia; live exchange with the state marking system over API is not connected (submission is semi-manual), and the regulator's EGAIS test contour has not been passed. VetIS (Mercury) works on mocks — the API access key has not been obtained.

Troubleshooting#

Stock was not written off after a sale. The dish has no recipe card, or a variant/add-on was sold — their composition is not included in the write-off.

Stock went negative. By design: the system does not block a sale, and the shortfall is closed by the next delivery.

Cost of goods is empty. Purchase prices for ingredients are not filled in — without them neither food cost nor the menu-engineering matrix can be built.

I do not see the marking or alcohol views. They appear only for a Russian location.

A stocktake cannot be run. Running one is available to the owner and the manager; other roles get read-only access.

No purchasing email arrives. Enable the email digest in Procurement → Alerts, check the recipient and make sure some items are below their reorder point. This is a daily digest, not an email after every stock movement.


  • Demand forecast — prep plan, purchase draft and run-out risk
  • Loss control — the "consumption above norm" and "purchase price spike" rules
  • Menu engineering — what to do with a dish once its cost is known
  • Finance — purchases, food cost and gross profit
  • Orders — completing an order triggers deduction
  • QR menu — dishes and combo sets the recipes are attached to
  • Shop — the stock level is visible to the buyer on the storefront: "only a few left" or the exact number

FAQ#

Do all dishes need recipes?#

No. Start with your most popular items and add the others gradually. Dishes without recipes do not consume ingredient stock.

What happens when an order is cancelled?#

Stock deduction is linked to order completion. Cancelled orders do not affect stock.

Which languages do invoice photos work with?#

AI handles typical invoices in the region's main languages, including Georgian, Russian and English. Always review the recognition result before confirming it.

Can I run inventory across several locations?#

Yes. Stock and documents are kept separately per location; select the location at the top of the page.

How do I send an order to a supplier without WhatsApp or Telegram?#

Enter an email in the supplier card to enable Email in the send dialog. You can also copy the order text and send it another way.

Can I count only part of the stock?#

Yes. The first wizard step selects all stock, products for sale or raw materials, with search by name, barcode and PLU. Blank rows leave existing stock unchanged; only entered counts are saved. An unfinished count is saved automatically as a draft so you can continue later.

Was this article helpful?