# Plan: Write-back von Besuch- & Bericht-Änderungen

Stand: 2026-08-09 · Status: **verdrahtet (A1–A5)** – Kontrakte live, App schreibt zurück

> **Fertig:** `PATCH /visits/:id` (Uhrzeit/Ende/Status) im VisitListViewModel (setzeUhrzeiten +
> toggleAbgesagt, dedupliziert) → deckt A1–A4. `PUT /visits/:id/report` im ReportViewModel
> (Diff gegen Snapshot beim „Fertig"; Zusammenfassung + Aufgaben/VC-Teilfelder + Bearbeiter-GGUID) → A5.
> Beide Kontrakte per curl verifiziert. Offen nur: dein Geräte-Test (Ändern → Logout/Login → bleibt).

## Ziel
Die bisher nur lokalen Änderungen (siehe `docs/lokal-vs-writeback.md`, Abschnitt A) persistieren, damit
sie Logout/Reload überleben. Vom Nutzer freigegeben: **A1–A5 alle**.

## Backend (delegiert, Kontrakt ausstehend)
1. `PATCH /visits/:id` → `visits.json` (`uhrzeit`, `uhrzeit_ende`, `status`). Deckt A1/A2 und – über die
   geänderten Zeiten – A3/A4 ab.
2. `PUT /visits/:id/report` → `report.json` (Zusammenfassung + Aufgaben/VC-Teilfelder + Bearbeiter). A5.

## App-Verdrahtung (nach Kontrakt-Bestätigung)
- **DataStore/HTTPVisitRepository:** `visitAktualisieren(id:, uhrzeit?, uhrzeitEnde?, status?)` (PATCH),
  `reportSpeichern(id:, patch:)` (PUT). Fehler → Offline-freundlich (optimistisch, ggf. Queue wie Freigabe).
- **VisitListViewModel:** in `setzeManuelleZeit`, `toggleAbgesagt`, `verschiebe`/`setzeUhrzeiten`,
  Dauer-Änderung → nach lokalem Setzen den PATCH auslösen (debounced/gebündelt). Lokale Overrides bleiben
  als sofortige Anzeige, werden aber jetzt auch geschrieben; nach erfolgreichem Reload konsistent.
- **ReportViewModel:** beim Verlassen des Edit-Modus (oder „Speichern") die geänderten Felder als Patch
  an `PUT /report` senden. `editable` bleibt Quelle; nur geänderte Felder diffen.
- **Reihenfolge (A3):** entweder pro Besuch die neuen Zeiten PATCHen (einfach) oder ein Order-Feld – im
  ersten Wurf über die Zeiten abbilden.

## Verify
- Uhrzeit ändern → Logout/Login → neue Zeit bleibt. Absage bleibt. Bericht-Edit (z. B. Priorität,
  Zusammenfassung) bleibt nach Reload. Offline: lokal sofort, Sync bei Reconnect. Build 0 Warnings.

## Offen / Entscheidungen
- Endpunkt-2 **Feld-Schnitt** final vom Backend bestätigen.
- Wann schreiben? Vorschlag: **beim Speichern/Schließen** des jeweiligen Sheets/Edit-Modus (nicht bei
  jedem Tastendruck) – spart Requests.
