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:

CardShowsDetails
Total ItemsCount of all stock itemsYour full ingredient catalog
Low StockCount of items at or below reorder thresholdTurns red when any item needs restocking
Inventory ValueSum of (quantity × cost per unit) for all itemsTotal value of what's in storage

Adding & Editing Stock Items

  1. Go to Kitchen > Stock.
  2. Click Add Item (top right).
  3. 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.

FieldRequiredDescription
NameYesIngredient name (e.g., "Olive Oil", "Chicken Breast")
UnitYesHow you count this item — see Understanding Units below
QuantityNoCurrent stock level (default 0)
SupplierNoSupplier name — used for grouping in purchase orders
CategoryNoFree-text label for organizing and filtering (e.g., "Dairy", "Meat", "Produce")
NotesNoInternal notes or instructions
ActiveNoDefaults 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.

FieldDescription
Units/PackageHow many individual units in one package (e.g., 12 cans per box)
Content/UnitWhat's inside each unit (e.g., 400g per can)
Cost per UnitYour purchase cost per stock unit (e.g., ₪/g)
Reorder ThresholdQuantity 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:

GroupUnitsWhat you're counting
Measurablekg, g, l, mlWeight or volume directly
Containerunit, pack, box, bagDiscrete countable things
Specialdose, otherCustom 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

IngredientStock UnitContent per UnitContent UnitWhy
Canned tomatoesbox400gYou count boxes. Each can is 400g. Recipes use grams.
Olive oilunit (bottle)750mlYou count bottles. Each is 750ml. Recipes use ml.
Flourbag1kgYou count bags. Each is 1kg. Recipes use grams or kg.
EggsunitYou count individual eggs. No content needed — recipes count eggs by piece, not by weight.
MilklYou measure in liters directly. No container layer needed.
Ground beefkgYou 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

  1. Click the receive icon (arrow down) on the item row, or open the item and choose a transaction type.
  2. Select the transaction type.
  3. Enter the quantity (always positive — the system applies the correct sign).
  4. Add optional notes (e.g., "Morning delivery from Supplier X").
  5. Review the preview showing current and resulting quantity, then confirm.

Transaction Types

TypeEffectUse for
ReceiveAdds to quantityDeliveries, restocking, purchases
WasteSubtracts from quantitySpoilage, damage, expired items
AdjustSubtracts from quantityCorrections 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

TypeColorMeaning
ReceiveGreenStock added from a delivery or purchase
DeductRedUsed in sales (via daily operations)
WasteOrangeSpoilage or damage
AdjustBlueManual correction
ProducePurpleConsumed 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:

  1. Item row — a red "LOW STOCK" badge appears next to the item in the table
  2. Dashboard card — the Low Stock count turns red
  3. 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

  1. Click the Import Delivery button (sparkle icon) at the top of the page.
  2. 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.
  3. Upload a photo of a delivery note or a PDF invoice.
  4. 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:

FieldValueMeaning
Pack count22 boxes
Units/Pack1212 cans per box
Price/Pack58 ₪Price per box
Total116 ₪2 × 58 ₪
Unit size400400g per can
UnitgStock tracked in grams
Stock quantity9,600 gAuto: 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

  1. Choose Paste Text or Upload File (image or PDF).
  2. Click Extract Recipe. The AI processes the content.
  3. Review in full-screen split view — original document or text on the left, extracted ingredients on the right.
  4. 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
  5. Set the recipe yield (e.g., 1.2 kg) at the top.
  6. Click Confirm Import to save the recipe and create any new stock items.

Search & Filters

Three filtering tools are always visible above the table:

FilterHow it works
SearchFilters items by name as you type
Category dropdownShows only items in the selected category
Low Stock OnlyCheckbox — 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.

ColumnDefaultDescription
CategoryVisibleItem category with color dot
QuantityVisibleCurrent stock, shown at your chosen packaging level (see below)
PriceVisibleUnit price at the same packaging level as Quantity
SupplierVisibleSupplier name
StatusVisibleOK 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):

LevelQuantity shownPrice shown
Carton (outer)2 cartons (of 12 cans × 400g)58.00 ₪ / carton
Can (middle — default)24 cans4.83 ₪ / can
Gram (base)9.6 kg12.08 ₪ / kg

Example — 4 bottles of 900ml oil for 40 ₪ (direct, no middle level):

LevelQuantity shownPrice shown
Bottle (default)4 bottles10.00 ₪ / bottle
Milliliter (base)3.6 L11.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