Skip to main content

Overview

The inventory system helps you track raw materials, ingredients, and supplies. It connects menu items to ingredient recipes, automatically deducts stock when orders are completed, and alerts you when items run low.

Inventory Items

Creating Inventory Items

1

Navigate to Inventory

Go to Inventory > Items from your dashboard.
2

Add New Item

Click “Add Item” and fill in:Basic Information:
  • Name: Ingredient or supply name (e.g., “Tomatoes”, “Olive Oil”)
  • Category: Organize items (Vegetables, Meats, Dairy, Beverages, Supplies)
  • Unit: Measurement unit (kg, liters, pieces, boxes)
Stock Levels:
  • Current Stock: Starting quantity
  • Minimum Stock: Threshold for low-stock alerts
Pricing:
  • Cost per Unit: Purchase price (in cents, e.g., 500 = $5.00)
3

Set Alert Threshold

The Minimum Stock level triggers alerts when current stock falls below it.Example: Set minimum to 10 kg for tomatoes → alert when stock < 10 kg
Inventory items are branch-specific. Each branch maintains its own inventory levels even if using the same ingredients.

Item Details

Each inventory item tracks:
  • Current Stock: Real-time quantity on hand
  • Minimum Stock: Alert threshold
  • Cost per Unit: For COGS calculations
  • Category: For organization and reporting
  • Unit of Measure: Ensures consistency

Categories

Organize inventory with categories: Default Categories:
  • Vegetables & Fruits
  • Meats & Seafood
  • Dairy & Eggs
  • Dry Goods
  • Beverages
  • Supplies (napkins, containers, etc.)
Create Custom Categories:
  1. Go to Inventory > Categories
  2. Click “Add Category”
  3. Enter category name
  4. Assign items to category

Recipe Management

Connect menu items to ingredients using recipes.

Creating a Recipe

1

Select Menu Item

Go to Inventory > Recipes and select a menu item.
2

Add Ingredients

Click “Add Recipe” and specify:For each ingredient:
  • Select inventory item
  • Enter quantity used per serving
  • Unit matches inventory item’s unit
Example Recipe - Burger:
Menu Item: Classic Burger ($12)
Ingredients:
- Ground Beef: 0.2 kg
- Burger Bun: 1 piece
- Cheese Slice: 2 pieces
- Lettuce: 0.05 kg
- Tomato: 0.08 kg
- Sauce: 0.03 liters
3

Save Recipe

Recipe is saved and used for automatic inventory deduction.

Updating Recipes

Edit existing recipes:
  1. Find the menu item in Recipes list
  2. Click “Edit Recipe”
  3. Add, remove, or adjust ingredient quantities
  4. Save changes
Recipe changes affect future orders only. Past orders retain their original recipe quantities.

Automatic Inventory Deduction

When an order is marked as completed, the system automatically:
  1. Checks if the order has been deducted already (prevents double-deduction)
  2. Looks up recipes for each menu item in the order
  3. Calculates total ingredient usage (quantity × order quantity)
  4. Deducts from current stock
  5. Records a movement entry of type usage
  6. Marks the order as inventory_deducted = true
Example:
Order #1234 completed:
- 2× Classic Burger
- 1× Caesar Salad

Deductions:
Burger recipe (×2):
  - Ground Beef: 0.4 kg
  - Buns: 2 pieces
  - Cheese: 4 slices
  - ...

Salad recipe (×1):
  - Lettuce: 0.1 kg
  - Croutons: 0.05 kg
  - ...

All deductions recorded as movements.
Automatic deduction happens in apps/api/src/services/order.service.js in the handleOrderCompletion function.

Inventory Movements

All stock changes are recorded as movements.

Movement Types

Purchase

Stock added from supplier. Increases current stock.

Usage

Stock consumed by orders. Decreases current stock. Auto-created on order completion.

Adjustment

Manual correction (damaged goods, theft, count discrepancy). Can increase or decrease.

Recording Movements

1

Go to Movements

Navigate to Inventory > Movements
2

Create Movement

Click “Add Movement” and enter:
  • Item: Select inventory item
  • Type: Purchase, Usage, or Adjustment
  • Quantity: Amount to add or subtract
  • Reference: Optional (e.g., invoice number, order ID)
  • Notes: Reason or details
