# d4rk_tablet — Behörden-MDT / CAD Eigenständige Behörden-Software (MDT/CAD) für FiveM. Läuft **unabhängig vom Game-Server**: im Spiel (NUI-iframe) *und* im Browser (Leitstelle, 2. Monitor, echtes Tablet). > Das komplette System lebt im Backend/Web. Bürger & Fahrzeuge werden **MDT-eigen** > geführt (nicht aus QBox gelesen) — so lassen sich auch illegale Einreise, unbekannte > Täter (John Doe) und gefälschte Kennzeichen sauber abbilden. ## Architektur ``` apps/tablet-web React 18 + Vite 5 + Tailwind 4 + Zustand + TanStack Query + Lucide backend/api Fastify + Drizzle ORM (mysql2) + Socket.io → liest QBox-MariaDB direkt fivem-bridge minimale Lua-Resource (Token, NUI, Positionen, Waypoint) packages/shared TS-DTOs (zod) + Socket-Events + RBAC — von web & backend genutzt ``` ## Setup ```bash pnpm install # Node >=20, pnpm 10 cp .env.example .env # DB-Creds, JWT-, HMAC-, Discord-Secrets eintragen pnpm dev # startet web (5173) + api (3000) via Turborepo ``` Weitere Scripts: `pnpm typecheck`, `pnpm build`, `pnpm db:generate`, `pnpm db:migrate`. ## Datenbank - **Komplett eigenständig:** alle Daten in eigenen `mdt_*`-Tabellen (Migrations via Drizzle Kit). - Bürger (`mdt_citizens`) und Fahrzeuge (`mdt_vehicles`) werden von der Behörde selbst geführt — QBox-Tabellen werden **nicht** mehr gelesen (bewusste Entscheidung für Hardcore-RP). ## Milestones 1. ✅ **Scaffold** — Monorepo, shared DTOs, Fastify + Vite Skelett, Drizzle-Setup 2. ✅ **Auth** — JWT + RBAC-Guards, `/auth/fivem` (HMAC), Discord OAuth, Dev-Login 3. ✅ **Personen + Fahrzeuge** — QBox-Reads (JSON-Parsing), REST + RBAC, TanStack-Query-UI. Siehe [docs/dev-setup.md](docs/dev-setup.md) für Seed + Live-Test 4. ✅ **Strafakten / Haftbefehle** — Strafenkatalog, Akte anlegen (Charges × Anzahl → Summe Bußgeld/Haft), Haftbefehl ausstellen/aufheben. Behörden-Branding + Tablet-Statusbar. 5. ✅ **Realtime-Dispatch + Map** — Socket.io (JWT-Auth, Dept-Rooms), Einsätze live, Officer-Positionen live. **MapLibre GTA-Satelliten-Map** (Tiles served vom Backend `/tiles/`, Game→lng/lat-Projektion). HMAC-Bridge-Endpoints (`/bridge/*`). 6. ✅ **Rechte & Mitarbeiter** — Hybrid-Rechte (granulare Nodes, QBox-Rang-Matrix ∪ Overrides, ins JWT gebacken). **Visueller Rechte-Explorer** (Baum MDT/CAD/Admin, Tri-State, Suche, Rollen-Templates) + Mitarbeiter-Verwaltung. Guards prüfen `permissions`. 7. ✅ **FiveM-Bridge** — Lua-Resource (`fivem-bridge/`): Tablet öffnen (NUI-iframe + Token via postMessage), Server-Token-Flow (Shared-Secret), server-seitiger Positions-Push, Dienst-Sync, Dispatch-Export, Waypoint. Siehe [docs/fivem-bridge.md](docs/fivem-bridge.md). Backend-Contract verifiziert; Lua-Ingame-Test beim Betreiber. 8. 🚧 Weitere Module (aus EMS-MDT-Vorlage): ✅ **Start-Dashboard** (Uhr, Termine, **Schwarzes Brett**) · ✅ **Dokumente** (Ordner + **Tiptap Rich-Text** [Tabellen/Aufgabenlisten/Link/Bild/…], Aktenzeichen `DO-JJJJ-MM-TT-###`) · ✅ **Bürgerakten** (MDT-eigene, voll editierbare Bürger-Registry: anlegen/bearbeiten/löschen, Mugshot-URL, Aufenthaltsstatus inkl. illegaler Einreise, Aliasse, Personenbeschreibung, Lizenzen, Fahndung) · ✅ **Fahrzeug-Registry** (MDT-eigen: anlegen/bearbeiten/löschen, Halter-Verknüpfung, Kennzeichen-Status registriert/**gefälscht**/gestohlen) · ✅ **EMS-Behandlungsakten** (Pendant zu Strafakten: Patient-Suche, Aktenzeichen `TR-JJJJ-MM-TT-###`, Diagnose + Behandlung als **Tiptap Rich-Text**, offen/abgeschlossen) · ✅ **Gesetze** (Strafgesetzbuch-Nachschlagewerk: nach Kategorie gruppiert, durchsuchbar, Gesetzestext als **Tiptap Rich-Text** + Bußgeld/Haftzeit, pflegbar mit `mdt.laws.manage`) · ✅ **Kalender** (echte Monatsansicht, Termine/Events mit Kategorie-Farben, Einladung einzelner/mehrerer Personen, **Selbst-Eintragung + RSVP** [Zusage/Absage/Vielleicht], Tiptap-Beschreibung) · ⬜ Mein Profil · ⬜ Dispatch-Units 9. ✅ **Freigabe-System (ACL)** — konfigurierbare **Behörden-Registry** + **Gruppen/Teams** + modernes **Freigabe-Panel** (Lesen/Schreiben × Behörden/Gruppen/Personen, öffentlich-Toggle) auf Dokumenten/Ordnern **und Bürgerakten** (dort als Sichtbarkeits-ACL: welche Behörde sieht welche Akte). Verwaltung: Rechte-Matrix · Mitarbeiter · Behörden · Gruppen. 10. ⬜ Feature-Flags · Dienststatus-Gating · Ownership · Temporär/Vertretung · Audit-Log · Deployment ## Dev-Hinweise - **Browser-Dev ohne Login:** `VITE_DEV_AUTH_BYPASS=true` in `.env` → Mock-Officer (police, admin). - Auth-Token kommt im NUI per `postMessage({ action: 'auth', token, user })`.