# Roadmap Implementasi NEXORA

Roadmap ini mengikuti **FSD v1.1, Bagian 24 (Tahapan Implementasi)**. Setiap fase menghasilkan aplikasi yang bisa dijalankan dan diuji. Fase berikutnya dibangun di atas fase sebelumnya.

| Fase | Nama | Cakupan utama | Status |
|---|---|---|---|
| 0 | Survey & PoC | Survey denah, pemilihan perangkat uji, validasi API Garda (non-software) | Di luar repo |
| **1** | **Fondasi** | Auth + MFA TOTP, RBAC per properti, struktur lokasi, upload denah berversi, editor penempatan, inventaris controller/perangkat, audit log tamper-evident, API v1 dasar | **Selesai (paket ini)** |
| 2 | IoT Control | Adapter protokol (MQTT v5/HTTP), command pipeline (command_id, expiry, Idempotency-Key), kontrol lampu/relay, status real-time (SSE), kontrol grup, health/heartbeat | Berikutnya |
| 3 | CCTV | Integrasi kamera/NVR (ONVIF/RTSP), live view via gateway (WebRTC/HLS), playback, ekspor bukti dengan hash SHA-256 | Direncanakan |
| 4 | Door & Gate | Status posisi/kunci terpisah, unlock dengan re-auth, akses tamu & kredensial sementara, interlock, verifikasi visual pagar | Direncanakan |
| 5 | Alarm & Garda | Mode keamanan, zona, supervisi sensor, duress code, event pipeline, delivery Garda (HMAC, retry, DLQ, heartbeat) | Direncanakan |
| 6 | Hardening & UAT | Threat model, pentest, soak test, backup/restore, failover, audit aksesibilitas | Direncanakan |
| 7 | P1 | Scene lanjutan, otomatisasi, energy monitoring, geofencing | Backlog |

## Fase 1 — Pemetaan ke FSD

| Kebutuhan FSD | Implementasi |
|---|---|
| 4.1 RBAC, least privilege, pemisahan tugas | `roles`, `permissions`, `role_permissions`, `property_members` (berbatas waktu, scope lokasi). Izin diperiksa di server untuk web dan API. |
| 4.1 Akun break-glass, review akses | Platform admin dibuat saat instalasi, wajib ganti password; halaman Anggota menampilkan masa berlaku akses. |
| 7.1 Property → Building → Area/Floor → Room | `properties`, `buildings`, `locations` (floor/outdoor/area), `rooms` |
| 7.2 Upload denah, koordinat normalisasi 0–1, versi, hapus placement ≠ hapus perangkat | `plan_assets` berversi, gambar di-re-encode (metadata dibuang), `placements` terpisah dari `devices` |
| 7.4 Simbol tetap pada posisi relatif saat resize | Editor menyimpan koordinat 0–1 dan memetakannya ke ukuran gambar saat render (teruji pada resize) |
| 8.1–8.4 Inventaris, lifecycle, channel mapping tanpa konflik | `devices`, `controllers`, unique index channel aktif |
| 15.3 Audit trail tamper-evident | `audit_log` append-only (trigger DB) + hash berantai SHA-256 + verifikasi di UI |
| 16.1 Autentikasi | Argon2id, lockout & rate limit, TOTP MFA, re-auth untuk tindakan sensitif, sesi dapat dicabut |
| 19.1 Konvensi API | `/api/v1`, error RFC 9457 (`application/problem+json`), ETag/If-Match pada placement & perangkat |
