## Ergebnis des Read-only-Audits ### Bestehende Tabellen und Call-Sites - **Aktive Ernährung↔Symptom-Korrelation** - `nutrition_correlation_results` in `database/schema.sql:274` - Berechnung ausschließlich im unversionierten Runtime-Skript `~/.hermes/assets/Gesundheit/scripts/nutrition_insights.py:249-278` - Anzeige in `scripts/health/health_dashboard_v3.py:256,457-462,682` - **Lebensmittel-Hypothesen** - `nutrition_food_insights`, `personal_food_tolerance`, `low_histamine_experiments` - Berechnung/Schreiben in `nutrition_insights.py:281-320` - Dashboard-Ausgabe als „Trigger-/Safe-Kandidat“ in `health_dashboard_v3.py:463-477,683-684` - **Generische, derzeit praktisch ungenutzte Ablagen** - `health_insights`: nur Migration, Zählung und Dokumentation; keine aktive Berechnung/Anzeige. - `korrelationen`: freies Legacy-Schema; `health_manager.compute_correlations()` schreibt nicht hinein. - **Verfügbare Modalitäten** - Ernährung: `nutrition_daily_summary_v2` - Symptome: `symptom_log`, `symptome` - Apple Health: `apple_health_records`, sicherer Zugriff über `apple_health_analytics.daily_points/daily_series` - Medikamente/Phasen: `medication_administrations`, `health_event_periods` - Labor: `laborwerte` - Experimentkontext: `low_histamine_experiments` ### Wesentliche Sicherheits-/Qualitätslücken - Runtime-Korrelationen imputieren fehlende Symptomtage als **0** (`symptoms.get(..., 0.0)`); dadurch werden „nicht erfasst“ und „symptomfrei“ verwechselt. - Aktuell: Pearson, keine p-/q-Werte, keine Multiple-Testing-Korrektur, keine Missingness, keine Zeitfenster-/Algorithmusversion und keine Medikationsphasen-Stratifizierung. - Dashboard und Runtime verwenden unterschiedliche Symptomgrundlagen: - Dashboard-Korrelationschart nutzt nur `symptome`. - `nutrition_insights.py` summiert `symptome` und `symptom_log`. - `nutrition_correlation_results` reicht für multimodale Ergebnisse nicht: keine Phase, Provenienz, Datenqualität, Eligible-/Missing-Pairs oder Hypothesenstatus. - `health_insights.evidence_json` und `korrelationen` sind zu unstrukturiert; dort könnten versehentlich Rohwerte, Datumsreihen oder Quellenbezeichner landen. - Dashboard rendert „🔴 Trigger-Kandidat“, „🟢 Safe-Kandidat“, „problematisch“ und „Hohe Histamin-Tage“. Trotz Kausalitätsdisclaimer kann dies medizinische Gewissheit bzw. Risikobewertung suggerieren. - `generate_doctor_report.py` hat eine gute harte Grenze (`:266`): keine automatische medizinische Risiko-/Ampel-/Entwarnungsbewertung. Hypothesenkorrelationen sollten im Sprint 2 **nicht** automatisch in den Arztbericht übernommen werden. - Schema-/Runtime-Drift: Nutrition-/Symptom-Helfer legen Tabellen/Indizes selbst an; `health_system_migrate.py` kennt diese Erweiterungen nicht vollständig. Das Dashboard erzeugt sogar `low_histamine_experiments` beim Rendern. ### Erforderliche Provenienzregeln - **Symptome:** nur explizit erfasste, vollständige Tages-Scores; Missing bleibt Missing. Kontext und Dimensionen fest versionieren. - **Apple Health:** ausschließlich abgeschlossene Zürich-Lokaltage; für Korrelationen zunächst nur `daily_points(...).quality == "direct"`, keine Rohzeilen oder `raw_json`, kein provisorischer aktueller Tag. - **Ernährung:** nur normalisierte Tagesfeatures; Mapping-Confidence und Unknown-Anteil als Qualitätsflag. Histamin/SIGHi ausdrücklich als lokale Hypothese. - **Medikation:** tatsächliches Verabreichungsdatum; Lags dürfen keine Phasengrenze überschreiten. - **Labor:** nur `validiert`, `verified_against_original=1`, `reference_range_source='scanned_original'`, Einheit vorhanden, exakt numerischer/ungezensierter Wert und `abnahme_datum` bzw. `befund_datum`; nie `ermittlung_datum` oder XLSX-Arbeitsmatrix. - **Persistierte Ergebnisse:** nur Aggregate, keine Rohwerte/Datumslisten/Quellennamen. Speichern: Predictor/Target, Lag, Phase, `n`, eligible/missing, Methode/Version, rho, p, BH-q, Qualitätsflags, Berechnungszeit. - Copy: konsequent „explorative Hypothese/Musterhinweis“, „keine Kausalität/Diagnose/Therapieempfehlung“, neutraler Status `computed|insufficient_data|not_eligible`; keine grünen/roten medizinischen Ampeln. ## Minimaler Sprint-2-Plan 1. **Additive Migration:** neue enge Tabelle `multimodal_correlation_results`; bestehende Tabellen unverändert lassen. 2. **Versionierte Engine:** Spearman, Complete-Case, Lags 0–3, Medikationsphasen getrennt, keine phasenübergreifenden Paare, BH-Korrektur; Labors zunächst konservativ oder nur deskriptiv. 3. **Synthetische Tests:** Missing≠0, explizite Nullwerte, Labor-Provenienz, Apple-direct-only, Phasengrenzen, BH, aggregate-only Persistenz und zwingende Nicht-Kausalitäts-Copy. 4. **Pipeline-CLI:** eigener expliziter Befehl, danach Dashboard-Render; Fehler dürfen alte Ergebnisse nicht als frisch erscheinen lassen. 5. **Dashboard:** separater Bereich „Explorative multimodale Hypothesen“ mit n/Missingness/Phase/q/Qualitätsflags und neutraler Darstellung. Bestehende „Safe-/Trigger“-Bezeichnungen entschärfen. 6. **Reports:** Sprint 2 nur Dashboard; Arztbericht ausgeschlossen. Weekly Report höchstens Anzahl berechenbarer/ungenügender Hypothesen, keine Richtung oder Behandlungsempfehlung. 7. **Release-Gate:** Schema-Test, Medical-Copy-Test, Privacy-Scan und Abgleich Repo↔Runtime-Skripte. ### Verifikation / Änderungen - Kanonisches Schema erfolgreich in Memory geladen: `PRAGMA integrity_check = ok`. - `tests/test_sprint0_safety.py`: **16 Tests bestanden**. - Produktive DB-Werte, Reports, Exporte und Secrets wurden nicht geöffnet. - Von mir wurden **keine Dateien geändert oder erstellt**. - Während des Audits erschien concurrent die ungetrackte Datei `tests/test_multimodal_correlations_v1.py`; sie stammt nicht von diesem Audit und wurde nicht verändert.