Мониторинг смен

Real-time дашборд открытых и недавно закрытых смен по ТТ. Позволяет менеджеру увидеть какие кассиры сейчас на смене и предупредить о приближении 24-часового лимита ФН.

Файл

erp-admin/web/src/pages/shifts/ShiftMonitorPage.tsx

Роут

/shifts/monitor — видимость по permission time_tracking.read.

Доступ

РольДоступ
FranchiseВсе ТТ франшизы
FranchiseeСвои ТТ
ManagerСвоя ТТ
Cashier403

Layout

Две секции на странице:

1. Открытые смены

Таблица всех смен где clock_in IS NOT NULL AND clock_out IS NULL.

КолонкаСодержимое
КассирФИО сотрудника
ТТНазвание торговой точки
Открытаclock_in (HH:MM, DD.MM)
Продолжительностьhours:minutes с момента clock_in
ВыручкаСумма продаж за смену (из Order Service)
СтатусAlert-badge:

Alert-badge по продолжительности смены:

ЧасыСтатусЦвет
< 16hOK🟢 success
16-22hСкоро 24h🟡 warning
≥ 22hСрочно Z!🔴 red

2. Недавно закрытые

Таблица смен, закрытых за последние 24 часа. Колонки аналогичны, плюс:

  • Закрыта (clock_out)
  • Итог (выручка / наличные / карта / возвраты)
  • Ссылка на Отчёт по смене по shift_record_id

Поведение

  • Auto-refresh каждые 30 секунд.
  • При наведении на строку в «Открытые» — подсвечивается строка.
  • Клик по строке «Недавно закрытые» → переход на /shift-report/{id}.

Источник данных

  • User Service: GET /api/v1/shift-records?store_id=...&status=open|recent_closed
  • Order Service (для выручки): GET /internal/orders/shift-report?employee_id=...&store_id=...&from=...&to=... (параметры from/to = clock_in/clock_out соответствующей записи shift-records)

Нет фильтра по shift_record_id

Order Service shift-report не принимает shift_record_id напрямую — фронт/BFF формирует запрос из employee_id + clock_in/clock_out конкретной смены.

Фильтры

  • ТТ (мультивыбор)
  • Роль сотрудника (опционально)

Что НЕ реализовано

  • Кнопка «Принудительно закрыть смену» (управление с админки).
  • Push-нотификация при переходе смены в статус «Срочно Z!».
  • История изменений по смене (correction audit log).
  • Экспорт открытых смен в CSV.

Ссылки