Перейти к содержимому

3. Техкарты и себестоимость

Что такое техкарта

Техкарта — это рецепт блюда или заготовки. Она отвечает на три вопроса:

  1. Из чего готовится блюдо (список ингредиентов)
  2. Сколько нужно каждого ингредиента (масса брутто)
  3. Сколько стоит приготовить одну порцию (себестоимость)
┌─────────────────────────────────────────────────────┐
│ ТЕХКАРТА: Стейк Рибай (версия 3) │
├─────────────────────────────────────────────────────┤
│ Выход партии: 1 порция (350 г) │
│ Время приготовления: 20 минут │
│ Технология: обжарка на гриле при 250°C │
├─────────────────────────────────────────────────────┤
│ Ингредиенты: │
│ ┌────────────────┬────────┬──────────┬───────────┐ │
│ │ Название │ Брутто │ Потери │ Единица │ │
│ ├────────────────┼────────┼──────────┼───────────┤ │
│ │ Говядина рибай │ 450 г │ 5% + 15% │ г │ │
│ │ Соль морская │ 5 г │ 0% + 0% │ г │ │
│ │ Перец чёрный │ 2 г │ 0% + 0% │ г │ │
│ │ Масло оливков. │ 20 мл │ 0% + 10% │ мл │ │
│ └────────────────┴────────┴──────────┴───────────┘ │
│ │
│ Себестоимость порции: 420.00 руб │
└─────────────────────────────────────────────────────┘

Потери при обработке

У каждого ингредиента есть два вида потерь — это процент сырья, который теряется в процессе приготовления.

Холодная обработка (cold loss)

Потери до тепловой обработки: очистка, разделка, обвалка, нарезка.

Примеры:
• Картофель: 250 г → очистка → 200 г = 20% потерь
• Говядина с костью: 1 кг → обвалка → 850 г = 15% потерь
• Лук репчатый: 100 г → очистка → 85 г = 15% потерь
• Филе лосося: без потерь = 0%

Горячая обработка (hot loss)

Потери при тепловой обработке: варка, жарка, запекание (испарение, усушка, ужарка).

Примеры:
• Мясо при жарке: 850 г → 720 г = 15% потерь
• Овощи при варке: 200 г → 180 г = 10% потерь
• Масло при жарке: 20 мл → 18 мл = 10% потерь
• Соль/перец: без потерь = 0%

Как потери влияют на расход

БРУТТО ПОСЛЕ ХОЛОДНОЙ ПОСЛЕ ГОРЯЧЕЙ НЕТТО
(что купили) ОБРАБОТКИ ОБРАБОТКИ (что в тарелке)
450 г говядины ──► −5% (очистка) ──► −15% (жарка) ──► 363 г готового мяса
= 427.5 г = 363.4 г

Формула нетто-выхода:

Полезный выход = (1 − холодные%/100) × (1 − горячие%/100)
= (1 − 0.05) × (1 − 0.15)
= 0.95 × 0.85
= 0.8075 → 80.75% от брутто

Это означает: из 450 г купленной говядины в тарелку попадёт ~363 г. А чтобы получить 1 кг готового мяса, нужно закупить: 1 / 0.8075 = 1.24 кг.


Расчёт себестоимости

Шаг за шагом

Дано: Техкарта «Стейк Рибай», выход 1 порция.

┌───┬──────────────────┬────────┬────────────┬──────────┬──────────────┐
│ # │ Ингредиент │ Брутто │ Цена за кг │ Потери │ Стоимость │
├───┼──────────────────┼────────┼────────────┼──────────┼──────────────┤
│ 1 │ Говядина рибай │ 450 г │ 800 руб/кг │ 5% + 15%│ ? │
│ 2 │ Соль морская │ 5 г │ 60 руб/кг │ 0% + 0% │ ? │
│ 3 │ Перец чёрный │ 2 г │ 2000 руб/кг│ 0% + 0% │ ? │
│ 4 │ Масло оливковое │ 20 мл │ 900 руб/л │ 0% + 10%│ ? │
└───┴──────────────────┴────────┴────────────┴──────────┴──────────────┘

Формула для каждого ингредиента:

стоимость = цена_закупки × брутто / полезный_выход / коэф_конвертации

Расчёт по строкам

1. Говядина рибай:

полезный_выход = (1 − 0.05) × (1 − 0.15) = 0.8075
стоимость = 800 × 0.450 / 0.8075 = 360 / 0.8075 = 445.82 руб

2. Соль морская:

полезный_выход = (1 − 0) × (1 − 0) = 1.0
стоимость = 60 × 0.005 / 1.0 = 0.30 руб

3. Перец чёрный:

полезный_выход = 1.0
стоимость = 2000 × 0.002 / 1.0 = 4.00 руб

4. Масло оливковое:

полезный_выход = (1 − 0) × (1 − 0.10) = 0.90
коэф_конвертации = 0.001 (мл → л)
стоимость = 900 × 0.020 / 0.90 / (1/0.001)
Упрощённо: 20 мл = 0.02 л → 900 × 0.02 / 0.9 = 20.00 руб

Итог

