Настройки KDS

Источники требований

BR 5.1 §6 (per-франшиза звуки), §10 «Принятые решения» (звуки настраиваются per-франшиза, цветовые пороги — per-станция).

Связанные спеки

Раздел «Настройки KDS» в админке. Владелец франшизы и менеджер настраивают общие правила работы KDS-приложений в сети (звуки, интервалы, auto-логаут) и видят список зарегистрированных KDS-устройств с возможностью force-logout.


§1. Сущность KDS Franchise Settings

Одна запись на франшизу. Хранится в Catalog Service (рядом с kitchen_stations) — окончательное место — в Шаге 2 контрактов.

ПолеОбязательностьОписание
franchise_idОбязательноPK, FK → franchises
new_order_soundОбязательноИмя встроенной мелодии (bell / chime / buzzer / marimba / digital). Default: bell
new_order_repeat_secondsОбязательноИнтервал повтора звука пока заказ не открыт. Default: 30. Диапазон 5–120
overdue_soundОбязательноЗвук просрочки. Default: alarm
sound_volumeОбязательно0–100. Default: 80
auto_logout_minutesОбязательноDefault: 30. Диапазон 5–240
created_at, updated_atАвто

При первом обращении KDS-устройства запись auto-create со значениями default.


§2. Сущность KDS Device (отображение в админке)

В Catalog Service / User Service есть таблица kds_devices (детали — в Шаге 2). В админке отображается списком:

КолонкаОписание
Имя устройстваЗадаётся в админке (например, «Планшет горячего цеха»). По умолчанию = «KDS-{первые 6 hex device_id}»
ТТПривязанная торговая точка
Последний пользовательКто последний логинился (для аудита)
Версия APKУстановленная версия — для контроля выкаток
Последняя активностьHeartbeat: «5 мин назад» / «3 часа назад» / «давно»
СтатусOnline / offline (по last_seen_at: <2 мин = online)

Действия

  • Переименовать — задать name
  • Удалить — soft-delete: revoked_at ставится, активные сессии force-logout, JWT revoke. После «Удалить» — устройство при следующей попытке работы покажет «Регистрация требуется» и потребует ре-регистрации
  • Открепить от ТТ — то же что удалить (после ре-регистрации можно привязать к другой ТТ)

§3. UI настройки звуков (в админке)

Вкладка «Звуки и поведение»:

  • Звук нового заказа — дропдаун со встроенными мелодиями + кнопка «Прослушать»
  • Интервал повтора звука — слайдер 5–120 сек
  • Звук просрочки — дропдаун + «Прослушать»
  • Громкость — слайдер 0–100%
  • Авто-логаут (минут) — слайдер 5–240
  • Кнопка «Сохранить»PATCH /api/v1/admin/kds/settings

Превью звуков

Браузер админки проигрывает встроенные mp3-файлы (те же что лежат в APK). Файлы хранятся в erp-admin/web/public/sounds/.


§4. UI списка устройств (в админке)

Вкладка «Зарегистрированные устройства»:

  • Таблица с колонками выше
  • Фильтр: ТТ, online-статус, версия APK
  • Действия per-row: «Переименовать», «Удалить»
  • Sort по «Последняя активность»

§5. Бизнес-правила

  1. Auto-create settings: при первом обращении KDS-устройства любой франшизы — kds_franchise_settings создаётся со значениями default.

  2. Удаление устройства = force-logout + revoke: тап «Удалить» в админке → revoked_at = NOW(), активная сессия закрыта, JWT отозван. Устройство при следующем запросе получает 401 DEVICE_REVOKED и переходит в режим «Регистрация».

  3. Изменение настроек на устройствах — применяется при следующем pull (логин / перезапуск приложения / тап «Применить» в Settings KDS-устройства). В P0 нет live-push. Это в BR 5.x.

  4. Изменение auto_logout_minutes — действует на новые сессии. Существующие сессии используют значение, которое было на момент логина.

  5. Уникальность settings: одна запись на franchise_id (UNIQUE).


§6. Ролевая матрица

ДействиеВладелец франшизыВладелец партнёраМенеджерПоварКассир
Просмотр настроек
Изменение настроек✅ (в рамках своих ТТ — настройки общие на франшизу, поэтому фактически только Владелец Франшизы)
Просмотр списка KDS-устройств✅ (свои ТТ)
Переименовать KDS-устройство✅ (свои)
Удалить KDS-устройство (force-logout)✅ (свои)

Permissions: kds.settings.edit (см. Роли).

Настройки общие на франшизу

kds_franchise_settings — одна запись на франшизу. Если владелец партнёра захочет свои звуки — это отложенный кейс (BR 5.x), сейчас все ТТ франшизы используют общий набор.


§7. Что НЕ входит в P0

  • Кастомные звуковые файлы (загрузка свой mp3) — только выбор из встроенных. Реализуется в BR 5.7
  • Live-применение настроек через WebSocket — в P0 только pull при перезапуске / явном «Применить»
  • Per-store настройки — только per-франшиза. Если ТТ хочет свой набор — отдельная BR в будущем
  • История изменений настроек (audit log) — отложено, хватает updated_at

§8. Связи с другими модулями

  • Кухонный экран — потребитель настроек, читает через GET /api/v1/pos/kds/settings
  • Кухонные станции — содержат per-станция цветовые пороги (yellow_threshold_minutes, red_threshold_minutes); отдельная сущность от franchise-settings
  • Ролиkds.access, kds.settings.edit
  • Сотрудники — PIN-логин на устройстве

§9. Ссылки