ТакПростоТакПросто.ai
ЦеныДля бизнесаОбразованиеДля инвесторов
ВойтиНачать

Продукт

ЦеныДля бизнесаДля инвесторов

Ресурсы

Связаться с намиПоддержкаОбразованиеБлог

Правовая информация

Политика конфиденциальностиУсловия использованияБезопасностьПолитика допустимого использованияСообщить о нарушении
ТакПросто.ai

© 2026 ТакПросто.ai. Все права защищены.

Главная›Блог›Веб-приложение для дарк-кухни: приемка и сроки годности
12 янв. 2026 г.·6 мин

Веб-приложение для дарк-кухни: приемка и сроки годности

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

Веб-приложение для дарк-кухни: приемка и сроки годности

Зачем дарк-кухне учет партий и сроков годности

В дарк-кухне склад живет в темпе смены: привезли коробки, часть ушла в производство, что-то осталось в холодильнике, а потом внезапно выясняется, что «пахнет не так». Без учета партий и сроков годности проблемы обычно всплывают не на приемке, а когда уже поздно: заказ почти собран, ингредиент оказался просрочен, и нужно срочно переделывать, возвращать деньги или объясняться с гостем.

Ручные таблицы и переписка в чатах редко выдерживают реальность кухни. Таблица быстро превращается в «один файл на всех», где никто не уверен, кто и когда правил остатки. Чат удобен, пока мало поставок, но поиск «какая партия сыра пришла во вторник» занимает больше времени, чем сама готовка. Хуже всего, когда данные фиксируют по-разному: один пишет «молоко 10 л», другой - «молоко, 2 коробки». Через неделю это уже невозможно сверить.

Чтобы навести порядок, достаточно закрыть базовые процессы:

  • приемка: что приехало, какая партия, какой срок годности, сколько единиц;
  • хранение: где лежит и что нужно использовать в первую очередь;
  • списания: что ушло в производство, что испортили, что вернули поставщику;
  • алерты: что скоро истечет и что уже просрочено.

Дальше речь про простое веб-приложение для дарк-кухни: кладовщик быстро принимает поставку, повар так же быстро списывает в смене, а менеджер заранее видит риски по просрочке.

Сценарии и роли пользователей

Приложение помогает только тогда, когда заранее понятно, кто им пользуется и какие решения он принимает за минуту, а не за полчаса.

Обычно есть три роли:

  • кладовщик отвечает за приемку и порядок на складе;
  • повару важны скорость списаний и понятные остатки;
  • менеджер смены смотрит общую картину и разбирает спорные случаи: почему не хватает, что портится, где потери.

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

Самые быстрые решения на кухне почти всегда про сроки. Утром пришло молоко с разными датами, а на складе уже есть открытая партия. Повару нужно одним взглядом понять, что брать первым. Менеджеру - увидеть, сколько уйдет в списание, если не использовать сегодня.

Отчеты лучше держать простыми. На практике хватает четырех экранов: «просрочено и скоро истекает», «списания за день/неделю», «остатки по складу», «остатки по ингредиенту с партиями».

Модель данных: партии и срок годности как обязательные поля

Чтобы учет работал в реальной смене, модель данных должна быть простой и строгой. Главная идея: срок годности хранится не у ингредиента «вообще», а у конкретной партии. Один и тот же сыр может прийти сегодня и через неделю - и эти поставки портятся в разные даты.

Минимальный набор сущностей для веб-приложения для дарк-кухни:

  • ингредиент (что это);
  • поставка (акт приемки);
  • партия (конкретная поставка с датами);
  • складское движение (запись, которая меняет остаток).

Партия - центральная точка: к ней привязываются остатки, списания и алерты.

Обязательные поля партии лучше сделать неизменяемыми после создания (или менять только с правами):

  • номер партии (как в документах поставщика или внутренний);
  • дата производства (если есть);
  • срок годности (дата и, при необходимости, время);
  • единица учета (кг, л, шт).

Приемка создает поставку и партии (если они новые), а затем - движения, которые увеличивают остаток. В карточке приемки достаточно поставщика, даты и времени, количества и единиц. Цена не всегда нужна, но ее удобно держать опционально, если позже захотите считать себестоимость.