3

Submit

Movement is recorded and stock is updated immediately.
Movement History: View all movements for an item:
  1. Click on inventory item
  2. View “Movement History” tab
  3. See date, type, quantity, reference, who created it

Example Movements

Purchase Entry:
Date: 2024-03-15 10:30
Item: Tomatoes
Type: Purchase
Quantity: +50 kg
Reference: Invoice #INV-2024-0312
Notes: Weekly produce delivery
Adjustment Entry:
Date: 2024-03-15 18:00
Item: Olive Oil
Type: Adjustment
Quantity: -2 liters
Reference: -
Notes: Bottle broke during service

Low Stock Alerts

Get notified when items run low.

Viewing Alerts

Navigate to Inventory > Alerts Displays all items where:
current_stock < min_stock
Alert List Shows:
  • Item name
  • Current stock
  • Minimum stock threshold
  • Cost per unit (for reorder budgeting)
Example Alert:
⚠️ Ground Beef
Current: 8 kg
Minimum: 15 kg
Cost: $12/kg
Action: [Create Purchase Movement]
Check the Alerts page at the start of each day to plan purchases and avoid running out during service.

Alert Workflow

  1. Alert appears on Alerts page
  2. Manager reviews alerts
  3. Creates purchase order with supplier
  4. When delivery arrives, record Purchase movement
  5. Stock increases, alert disappears

Inventory Reports

Stock Valuation

Calculate total inventory value:
Total Value = Σ (current_stock × cost_per_unit)
View in Reports: Go to Reports > Inventory to see:
  • Total inventory value
  • Value by category
  • Items with highest value
  • Movement trends

Usage Reports

Track which ingredients are used most:
  1. Filter movements by type = “Usage”
  2. Group by item
  3. See total quantity used in date range
  4. Identify high-usage items for bulk ordering

Best Practices

Set Realistic Minimums

Minimum stock should cover 2-3 days of typical usage plus buffer for delivery delays.

Regular Counts

Conduct physical inventory counts weekly or monthly. Record adjustments for discrepancies.

Recipe Accuracy

Keep recipes updated with accurate quantities. Reduces waste and improves cost tracking.

Daily Alert Checks

Review low-stock alerts every morning to plan purchases before running out.

Advanced Features

Cost of Goods Sold (COGS)

Calculate COGS for menu items: For a menu item:
COGS = Σ (ingredient_quantity × ingredient_cost_per_unit)
Example:
Classic Burger:
- Ground Beef: 0.2 kg × $12/kg = $2.40
- Bun: 1 pc × $0.50/pc = $0.50
- Cheese: 2 pc × $0.30/pc = $0.60
- ...
Total COGS: $4.20

Selling Price: $12.00
Gross Margin: $7.80 (65%)

Batch Updates

Update multiple items at once:
  1. Select items via checkbox
  2. Click “Batch Update”
  3. Adjust cost per unit, category, or minimum stock
  4. Apply changes to all selected items

Integration with Orders

Workflow:
  1. Customer orders “Classic Burger” via QR or POS
  2. Order created with status pending
  3. Kitchen prepares and marks completed
  4. handleOrderCompletion service runs:
    • Looks up burger recipe
    • Deducts ingredients from inventory
    • Records usage movements
    • Sets order flag inventory_deducted = true
  5. Current stock updated
  6. Low stock alerts triggered if below minimum
Inventory deduction only happens on completed orders, not pending or cancelled ones.

Troubleshooting

Stock Not Deducting

Check:
  1. Does the menu item have a recipe?
  2. Is the order status completed?
  3. Has the order already been deducted? (Check inventory_deducted flag)

Negative Stock

Stock can go negative if recipe usage exceeds available stock. This indicates:
  • Insufficient inventory was purchased
  • Recipe quantities are incorrect
  • Manual adjustments needed
Resolution:
  1. Record a Purchase movement to bring stock positive
  2. Review recipe accuracy
  3. Adjust minimum stock thresholds

Discrepancies After Count

If physical count differs from system:
  1. Record an Adjustment movement
  2. Set quantity to difference (+ or -)
  3. Add notes explaining discrepancy
  4. Investigate cause (waste, theft, incorrect recipes)

Build docs developers (and LLMs) love