## Sprint 6A – mechanische V4→V5-Rohinventur **Scope eingehalten:** ausschließlich die genannten Dashboard-/Serverdateien, die zugehörigen Dashboardtests und vorhandene Sprintdokumente gelesen. Keine Produktionsdatenbank, Reports, PDFs, Secrets oder produktiven Inhalte geöffnet. Keine Dateien geändert. **Statussemantik:** `offen` bedeutet, dass wesentliche V4-Nutzerfunktionalität im geprüften V5-Code fehlt oder nur unvollständig wiederkehrt. Die Zielorte sind **Arbeitsvorschläge, keine finale Architekturentscheidung**. | # | Nutzerrelevante V4-Funktionsfamilie | V4-Code-Evidenz | Aktueller V5-Stand mit Evidenz | Status | Genau ein vorgeschlagener V5-Zielort | |---:|---|---|---|---|---| | 1 | Heute, Aktionen und kompakte Übersicht | V4 erzeugt Tagesaktionen, KPIs, letzte Ernährung und nächste Medikation: `health_dashboard_v4.py:762-819, 913-921`. | Echte Heute-View mit Momentaufnahme, Aufgaben und getrenntem Medikationsblock: `render.py:46-52`; Provider begrenzt Tasks und liefert Medikation: `data_provider.py:350-362`. Sprint 5A dokumentiert die handlungsorientierte Überarbeitung: `sprint5-dashboard-v5-desktop-first.md:44-52, 67-78`. | verbessert | **V5 → Heute** | | 2 | Globale Suche über Dashboardinhalte | V4 hat globale Freitextfilterung für Sektionen und Tabellen: `health_dashboard_v4.py:850-869, 906-910`. | In `render.py` existiert keine globale Suche; Explorer arbeitet mit registrierter Auswahl und Presets: `render.py:54-69`. Sprint-6-Audit bezeichnet die globale Suche als fehlenden Blocker: `healthmanager-v5-repo-audit-zielbild-sprint6.md:53-56`. | offen | **V5 → Explorer** | | 3 | Privacy-, Kontrast-, Arzt-/Printmodus und zugängliche Navigation | V4: Ansichtsmodi, Skip-Link, Bottom-Navigation, Fokus-/Touchregeln und Druckhinweise: `health_dashboard_v4.py:870-889, 895-903, 996-1005`; Tests: `test_health_dashboard_v4.py:109-170`. | V5-Shell besitzt Skip-Link, Tab-Navigation, Privacy-Schalter und Druckaktion: `render.py:40-45, 71-72`; echte getrennte Views und kein `localStorage` werden getestet: `test_health_dashboard_v5.py:207-218`. Die konkrete JS/CSS-Implementierung lag außerhalb des erlaubten Dateiscopes. | verbessert | **V5 → globale App-Shell** | | 4 | Quellenfrische und technische Datenqualität | V4 berechnet Frische für Apple, Ernährung, Symptome und Dokumente und zeigt Alter/Status: `health_dashboard_v4.py:148-170, 788-811, 919`; Tests: `test_health_dashboard_v4.py:173-188`. | V5-Shell hat Status-Platzhalter, aber der Provider liefert `freshness: []` und `notices: []`: `render.py:42,72`; `data_provider.py:356-363`. Sprint-6-Audit zählt Datenqualität zu den fehlenden sichtbaren Flows: `healthmanager-v5-repo-audit-zielbild-sprint6.md:70,141`. | offen | **V5 → Daten & System** | | 5 | Datenprüfhinweise und To-dos | V4 bündelt konservative Labor-, Dokument-, Symptom- und Ernährungsprüfhinweise: `health_dashboard_v4.py:747-761, 938-943`. | V5 kann Tasks transportieren, erzeugt derzeit aber nur Symptom-Check-in und Mapping-Aufgabe; `notices` bleibt leer: `data_provider.py:350-363`. Keine entsprechende V5-Ansicht im geprüften Renderer. | offen | **V5 → Heute** | | 6 | Arztvorbereitung als kompakte Zusammenfassung | V4 zeigt Schlüssellabore, tatsächlich verabreichte Medikation, relevante Dokumente, Symptome und PDF: `health_dashboard_v4.py:670-695, 923-936`. | V5-Arztansicht zeigt Medikation und verifizierte Labore, aber keine Symptome, Dokumente oder Zusammenfassung: `render.py:71`; Provider: `data_provider.py:350-362`. | offen | **V5 → Akte · Übersicht** | | 7 | Arztbericht-PDF und Drive-Link | V4 lädt lokale PDF-/Drive-Metadaten und bietet Öffnen/Drucken an: `health_dashboard_v4.py:337-344, 822-830, 934`. Server kann allowlistete Reports ausliefern: `health_dashboard_server.py:123-131, 476-481`. | V5 hat nur eine generische Druckschaltfläche; kein Arztbericht- oder PDF-Feld im Bundle/Renderer: `render.py:71`; `data_provider.py:356-363`. | offen | **V5 → Akte · Arztbericht** | | 8 | Dokumentenliste, Metadaten, Reviewstatus und Inbox-Übersicht | V4 zeigt chronologische Dokumente mit Datum, Kategorie, Institution und Review sowie gruppierte Inbox-Zähler: `health_dashboard_v4.py:661-668, 957-963`. | V5-Bundle und Renderer enthalten keine Dokumentensammlung oder Dokumentansicht: `data_provider.py:356-363`; `render.py:70-72`. Sprint-6-Audit nennt Dokumentenhistorie/Filter/Volltext als fehlenden Blocker: `healthmanager-v5-repo-audit-zielbild-sprint6.md:63-65,380-405`. | offen | **V5 → Akte · Dokumente** | | 9 | Originaldokumente und Labor-PDFs öffnen | V4 erzeugt lokale `/health-doc/`-Links mit Drive-Fallback: `health_dashboard_v4.py:173-211, 508-509, 991`. Der Server löst Dokumente pfadbegrenzt auf und liefert sie aus: `health_dashboard_server.py:81-120, 464-481`; Path-Containment-Test: `test_health_dashboard_v4.py:287-309`. | Die sichere Serverroute bleibt vorhanden, wird aber von der V5-Shell nicht verwendet; V5-Labore enthalten keine Dokument-ID/-Verknüpfung: `data_provider.py:230-235`; `render.py:71`. | offen | **V5 → Akte · Dokumente** | | 10 | Breite Apple-Health-Trends | V4 registriert elf Reihen: Schritte, Distanz, Ruhepuls, Herzfrequenz, HRV, Schlaf, SpO₂, Atemfrequenz, aktive Energie, Physical Effort und Gewicht: `health_dashboard_v4.py:39-51`; Tabellen/Charts: `477-505, 975-980`. | V5 registriert nur Schlaf, Ruhepuls, HRV und Schritte: `data_provider.py:23-28`; `metric_registry.py:23-30`. Sprint-6-Audit bestätigt vier Apple-Metriken und funktionale Verengung: `healthmanager-v5-repo-audit-zielbild-sprint6.md:91-97`. | offen | **V5 → Explorer** | | 11 | Apple-Health-Coverage, Fallback- und Konfliktqualität | V4 zeigt 30-Tage-Abdeckung, Fallback-Tage, Quellkonflikte und Deduplikation: `health_dashboard_v4.py:477-496, 978`; Sprint 1 dokumentiert diese Semantik: `sprint1-apple-health-analytics-v2.md:40-58`. | V5-Serienpunkte tragen nur `quality="observed"`; keine Coverage-Zusammenfassung gelangt ins Bundle: `data_provider.py:121-130, 356-363`. | offen | **V5 → Daten & System** | | 12 | Vollständige Laborübersicht nach Themen | V4 baut eine vollständige XLSX-Arbeitsmatrix mit Kategorien, Referenz und allen Untersuchungsdaten: `health_dashboard_v4.py:441-475, 979`. | V5 liefert höchstens zwölf streng allowlistete, originalverifizierte Werte: `data_provider.py:197-237`; Allowlist umfasst acht kanonische Paare: `lab_registry.py:6-20`. Tests belegen die fail-closed Grenze: `test_health_dashboard_v5.py:154-187`. Keine vollständige Such-/Gruppenansicht. | offen | **V5 → Akte · Labore** | | 13 | Laborverläufe, Referenzbereiche und Eventmarker | V4 erzeugt ausgewählte Laborzeitreihen mit Referenzlinien/-flächen und Health-Event-Markern: `health_dashboard_v4.py:410-439, 837-845, 980`. | V5 zeigt verifizierte Labore als Liste/Karten; Labore sind keine Registry- oder Explorer-Serie: `render.py:71`; `metric_registry.py:23-30`; `data_provider.py:197-237`. Sprint-6-Audit nennt Laborsuche, Verlauf, Vergleich und Referenzband als fehlend: `healthmanager-v5-repo-audit-zielbild-sprint6.md:57-60`. | offen | **V5 → Akte · Labore** | | 14 | Tatsächliche und nächste geplante Medikation | V4 filtert tatsächliche Gaben, zeigt letzte Gaben und nächsten geplanten Termin: `health_dashboard_v4.py:144-145, 376-381, 687-690, 768-771`. | V5 trennt `last_administered` und `next_planned`, behandelt Zukunft, Absagen und verpasste Termine fail-closed: `data_provider.py:133-194`; UI: `render.py:47,71`. Umfangreiche Tests: `test_health_dashboard_v5.py:97-151`. | verbessert | **V5 → Akte · Medikamente** | | 15 | Vollständige Medikationshistorie/Rohchronik | V4 zeigt Datum, Medikament, Ereignistyp, Dosis, nächste Planung und Notiz: `health_dashboard_v4.py:618, 989`. | V5-Bundle reduziert auf letzte tatsächliche, nächste geplante Gabe und tatsächliche Ereignismarker; Notizen und vollständige Historie fehlen: `data_provider.py:172-194, 350-360`. | offen | **V5 → Akte · Medikamente** | | 16 | Health Events als nutzerlesbare Ereignisse | V4 liest allgemeine `health_events`, zeigt sie in Listen und mischt sie in Timeline/Labor-/Symptommarker: `health_dashboard_v4.py:357-364, 416-420, 697-710, 992`. | V5 `events` enthält ausschließlich tatsächlich verabreichte Medikation: `data_provider.py:188-194, 350-360`. Die Eventspur existiert visuell, erhält aus dem geprüften Provider aber keine allgemeinen Health Events: `render.py:53,65`. | offen | **V5 → Kalender/Tag** | | 17 | Mehrtägige Health-Event-Phasen | V4 zeigt Start, Ende, Typ, Label, Schweregrad und Notiz aus `health_event_periods`: `health_dashboard_v4.py:364, 512, 990`. | V5 hat nur aggregierte `medication_phase`-Dimensionen in Korrelationsergebnissen, keine konkreten Zeitraumereignisse: `data_provider.py:267-319`; `render.py:68`. | offen | **V5 → Kalender/Tag** | | 18 | Einheitliche Gesundheitstimeline | V4 führt Medikation, Symptome, Health Events, Ernährung und Labore chronologisch zusammen und filtert 7/30/90/Alle: `health_dashboard_v4.py:697-710, 873-877, 970-973`. | V5 besitzt separate Ereignisspuren, aber keinen domänenübergreifenden chronologischen Tages-/Timeline-Contract; Provider liefert nur Medikationsereignisse: `render.py:53,65`; `data_provider.py:350-360`. | offen | **V5 → Kalender/Tag** | | 19 | Vollständige mobile Symptom-Tageserfassung | V4-Formular verlangt sieben Dimensionen 0–3 und optionale Notiz: `health_dashboard_v4.py:965-968`. Server validiert Same-Origin, Einmal-CSRF, exakte Scores und private Queue: `health_dashboard_server.py:253-327, 355-416`; V4-Tests: `test_health_dashboard_v4.py:317-437`. | V5 nutzt denselben gehärteten Queuepfad mit festem `return_to=v5`, Zürich-Tagesdatum und Einmalbestätigung: `render.py:48-51`; `health_dashboard_server.py:231-287, 408-413`; Sprint-5C-Tests: `test_dashboard_v5_capture_sprint5c.py:49-204, 311-318`. | verbessert | **V5 → Heute** | | 20 | Symptomverläufe je Dimension, Gesamtscore, Baseline und Marker | V4 zeigt sieben Einzelreihen, vollständigen Total-Score, 14-Tage-Medianbasis sowie Medikations-/Eventmarker: `health_dashboard_v4.py:522-540, 712-738`. | V5-Provider erzeugt nur `symptom.total`; unvollständige oder doppelte Tage werden korrekt ausgeschlossen: `data_provider.py:97-118, 326-349`; Registry: `metric_registry.py:24`. Tests bestätigen Missingness und Duplikatsicherheit: `test_health_dashboard_v5.py:52-94`. Einzelne Dimensionen fehlen als Verlauf. | offen | **V5 → Explorer** | | 21 | Mahlzeiten-/Tagesexplorer mit Makros und Lebensmitteleinträgen | V4 zeigt Tage, Mahlzeiten, Items, Mengen, Kalorien, Makros, Nährstoffdetails und Klassifikationsstatus: `health_dashboard_v4.py:541-616, 945-955`. | V5-Provider liefert nur Tageszusammenfassung, Histaminstatus, Itemzahl und unbekannte Zuordnungen; keine Mahlzeiten oder Items: `data_provider.py:240-264`; UI nur Summary, Histaminchart und Mapping: `render.py:70`. | offen | **V5 → Ernährung** | | 22 | Histaminverlauf gegen dokumentierte Symptome | V4 stellt Histamin-Load und vollständigen Symptomscore auf gemeinsamen Kalenderdaten dar: `health_dashboard_v4.py:541-555, 849, 950`. | V5 hat getrennte Registry-Reihen `nutrition.histamine` und `symptom.total`, die im Rohmodus wegen verschiedener Overlay-Gruppen nicht gemeinsam auswählbar sind; Baseline-Presets bleiben getrennt: `metric_registry.py:24-30, 34-70`. Korrelationsergebnisse existieren separat. | offen | **V5 → Explorer** | | 23 | Multimodale Korrelationen, Lags und Behandlungsphasen | V4 zeigt phasenstratifizierte Aggregate mit Lag, n, Coverage, rho, q, Status und Interpretation: `health_dashboard_v4.py:383-393, 620-644, 950`; Sprint 2 beschreibt die Evidenzgrenzen: `sprint2-multimodal-correlations-v1.md:29-68`. | V5 validiert Aggregate erneut und liefert strukturierte Dimensionen, Samples, Statistik und Quality-Flags: `data_provider.py:267-319`; Explorer hat Lag-, Scatter- und Phasenpanels: `render.py:62-69`. Sprint 5B beschreibt die verbesserte gekoppelte Explorer-Darstellung: `sprint5b-dashboard-v5-explorer.md:15-24, 57-70`. | verbessert | **V5 → Explorer** | | 24 | Persönliche Lebensmittelverträglichkeit | V4 zeigt manuell dokumentierten Status, Evidenz, Notiz und Aktualisierung mit einschränkender Formulierung: `health_dashboard_v4.py:394, 650-659, 951`. | Weder `data_provider.py` noch `render.py` enthalten persönliche Toleranzen. Sprint-6-Audit ordnet die Rückkehr später dem Ernährungsbereich zu: `healthmanager-v5-repo-audit-zielbild-sprint6.md:1123-1149`. | offen | **V5 → Ernährung** | | 25 | Low-Histamin-Experimente und Phasen | V4 zeigt Start/Ende, Phase, dokumentierte Exposition, Status und Hypothese/Notiz: `health_dashboard_v4.py:740-745, 952`; Sprint 3 bestätigt die N-of-1-Dokumentationsansicht: `sprint3-dashboard-v4.md:36-38`. | Kein Experimentvertrag und keine Experimentansicht in den geprüften V5-Dateien. Korrelationsphasen ersetzen keine konkreten Experimente. | offen | **V5 → Ernährung** | | 26 | Mapping-Review-Queue | V4 zeigt Produktbeispiel, Vorkommen, erstes/letztes Auftreten und Grund: `health_dashboard_v4.py:382, 645-648, 953`. | V5 liefert offene Mappings und erzeugt eine Aufgabe, reduziert aber auf Name, Anzahl und konstanten Grund; erste/letzte Sichtung und gespeicherter Grund fehlen: `data_provider.py:258-264, 354-355`; UI: `render.py:70`. | offen | **V5 → Ernährung** | | 27 | Lebensmittel-Missingness und explizite Null | V4 behandelt unvollständige Histaminzuordnung als unbekannt und echte Null als Wert: `health_dashboard_v4.py:105-122, 541-555`; V4-Test: `test_health_dashboard_v4.py:133-146`. | V5 bewahrt die Semantik im Bundle und markiert vollständige/unvollständige Tage explizit: `data_provider.py:240-257, 330-335`; Test: `test_health_dashboard_v5.py:190-204`. | verbessert | **V5 → Ernährung** | | 28 | Legacy-Keywordscore für Ernährungsplan-Treue | Hilfsfunktionen existieren noch: `health_dashboard_v4.py:282-318`; der aktive V4-Pfad regeneriert sie ausdrücklich nicht, weil unvollständige Logs sonst zu Nicht-Expositionen würden: `health_dashboard_v4.py:365-366`. Test verlangt, dass keine Legacy-Features geschrieben werden: `test_health_dashboard_v4.py:101-105,165`. | V5 liest diese Legacy-Tabelle nicht. Sprint 2 dokumentiert die Deaktivierung der Missing-as-zero-/Legacy-Kandidaten: `sprint2-multimodal-correlations-v1.md:43-50`. | bewusst entfernt | **V5 → Ernährung** | | 29 | Systemstatus und Datenbank-Zähler | V4 zeigt `db_counts()` als Systemstatuskarten: `health_dashboard_v4.py:347-350, 507, 988`. | V5 hat nur die leere Shell `Daten & System`; Provider liefert keine Systemzählung: `render.py:72`; `data_provider.py:356-363`. | offen | **V5 → Daten & System** | | 30 | System-/Legacy-Rohlisten | V4 enthält Medikationsrohdaten, Perioden, Labor-PDFs, klinische Events und letzte Legacy-Dokumente: `health_dashboard_v4.py:984-994`. | Keine entsprechenden Listen in den geprüften V5-Dateien. Es gibt auch keine dokumentierte Entscheidung, welche Rohlisten dauerhaft entfallen dürfen; Sprint-6-Audit verlangt deshalb eine explizite Paritätszuordnung: `healthmanager-v5-repo-audit-zielbild-sprint6.md:123-145`. | offen | **V5 → Daten & System** | | 31 | Lokale Dokument-/Report-Auslieferung und gehärtete Runtime | V4 nutzt lokale Chart-, Dokument- und Reportrouten: `health_dashboard_v4.py:824-835`. Server begrenzt Hosts, Assets, Pfade, Methoden und setzt CSP/no-store/Sicherheitsheader: `health_dashboard_server.py:38-74, 418-537`; Tests: `test_health_dashboard_v4.py:221-309`. | V5 wird parallel über `/health-dashboard-v5` und exakt allowlistete Assets ausgeliefert: `health_dashboard_server.py:25-51, 426-463`; Test: `test_health_dashboard_v5.py:402-436`. V4 bleibt Fallback. | verbessert | **V5 → globale App-Shell** | ### Mechanisches Gesamtbild - **verbessert:** Heute/Übersicht, Ansichts-Shell, sichere Medikationszusammenfassung, mobile Symptomerfassung, Korrelationsvertrag/-Explorer, Ernährungs-Missingness und gehärtete Runtime. - **bewusst entfernt:** der aktive Legacy-Keywordscore für Ernährungsplan-Treue; die Entfernung ist durch Missingness-Sicherheit begründet. - **offen:** insbesondere breite Apple-Trends, Apple-Datenqualität, Laborfinder/-verläufe, Dokumente/PDFs in der V5-Oberfläche, Timeline, allgemeine Health Events und Phasen, Medikationshistorie, Symptomdimensionen, Mahlzeitendetails, persönliche Verträglichkeit, Experimente, vollständige Mapping-Queue, Datenqualität sowie System/Legacy. ### Ausführung und Änderungen - **Geändert/erstellt:** keine Dateien. - **Tests:** nicht ausgeführt, um den ausdrücklich read-only gehaltenen Repositoryzustand nicht durch Testcache oder Artefakte zu verändern; vorhandene Testquellen wurden mechanisch ausgewertet. - **Probleme:** keine Zugriffsprobleme. Die tatsächliche V5-Browserlogik in JS/CSS lag außerhalb des erlaubten Dateiscopes; Aussagen dazu wurden daher nur übernommen, soweit sie in erlaubten Tests oder Sprintdocs belegt sind.