Заказы агрегаторов — секция на кассе
Где
Новая секция в кассовом приложении, доступная с главного экрана по иконке «🟡 Я.Еда» с бейджем-счётчиком новых заказов. Бейдж красный если есть хоть один NEW заказ без подтверждения > 2 минут — визуальный алерт.
Иконка видна на POS, если у ТТ этого терминала есть хотя бы одно активное подключение к агрегатору.
Главный экран секции
Список карточек заказов, отсортированных по возрасту (самые срочные сверху).
Карточка заказа NEW — требует действия
┌───────────────────────────────────────────────────────────┐
│ 🟡 Яндекс.Еда №ye-2026-04-17-000123 │
│ [НОВЫЙ] ожидает 0:42 │
│ │
│ Пепперони 30см × 1 750 ₽ │
│ + Сырный борт +120 ₽ │
│ Кола 0.5 × 2 380 ₽ │
│ ───────────── │
│ Итого: 1250 ₽ (оплачено) │
│ │
│ Курьер заберёт в 13:10 (через 23 мин) │
│ Комментарий: «Без лука» │
│ │
│ [ Принять ] [ Отклонить ] │
└───────────────────────────────────────────────────────────┘
Срабатывает таймер «ожидает N:SS» — растёт красным после 3 минут (SLA Яндекса).
Карточка заказа IN_PROGRESS
┌───────────────────────────────────────────────────────────┐
│ 🟡 Яндекс.Еда №ye-2026-04-17-000123 │
│ [ГОТОВИТСЯ] принят 14:46 │
│ ... позиции как выше ... │
│ │
│ [ Готов к выдаче ] │
└───────────────────────────────────────────────────────────┘
Карточка READY
Аналогично, но кнопка — [ Передать курьеру ]. Если в заказе есть маркированные позиции — на кнопке бейдж «Требуется сканирование (2)».
Карточка HANDED_OVER / CANCELLED
Свёрнута, с галочкой / крестиком. Кликом можно раскрыть детали. Через час уезжает в «Историю».
Flow кнопок
«Принять»
- Optimistic UI: статус меняется сразу на
IN_PROGRESS. - Вызов
PATCH /api/v1/pos/orders/{id}/status { status: IN_PROGRESS }. - Order Service эмитит Kafka → Aggregator Service push в Яндекс.
- Если push не прошёл — в карточке появляется иконка ⚠ «Яндекс не подтвердил», при клике — «Повторить» (force re-push).
«Отклонить»
Модалка «Почему отказываете?»:
- Товар закончился
- Слишком много заказов
- Техническая проблема
- Скоро закрываемся
- (свой вариант — не разрешён, только из списка)
После подтверждения — CANCELLED с причиной → push в Яндекс.
«Готов к выдаче»
- Одним касанием меняет статус →
READY. - Push.
«Передать курьеру»
Если нет маркированных позиций:
- Одно нажатие →
HANDED_OVER.
Если есть маркированные:
- Открывается экран сканирования DataMatrix.
- Показывается список позиций требующих коды.
- Каждый код проверяется через PayKeeper labelcheck (или облачный ТС ПИоТ).
- После успешного сбора всех кодов — кнопка «Подтвердить передачу».
- Коды сохраняются в Order Service.
Нотификации
- Новый заказ → звук (настраиваемый громкостью в ServiceMenu → Настройки) + вибрация планшета + автоматическое открытие секции если терминал в idle.
- Просроченный заказ (
NEW> 3 мин) → периодический повторный звук каждые 60 сек пока не принят/отклонён. - Отмена гостем → мягкий звук + тост в верхней части экрана.
Поведение на POS
- PayKeeper не вызывается для этих заказов — оплата уже прошла на стороне Яндекса.
- Заказ не попадает в обычный журнал транзакций (он там будет, но с отдельным бейджем
YANDEX_EDA). - При закрытии Z-отчёта агрегаторные заказы не влияют на итоги наличности и не требуют отдельной фискализации.
Permissions
| Действие | Permission |
|---|---|
| Видеть секцию | pos.access + есть активное подключение к агрегатору на ТТ |
| Принять / Готов / Передать | pos.orders.create + pos.orders.edit |
| Отклонить | pos.order.cancel |
| Сканирование марок | pos.orders.edit |
Offline behaviour
- Если интернета нет — последние входящие заказы из последнего успешного pull’а остаются в UI.
- Статусы, выбранные кассиром в offline, ставятся в очередь и пушатся после восстановления связи.
- Яндекс на своей стороне — если не получает status update вовремя — присылает напоминание через тот же pull или отменяет по SLA.