# Roadmap — Seaca Мобильный клиент SAC (Kotlin). Серверные задачи (API, настройки в веб-SAC, FCM с бэкенда) — в [security-alert-center](https://git.kalinamall.ru/PapaTramp/security-alert-center), фаза **v0.6 — Mobile**. --- ## Принятые решения | Тема | Решение | |------|---------| | UI | Kotlin + Jetpack Compose (нативно) | | Push | FCM (бесплатный канал доставки) | | Привязка | Код регистрации от администратора (+ URL сервера; QR опционально позже) | | Оповещения | Те же правила SAC: `min_severity`, cooldown, dedup — канал `push_mobile` в policy | | Админка устройств | Только веб-SAC: список, отзыв, способ логина, выдача кодов | | Роли | `viewer` — просмотр; `operator` — ack/resolve; admin-функции — не в приложении | --- ## v0.1 — Каркас приложения - [ ] Gradle-проект: Compose, Navigation, Hilt/Koin, Retrofit, DataStore - [ ] Экран «Подключение»: URL SAC, код регистрации, логин/пароль - [ ] `POST /api/v1/auth/login` + обмен кода на `device_id` (когда API готов на SAC) - [ ] Secure storage: `base_url`, access/refresh token, `device_id` - [ ] Экран «Ошибка / нет сети» и проверка `GET /health` - [ ] Базовая навигация: Обзор, События, Проблемы, Хосты, Отчёты - [ ] CI: сборка debug APK (опционально — позже) **Зависимость:** SAC **≥ 0.9.0** — `mobile_devices_allowed`, enrollment codes, `POST /api/v1/mobile/enroll` --- ## v0.2 — Паритет с веб-UI (чтение) - [ ] Списки с пагинацией: events, problems, hosts, reports - [ ] Карточки: event, problem (+ связанные events), host (+ inventory) - [ ] Dashboard: виджеты как `GET /api/v1/dashboards/summary` - [ ] Фильтры events/problems (severity, type, host) — упрощённый набор - [ ] Pull-to-refresh; polling в foreground (SSE на Android в фоне не используем) - [ ] Тёмная тема (как веб) - [ ] Локализация: русский --- ## v0.3 — Действия оператора - [ ] `POST /api/v1/problems/{id}/ack` и `/resolve` - [ ] Обновление списков после действия - [ ] Скрытие admin-only API (403) — без попыток открыть settings/users - [ ] Биометрический замок при возврате в приложение - [ ] Certificate pinning / «Доверять сертификату» для внутреннего TLS --- ## v0.4 — Push (FCM) - [ ] Firebase-проект, `google-services.json` (не в git) - [ ] Регистрация FCM-токена: `PUT /api/v1/mobile/devices/{id}/fcm` - [ ] Обработка data message: `kind`, `id`, `severity`, deep link `seaca://…` - [ ] Notification channels по severity (critical / high / default) - [ ] Actions в уведомлении: «Подтвердить» / «Закрыть» problem (operator+) - [ ] Тестовый push из веб-SAC («Проверить push на устройстве») **Зависимость:** SAC worker — `use_push_mobile` в notification policy, `push_notify.py` --- ## v0.5 — Полировка - [ ] Refresh token rotation (`POST /api/v1/auth/refresh`) - [ ] Виджет: число open problems - [ ] Offline-кэш последних N событий (Room) - [ ] Экран «Моё устройство»: имя, сервер, версия, «Выйти» - [ ] Минимальная версия приложения (проверка с сервера) --- ## Сервер SAC (отдельный репозиторий) — чеклист v0.6 Эти пункты реализуются в **security-alert-center**, не в Seaca: - [x] `mobile_settings`: `devices_allowed`, max devices, min app version - [x] Таблицы `mobile_devices`, `mobile_enrollment_codes`, `mobile_refresh_tokens` - [x] Веб: **Настройки → Мобильные устройства** — вкл/выкл, коды, список, отзыв, способ логина - [x] API enrollment: создать код (admin), погасить, список устройств, revoke, test push - [x] JWT refresh + привязка к `device_id` - [x] FCM HTTP v1 из worker (`SAC_FCM_*` в `sac-api.env`) - [ ] Audit: выдача кода, enroll, revoke, смена FCM --- ## Не в плане (пока) - iOS - UnifiedPush без FCM - Управление пользователями SAC из телефона - Настройки Telegram/SMTP с телефона - Несколько SAC-серверов в одном приложении --- ## KPI - От события на SAC до push на телефон: p95 < 45 с (как Telegram) - Pairing по коду: < 2 минут для оператора - Отзыв устройства: push прекращается в течение 1 минуты