Устройства

Единый раздел для всех зарегистрированных в франшизе устройств: POS-кассы (Windows desktop) и KDS-планшеты (Android). Структура и поведение зеркальные — KDS-устройства появились первыми в BR 5.1, POS-устройства добавлены позже как часть POS Desktop onboarding.

Кейс — зачем нужно

Без онбординга .exe инсталлер POS Desktop работает только когда bffUrl и storeId зашиты в сборку (через VITE_* env). Это значит:

  • На каждую ТТ собираем отдельный .exe, либо разработчик идёт на каждую кассу с настройками.
  • Нет учёта установленных касс в базе → админ не видит сколько касс в франшизе, не может удалённо их отозвать или переименовать.
  • При смене ТТ или замене ПК — пересборка инсталлера или ручной перенастрой.

С онбордингом — один универсальный .exe, при первом запуске пользователь проходит wizard, касса попадает в БД. Тот же паттерн для KDS уже работает.

Сущности

POS-устройство (Windows-касса)

ПолеТипNULLОписание
iduuidPK, server-side.
device_iduuidГенерится на устройстве при первом запуске, persisted в localStorage. Уникален в рамках франшизы среди не-revoked.
franchise_iduuidFK на текущую франшизу (через JWT при регистрации).
store_iduuidТТ к которой привязана касса (выбирается при регистрации из доступных юзеру).
namevarchar(100)nullableПонятное имя. По умолчанию POS-{first 6 hex of device_id}.
last_user_iduuidnullableПоследний логинившийся кассир.
current_user_iduuidnullableАктивная сессия. Снимается на logout.
app_versionvarchar(20)nullableВерсия инсталлера. Обновляется через X-App-Version header.
last_seen_attimestampnullableHeartbeat при каждом запросе через pos-bff.
revoked_attimestampnullableSoft-delete. После revoke касса отдаёт 401 DEVICE_REVOKED на следующем запросе.

KDS-устройство (Android-планшет)

См. BR 5.1 и User Service · Data Model. Структура идентична POS-устройству.

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

  1. Уникальность. (franchise_id, device_id) уникален среди не-revoked. Двойная регистрация одного device_id (на ту же машину) либо переиспользует запись, либо отдаёт 409 DEVICE_ALREADY_REGISTERED.
  2. Soft-delete. Удаление через админку = revoked_at = now(). Запись остаётся для аудита (последний пользователь, app_version).
  3. Force-logout. Pos-bff на каждом запросе делает heartbeat в User Service. Если устройство revoke’нуто — pos-bff возвращает 401 DEVICE_REVOKED. Клиент чистит локальную регистрацию и показывает RegistrationScreen.
  4. Online/offline. Устройство считается online если last_seen_at < 2 минут назад.

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

Действиеpos.settings.edit
Видеть пункт «Устройства» в сайдбаре
Список POS- и KDS-устройств
Регистрация POS (с устройства, через admin login)
Регистрация KDS (с устройства, через admin login)
Переименование любого устройства
Отзыв (revoke) устройства

Один permission на оба типа

pos.settings.edit расширен по решению с пользователем (2026-04-30) — теперь покрывает не только настройки кассы, но и управление POS+KDS-устройствами. То же самое в KDS: kds.settings.edit отвечает за настройки KDS и за устройства KDS (но дублируется через эту страницу — оба permission’а имеют доступ к табу KDS).

Связи