Остаток по партии лучше не сводить к одной цифре без истории. Практичнее хранить текущий остаток (для скорости) и историю движений (для разбора ошибок). Движение - это запись вида: дата-время, партия, плюс или минус, причина (приемка, списание, инвентаризация), пользователь.

Пример: пришли 10 кг курицы партией K-102 с годностью до 25.01. Списания в течение дня уменьшают именно эту партию. Следующая поставка курицы будет отдельной партией со своим сроком и остатком. Так алерты по просрочке не путают свежие и старые остатки.

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

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

Обязательные поля и логика

Форма должна быть короткой, но строгой. Минимальный набор, без которого приемку нельзя сохранить:

  • ингредиент (из справочника, с поиском);
  • партия (номер/код поставки);
  • срок годности (дата);
  • количество (в единицах хранения: кг, шт, л);
  • поставщик или документ (необязательно, но полезно для разборов).

Партия может создаваться автоматически при приемке (если такой еще нет). Если поставка приходит частями, полезно разрешить выбирать уже существующую партию и докидывать количество.

Подсказки, проверки и скорость

Проверки должны ловить ошибки в момент ввода: понятный формат даты, срок годности не «в прошлом», количество больше нуля. Если срок годности сегодня или завтра, покажите заметное предупреждение, но дайте сохранить: такие ситуации встречаются.

Чтобы уменьшить клики, добавьте быстрые шаблоны для частых поставок: ингредиент, типовая фасовка, единицы. Тогда сотрудник меняет только номер партии, дату и количество.

Сканирование и печать этикеток можно оставить опцией без сложных интеграций: ввод кода партии сканером как обычной клавиатурой и кнопка «распечатать этикетку» для локального принтера. Важно, чтобы партия и срок годности оказались на контейнере сразу - дальше списания идут быстрее и точнее.

Списания: как сделать их быстрыми и понятными

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

Причины лучше зафиксировать заранее и сделать обязательными. Обычно хватает четырех типов: на производство (в блюдо), порча (упало, разморозилось, потекло), возврат (поставщику или со смены), инвентаризация (выравнивание факта и учета). Тогда потом можно объяснить, почему расход «не бьется».

Чтобы не заставлять человека выбирать партию вручную, используйте правило FEFO: сначала списываем то, что раньше испортится. Пользователь вводит товар и количество, а система предлагает партии в правильном порядке и показывает подсказки: остаток в партии, дата приемки/производства, срок годности. Если одной партии не хватает, система добирает следующую и заранее предупреждает, что списание пойдет из двух партий.

Защита от типовых ошибок:

  • запрет отрицательных остатков (нельзя списать больше, чем есть);
  • защита от двойного списания (повторное нажатие, плохой интернет);
  • явное подтверждение, если списание затрагивает несколько партий;
  • блокировка изменения записи после закрытия смены (или только через корректировку).

И обязательно ведите журнал списаний: кто, когда и что списал, по какой причине, из каких партий. Если вы считаете себестоимость, можно хранить и суммы. Пример: во время сборки заказа соус оказался испорчен. Повар выбирает «порча», вводит 1 кг, система списывает из партии с ближайшим сроком и оставляет запись в журнале.

Алерты по просрочке: логика и пороги уведомлений

FEFO без ручного выбора
Соберите списания по FEFO с защитой от отрицательных остатков.
Запустить

Алерты работают только тогда, когда по каждой партии есть точные данные: дата приемки (или производства), срок годности и текущий остаток. Дальше все сводится к простым правилам, одинаково понятным кладовщику и повару.

Что считать «просрочено» и «скоро истечет»

Просрочка - партия, у которой срок годности меньше текущей даты. «Скоро истечет» - партия, у которой до конца осталось N дней. N лучше сделать настраиваемым (например, 1, 3 или 7 дней) и, при желании, разным для групп: молочке обычно нужно более раннее предупреждение, чем сухим продуктам.

Минимальный набор алертов:

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

Показывайте алерты в двух местах: на главном экране (кратко) и в ежедневном отчете (с партиями, остатками и сроками). Так просрочка не «прячется» на складе, которым пользуются нерегулярно.

Как избежать шума и что делать по алерту

