Заказы агрегаторов — секция на кассе

Где

Новая секция в кассовом приложении, доступная с главного экрана по иконке «🟡 Я.Еда» с бейджем-счётчиком новых заказов. Бейдж красный если есть хоть один 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.

Ссылки