POS Desktop Onboarding — Decomposition
Реализован 2026-04-30. Зеркало паттерна KDS BR 5.1 для Windows-касс. Один универсальный .exe инсталлер, регистрация устройства при первом запуске.
Решения с пользователем
- Permission — расширили смысл существующего
pos.settings.edit(теперь покрывает не только настройки кассы, но и управление устройствами). - Админ-UI — единая страница
/devicesс двумя табами (POS + KDS). Существующий KDS-таб не выпиливался — оставлен вНастройки KDSдля звуков, на новой странице переиспользуется.
Этапы и статус
| # | Слой | Репо | PR | Деплой |
|---|---|---|---|---|
| 1 | User Service: pos_desktop_devices + entity/service/controllers | erp-user-service | #4 | ✅ test VPS |
| 2 | admin-bff: /api/v1/admin/pos/devices/* proxy | erp-admin | #7 | ✅ test VPS |
| 3 | pos-bff: heartbeat + DEVICE_REVOKED handling | erp-pos | #2 | ✅ test VPS |
| 4 | POS Desktop: storage + RegistrationScreen + bootstrap | erp-pos-desktop | #1 | ✅ инсталлер пересобран |
| 5 | admin web: страница «Устройства» с двумя табами | erp-admin | #8 | ✅ test VPS |
| 6 | Vault docs: спеки + API + Data Model | obsidian_erp | (этот коммит) | — |
Ссылки
- Бизнес-спека: Устройства
- Frontend: Админка · Устройства
- Frontend: POS Desktop wizard
- User Service · API (секции
/admin/pos/devices/*+/internal/pos-devices/*) - User Service · Data Model (таблица
pos_desktop_devices)
Verification
End-to-end (выполнить вручную):
- На чистой Windows ставим свежий
ERP POS_0.1.1_x64-setup.exe(из/c/Users/A211/Desktop/erp-pos-desktop-installers/). - Запуск → видим RegistrationScreen.
- Step 0: вводим
https://erp-test.nirbi.ru/pos→pingHealth→ переход на Step 1. - Step 1: email/password владельца или менеджера с
pos.settings.edit→ загрузка списка ТТ → Step 2. - Step 2: выбор ТТ → Step 3.
- Step 3: имя «Касса бар-1» → Зарегистрировать → reload → LoginScreen → PIN → /main.
- В админке (https://erp-test.nirbi.ru/admin) → меню «Устройства → POS и KDS» → таб POS-устройства → видим запись.
- Жмём «Удалить» → касса при следующем запросе получает 401 → откат на RegistrationScreen.
Что в scope не входило (отложено)
- Tauri Store вместо localStorage (комментарий в
authStore.tsпро «позже перенесём» сохранён). - Kafka событие
user.pos_device.revokedдля мгновенного broadcast (в P0 — heartbeat-based force-logout). - Аудит-лог регистраций.
- Kiosk-mode и автозапуск Windows.
- Объединение
KdsDevice/PosDeviceв один Generic-сервис (преждевременно при двух копиях).