Чтобы уведомления не раздражали, добавьте фильтры: склад, группа ингредиентов, поставщик, статус партии. Полезное правило: не повторять один и тот же алерт чаще раза в сутки, если по партии не было изменений.

Действия должны быть в один-два клика: «Списать» (с причиной), «Поставить в приоритет» (для истекающих) или «Проверить качество» (если нужна ручная отметка). Пример: утром система видит, что партия сливок истекает через 2 дня, и предлагает приоритет. Вечером, если остаток не уменьшился, это повторится в отчете, но без лишних всплывающих уведомлений.

Пошагово: как попросить AI собрать приемку, списания и алерты

Если вы делаете веб-приложение для дарк-кухни через чат с AI, результат зависит от того, насколько четко описан процесс. Думайте не про «модули», а про работу смены: что человек видит на экране и что должен успеть сделать за минуту.

1) Опишите экраны и поля

Начните с простых формулировок: «Экран приемки», «Экран списания», «Экран предупреждений». Сразу отметьте обязательные поля: партия и срок годности (без них нельзя сохранить). Укажите, какие поля подтягиваются автоматически (например, единица измерения ингредиента), а какие вводятся вручную.

2) Зафиксируйте данные и правила

Перед генерацией логики перечислите сущности и связи: ингредиент - партия - приемка - движения - списание. Затем задайте правила, которые нельзя нарушать: FEFO (расходуем то, что раньше испортится), запрет отрицательных остатков, обязательность партии и срока годности, и что делать, если срок не указан (обычно - не принимать).

Дальше просите собрать единый поток, а не разрозненные экраны: приемка создает партии и увеличивает остатки, списание уменьшает остатки по правильным партиям, алерты ежедневно проверяют «скоро истекает» и «просрочено», везде фиксируются причина и автор действия.

В конце прогоните 3-5 тестовых ситуаций и уточните пограничные случаи: частичное списание партии, приемка с одинаковым сроком, отмена приемки, нулевой остаток, просрочка в день смены. Это быстро выявляет, где система «додумала» не то.

Шаблон запроса к AI, чтобы он не додумывал лишнее

Исходники под вашим контролем
Заберите исходники проекта, когда понадобится перенос или доработка командой.
Экспортировать

Чтобы AI не фантазировал, дайте опору: что вы строите, какие экраны нужны, какие таблицы в базе, какие правила нельзя нарушать. Один хороший запрос экономит часы правок.

Самый простой способ - писать промпт как мини-техзадание: цель, роли, экраны, данные, правила, затем короткие тест-кейсы. Формулировки вида «Обязательные поля», «Ошибка если», «Список статусов» превращают желания в требования.

Вот шаблон, который удобно вставлять в TakProsto (или любой чат с AI) и заполнять под себя:

Цель: собрать модуль склада для дарк-кухни: приемка ингредиентов, списания, алерты по просрочке.

Роли:
- Кладовщик: приемка, печать/просмотр партий
- Повар: списания
- Админ: настройки порогов алертов, справочники

Экраны:
1) Приемка поставки (быстрый режим и подробный режим)
2) Список партий + фильтры (по ингредиенту, сроку, статусу)
3) Списание (выбор партии, количество, причина)
4) Алерты (что просрочено/скоро истечет, подтверждение действий)

Таблицы:
- ingredients(id, name, unit)
- deliveries(id, supplier, delivered_at)
- batches(id, ingredient_id, delivery_id, qty, unit, produced_at, expires_at, status)
- writeoffs(id, batch_id, qty, reason, created_at, user_id)

Правила:
- Обязательные поля: ingredient_id, qty, unit, expires_at, status.
- Ошибка если: expires_at < delivered_at; qty <= 0; списание больше остатка партии.
- Список статусов партии: active, near_expiry, expired, written_off.

Примеры данных:
- 5 ингредиентов: курица, сыр, молоко, салат, соус
- 2 поставки: Поставщик А (сегодня), Поставщик Б (вчера)
- 3 партии с разными сроками: истекает завтра, через 7 дней, уже просрочена

Тест-кейсы:
- Приемка партии без expires_at должна давать ошибку
- Просроченная партия не доступна для списания
- Алерт срабатывает за N дней до expires_at

Вывод:
- Сгенерируй структуру UI и API, и опиши проверки на фронте и бэке.
- Дай 2 варианта интерфейса: быстрый и подробный.

