Stock Management
What Is It?
Stock Management lets you know:
- What you have in the kitchen
- What you use every day
- Where you're losing money
This is the foundation for controlling your food cost.
How It Works (Simply)
Your system relies on three elements:
- Stock — what you have
- Recipes — what you should use
- Sales / Reality — what was actually used
The difference between expected and actual usage = loss or error.
Recipes bridge stock and menu. When you link ingredients to menu items (in Kitchen > Recipes), the system can:
- Automatically deduct stock at end of day
- Calculate your food cost
- Detect losses and over-portioning
- Help you forecast tomorrow's orders
Navigate to Kitchen > Stock in FoodyAdmin to get started.
The Dashboard
At the top of the page, three summary cards give you a quick snapshot:
| Card | Shows | Details |
|---|---|---|
| Total Items | Count of all stock items | Your full ingredient catalog |
| Low Stock | Count of items at or below reorder threshold | Turns red when any item needs restocking |
| Inventory Value | Sum of (quantity × cost per unit) for all items | Total value of what's in storage |
Adding & Editing Stock Items
- Go to Kitchen > Stock.
- Click Add Item (top right).
- Fill in the fields and click Create.
To edit an existing item, click the pencil icon on its row.
The create/edit modal has two tabs:
Tab: General
Basic information about the item.
| Field | Required | Description |
|---|---|---|
| Name | Yes | Ingredient name (e.g., "Olive Oil", "Chicken Breast") |
| Unit | Yes | How you count this item — see Understanding Units below |
| Quantity | No | Current stock level (default 0) |
| Supplier | No | Supplier name — used for grouping in purchase orders |
| Category | No | Free-text label for organizing and filtering (e.g., "Dairy", "Meat", "Produce") |
| Notes | No | Internal notes or instructions |
| Active | No | Defaults to on. Inactive items are hidden from recipes and daily operations |
Tab: Packaging & Pricing
How the item is packaged and what it costs. Choose one of three packaging modes:
Simple — For items bought by weight or volume (e.g., 5kg flour, 3L oil). Just enter cost per stock unit.
By units — For individual containers (e.g., 6 bottles of 1.5L). Enter the content per unit (e.g., 1.5L) and cost per stock unit.
By packages — For boxes containing multiple units (e.g., 2 cartons of 12 cans of 400g). Enter units per package, content per unit, and cost per stock unit.
The modal shows a live price summary that updates as you type, showing HT and TTC prices at every level (per stock unit, per individual unit, per package).
Example — Tomato Pulp (By packages mode): Set units/package = 12, content/unit = 400g, cost = 0.0121 ₪/g. The summary shows: 4.83 ₪ HT / 5.70 ₪ TTC per can, 58.00 ₪ HT / 68.44 ₪ TTC per box.
| Field | Description |
|---|---|
| Units/Package | How many individual units in one package (e.g., 12 cans per box) |
| Content/Unit | What's inside each unit (e.g., 400g per can) |
| Cost per Unit | Your purchase cost per stock unit (e.g., ₪/g) |
| Reorder Threshold | Quantity at which a low-stock alert triggers |
Understanding Units
This is the most important concept in stock management. There are two layers of units.
Layer 1: Stock Unit
The stock unit defines how you count the item in inventory. There are 10 options in three groups:
| Group | Units | What you're counting |
|---|---|---|
| Measurable | kg, g, l, ml | Weight or volume directly |
| Container | unit, pack, box, bag | Discrete countable things |
| Special | dose, other | Custom use cases |
Layer 2: Content per Unit
When you pick a container unit (unit, pack, box, or bag), two extra fields appear: Content per Unit and Content Unit. These answer the question: "What's inside each container?"
For example, if you buy canned tomatoes by the box and each can is 400g:
- Stock unit = box
- Content per unit = 400
- Content unit = g
Why Is Content Unit Limited to g, kg, ml, l?
Because conversion only works between measurable units. The system knows:
- 1 kg = 1000 g
- 1 l = 1000 ml
This lets it convert between how you buy (boxes, packs) and how recipes consume (grams, milliliters). You can't meaningfully convert "3 boxes" to "X packs" — those are arbitrary containers. But you can convert "3 boxes of 400g" to "1200g".
Practical Examples
| Ingredient | Stock Unit | Content per Unit | Content Unit | Why |
|---|---|---|---|---|
| Canned tomatoes | box | 400 | g | You count boxes. Each can is 400g. Recipes use grams. |
| Olive oil | unit (bottle) | 750 | ml | You count bottles. Each is 750ml. Recipes use ml. |
| Flour | bag | 1 | kg | You count bags. Each is 1kg. Recipes use grams or kg. |
| Eggs | unit | — | — | You count individual eggs. No content needed — recipes count eggs by piece, not by weight. |
| Milk | l | — | — | You measure in liters directly. No container layer needed. |
| Ground beef | kg | — | — | You weigh in kilograms directly. |
Choosing the Right Approach
Tip: Use a measurable unit (kg, g, l, ml) when you weigh or measure the ingredient directly — bulk items like flour by the kilo, milk by the liter. Use a container unit (unit, pack, box, bag) when you count discrete packages and need the system to know what's inside each one for recipe conversions. For items counted individually like eggs, use unit with no content — recipes will reference them by count.
Stock Transactions
Important: Never modify stock directly. Every change should be a transaction. This lets you understand exactly where your stock came from, where it was used, and where you're losing product.
Recording a Transaction
- Click the receive icon (arrow down) on the item row, or open the item and choose a transaction type.
- Select the transaction type.
- Enter the quantity (always positive — the system applies the correct sign).
- Add optional notes (e.g., "Morning delivery from Supplier X").
- Review the preview showing current and resulting quantity, then confirm.
Transaction Types
| Type | Effect | Use for |
|---|---|---|
| Receive | Adds to quantity | Deliveries, restocking, purchases |
| Waste | Subtracts from quantity | Spoilage, damage, expired items |
| Adjust | Subtracts from quantity | Corrections after a physical count |
System-Generated Transactions
Two additional transaction types appear in your history but are created automatically — you don't enter these manually:
- Deduct — created when you close the day in Daily Operations. The system calculates how much of each ingredient was used (based on recipes and sales) and deducts it.
- Produce — created when prep production consumes ingredients in the prep system.
Stock History
To view the full transaction history for any item, click the clock icon on its row. The history shows the last 50 transactions with:
- Transaction type (color-coded badge)
- Notes
- Date and time
- Quantity change (green for additions, red for deductions)
Transaction Color Reference
| Type | Color | Meaning |
|---|---|---|
| Receive | Green | Stock added from a delivery or purchase |
| Deduct | Red | Used in sales (via daily operations) |
| Waste | Orange | Spoilage or damage |
| Adjust | Blue | Manual correction |
| Produce | Purple | Consumed during prep production |
Understanding Losses
The system constantly compares:
- Expected consumption (from your recipes)
- Actual consumption (from your stock)
The difference is called variance.
A Simple Example
You receive 2kg of cod. During the day you sell:
- 8 Fish Burgers (100g each) = 800g
- 18 Ceviches (50g each) = 900g
Expected consumption = 1700g. But at the end of the day, nothing is left. You lost 300g.
Why Does This Happen?
The most common causes:
- Over-portioning
- Kitchen mistakes
- Products thrown away or expired
- Incorrectly configured recipes
- Unrecorded sales
Why It Matters
Even a small loss adds up fast. 300g of cod = several lost dishes = lost revenue every single day.
Use Daily Operations to detect these variances automatically, day after day.
Low-Stock Alerts
Set a Reorder Threshold on any item to enable alerts. When the item's quantity drops to or below the threshold, it's flagged as low stock.
Three places show low-stock warnings:
- Item row — a red "LOW STOCK" badge appears next to the item in the table
- Dashboard card — the Low Stock count turns red
- Sidebar — a red number badge appears next to "Stock" in the navigation menu
Use the Low Stock Only checkbox in the filters to quickly see all items that need restocking.
Tip: Set your reorder threshold based on your delivery cycle. If you receive deliveries twice a week, set the threshold to roughly 2-3 days of typical usage. This gives you time to order before you run out.
Categories
Categories help you organize ingredients into logical groups (e.g., "Dairy", "Meat", "Produce", "Dry Goods").
- Assign a category when creating or editing an item. Start typing to auto-complete from existing categories, or type a new name to create one.
- Color-coded dots appear next to each category in the table for quick visual scanning.
- Filter by category using the dropdown above the table to view one category at a time.
Tip: Keep category names consistent. Decide on "Dairy" or "Milk Products" and stick with it. Inconsistent naming creates duplicate categories that fragment your filtering.
AI Delivery Import
Save time by letting AI extract items from delivery notes and invoices automatically. The import uses a full-screen split view: the original document is displayed on the left for reference while you review extracted items on the right.
Step 1: Select Supplier & Upload
- Click the Import Delivery button (sparkle icon) at the top of the page.
- Select a supplier from your existing supplier list, or choose + New supplier and type the name. Selecting a known supplier improves extraction accuracy — the system uses supplier-specific hints learned from previous imports.
- Upload a photo of a delivery note or a PDF invoice.
- Click Upload and Analyze. The AI uses Google Vision OCR combined with Claude AI for maximum accuracy.
Step 2: Review & Confirm
The screen splits into two panels: your original document on the left, and extracted items on the right. For each item:
- Match to existing stock using the searchable dropdown, or leave as "new" to create a new item. The original name (in the supplier's language) is shown for reference.
- Edit packaging details — the system supports a 3-level breakdown:
- Pack count — number of packages/boxes (e.g., 2 boxes)
- Units/Pack — number of individual units per package (e.g., 12 cans per box)
- Price per pack and Total price — auto-calculate each other
- Edit unit details:
- Unit size — content per individual unit (e.g., 400g per can)
- Unit — the stock unit (g, kg, l, ml, etc.)
- Stock quantity — auto-calculated: packs × units/pack × unit size (e.g., 2 × 12 × 400 = 9,600g)
- VAT toggle — check "Price includes VAT" in the header if the supplier's prices include tax. This flag is saved per item so food cost calculations are accurate.
- Assign a category for new items.
Example — Tomato Pulp (3-level breakdown): Your invoice shows "Tomato Pulp 400g × 2" at 58₪ each. Each "unit" is actually a box containing 12 cans of 400g. Here's how to fill it in:
Field Value Meaning Pack count 2 2 boxes Units/Pack 12 12 cans per box Price/Pack 58 ₪ Price per box Total 116 ₪ 2 × 58 ₪ Unit size 400 400g per can Unit g Stock tracked in grams Stock quantity 9,600 g Auto: 2 × 12 × 400 = 9,600g The cost per unit is automatically calculated: 116 ÷ 9,600 = 0.012 ₪/g.
Click Confirm Import to save. Each item receives a "receive" transaction, and new items are created in your stock.
Supplier Extraction Hints
When you import from a supplier for the first time, the system automatically analyzes the document format and generates extraction hints (language, layout type, column order). These hints are saved on the supplier record and used for future imports to improve accuracy.
You can view and edit these hints in Kitchen → Suppliers → Edit supplier → AI Extraction Hints.
Tip: Take clear, well-lit photos of delivery notes. The AI works best with legible text, consistent formatting, and visible prices.
Tip: The system learns from your corrections. When you match a delivery item to an existing stock item, it creates an alias so future deliveries from the same supplier are matched automatically.
Saving Drafts
If you need to stop mid-import, click Save Draft in the header. The entire extraction, your edits, and the scanned document are saved to the server.
Resume from Kitchen → Supplies (Approvisionnements) — pending imports appear at the top of the page as cards showing the supplier name, item count, and a thumbnail of the document. Click Resume to re-open the full-screen review with the document preview intact.
Multiple drafts are supported. Drafts are automatically deleted when you confirm the import.
VAT on Stock Items
Each stock item tracks whether its cost includes VAT or not. Use the Show ex. VAT / Show inc. VAT toggle on the stock page (under Inventory Value) to switch the display. The system normalizes all costs to the same basis for accurate food cost calculations.
Configure your restaurant's VAT rate in Settings → VAT Rate (%). Default is 18% for Israel.
Bulk Operations
Select multiple items using the checkboxes in the table (or the select-all checkbox in the header). A toolbar appears with two actions:
- Update Category — assign all selected items to a category. Pick from existing categories or type a new one.
- Delete — remove all selected items. Requires confirmation.
AI Recipe Import
Import recipes by uploading a photo/PDF or pasting text. The AI extracts ingredients, quantities, and matches them to your stock items. Available from Food Cost page and Recipe detail page (sparkle icon).
How It Works
- Choose Paste Text or Upload File (image or PDF).
- Click Extract Recipe. The AI processes the content.
- Review in full-screen split view — original document or text on the left, extracted ingredients on the right.
- For each ingredient:
- Match to an existing stock item or leave as "new" to create one
- Edit quantity, unit, cost per unit, and category
- The original name (in the source language) is shown for reference
- Price summary shows line cost (quantity × cost) in both HT and TTC
- Set the recipe yield (e.g., 1.2 kg) at the top.
- Click Confirm Import to save the recipe and create any new stock items.
Search & Filters
Three filtering tools are always visible above the table:
| Filter | How it works |
|---|---|
| Search | Filters items by name as you type |
| Category dropdown | Shows only items in the selected category |
| Low Stock Only | Checkbox — shows only items at or below reorder threshold |
Filters combine with AND logic. For example, searching "chicken" with category "Meat" shows only meat items with "chicken" in the name.
Table Columns
The stock table keeps things focused on what matters day-to-day. The header stays pinned to the top while you scroll, so you always know which column you're looking at.
| Column | Default | Description |
|---|---|---|
| Category | Visible | Item category with color dot |
| Quantity | Visible | Current stock, shown at your chosen packaging level (see below) |
| Price | Visible | Unit price at the same packaging level as Quantity |
| Supplier | Visible | Supplier name |
| Status | Visible | OK or Low Stock alert |
Click the gear icon (⚙) next to the filters to hide any column you don't need. Preferences are saved per restaurant.
Quantity & Price — Click to Switch Level
Quantity and Price are displayed together at the same packaging level. By default the table shows the level that matches how you think about your stock — not the raw base unit.
Click any Quantity or Price cell to cycle through the available levels for that row. Your choice is remembered per item.
Example — 2 cartons of 12 cans of 400g tomatoes, bought for 116 ₪ (nested):
| Level | Quantity shown | Price shown |
|---|---|---|
| Carton (outer) | 2 cartons (of 12 cans × 400g) | 58.00 ₪ / carton |
| Can (middle — default) | 24 cans | 4.83 ₪ / can |
| Gram (base) | 9.6 kg | 12.08 ₪ / kg |
Example — 4 bottles of 900ml oil for 40 ₪ (direct, no middle level):
| Level | Quantity shown | Price shown |
|---|---|---|
| Bottle (default) | 4 bottles | 10.00 ₪ / bottle |
| Milliliter (base) | 3.6 L | 11.11 ₪ / L |
Example — 10 kg of flour for 50 ₪ (simple, single level): shows 10 kg and 5.00 ₪ / kg. The cell isn't clickable because there's only one level.
The default level is the middle one for nested packaging, the outer for direct, and the base for simple — whichever reads most naturally.
Tips
Tip: Use the AI delivery import for every delivery. It keeps both quantities and costs up to date automatically, and builds a supply history you can reference later.
Tip: Assign a supplier to each ingredient. This enables the estimated supplies feature in Daily Operations to group purchase orders by supplier and send them by email.
Tip: Mark seasonal or discontinued items as inactive rather than deleting them. This preserves their transaction history for food cost analysis while hiding them from active workflows.
Tip: Review your stock history regularly. Unexplained deductions or large variances between expected and actual usage can point to portioning issues, waste, or recipe inaccuracies.
Tip: Stock management alone is not enough. Combine it with Daily Operations to compare actual vs expected usage, detect losses automatically, and improve your profitability day after day. That's where you really save money.
Related
- Daily Operations — close the day, deduct stock from sales, and generate supplier orders