┌──────────────────┬──────────────┐
│ Ингредиент │ Стоимость │
├──────────────────┼──────────────┤
│ Говядина рибай │ 445.82 руб │
│ Соль морская │ 0.30 руб │
│ Перец чёрный │ 4.00 руб │
│ Масло оливковое │ 20.00 руб │
├──────────────────┼──────────────┤
│ ИТОГО партия │ 470.12 руб │
│ Выход: 1 порция │ │
│ СЕБЕСТОИМОСТЬ │ 470.12 руб │ ← сохраняется в Nomenclature.costPrice
└──────────────────┴──────────────┘

Если бы выход партии был 2 порции → себестоимость = 470.12 / 2 = 235.06 руб/порция.


Каскадный пересчёт

Полуфабрикат может быть ингредиентом другого блюда. При изменении техкарты полуфабриката — автоматически пересчитываются все блюда, где он используется.

УРОВЕНЬ 1: Заготовки
┌───────────────────┐ ┌───────────────────┐
│ Томатный соус │ │ Тесто для пиццы │
│ costPrice: 80 ₽/кг│ │ costPrice: 45 ₽/кг│
└────────┬──────────┘ └────────┬──────────┘
│ │
УРОВЕНЬ 2: Блюда (используют заготовки как ингредиенты)
│ ┌───────────────┤
▼ ▼ ▼
┌────────────────┐ ┌──────────────┐ ┌──────────────┐
│Пицца Маргарита │ │Паста Болоньез│ │ Лазанья │
│100г соуса │ │150г соуса │ │200г соуса │
│200г теста │ │ │ │300г теста │
│costPrice: 180₽ │ │costPrice: 95₽│ │costPrice:240₽│
└────────────────┘ └──────────────┘ └──────────────┘

Что произойдёт, если подорожали помидоры:

1. Закупочная цена помидоров: 100 → 150 руб/кг
2. Томатный соус (техкарта пересчитана):
costPrice: 80 → 110 руб/кг (+30 руб)
3. Автоматический каскадный пересчёт:
• Пицца Маргарита: 180 → 183 руб/порция (+3 руб, 100г соуса)
• Паста Болоньезе: 95 → 99.50 руб/порция (+4.50 руб, 150г соуса)
• Лазанья: 240 → 246 руб/порция (+6 руб, 200г соуса)

Защита от циклов

Система не позволит создать циклическую зависимость:

❌ Запрещено:
Соус → содержит Пасту → содержит Соус → ...
(бесконечный цикл)
✅ Допустимо:
Соус → содержит Помидоры, Масло
Паста → содержит Соус, Спагетти
Лазанья → содержит Соус, Паста, Сыр
(дерево, а не кольцо)

Версионирование техкарт

Техкарта не перезаписывается — сохраняется история всех рецептур.

Время ──────────────────────────────────────────────►
Версия 1 ████████████████─┐
«Старый рецепт» │ шеф-повар создал новую
costPrice: 380 руб │
Версия 2 ████████████████─┐
«Добавили соус» │ ещё раз обновили
costPrice: 420 руб │
Версия 3 ████████████████ ◄── текущая
«Увеличили порцию»
costPrice: 470 руб

Правила

ДействиеЧто происходит
Создание новой версииСтарая версия деактивируется, новая становится текущей
РедактированиеМеняется текущая версия (новая не создаётся)
Удаление текущейАвтоматически восстанавливается предыдущая версия
Удаление последнейСебестоимость номенклатуры обнуляется

Зачем хранить старые версии

  • Отчёты: себестоимость в прошлом месяце считалась по версии 2
  • Аудит: можно увидеть, кто и когда менял рецептуру
  • Откат: если новый рецепт не подошёл — удалил текущую версию, вернулась предыдущая

Настройки по подразделениям

Для каждого подразделения можно настроить, как списывать блюдо:

«Списывать как блюдо» (writeOffAsDish)

ВЫКЛЮЧЕНО (по умолчанию):
Продали «Пицца» → списали: 200 г теста, 100 г соуса, 150 г сыра, 50 г ветчины
(разворот на ингредиенты по техкарте)
ВКЛЮЧЕНО:
Продали «Пицца» → списали: 1 шт «Пицца»
(списывается как готовый товар)

Когда включать: если блюдо приезжает в точку уже готовым (например, кейтеринг или централизованная кухня). Ингредиенты уже были списаны на производстве.


Полный цикл: от техкарты до списания

ТЕХНОЛОГ СИСТЕМА СКЛАД
│ │ │
│ 1. Создаёт техкарту │ │
│─────────────────────────► │
│ │ │
│ 2. Считает │
│ себестоимость │
│ (с потерями) │
│ │ │
│ 3. Сохраняет в │
│ Nomenclature.costPrice │
│ │ │
│ 4. Каскадный │
│ пересчёт (если │
│ заготовка) │
│ │ │
│ 5. Outbox → Kafka │
│ (отправка на кассу) │
│ │ │
│ │ ...время проходит... │
│ │ │
│ 6. Клиент заказал │
│ блюдо на POS │
│ │ │
│ 7. Акт реализации │
│ │─────────────────────────►
│ │ 8. Списание со склада │
│ │ (FIFO или средневзвеш.)
│ │ │
│ 9. Отчёт: маржа = │
│ цена − себестоимость │