BR 1.13: Стоп-листы
Зависит от:
Контекст
Стоп-лист — механизм временной блокировки товаров и категорий на конкретной торговой точке. Если на ТТ закончилась моцарелла — менеджер останавливает “Маргариту” и “Пепперони” через стоп-лист. Товар не удаляется из каталога, но не отображается клиентам и не может быть заказан на этой ТТ.
В YumaPos стоп-лист создаётся автоматически для каждой ТТ и управляется на месте. Адаптация для франшизной модели: франчайзи/менеджер управляют стоп-листами своих ТТ, франшиза видит всё для мониторинга.
Требования
1. Стоп-лист per-store
- У каждой ТТ — свой стоп-лист
- Стоп-лист = список остановленных товаров и категорий на конкретной ТТ
- Создаётся неявно (нет отдельной сущности “стоп-лист” — это набор записей для store_id)
2. Что можно остановить
Товар (product):
- Конкретный товар (dish или good) блокируется для продажи на данной ТТ
- Товар не отображается в клиентском меню на этой ТТ
- В админке товар отображается с пометкой “СТОП”
Категория (category):
- Все товары категории блокируются на данной ТТ
- Если категория остановлена → все товары в ней недоступны, даже если не остановлены индивидуально
- При снятии стопа с категории → товары снова доступны (если не остановлены индивидуально)
3. Управление стоп-листом
Остановка:
- Выбрать ТТ → выбрать товар/категорию → “Остановить”
- Опционально: указать причину (текст, необязательно)
- Изменения применяются мгновенно
Снятие стопа:
- Выбрать остановленный товар/категорию → “Снять стоп”
- Изменения применяются мгновенно
Срок действия:
- Бессрочный — товар остановлен до ручного снятия стопа
- Нет автоматического сброса при закрытии смены
4. Влияние на вычисляемое меню
Финальное меню ТТ =
Активные товары (status=active)
+ Прейскурант ТТ
− Стоп-лист ТТ (остановленные товары и категории)
− Проверка складских остатков (Phase 2)
= Что видит клиент
- Остановленный товар не отображается в клиентском меню
- Остановленный товар нельзя добавить в заказ (POS должен проверять)
- В админке остановленный товар виден, но с пометкой
Бизнес-правила
- Per-store изоляция — остановка на ТТ-1 не влияет на ТТ-2
- Категория > товар — если категория остановлена, все товары в ней недоступны (даже без индивидуальной остановки)
- Товар + категория — если товар остановлен индивидуально И его категория тоже, при снятии стопа с категории товар остаётся остановленным
- Неактивный товар — товар с
status=inactiveне виден в любом случае, стоп-лист на него не влияет (для деактивации есть статус) - Удалённый товар — soft-deleted товар не отображается в стоп-листе
- Мгновенное применение — стоп/снятие действует сразу, без задержки
Ролевой доступ
| Действие | Франшиза | Франчайзи | Менеджер ТТ | Кассир |
|---|---|---|---|---|
| Просмотр стоп-листа | Все ТТ | Свои ТТ | Своя ТТ | Своя ТТ (read-only в POS) |
| Остановить товар/категорию | Любая ТТ | Свои ТТ | Своя ТТ | Нет |
| Снять стоп | Любая ТТ | Свои ТТ | Своя ТТ | Нет |
Затронутые сервисы
| Сервис | Что меняется |
|---|---|
| Catalog Service | Новые таблицы product_stop_list, category_stop_list. Новые CRUD эндпоинты. Логика вычисляемого меню учитывает стоп-лист. |
| Admin BFF | Прокси для стоп-лист эндпоинтов |
| erp-admin (web) | UI управления стоп-листом — таб на странице ТТ или отдельный раздел |
Что НЕ входит
- Авто-стоп по остаткам склада — Phase 2 (зависит от Warehouse inventory)
- Управление стоп-листом с POS-кассы — Phase 2 (зависит от POS приложения)
- Стоп-лист для опций модификаторов — Phase 2 (если нужен)
- Стоп-лист по расписанию (доступность по времени) — Phase 2
- Отображение “Распродано” на клиентском сайте — Phase 2
Ссылки
- Каталог
- Ролевая модель
- YumaPos:
_reference/yumapos/stop-lists.md