# Sprint 7C-F1 – Erfassungs-Hotfix

## Reproduktion vor dem Fix

Die produktive Datenbank und Queue wurden ausschließlich read-only geprüft. Der Action-Worker und sein Path waren absichtlich pausiert; die Queue war leer. Auf einer privaten SQLite-Kopie wurde die Eingabe vom 17.08.2026, 12:32 Uhr Europe/Zurich reproduziert.

Die erste konkrete Ablehnung erfolgte bereits in der API-/Payload-Validierung: Der Medikamentenvertrag verbot pauschal `/` in medizinischen Textfeldern. Damit wurden sowohl `Hyrimoz / Adalimumab` als auch die dokumentierte Stärke `40 mg/0,4 ml` abgelehnt. Die generische UI-Meldung verdeckte diese Stufe. Nach Beseitigung dieser zu breiten Textregel hätte der bisherige v1-Vertrag dieselbe Verordnung anschließend wegen des fail-closed Status `unknown` abgewiesen. Der pausierte Worker war nicht die Ursache, weil die Anfrage die Queue nie erreichte.

Vorher-/Nachher-Prüfungen der Kopie bestätigten: keine neue Medikationszeile, keine neue Action-Log-Zeile und keine Queue-Datei durch die fehlgeschlagene Reproduktion.

## Eng begrenzte Lösung

- Neuer Vertrag `health.medication_action.v2` für ausdrücklich historische oder real geplante Gaben.
- Historische Gabe: kein Plantermin, unbekannter Verordnungsstatus zulässig, Status bleibt unverändert.
- Planmodus: nur mit opaque referenziertem, effektivem, unbenutztem und strukturiertem Plantermin.
- Revisionssichere getrennte Felder für Menge, Darreichungsform und Stärke; keine Freitextnotiz als Ersatz.
- Verifizierte Hyrimoz-Vorauswahl aus dem expliziten F1-Abnahmevertrag plus bereits dokumentiertem subkutanem Weg. Keine namensbasierte Heuristik; mehrdeutige identische Stammsätze brechen fail-closed ab; kein Dafalgan-Preset ohne dokumentierten Stammsatz.
- Verifizierte Preset-Revision ist HMAC-gebunden. Abweichung braucht bewusste Bestätigung; Übereinstimmung nicht.
- Preview und Confirm behalten denselben Payload-, DB- und Capture-CSRF-Kontext.
- Replay derselben Action bleibt idempotent; eine zweite Ereigniszeile entsteht nicht.
- Queue-Statusbelege sind an den normalisierten Action-Hash und einen HMAC-Status-Token gebunden; mehrdeutige Transportfehler behalten dieselbe eingefrorene Aktion/Idempotenz-ID und erneuern nur CSRF.
- Symptom-Tagesbutton ruft den bestehenden Dialog direkt auf und übergibt das geroutete Tagesdatum.

## Nicht geändert

Keine Stammsatzzusammenführung, keine Statusumklassifizierung, keine Terminberechnung, keine V4-Änderung und kein Sprint 7D.
