BR 1.4 → Admin Franchise (BFF + Web)

Репозиторий: erp-admin (монорепо: bff/ + web/ + shared/) Фронт-спеки: Список, Карточка

BFF (bff/)

shared/ — типы

  • Типы: Employee, EmployeeCreateRequest, EmployeeUpdateRequest
  • Типы: EmployeeRole, EmployeeStatus, EmployeeListParams
  • Экспорт из shared/src/index.ts

Прокси-эндпоинты

  • GET /api/v1/admin/employees → User Service GET /api/v1/employees
  • GET /api/v1/admin/employees/{id} → User Service GET /api/v1/employees/{id}
  • POST /api/v1/admin/employees → User Service POST /api/v1/employees
  • PATCH /api/v1/admin/employees/{id} → User Service PATCH /api/v1/employees/{id}
  • POST /api/v1/admin/employees/{id}/deactivate → User Service
  • POST /api/v1/admin/employees/{id}/reactivate → User Service

Web (web/)

Список сотрудников

  • Страница /employees — таблица с колонками (ФИО, Email, Телефон, Роль, ТТ, Статус, Курьер, Действия)
  • Фильтры (роль, статус) + поиск (debounce 300ms)
  • Фильтр по торговой точке (store_id) — dropdown с ТТ, сброс на page=1 при смене
  • Сортировка по ФИО
  • Пагинация (20 на страницу)
  • Деактивированные — серый цвет, opacity 0.6
  • Меню действий строки (редактировать, деактивировать/реактивировать)
  • Модалка: деактивация (подтверждение с именем + предупреждение о сессиях)
  • Модалка: реактивация (подтверждение с именем)
  • Пустое состояние (“Сотрудники пока не добавлены”)
  • Ролевой доступ: Franchise все, Franchisee свои, Manager read-only

Карточка сотрудника

  • Страница просмотра /employees/{id} — все поля, список ТТ, PIN статус
  • Форма создания /employees/new — выбор роли, привязка к ТТ, валидация
  • Форма редактирования /employees/{id}/edit — роль disabled, пароль optional
  • Логика select роли: Franchise видит 4 роли, Franchisee только manager/cashier
  • Логика select ТТ: зависит от выбранной роли (скрыто/одна/несколько)
  • Обработка ошибок: EMAIL_DUPLICATE, PIN_DUPLICATE, ROLE_ESCALATION
  • Предупреждение при несохранённых изменениях