Когда нужно поправить результат, не пишите «сделай лучше». Укажите конкретно, что неверно (например, разрешил списывать просрочку), где именно (экран/метод), и какой итог вы ждете (новое правило, новый статус, другое поле). Так правки будут точечными.

Типичные ошибки при проектировании учета сроков годности

Самая частая проблема - когда «партия» и «срок годности» не обязательные поля. В момент приемки кажется, что так быстрее, но через неделю остатки уже не сходятся: часть товара в системе «общая», часть «по партиям», и вы не понимаете, что нужно списать первым.

Вторая ошибка - хранить срок годности текстом в заметке: «годен до 12/02» или «срок 5 дней». Для человека это понятно, но для системы нет. Алерты и правила списания тогда не работают, потому что нет нормальной даты, с которой можно сравнить.

Еще часто делают списания «в один клик», но забывают про причину и автора. В итоге вы видите только минус на складе и не понимаете, это была порча, возврат, пересорт, готовка без техкарты или ошибка. Минимум, который спасает нервы: кто списал, когда, сколько и почему.

И наконец, отсутствие истории движений. Если нет журнала «приход - расход - корректировка», любой спор превращается в гадание: остаток есть, но откуда он взялся, неизвестно.

Быстрый чек-лист перед запуском на кухне

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

Прогоните сценарий на 2-3 тестовых поставках (мясо, молочка, соусы) и убедитесь, что:

  • приемка не сохраняется без партии и срока годности, даты вводятся в понятном формате;
  • по каждой партии виден текущий остаток в понятных единицах (кг, л, шт), и единицы не «прыгают»;
  • списание не дает указать количество больше остатка и не проходит без причины;
  • есть два списка: уже просроченные партии и партии, у которых срок подходит (например, 1-2 дня), и оба легко открыть с телефона;
  • за смену есть единый экран (или отчет) с приемками, списаниями и просрочкой.

Мини-сценарий для теста: приняли 10 кг курицы партией K-241, срок годности через 2 дня. Списали 3 кг на заготовки и 1 кг как брак. Остаток должен стать 6 кг, а на следующий день партия должна попасть в список «истекает».

Пример из смены: приемка, списание и алерт

Нормальная модель партий
Сгенерируйте таблицы партий и движений в PostgreSQL и базовые проверки.
Создать

Утро, 09:20. Курьер привозит молоко для соусов и напитков. В одной поставке две партии: A - 12 литров со сроком годности до 25 января, B - 18 литров до 27 января. Важно занести их отдельно, а не одной строкой.

Кладовщик открывает приемку, выбирает товар «Молоко 3,2%» и добавляет две позиции. В каждой обязательны: номер партии, срок годности, количество, единица измерения. Перед сохранением система проверяет базовые вещи: дата не «в прошлом», количество больше нуля, нет дубля партии внутри этой приемки. После сохранения остатки на складе показываются раздельно: A - 12 л, B - 18 л.

В течение смены повар списывает молоко в производство. Он видит общий остаток (30 л), а система автоматически выбирает партию с ближайшим сроком годности: сначала A. При необходимости сотрудник может переключить партию вручную (например, если упаковка повреждена), но по умолчанию работает принцип «сначала истекает - сначала используем».

Вечером, 18:00, срабатывает алерт: «Партия A истекает завтра». Старший смены открывает карточку партии и выбирает действие: поставить в приоритет, оформить списание по порче или отметить проверку качества.

В конце дня менеджер видит сводку: сколько списали и по каким причинам, какие партии подходят к сроку, что уже просрочено и какие действия подтверждены. Так смена превращается в понятный учет: приемка фиксирует партии, списания идут по срокам, алерты заранее подсказывают, где можно успеть спасти продукт.

Следующие шаги: собрать MVP и довести до стабильной работы

Начните с MVP, который проживет первую неделю на кухне. Важно, чтобы приемка, списания и алерты работали без сбоев и не требовали долгого обучения.

Минимальный состав MVP:

  • справочник ингредиентов и единицы измерения;
  • партии: номер/поставка, дата приемки, срок годности (обязательное поле);
  • приемка: создание партии, количество, комментарий;
  • списания: количество, причина;
  • алерты: скоро истекает и просрочено, с понятными порогами.

