Настройки KDS
Источники требований
BR 5.1 §6 (per-франшиза звуки), §10 «Принятые решения» (звуки настраиваются per-франшиза, цветовые пороги — per-станция).
Связанные спеки
- KDS — Кухонный экран — потребитель этих настроек
- Кухонные станции — пороги цвета хранятся там (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. Бизнес-правила
-
Auto-create settings: при первом обращении KDS-устройства любой франшизы —
kds_franchise_settingsсоздаётся со значениями default. -
Удаление устройства = force-logout + revoke: тап «Удалить» в админке →
revoked_at = NOW(), активная сессия закрыта, JWT отозван. Устройство при следующем запросе получает401 DEVICE_REVOKEDи переходит в режим «Регистрация». -
Изменение настроек на устройствах — применяется при следующем pull (логин / перезапуск приложения / тап «Применить» в Settings KDS-устройства). В P0 нет live-push. Это в BR 5.x.
-
Изменение
auto_logout_minutes— действует на новые сессии. Существующие сессии используют значение, которое было на момент логина. -
Уникальность 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-логин на устройстве