Admin Franchise — X/Z отчёты смены

Контракты

Задачи

BFF

  • Proxy route: GET /api/v1/admin/shift-records/:id/report → User Service GET /api/v1/shift-records/:id/report
  • Передача JWT и franchise_id

Shared types

  • ShiftReport — полный тип ответа (shift + financials + top_items)
  • ShiftReportFinancials — финансовый блок
  • TopItem — { product_id, name, quantity, amount }

Web — API module

  • getShiftReport(id: string): Promise<ShiftReport> в API-модуле

Web — Страница: Отчёт по смене

  • Роут: /shift-records/:id/report
  • Компонент ShiftReportPage
  • Шапка: ФИО + роль + ТТ + дата + бейдж X/Z
  • Блок времени: clock_in, clock_out, перерыв, отработано
  • Карточки финансов: выручка, наличные, карта, QR (4 карточки)
  • Карточки заказов: всего, завершено, отменено, средний чек (4 карточки)
  • Таблица: топ товаров (name, quantity, amount)
  • Кнопка “Экспорт CSV” — клиентская генерация
  • Состояния: loading, error, empty, data

Web — Страница: Дашборд терминалов

  • Роут: /activity/terminals
  • Компонент TerminalsDashboardPage
  • Фильтры: ТТ (select), дата (date picker)
  • Summary cards: выручка, заказов, смен, лидер продаж
  • Таблица смен: сотрудник, ТТ, начало, конец, статус, выручка, заказов
  • Клик по строке → переход на /shift-records/:id/report
  • Lazy-загрузка отчётов для строк таблицы
  • Состояния: loading, error, empty, data

Навигация

  • Добавить пункт “Терминалы” в sidebar в раздел “Активность”
  • Роуты: /activity/terminals, /shift-records/:id/report
  • Скрыть для роли Cashier