# Übersicht: Was ist lokal, was wird zurückgeschrieben?

Stand: 2026-08-09 · Grundlage für die Entscheidung, welche Änderungen persistiert werden sollen.

Hintergrund: PoC-Prinzip war bisher **„kein Rückschreiben"** (Projekt-`CLAUDE.md`: „Der PoC endet beim
freigegebenen `report.json`"). `visits.json`/`report.json` sind lokale Fixtures (kein echtes CRM) –
Rückschreiben ist technisch machbar, geht aber bewusst über den ursprünglichen Scope hinaus.

## A) Nur lokal (im Speicher) – geht bei Logout/Reload verloren
Diese Domänen-Änderungen leben nur im ViewModel (`private var …`), es gibt **keinen** Server-Aufruf:

| # | Änderung | Wo im Code | Ziel bei Write-back |
|---|---|---|---|
| A1 | **Termin-Uhrzeit** (Start/Ende, Wisch → „Uhrzeit") | `manuelleStarts`, `uhrzeitOverrides`, `uhrzeitEndeOverrides` | `visits.json` (uhrzeit/uhrzeit_ende) |
| A2 | **Termin absagen ⇄ geplant** | `statusOverrides` | `visits.json` (status) |
| A3 | **Manuelle Reihenfolge** der Tagesroute (Reorder) | `manualOrder` | `visits.json` (Order-Feld) oder lokal lassen |
| A4 | **Manuelle Besuchsdauer** | `manuelleDauern` | `visits.json` (aus Start/Ende ableitbar) |
| A5 | **Bericht-Bearbeitungen** im Edit-Modus: Status, Priorität, Fälligkeit, Wahrscheinlichkeit, Phase, Notizen, **Bearbeiter-Zuweisung** (Klärung), **Zusammenfassung** | `ReportViewModel.editable` / `editableZusammenfassung` | `report.json` |

**Wichtig zu A5:** Beim **Freigeben** wird nur `status: freigegeben` + `freigabe` geschrieben – die
**inhaltlichen Edits** (Priorität, Fälligkeit, Bearbeiter, Zusammenfassung …) gehen **nicht** mit und
sind nach Reload weg.

## B) Wird bereits zurückgeschrieben (server-seitig persistent)
| Änderung | Weg |
|---|---|
| **Freigabe** (Status → freigegeben, durch/am) | `POST /visits/:id/freigabe` → `report.json`; offline via Freigabe-Queue, Sync bei Reconnect |
| **Anhänge** (Upload **und** Löschen) | `POST`/`DELETE /visits/:id/anhang…` → `data/visits/<id>/anhaenge/` + `anhang-kontext.json` |
| **Home-Adresse** | nur **lesend** live gezogen (`GET /benutzer/:gguid`), keine Bearbeitung in der App |

## C) Geräte-Einstellungen (UserDefaults/@AppStorage) – bewusst lokal, kein Backend nötig
Darstellung (Theme), Anzeigegröße (Zoom), Akzentfarbe, feste Besuchsdauer-Default,
„Ansicht auf morgen ab"-Uhrzeit, Benachrichtigungs-Toggles, Offline-Test-Schalter,
„Welcome gezeigt", Ø-Doku-Dauer-Messung. Diese gehören aufs Gerät, nicht ins Backend.

## Was Write-back je Punkt braucht
- **A1–A4** (Besuche): 1 neuer Backend-Endpunkt, z. B. `PATCH /visits/:id` mit Teilfeldern
  (uhrzeit, uhrzeit_ende, status, ggf. reihenfolge) → schreibt `visits.json`. App ruft ihn beim Speichern.
- **A5** (Bericht): Endpunkt `PUT /visits/:id/report` (oder `PATCH`) → schreibt den editierten Bericht
  nach `report.json`. Alternativ die Edits bei der Freigabe mitschicken.
