# Sprint 6E.1 – Aktenfunktionen und Sicherheitsverträge

**Basis:** `60ca752cc738218359400ded8900e669ab71b8b1`
**Release-Commit:** wird durch den unmittelbar folgenden, unveränderten Git-Commit `fix: complete dashboard v5 health record workflows` bestimmt und nach Push über `git rev-parse HEAD`/`git ls-remote` verifiziert.

## Ergebnis

Dashboard V5 erhält mit `--health-record-6e` einen vollständigen read-only Akten-Schnitt. Ohne Flag bleiben Akten-Markup, Aktenasset und Aktenrequests vollständig aus.

### Dokumente und Suche

- SQL-Filter, aktueller Review-Join, FTS-Auswahl und Sortierung erfolgen vor `LIMIT`.
- Dokumentseiten verwenden `limit + 1`, `truncated` und einen HMAC-signierten Keyset-Cursor.
- Cursor binden Sortierung, Richtung, Filter und Volltextquery; Manipulation oder Wiederverwendung für eine andere Query endet kontrolliert mit HTTP 400.
- FTS-Tokens werden ausschließlich als Literale zitiert. Aktuell nicht mehr geprüfte Dokumente verschwinden ohne Rebuild aus Liste, globaler Suche und Matches.
- Migration und Read-API verwenden denselben normalisierten Chunk-Vertrag; Abschnitte werden ohne 28-kB-Kappung paginiert.

### Originaldokumente

Originale werden nur für geprüfte opaque Dokumentreferenzen und nur unter expliziten lokalen Roots geöffnet. Jede Pfadkomponente wird descriptorbasiert mit `O_NOFOLLOW` geöffnet. MIME folgt Magic Bytes, Größe und Dateityp folgen `fstat` des geöffneten Deskriptors. GET streamt in 64-kB-Blöcken, HEAD überträgt keinen Body. Antworten verwenden generische Namen, `no-store`, `nosniff`, `no-referrer` und geben keine internen Pfade oder Namen aus.

### Medikation und Arztbericht

- Geplant, tatsächlich verabreicht, ausgelassen und korrigiert bleiben getrennt.
- `scheduled_next_date` wird nur für explizite Planungsereignisse genutzt; zukünftige Planungen werden nach Zürich-Tag aufsteigend sortiert.
- Der Arztbericht unterstützt Zeitraum und Abschnittsauswahl für Übersicht, Labor, Medikation, Symptome/Ereignisse, Termine und Dokumente.
- Druckansicht blendet Navigation und Formulare aus. Es wird keine PDF persistiert.
- Ausgabe enthält Datenherkunft, Vollständigkeitshinweise und ausdrücklich keine Diagnose-, Kausalitäts- oder Therapieaussage.

## Sicherheits- und Datenvertrag

- ausschließlich read-only Datenbankzugriff;
- keine externen Requests oder CDN-Abhängigkeiten;
- keine Browser-Tokens oder internen Dokument-/Pfadfelder;
- Datenbanktext ausschließlich über `textContent`/Textknoten;
- V4, `deploy/`, Produktionskonfigurationen und bestehende Schreibpfade unverändert;
- Testdaten und Browserintercepts ausschließlich synthetisch.

## Abnahme 2026-07-15

- fokussierte Python-/Security-Gates: 42 bestanden;
- fokussierte Aktenbrowserflows: 11 bestanden in 2 Gruppen;
- vollständige Python-Suite: 212 bestanden;
- isolierte Browsermatrix: 49 bestanden in 8 Gruppen;
- FTS-Migration: rebuild, wiederholter rebuild, check und drop bestanden;
- Ruff, Python-/Node-/Bash-Syntax und `git diff --check`: bestanden.

Details: `docs/test-results/sprint6e1-integration-gate-20260715.json`.
