# Sprint 7C-C – Inventar bestehender Beobachtungspläne

Stand: 2026-08-15, Preflight-Basis `b7dbc1ae89b340bc6297900c91de4c18663fa586`.

## Persistente Strukturen

Die produktive Datenbank enthält bereits die additive Sprint-6F-C-Planstruktur; alle vier Tabellen sind derzeit leer:

- `personal_observations`: Fragestellung, Einfluss-/Ergebnis-IDs, Zeitraum, persistenter Status, Notiz und Zeitstempel.
- `personal_observation_phases`: optionale Baseline-, Beobachtungs-, Veränderungs- und Follow-up-Phasen.
- `personal_observation_checkins`: optionale tägliche Dokumentation mit Unknown-Defaults.
- `personal_observation_results`: unveränderbare, versionierte Ergebnisstände; UPDATE und DELETE werden durch Trigger abgewiesen.

Die vorhandene Struktur deckt den Sprint ohne neue Tabelle und ohne Datenbankmigration ab. Sprint 7C-C erweitert deshalb ausschließlich Vertrag, Read-Modell, Validierung, Workerregeln und UI.

## Vertrag und Status

Vorhanden sind opaque IDs (`obs_…`, `phase_…`, `result_…`) und der fachliche Methodenvertrag `personal-observation-phases-v1`.

Persistente Statuswerte:

- `draft` – vorbereitet;
- `active` – sammelt Daten;
- `paused` – pausiert;
- `completed` – abgeschlossen;
- `archived` – archiviert.

Die neuen Benutzerzustände „auswertbar“ und „Daten reichen nicht aus“ sind Datenabdeckungszustände, keine zusätzlichen Lebenszykluszustände. Sie werden im read-only Read-Modell deterministisch aus Ereigniszahl und Folgemessungsabdeckung abgeleitet. Dadurch ist keine Schemaänderung nötig.

Erlaubte Übergänge sind bereits fail-closed modelliert. Endgültiges Löschen existiert nicht.

## Action Queue und Worker

Alle bestehenden Planänderungen verwenden bereits:

1. authentisierte private Browser-Session;
2. exakte Same-Origin-Prüfung;
3. Einmal-CSRF;
4. private Action-Inbox;
5. erneute serverseitige Payload-Validierung;
6. privaten Worker mit expliziter Produktions-DB;
7. Transaktion und Worker-Receipt/Idempotenz.

Unterstützte Aktionen sind Plan anlegen/ändern, Phase anlegen/ändern, Check-in, Statuswechsel und Ergebnis-Snapshot. Der Worker erzeugt beim Abschluss einen unveränderbaren Ergebnisstand. Sprint 7C-C ergänzt hier die Grenze von höchstens drei aktiven Plänen und höchstens zwei Ergebniswerten, statt einen zweiten Schreibpfad aufzubauen.

## Bestehende Read-API und UI

Vorhandene private Read-Pfade:

- `/api/v1/observations/templates`;
- `/api/v1/observations`;
- `/api/v1/observations/active-today`;
- `/api/v1/observations/{opaque-id}`;
- `/api/v1/observations/{opaque-id}/analysis`;
- unveränderbare Ergebnisversionen.

Der bestehende Explorer-Unterbereich „Meine Fragestellungen“, Master/Detail, Dialoge, URL-Restore, Tagesrouter, Arztbericht und ECharts-Ansicht werden weiterverwendet. Für Sprint 7C-C wird die Phasen-/N-of-1-Oberfläche vereinfacht; die Sprint-7C-B-Vergleichsansicht bleibt die einzige Diagramm-Engine für Planverläufe.

## Vorhandene Tests

Sprint 6F-C prüft bereits:

- additive/idempotente Struktur und Foreign Keys;
- Allowlist, Zeiträume und Statusübergänge;
- Serverformvertrag;
- Workerlebenszyklus und immutable Ergebnisversionen;
- Missingness und deskriptive Phasenwerte;
- Read-API, Arztbericht, Browser-Session;
- mobile Master/Detail-Darstellung und Touchziele.

Diese Tests bleiben Regressionsevidenz. Sprint 7C-C erhält einen eigenen fokussierten Python- und Playwright-Vertrag.

## Legacy- und Konfliktinventar

- Die sieben alten Vorlagen sind fachlich breiter als der neue Sprint und enthalten unter anderem Medikamenten-, Supplement- und Stresspfade. Sie werden durch genau drei sichere Startvorlagen ersetzt.
- Der alte Vertrag erlaubt bis zu acht Einfluss-/Ergebnis-IDs. Sprint 7C-C begrenzt Ergebniswerte auf zwei und einen Einfluss pro Plan.
- Die alte Phasenauswertung verwendet 7-/14-Tage-Grenzen. Der neue Plan-Read-Vertrag verwendet fünf Ereignisse, mindestens 70 Prozent Folgemessungsabdeckung und mindestens fünf Ergebniswerte.
- Der bisherige Heute-Hinweis fordert generisch einen Plan-Check-in an. Er wird nicht weiter als Standardaufgabe verwendet; ein Hinweis erscheint nur bei eindeutig fehlender, ohnehin vorgesehener Dokumentation.
- `event.stress` ist ein Legacy-Ereignispfad. In der produktiven DB existiert nur das bewusst erfasste Feld `personal_observation_checkins.stress`, derzeit ohne Einträge. Es gibt keinen eigenständigen, ausreichend belegten subjektiven Stress-/Befindens-Verlauf. Deshalb wird in 7C-C kein Stresswert angeboten und kein Wert aus HRV, Puls oder Schlaf abgeleitet.
- Der alte Association-Vertrag und die neue Sprint-7C-B-Vergleichsansicht bleiben getrennt. Neue Pläne nutzen ausschließlich den Sprint-7C-B-Vertrag `health.explorer_comparison.v1` für Reihen, Ereignisse, Missingness, Quellen, Reviewstatus und Zeitzonenlogik.