Дальше добавьте то, что защищает от ошибок и споров: роли и права доступа (кладовщик, повар, менеджер), журнал действий (кто принял партию, кто списал, кто менял критичные поля).

Если вы собираете такое веб-приложение через TakProsto, удобно начать с описания экранов и правил простыми фразами, а потом попросить собрать проект на React с бэкендом на Go и базой PostgreSQL. Когда MVP начнет жить, пригодятся снапшоты и откат для безопасных изменений, а при необходимости - экспорт исходников и перенос развертывания. Платформа TakProsto (takprosto.ai) как раз рассчитана на сборку приложений через чат, что хорошо подходит для быстрых внутренних инструментов кухни и склада.

FAQ

Зачем вообще учитывать партии и сроки годности в дарк-кухне?

Начните с простого: фиксируйте срок годности у каждой партии при приемке. Тогда в момент сборки заказа не придется гадать, что можно использовать, а что уже нельзя, и меньше шансов внезапно остановить смену из‑за просрочки.

Почему срок годности нужно хранить у партии, а не у ингредиента?

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

Какие поля обязательно должны быть на экране приемки?

Сделайте строгий минимум: ингредиент, номер партии, срок годности, количество и единица. Поставщика или документ можно хранить опционально для разборов, но без партии и срока приемка не должна сохраняться.

Какие проверки на приемке реально спасают от ошибок?

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

Как сделать списания быстрыми, чтобы повара не мучились с выбором партии?

Используйте правило FEFO по умолчанию: списывайте сначала то, что испортится раньше. Повар вводит ингредиент и количество, а система сама распределяет расход по партиям в правильном порядке и предупреждает, если расход затрагивает несколько партий.

Какие причины списаний лучше использовать и зачем они нужны?

Сделайте причины обязательными и короткими: производство, порча, возврат, инвентаризация. Это помогает объяснять расхождения без поиска виноватых и быстро видеть, где реальные потери, а где корректировки учета.

Как защититься от отрицательных остатков и двойных списаний?

Запретите отрицательные остатки и добавьте защиту от повторной отправки (двойной клик, плохой интернет). Если смена закрыта, запретите редактирование старых списаний и разрешайте только корректировку отдельной операцией, чтобы история не «плыла».

Какие алерты по срокам годности нужны в MVP и как не сделать их шумными?

По умолчанию достаточно двух статусов: «просрочено» и «скоро истечет» с порогом в N дней. Не повторяйте один и тот же алерт чаще раза в сутки, если партия не менялась, и показывайте алерты там, где их реально увидят в начале смены.

Что обязательно хранить в истории, чтобы потом можно было разобраться в спорных остатках?

Держите один журнал складских движений с датой-временем, пользователем, партией, знаком плюс/минус и причиной. Это позволяет быстро восстановить цепочку «пришло — списали — скорректировали» и разбирать спорные случаи без ручных пересчетов.

Как правильно попросить AI (например, в TakProsto) собрать приемку, списания и алерты, чтобы он не «фантазировал»?

Опишите роли, экраны, обязательные поля и правила, которые нельзя нарушать, а затем дайте 3–5 тестовых ситуаций из смены. Чем точнее вы зададите «ошибка если» и «по умолчанию делаем так», тем меньше AI будет додумывать, и тем быстрее вы получите рабочий поток приемки, списаний и алертов в TakProsto.

Содержание
Зачем дарк-кухне учет партий и сроков годностиСценарии и роли пользователейМодель данных: партии и срок годности как обязательные поляКак должна выглядеть приемка: поля, проверки, удобствоСписания: как сделать их быстрыми и понятнымиАлерты по просрочке: логика и пороги уведомленийПошагово: как попросить AI собрать приемку, списания и алертыШаблон запроса к AI, чтобы он не додумывал лишнееТипичные ошибки при проектировании учета сроков годностиБыстрый чек-лист перед запуском на кухнеПример из смены: приемка, списание и алертСледующие шаги: собрать MVP и довести до стабильной работыFAQ
Поделиться
ТакПросто.ai
Создайте свое приложение с ТакПросто сегодня!

Лучший способ понять возможности ТакПросто — попробовать самому.

Начать бесплатноЗаказать демо