# STATUS – Aussendienst Voice-Agent (Voco)

Die *eine* Wahrheit für den Projektstatus. Stand: 2026-08-07.

## Struktur (dieses Projekt)
Abweichung von der globalen §12: **Git-Root ist der Repo-Root** (nicht `webapp/`), weil es ein
bestehender iOS+Node-Monorepo ist – die App liegt in `VoiceAgentApp/`, der Node-Teil in `packages/`.
Ein `webapp/`-Umzug würde xcodegen-/Import-/Server-Pfade brechen und wird bewusst **nicht** gemacht.
Angewandt wurde die Ablage-Konvention:
- `tasks/` — Planung: **STATUS.md** (diese Datei), `todo.md` (Historie), `lessons.md`.
- `docs/` — technische/Design-Referenz (Mockups, Typo, Pläne `plan-*.md`).
- `dokumente/` — Kunden-Deliverables (Proposals, Landing-Header als HTML).
- `data/` — JSON-Fixtures. Secrets via `.gitignore` (`.env*`), `packages/agent/.env.example` committet.

## Scope (PoC)
Beweisen: Spracheingabe im Auto ist effektiver UND die Extraktion erzeugt **CAS-konformes JSON**
(CAS genesisWorld). **Kein CRM-Rückschreiben** – Ende beim freigegebenen `report.json`.

## Fertig (verifiziert)
- **Backend (`packages/agent`):** Extraktions-Pipeline (LLM-Spezialisten + deterministischer Assembler),
  Bearbeiter-Auflösung, Coverage-Check, Voice-Worker (xAI Grok, EU/Frankfurt), Token-/Freigabe-Server.
  `bericht_erstellt_am` stabil über Verfeinerungen; `/visits` liefert `bericht_status` + `bericht_erstellt_am`.
- **iOS-Frontend (`VoiceAgentApp`):** Login → Besuchsliste (+ Karte, Tagesroute mit Fahrzeit/km/Traffic) →
  Briefing → Voice-Gespräch (LiveKit) → Bericht prüfen/bearbeiten/freigeben. Editorial-Dark, Theme-Akzent,
  App-Icon „Sprache→Struktur".
- **Tagesroute:** MKDirections, verkehrsabhängig; Etappen-Fahrzeit/km + Tagessumme; kumulierte Verspätung.
- **Welcome-Screen:** Tages-Übersicht als Text (Besuche · Abfahrt · km · Fahrzeit inkl. Verkehr +
  Gesamtverzögerung · offene Berichte), 6 s, per Tap/Wisch überspringbar.
- **In-App-Benachrichtigungen (lokal):** #1 Anfahrt/Traffic, #2 Doku, #3 Freigabe, #5 Verspätung,
  #6 Tagesende-Rollup; je-Thema-Toggles, Deep-Links, Test-Auslöser; `BGAppRefreshTask` für frischen
  Verkehr. Details: [tasks/plan-benachrichtigungen.md](../docs/plan-benachrichtigungen.md) *(Plan liegt in docs/)*.
- **Report-Edit:** richtige Controls (Datum-Toggle + Aufgaben-Uhrzeit, Dropdowns, Slider, Bearbeiter-Suche),
  Einzel-Bearbeiten je Aufgabe/Verkaufschance.
- **Profil:** echte 2×2-Statistiken (Besuche/Woche · Ø Doku-Dauer gemessen · Berichtsquote · Freigabequote);
  Benachrichtigungen ganz oben in den Einstellungen.
- **Siri / App Intents:** „Besuch dokumentieren" (Bericht→Bericht, sonst→Briefing; Kandidat = letzter
  heutiger Besuch ohne Bericht, sonst Rückfrage) + „Nächster Besuch"→Briefing. Deutsche Phrasen.
- **Offline-Robustheit 1–3:** Netz-Banner (Stand von HH:mm), JSON-Lese-Cache (offline letzter Stand),
  Freigabe-Queue (offline vormerken → bei Reconnect senden). Plan: `tasks/plan-offline-robustheit.md`.

## Offen / Ideen
- [ ] **Offline #4 – Voice-Resilienz** (Reconnect + Turn-Sicherung) – größter Wow, aufwändig; später.
- [ ] **App-Icon-Stil-Umschalter** (zurückgestellt) – Waveform-Pin / Route / Sprache→Struktur wählbar.
- [ ] **„Kacheln kleiner"** – unklar welche Ansicht; beim nächsten Mal konkretisieren.

## Go-Live-Vormerkungen
- On-Device-STT (Offline-Doku ohne Netz), SwiftData als Offline-Store bei Supabase-Umzug. Siehe Memory.

## Go-Live (außerhalb PoC)
- Server-Push (APNs) für garantiert frischen #1-Traffic. Prod-Architektur/Kosten: siehe Memory.
