Kitchen Queue — очередь кухни (KDS)
Отношение к BR 5.1
Этот экран — упрощённый kanban в админке (web). Полноценный KDS на Android-планшете — отдельный продукт, см. KDS Frontend Specs и BR 5.1. Они сосуществуют:
- Этот экран — для менеджера/владельца, чтобы видеть все заказы со всех станций франшизы (overview)
- KDS Android — для повара на кухне, фильтр по своим станциям, статусы per-item
Kanban-экран управления заказами на кухне. Реализует базовый KDS-функционал прямо в админке (без отдельного планшета или Android-приложения).
Файл
erp-admin/web/src/pages/kitchen/KitchenQueuePage.tsx
Роут
/kitchen — видимость в Sidebar определяется permission orders.read.
Доступ
| Роль | Доступ |
|---|---|
| Franchise | Все ТТ |
| Franchisee | Свои ТТ |
| Manager | Своя ТТ |
| Cashier | 403 |
Layout
Верх страницы:
- Селектор ТТ (
store_id) — обязательный, без выбора заказы не грузятся.
Три колонки kanban (слева направо):
| Колонка | Статус заказа | Фон |
|---|---|---|
| Новый | new | colors.redSoft (акцент — требует внимания) |
| Готовится | accepted | colors.bgSoft |
| Готов | ready | colors.bgSoft |
Карточка заказа
Для каждого заказа в колонке:
- Номер заказа (
#001-234) - Тип: 🍽 в зале / 🛵 доставка / 🥡 навынос (иконка в углу карточки)
- Список позиций с количеством
- ETA (время готовности) — рассчитывается из
assembly_time_seconds × quantityпо всем позициям, минус время сkitchen_started_at - Цветовая индикация ETA:
- 🟢 зелёный —
remaining ≥ 180s - 🟡 жёлтый —
0 ≤ remaining < 180s - 🔴 красный —
remaining < 0(просрочен) —серый — если ETA не может быть посчитан (нетassembly_time_secondsили не начат)
- 🟢 зелёный —
Поведение
- Polling каждые 10 секунд — обновление списка заказов.
- Таймер в UI тикает раз в секунду (
setTick) для реактивного пересчёта ETA без сетевого запроса. - При смене ТТ — список перезагружается.
- Клик по карточке — открывает
OrderDetailPage(в отдельной вкладке / модалке — зависит от роутинга).
Источник данных
Endpoint Admin-BFF: GET /api/v1/kitchen-queue?store_id=... (проксирует Order Service).
Объект заказа (kitchen_api.KitchenOrder):
{
id, order_number, order_type, status, kitchen_started_at,
items: [{ product_name, quantity, assembly_time_seconds, modifiers }]
}
Что НЕ реализовано
- Смена статуса прямо из kanban (drag&drop) — сейчас возможна только через детальный экран.
- Звуковые/визуальные нотификации о новых заказах.
- Группировка по цехам (горячий/холодный/бар) — цеха не реализованы в Catalog.
- Фильтр по типу заказа (🍽 / 🛵 / 🥡).
- Печать этикеток на позиции.
Ссылки
- Order Data Model — поля
kitchen_started_at,order_items.assembly_time_seconds - Заказы — детальная карточка заказа