57 Commits
Author SHA1 Message Date
admin 1fc9f4235e Merge pull request 'pflegepilot_v3: seniorenfreundliches Zweit-Design des Interview-Assistenten (Testroute)' (#7) from feature/interview-design-senioren into master
Ungetestet Merged, da Lokal nicht testbar. Muss auf Live getestet werden.

Reviewed-on: http://192.168.1.222:3666/admin/pflegefuchs/pulls/7
2026-08-10 21:05:59 +02:00
adminandClaude Sonnet 5 a73905cff1 pflegepilot_v3: seniorenfreundliches Zweit-Design des Interview-Assistenten (Testroute)
Zweite Design-Variante des "Neuer Patient"-Interviews unter /patienten/neu-senioren
- eigene, komplett unverlinkte Route, bewusst kopiert statt geteilt, damit die
produktive Route /patienten/neu unangetastet bleibt. Grosse Schrift, hoher
Kontrast, groessere Bedienflaechen fuer aeltere Nutzer:innen.

- Skalierung per CSS `zoom` auf dem Aussen-Container statt harter Groessen-
  Klassen, damit auch importierte Unterkomponenten (DateInput, EgkScan,
  KrankenkasseAutocomplete, InfoTooltip) automatisch mitskalieren.
- Kontrastreichere Textfarben, dickere Rahmen, groessere Checkboxen/Buttons.
- Aktueller Schrittname jetzt als sichtbarer Text statt nur als Hover-Tooltip.
- Gelber Hinweisbanner "Testversion" oben auf der Seite.
- Verifiziert per echtem Browser-Test (lokale Docker-Instanz) durch alle 7
  Schritte des Assistenten; next build/tsc/eslint fehlerfrei.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 20:42:23 +02:00
admin e5ed7b4cf3 Merge pull request 'Notfall-Card: "Zuletzt aktualisiert am"-Zeitstempel' (#1) from feature/notfallkarte-zeitstempel into master
Reviewed-on: http://192.168.1.222:3666/admin/pflegefuchs/pulls/1
2026-08-10 07:23:50 +02:00
adminandClaude Sonnet 5 f9c2883b6b pflegepilot_v3: Notfall-Card zeigt "Zuletzt aktualisiert am"-Zeitstempel
Sowohl in der Patientenakte als auch auf der oeffentlichen Notfall-Card-
Seite ist jetzt ersichtlich, wann die Notfalldaten (Blutgruppe, Allergien,
Medikamente, Notfallkontakt) oder eine neue Patientenverfuegung zuletzt
geaendert wurden. Neues Feld Patient.notfallkarte_daten_aktualisiert_am,
wird nur bei echter inhaltlicher Aenderung gesetzt, nicht bei jedem
Speichern des Bearbeiten-Formulars. Changelog-Eintrag 1.18.5.

Ausserdem: neuer CLAUDE.md-Abschnitt zum kuenftigen PR-Workflow ueber
Gitea (dieser Commit ist der erste PR unter dem neuen Schema).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 07:22:09 +02:00
adminandClaude Sonnet 5 a7ddc3990d pflegepilot_v3: Pflegegrad vermutet/bestaetigt, Notfall-Card, PDF-Volltextsuche-Erweiterung, UI-Politur
- T34-Anschluss/T35/T36: Pflegegrad "vermutet" vs. "bestaetigt" (Sync aus
  Antrag-Rueckmeldung), ressourcenorientiertes Interview Schritt 4
  (Faehigkeits-Checklisten statt Defizit-Auswahl), optionales
  4-Wochen-Pflegetagebuch mit Anhang-PDF beim Musterbrief.
- T37: Notfall-Card - oeffentlicher, unauthentifizierter QR-Code-Zugriff auf
  feste Notfall-Basisdaten (Blutgruppe, Allergien, Medikamente,
  Notfallkontakt) + aktuelle Patientenverfuegung, Token-Hash ohne Ablauf/
  Einmalgebrauch, Zugriffs-Log mit IP+Zeitstempel. Zwei Nachdeploy-Bugs
  behoben (Zugriffs-Log-IP am Reverse-Proxy vorbei, kaputter
  Patientenverfuegung-Link ueber ||statt ?? bei leerer NEXT_PUBLIC_API_URL).
- T30-Nachtrag: Volltextsuche jetzt auch fuer normal hochgeladene PDFs
  (nicht nur Kamera-Scans), inkl. Admin-Aktion zur rueckwirkenden
  Nachverarbeitung bestehender PDFs. Bugfix: seite.get_text() konnte bei
  verschluesselten/beschaedigten PDFs den kompletten Upload mit 500
  abbrechen lassen (Datei landete auf der Platte, aber nie in der DB) -
  jetzt zweifach gegen Fehler abgesichert.
  Zusaetzlich: Fortschrittsanzeige (deaktivierte Eingabe + Balken) waehrend
  Upload/Texterkennung, damit Laien nicht versehentlich mehrfach hochladen.
- Sidebar ist jetzt sticky (vorher durch Flexbox-Stretch auf die Hoehe des
  Hauptinhalts gedehnt, "Abmelden" nur durch Scrollen der gesamten Seite
  erreichbar).
- Notfall-Card-Bereich im Bearbeiten-Formular farblich hervorgehoben statt
  im Fliesstext unterzugehen.
- Neue Architektur-Uebersicht als draw.io-Datei (Sitemap + Datenfluss
  Frontend/API/Backend/Datenbank je Themenbereich).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-08 10:38:48 +02:00
adminandClaude Sonnet 5 023f2dd147 Doku: CLAUDE.md, Changelog und Tester-Feedback-Backlog auf aktuellen Stand
Rohfeedback (Zeilen 40-58) sowie die daraus abgeleiteten T26-T37-Punkte in
Feedbackfromtester.md aufgenommen und deren Bearbeitungsstand nachgezogen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 09:42:51 +02:00
adminandClaude Sonnet 5 4243a63a30 pflegepilot_v3: Tester-Feedback-Nachtrag T26-T33 - Datumsfelder, Wegweiser-Guide, Antrag-Duplikat-Schutz/Loeschen, durchsuchbare Dokumenten-Scans
- T26: DateWheelPicker durch reine Zahlenfeld-Eingabe TT.MM.JJJJ ersetzt
  (components/DateInput.tsx), inkl. Validierung auf kalendarisch moegliche
  Werte und Fix eines Folgebugs (fuehrende Null ueberschrieb laufende
  Eingabe durch einen Echo-Loop im Sync-Effekt).
- T28: fuenfter Guide "Umzug ins Pflegeheim".
- T29: serverseitiger Zeitfenster-Duplikat-Schutz gegen doppelt erzeugte
  Antraege/Briefe, sowie ein bis dahin komplett fehlender
  DELETE /api/antraege/{aid}-Endpunkt samt Frontend-Button.
- T30: Dokumenten-Scans bekommen eine unsichtbare OCR-Textebene
  (durchsuchbares PDF ueber Tesseracts eigenen PDF-Renderer + pypdf fuers
  Zusammenfuegen), Volltextsuche ueber die Dokumente, "Text anzeigen"-
  Button zum Markieren/Kopieren in andere Formulare.
- T32: Musterbrief nennt jetzt automatisch die Pflegeperson, sofern beim
  Patienten hinterlegt.
- T33: Interview Schritt 6 braucht jetzt eine explizite Bestaetigung statt
  automatisch zur naechsten Frage zu springen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 09:42:42 +02:00
adminandClaude Sonnet 5 ad68d501d0 pflegepilot_v3: echtes Logo + Favicon eingebunden, Rubrik "Wegweiser fuer schwierige Momente" umbenannt
Fuchs-Logo (dunkle Variante fuer helle Hintergruende, weisse Variante fuer
den dunklen E-Mail-Header) in App-Sidebar, Marketing-Header, Login-Box und
als SEO-/OpenGraph-Bild eingebaut, neues Favicon ersetzt den Next.js-
Standard. In derselben Sidebar-Datei zugleich die Umbenennung von
"Krisen-Checkliste" zu "Wegweiser fuer schwierige Momente" (T27).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 09:42:18 +02:00
adminandClaude Sonnet 5 5f455f13ca pflegepilot_v3: E-Mails gebuendelt und im MeinPflegeFuchs-Design mit persoenlicher Anrede
Katalog-Aenderungsbenachrichtigungen kamen bislang als eine Einzelmail pro
geaenderter Leistung - jetzt eine gebuendelte Mail pro Empfaenger und
Durchlauf. Alle 7 proaktiven Mailtypen bekommen ein gemeinsames HTML-Design
(app/email_templates.py) statt reinem Text, inklusive einer per Vorname
personalisierten Begruessungszeile statt einer im Fliesstext untergehenden
"Hallo X,"-Anrede.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 09:42:01 +02:00
adminandClaude Sonnet 5 54bad3e94b pflegepilot_v3: Leistungskatalog auf Stand 01/2026 gebracht
Pflegegeld, Pflegesachleistung, Tages-/Nachtpflege, vollstationaere Pflege
(jetzt auch Pflegegrad 1) und weitere Betraege gegen die vom Betreiber
bereitgestellten BMG-Quelldokumente abgeglichen und aktualisiert. Quellen
als Referenzmaterial mit committed (gleiche Konvention wie Anleitung.md/
Leistungen.md).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 09:41:48 +02:00
adminandClaude Sonnet 5 8a578d8aa1 pflegepilot_v3: Admin-Dashboard - E-Mail-Log, Scheduler-Status, Speicherplatz, Statistik-Seite, Test-Mail, Konto-Hartloeschen
E-Mail-Versand-Protokoll (email_log) mit Erfolgs-/Fehlerquote, Systemstatus
der 4 Hintergrund-Scheduler, Speicherplatz-Uebersicht, eine neue
Statistik-Seite (Konten-Wachstum, Pflegegrad-Verteilung, Antrags-
Erfolgsquote, Umsatz, Aktivierung, Time-to-Value, Retention) mit
abhaengigkeitsfreien Inline-SVG-Balkendiagrammen, eine Test-Mail-Funktion
zum Pruefen aller proaktiven Mailtypen, sowie Hard-Delete fuer Nutzerkonten
inkl. Begruendungspflicht/Audit-Log.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 09:41:38 +02:00
adminandClaude Sonnet 5 55806bb962 pflegepilot_v3: Antragsstatus-Tracking + automatischer Widerspruchs-Vorschlag (T25)
Periodische Magic-Link-Erinnerungsmail ("ist der Bescheid da?"), bei
Ablehnung eines Pflegegrad-Antrags eine "Keine Sorge"-Seite mit
eingebettetem Mini-Widerspruch-Generator, sowie eine Fristeskalationsmail
kurz vor Ablauf der Widerspruchsfrist.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 09:41:13 +02:00
adminandClaude Sonnet 5 552570e696 Doku: workflow.md, CLAUDE.md und Tester-Feedback-Backlog auf aktuellen Stand
- Neue workflow.md: ASCII-Diagramme aller sichtbaren Nutzer-Workflows in
  pflegepilot_v3, zur Pruefung auf Sackgassen/Bruchstellen.
- CLAUDE.md um alle Abschnitte dieser Session ergaenzt (Produktions-Build,
  Autofill, T19-T22/T24, Interview-Wizard-Ueberarbeitung, Button-Stile).
- Feedbackfromtester.md/.txt: Backlog auf T19-T22 und T24 als erledigt
  aktualisiert, nur noch T25 offen.
- .gitignore: Secret.png ergaenzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 21:42:45 +02:00
adminandClaude Sonnet 5 467e05ccd5 pflegepilot_v3: einheitliche Button-Stile statt Text-Links, Mobile-Fixes
Neue geteilte Button-Stile (lib/theme.ts: buttonStyles) ersetzen das
verbreitete Muster "unterstrichener Text" bei Aktionen wie Bearbeiten,
Loeschen, PDF und allen "+"-Funktionen - wirkte optisch nach Entwicklung
und war auf Touch-Geraeten schwer treffsicher. Angewendet auf Patientenakte,
Budget-Tracker, Dashboard, Admin-Dashboard, Changelog-Admin und Aufgaben.

Zusaetzlich zwei Mobile-Responsivitaets-Fixes auf der Patientenakte: das
Dokumenttyp-Auswahlfeld bekam eine explizite volle Breite, und der native
Datei-Upload-Button (der unter Tailwind-Preflight seine Browser-Chrome
verliert und dadurch wie reiner Fliesstext wirkte) wird jetzt ueber
Tailwinds file:-Variante gezielt wie ein echter Button gestylt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 21:42:34 +02:00
adminandClaude Sonnet 5 dd47c14c5a pflegepilot_v3: Onboarding-Verbesserungen - Naechste-Schritte-Checkliste,
Interview-Wizard-Ueberarbeitung, Kalender-Sidebar-Badge

- Neue Komponente NaechsteSchritte.tsx: dynamische Fortschritts-Checkliste
  auf der Patientenakte (Antrag stellen -> Unterlagen hochladen -> Bescheid
  erhalten), Zielgruppen-personalisiert, Unterlagen-Schritt bindet die
  bestehende AntragCheckliste inline ein (T24).
- musterbrief-Seite unterstuetzt jetzt Query-Parameter-Vorbelegung
  (?patientId=&typ=) fuer die Verlinkung aus der Checkliste.
- Interview-Wizard Schritt 4: neutralere Fragenformulierung, Zielgruppe
  "Beduerftige/soziale Notlage" ueberspringt den Situationsfragen-Katalog
  komplett (dort ist er fachlich meist nicht das passende Instrument).
- Interview-Wizard Schritt 6: gefuehrter Ja/Nein-Fragen-Dialog fuer die 22
  Pflegekasse-Leistungen (SGB XI), waehlt passende Eintraege in der
  bestehenden Liste automatisch vor statt einer unkommentierten Langliste.
- Sidebar zeigt jetzt ein Badge mit der Anzahl ueberfaelliger Aufgaben beim
  Kalender-Nav-Punkt (T21).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 21:42:24 +02:00
adminandClaude Sonnet 5 19f7be3575 pflegepilot_v3: Produktions-Build (next build) + iOS-Safari-Autofill-Attribute
Frontend laeuft jetzt ueber einen echten mehrstufigen next-build-Produktions-
Build (output: standalone) statt next dev/Turbopack - vermutete Ursache
fuer haengenbleibendes "Laedt..." unter iOS Safari (HMR-Websocket im
Hintergrund). Ausserdem name-/autoComplete-Attribute auf praktisch allen
Formularfeldern der eingeloggten App nachgeruestet: ohne diese Attribute
trug iOS Safaris Autofill Werte teils direkt ins DOM ein, ohne das Event
auszuloesen, auf das Reacts kontrollierte Inputs lauschen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 21:42:13 +02:00
adminandClaude Sonnet 5 0190564d9b pflegepilot_v3: Hilfsmittel-Reminder, Aufgaben-Erinnerungen, Antrag-Typ-Bugfix
Wiederkehrende Wiedervorlage fuer Hilfsmittel mit Erneuerungspflicht (T19),
E-Mail-Erinnerungen 7/1 Tage vor Aufgaben-Faelligkeit (T20), neutralere
Formulierung der Pflegegrad-Situationsfragen. Ausserdem ein vorbestehender
Bug behoben: Musterbrief-Subtypen Eingliederungshilfe/Grundsicherung/
Blindenhilfe wurden im Antrag-Datensatz stillschweigend als "erstantrag"
gespeichert statt ihres echten Typs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 21:42:02 +02:00
adminandClaude Sonnet 5 69613a8a75 pflegepilot_v3: Feature-Ausbau (T1-T18 Tester-Backlog), System-Backup/Restore, Landingpage-SEO
Grosser Funktionsschub ueber mehrere Sessions: Vollmacht- und
Patientenverfuegung-Generator, Umkreissuche fuer Pflegedienste/Sanitaets-
haeuser/Wohnformen/Therapie inkl. Favoriten und Aenderungsbenachrichtigung,
Dokumenten-Scan sowie eGK-Kartenerfassung per Kamera, Budget-Tracker,
Krisen-Checklisten, PLZ-Autofill, Kalender-Export, Passwort-Reset per SMTP,
Checkliste vor Antragstellung, Leistungsauswahl/-rolle im Interview mit
Steuervorteil-Hinweis. Admin-seitig: System-Backup inkl. Wiederherstellung
aus einem hochgeladenen Archiv, ueberarbeitetes Dashboard mit Patienten-
Kacheln. Landingpage inhaltlich und fuer SEO ueberarbeitet (Server-
Metadaten, JSON-LD, robots.txt/sitemap.xml), Hero-Text und SEO-Meta ueber
die Backend-Einstellungen editierbar gemacht.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 20:36:33 +02:00
adminandClaude Sonnet 5 515c3eacf3 pflegepilot_v3: gestaffeltes Abo-Preismodell, Ummeldung-Generator, Patient bearbeiten
Preismodell auf Kundenfeedback umgestellt: 14,99 EUR Basispreis (1 Patient) +
4,99 EUR je zusaetzlichem Patienten statt Einheitspreis, dazu Self-Service-
Kuendigung (wirkt zum Ende der Laufzeit) und die passende Anpassung in
Admin-Dashboard/Rechnung/Landingpage. Der bisherige harte 3-Patienten-Deckel
entfaellt folgerichtig, da zusaetzliche Patienten jetzt bezahlpflichtig statt
begrenzt sind.

Neuer Ummeldung-Generator (Kundenfeedback: Umzug erfordert separate Meldung
an Krankenkasse und Rentenversicherung) erstellt beide Musterbriefe in einem
Schritt und aktualisiert die Patientenadresse. Dafuer neue Rentenversicherungs-
Stammdaten (DRV Bund + 15 Regionaltraeger) und ein Rentenversicherungsnummer-
Feld am Patienten.

Neue "Patient bearbeiten"-Seite schliesst die Luecke, dass Tippfehler bei der
Anlage bisher nicht korrigierbar waren.

Krankenkassen-Stammdaten von ~87 auf 94 deutsche GKV-Eintraege vervollstaendigt
(abgeglichen gegen die offizielle GKV-Spitzenverband-Liste) inkl. dreier dabei
gefundener Datenfehler: AOK Nordost/Berlin-Brandenburg-Duplikat mit falscher
Adresse, IKK Nord (seit 2021 umbenannt), actimonda BKK (seit 2021 fusioniert
und nicht mehr eigenstaendig).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 15:53:47 +02:00
adminandClaude Sonnet 5 b24f1a77ab Vollstaendige Landingpage statt Zweizeiler mit CTA
Bisher war (marketing)/page.tsx nur Titel + ein Satz + Link zur App.
Jetzt: Hero mit Value Proposition, Vorteile-Grid (Pflegegrad-Einschaetzung,
Katalog/Rechner, Widerspruch- und Musterbrief-Generator, Aufgaben/Kalender,
Pflegetagebuch/Dokumente - alles reale, bereits gebaute Features, keine
Ankuendigungen), Preis-Karte und ein DSGVO/Sicherheits-Abschnitt.

Rechtstexte (Impressum/Datenschutz/AGB) bekommen eigene oeffentliche Seiten
unter (marketing) - vorher gab es dafuer im Frontend noch gar keine Route,
nur das Admin-Formular zum Bearbeiten der Texte. Neuer Marketing-Layout
mit Header/Footer verlinkt sie auf jeder Marketing-Seite.

Backend: /api/einstellungen/public liefert jetzt zusaetzlich abo_preis/
abo_waehrung (gleiche Quelle wie /api/abo/status, das aber Login
voraussetzt), damit der Preis auf der oeffentlichen Landingpage nicht
separat hartkodiert werden muss und bei einer Preisaenderung nicht
auseinanderlaeuft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 20:34:10 +02:00
adminandClaude Sonnet 5 9e04200e90 Externen Zugriff via Reverse-Proxy (NPM) ermoeglicht: CORS auf mehrere Origins
WEB_ORIGIN unterstuetzt jetzt eine Kommaliste statt nur einer einzigen
erlaubten Origin - noetig, weil die App jetzt sowohl per LAN-IP (lokale
Tests) als auch ueber eine externe Domain hinter Nginx Proxy Manager
erreichbar ist. Gleiches Kommaliste-Muster wie NEXT_DEV_ALLOWED_ORIGINS
im Frontend, siehe aktualisierte .env.example.

Eigentliche Blockade war NEXT_PUBLIC_API_URL, das fest auf die private
LAN-IP:Port gesetzt war - von aussen nie erreichbar, daher haengende
"Laedt..."-Seite. Fix dafuer liegt in der Deployment-Konfiguration
(.env auf der NAS) und im Nginx-Proxy-Host (API jetzt unter /api auf
derselben externen Domain durchgereicht, dokumentiert im aktualisierten
.env.example-Kommentar).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 20:18:24 +02:00
adminandClaude Sonnet 5 621042f8dc Krankenkassen-Autocomplete: Dropdown blieb nach Auswahl offen
Bug in allen drei Vorkommen (Widerspruch-Generator, Musterbrief-Generator,
Interview-Wizard Schritt 3): die Trefferliste wurde ausschliesslich aus
"Suchtext passt zu Treffern" abgeleitet, ohne einen echten Auf/Zu-Zustand.
Nach der Auswahl entspricht der eingefuegte Name weiterhin der eigenen
Suchanfrage, die Liste blieb also unter dem Feld sichtbar - wirkte wie eine
doppelte Anzeige der Auswahl.

Neue gemeinsame KrankenkasseAutocomplete-Komponente ersetzt den dreifach
duplizierten Code: expliziter offen/geschlossen-State, schliesst nach Klick
auf einen Treffer, onMouseDown preventDefault verhindert das uebliche
Autocomplete-Problem dass der Blur-Handler das Dropdown schliesst bevor der
Klick auf den Treffer ueberhaupt registriert wird. Haelt sich zusaetzlich
per useEffect synchron, wenn der Wert von aussen gesetzt wird (Autofill
beim Patienten-Ausw��hlen).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 20:03:15 +02:00
adminandClaude Sonnet 5 afb2614e61 Design-Runde 2: Farbsystem, Akkordeons, UX-Nachbesserungen
Farbsystem (lib/theme.ts): 12 Akzentfarben an v2 angelehnt (mint/lavender/
peach/rose erweitert), durchgehend "-700/-800-Text auf -50-Hintergrund"
fuer garantierten WCAG-AA-Kontrast unabhaengig vom Farbton. Katalog-
Kategorien bekommen darueber eine feste, deterministische Akzentfarbe
(accentForKey-Hash), Mein Abo/Was-ist-neu/Kalender/Patientenakte-Sektionen
je einen Farbverlauf statt reinweiss auf hellgrau.

DateWheelPicker-Bug behoben: der Hervorhebungsbalken hinter der Auswahl
lag durch fehlenden z-index ueber statt hinter dem Text (absolut
positionierte Elemente malen unabhaengig von der DOM-Reihenfolge ueber
normalem Flow-Inhalt) - das ausgewaehlte Datum war dadurch weiss auf
weiss unlesbar.

Neue Collapsible-Komponente (CSS-grid-template-rows-Technik fuer sauberes
Auf-/Zuklappen) angewendet auf: Patientenakte (Antraege/Pflegetagebuch/
Dokumente), Kalender-Gruppen, Katalog-Kategorien, Admin-Audit-Log -
verhindert Ueberfuellen/zu langes Scrollen bei wachsenden Listen.

Widerspruch- und Musterbrief-Generator: das lange Formular klappt nach
erfolgreicher Erstellung automatisch ein (mit "Formular bearbeiten"-Button
zum manuellen Wiederoeffnen), damit das Ergebnis besonders auf Mobilgeraeten
ohne Scrollen sichtbar ist. Widerspruchsgruende-Normgruppen bekommen
farbige Badges statt reinem Fliesstext.

Neue geteilte AufgabeModal-Komponente (Titel, volle-Breite-3-Zeilen-
Beschreibung, Patient, Prioritaet, DateWheelPicker) ersetzt das zu kleine
Inline-Formular auf der Aufgaben-Seite und ermoeglicht eine neue
Schnellerstellen-Funktion direkt auf der Kalender-Seite.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 18:39:36 +02:00
adminandClaude Sonnet 5 61b7db30f0 Design-Feinschliff: Kontrast-Bug behoben, Sidebar-Navigation mit Mobile-Drawer
Hauptursache fuer "Text kaum lesbar": globals.css schaltete bei einem
System im Dark Mode automatisch auf helle Schrift auf dunklem Hintergrund
um (prefers-color-scheme), waehrend jede einzelne Komponente durchgehend
hartcodierte helle Tailwind-Klassen nutzt (bg-white, text-slate-800 etc.)
- keine ist dark-mode-bewusst. Ergebnis je nach Systemeinstellung: helle
Schrift auf hellem Hintergrund. Fix: die automatische Dark-Mode-Umschaltung
komplett entfernt, App rendert immer hell (passend zu allen Komponenten),
bis es einen echten Dark Mode gibt. Ausserdem: body ueberschrieb die
bereits geladene Geist-Schrift mit hartcodiertem Arial-Fallback - behoben.

Zusaetzlich alle 33 Stellen mit text-slate-400 (Kontrast ~2.9:1, faellt
WCAG AA durch) auf text-slate-500 (~4.6:1, besteht AA) angehoben.

Navigation vollstaendig neu gebaut: von einer horizontal umbrechenden
Topbar mit ~10 Textlinks (die am PC schlecht aussah und am Handy komplett
unbedienbar war, da nichts fuer Mobile vorgesehen war) zu einer echten
Sidebar mit Icons (@tabler/icons-react, wie im urspruenglichen Architektur-
plan vorgesehen aber bisher nie installiert) und gruppierten Abschnitten
(Patienten / Recht & Briefe / Verwaltung / Konto). Unter der lg-Breakpoint
wird die Sidebar zu einem Off-Canvas-Drawer mit Hamburger-Button und
Backdrop - gleiches Pattern wie die mobile Sidebar der alten App.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 18:13:21 +02:00
adminandClaude Sonnet 5 f59e04f62b Next.js Dev-Server: allowedDevOrigins fuer LAN-Zugriff (NAS-Deployment)
Beim Testen auf einem NAS per LAN-IP statt localhost blockierte Next.js'
Dev-Server standardmaessig die HMR-Websocket-Verbindung von der fremden
IP - im Turbopack-Dev-Modus haengt dadurch die Hydration komplett, die
Seite bleibt bei der server-gerenderten "Laedt..."-HTML stehen und kein
Client-JS (damit auch kein API-Fetch) laeuft je. Fix: konfigurierbare
allowedDevOrigins ueber die neue NEXT_DEV_ALLOWED_ORIGINS-Env-Var.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 17:51:32 +02:00
adminandClaude Sonnet 5 21e2b9f646 open.md/CLAUDE.md: Phase-6-Fortschritt beim Neubau nachgetragen - volle Feature-Paritaet erreicht
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 15:47:05 +02:00
adminandClaude Sonnet 5 b6dd56e6d1 Pflegepilot v3 Phase 6: Pflegetagebuch, Dokumente, Aufgaben & Kalender
Pflegetagebuch-CRUD, Dokumenten-Upload mit Extension-Whitelist ueber eine
autorisierte Download-Route (statt offen gemountetem static/, gleiches
Muster wie die Briefe-PDFs aus Phase 3), Aufgaben-CRUD (bisher nur
lesend im Dashboard vorhanden), und Kalender-Aggregation (offene
Aufgaben, Widerspruchsfristen, MDK-Gutachtertermine, Archivierungsfristen,
Pflegetagebuch-Erinnerungen) - 1:1-Logik-Port aus der alten App.

Mit echten Kontenlebenszyklen verifiziert: Mandantentrennung greift auch
bei Tagebuch-Loeschung und Dokumenten-Download (404 fuer fremde Patienten-
Daten), Datei-Whitelist blockt .exe, Kalender zeigt ueberfaellige Aufgaben
und blendet die Tagebuch-Erinnerung korrekt aus sobald ein heutiger
Eintrag existiert.

Frontend: Aufgaben-Seite mit Anlegen/Erledigen, Kalender-Seite gruppiert
nach Ueberfaellig/Naechste 30 Tage/Spaeter, Pflegetagebuch- und
Dokumente-Sektionen in der Patientenakte.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 15:46:29 +02:00
adminandClaude Sonnet 5 cf2bd7ce43 open.md/CLAUDE.md: Phase-5-Fortschritt beim Neubau nachgetragen
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 15:37:27 +02:00
adminandClaude Sonnet 5 3b80b0527a Pflegepilot v3 Phase 5: Abo-Gate, Rechnung, Changelog
Globales Abo-Gate (require_active_access) auf allen fachlichen Routern
scharf geschaltet, aber wirkungslos solange abo_pflicht (Default AUS) nicht
aktiviert ist - 1:1-Logik-Port aus _hat_aktiven_zugang(). Mit echtem
Ein/Aus-Test verifiziert: Admin/Demo immer durch, frisches Konto ohne Abo
bekommt 402, /me und /abo/status bleiben trotzdem erreichbar.

Rechnung nach § 14 UStG: fortlaufende Rechnungsnummer (Race-sicherer
Zaehler in einstellungen), serverseitige PDF-Erzeugung ueber denselben
WeasyPrint-Weg wie Widerspruch/Musterbrief, Netto/USt-Aufschluesselung
oder § 19-Kleinunternehmer-Hinweis je nach Einstellung. Bewusst keine
Persistierung der Rechnungs-PDF (nur die Nummer zaehlt, wie in der alten
App) - reiner Download.

Changelog-System 1:1 aus der alten App portiert (DB als Laufzeit-Quelle,
changelog_seed.py als Entwickler-Seed, Einweg-Sync). Dabei einen echten
Bug gefunden und behoben: Gunicorn startet 2 Worker-Prozesse, die beim
ersten Boot beide gleichzeitig die Startup-Sync ausfuehren - ohne Unique-
Constraint entstand ein doppelter Changelog-Eintrag (Race Condition,
reproduziert und mit mehreren Neustarts verifiziert). Fix: UNIQUE-
Constraint auf changelog_eintraege.version + ON CONFLICT DO NOTHING statt
eines Python-seitigen "SELECT vorhandene, dann INSERT fehlende"-Checks.

Frontend: Changelog-Modal beim Login (matcht altes UX), "Was ist neu?"-
Seite mit Admin-CRUD, "Mein Abo"-Seite, Backend-Einstellungen-Seite
(Betrieb/Rechtstexte/Abo/Rechnungsstellung), Rechnung-Button im
Admin-Dashboard.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 15:36:37 +02:00
adminandClaude Sonnet 5 d11fcea915 open.md/CLAUDE.md: Phase-4-Fortschritt beim Neubau nachgetragen
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 15:03:39 +02:00
adminandClaude Sonnet 5 7d3cff4d2d Pflegepilot v3 Phase 4: Admin-Dashboard, Audit-Log, DSGVO-Export
Nutzerverwaltung (Basis-CRUD + Sperren/Entsperren/Soft-Delete-mit-
Archivierung/Abo-Freischalten) und Admin-Router 1:1-Logik-Port aus der
alten App (_berechne_archiv_frist/_archiviere_patient -> archivierung.py,
_add_monate fuer die Abo-Verlaengerung). "Loeschen" bleibt bewusst ein
Soft-Delete: Konto wird gesperrt, aktive Patienten werden archiviert
(§ 630f BGB Aufbewahrungspflicht) statt hart geloescht - zusaetzlich durch
die ON DELETE RESTRICT-FK aus Phase 0 strukturell abgesichert. Jede
Admin-Aktion verlangt eine Begruendung und wird unveraenderlich im
Audit-Log protokolliert. DSGVO-Export buendelt alle Patientendaten +
Dateien (Briefe/Dokumente/Foto) als ZIP, generisch ueber alle SQLAlchemy-
Modelle serialisiert statt Tabelle fuer Tabelle von Hand.

Admin-Router nutzt APIRouter(dependencies=[Depends(require_admin)]) -
jede Route automatisch geschuetzt, kein Route-fuer-Route-Vergessen moeglich.

Mit echten Kontenlebenszyklen verifiziert: Sperren blockt Login sofort,
Selbstsperrung/-loeschung verboten, Hard-Delete nur ohne zugeordnete
Patienten moeglich, Soft-Delete archiviert korrekt.

Frontend: Admin-Dashboard-Seite (Kontentabelle, Begruendungs-Modal fuer
alle Aktionen, DSGVO-Export-Formular, Audit-Log-Liste). Navigation zeigt
Admin nur noch Dashboard-relevante Bereiche (Nutzer-Sektionen ausgeblendet,
automatische Weiterleitung in beide Richtungen).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 15:03:05 +02:00
adminandClaude Sonnet 5 50334fc811 open.md/CLAUDE.md: Phase-3-Fortschritt beim Neubau nachgetragen
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 14:56:46 +02:00
adminandClaude Sonnet 5 f389bea685 Pflegepilot v3 Phase 3: Katalog, Rechner, Antraege, Widerspruch & Musterbrief
Leistungskatalog (82 Eintraege) und Leistungsrechner-Tabelle 1:1 aus der
alten App portiert. Anspruchsvollster Teil: Widerspruch- und Musterbrief-
Generierung wandert von client-seitigem html2pdf.js komplett ins Backend
(WeasyPrint) - Brieftext-Logik (genW()/updM()) 1:1 nach briefe_text.py
portiert, WGRUENDE-Rechtsgrund-Bausteine (28 Eintraege) nach
static_data/widerspruch.py. PDFs landen unter app/uploads/briefe/<pid>/
und sind nur ueber eine get_owned_patient-geschuetzte Download-Route
erreichbar (Verbesserung gegenueber dem offen gemounteten static/ der
alten App) - mit zwei Konten verifiziert, dass fremde PDFs 404 liefern.

require_paid_access als erste scharf geschaltete Freemium-Sperre (Anwendung
auf Antraege/Widerspruch/Musterbrief-Routen) - mit frisch registriertem
Konto ohne Abo verifiziert (402), admin-angelegte/Demo-Konten bleiben
unbetroffen (selbst_registriert=False).

Frontend: Katalog- und Rechner-Seite, vollstaendiger Widerspruch-Generator
(Gruende gruppiert nach Norm, Beweismittel-Auswahl) und Musterbrief-
Generator (5 Antragstypen), Antraege-Liste mit PDF-Links in der
Patientenakte ergaenzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 14:56:14 +02:00
adminandClaude Sonnet 5 158ee8b411 open.md/CLAUDE.md: Phase-2-Fortschritt beim Neubau nachgetragen
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 14:09:24 +02:00
adminandClaude Sonnet 5 9289dc1957 Pflegepilot v3 Phase 2: 6-Schritte-Interview-Wizard fuer neue Patienten
Regelbasierte (nicht KI-gestuetzte) Pflegegrad-Schaetzung 1:1 aus der alten
App portiert (NEU_FRAGEN/NEU_ZG_OPTIONEN/neuSchaetzung -> pflegegrad_regeln.py
+ POST /api/pflegegrad/schaetzen), damit die Regel nur einmal zentral im
Backend existiert statt dupliziert im Frontend. Krankenkassen-Stammdaten
(~86 Versicherer DE/AT/CH) 1:1 portiert fuer die Autocomplete in Schritt 3.

Frontend: kompletter Wizard als useReducer-State-Maschine (Schritte 1-6,
verschachtelter Sub-Wizard in Schritt 4 mit Auto-Advance je Antwort ausser
bei der letzten Frage, Zurueck-Navigation landet korrekt auf der letzten
Frage), ersetzt das Kurzformular aus Phase 1.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 14:09:01 +02:00
adminandClaude Sonnet 5 899fa41b77 CLAUDE.md: pflegepilot_v3-Neubau im Repository-Layout dokumentiert
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 13:47:53 +02:00
adminandClaude Sonnet 5 c0a66ced8d open.md: Phase-1-Fortschritt bei Punkt 6 nachgetragen
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 13:47:18 +02:00
adminandClaude Sonnet 5 81156f5239 Pflegepilot v3 Phase 1: Patienten-CRUD, Mandantentrennung, Dashboard
get_owned_patient/scoped_patienten_query als typsichere FastAPI-Dependencies
(Ersatz fuer die alten SQL-String-Helper), Patienten-CRUD mit 3er-Cap pro
Konto, Notizen mit Aenderungshistorie, Pflegegrad-Patch, Dashboard-Route.
Frontend: ResponsiveTable/DateWheelPicker/BentoGrid als wiederverwendbare
Bausteine, Patientenliste, Patientenakte, Kurzformular fuer neue Patienten.

Isolation Ende-zu-Ende verifiziert: zweites Konto sieht/erreicht die
Patienten des ersten Kontos nicht (404 statt 403, um Existenz nicht zu
verraten), Admin sieht weiterhin alle Konten uebergreifend.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 13:46:48 +02:00
adminandClaude Sonnet 5 47f1665f0f Pflegepilot v3 Phase 0: FastAPI+PostgreSQL+Next.js-Grundgeruest
Kompletter Parallel-Neubau (open.md Punkt 6) neben der unveraenderten
Flask/SQLite-App, verifiziert per docker compose: Auth Ende-zu-Ende
(Login/Registrierung/Logout/Demo-Login), alle 11 Tabellen per Alembic
migriert, WeasyPrint-PDF-Smoke-Test, Admin-Konto gemeinsam angelegt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 13:36:10 +02:00
adminandClaude Sonnet 5 559d606d4f Sicherheits-Audit behoben: RCE-Risiko, Stored-XSS, Upload-Whitelist, Rate-Limiting
Alle 12 Findings aus dem Code-Review vom 2026-07-19 (open.md Punkt 5) gefixt:
Direktstart-Bindung auf 0.0.0.0 mit debug=True, fehlende Datei-Typ-Pruefung
beim Brief-Upload, ungesaeuberte X-Forwarded-For-IP im Admin-Dashboard,
fehlendes Rate-Limiting auf Login/Registrierung, fehlende Security-Header,
Freemium-Sperre umgehbar ueber /api/antraege, sowie mehrere kleinere Haertungen
(Passwort-Mindestlaenge, SVG-Upload, toter Code, unbenutzter Import).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 12:43:42 +02:00
adminandClaude Sonnet 5 eb6e3e157f Rechnungen rechtskonform nach § 14 UStG, eigene Rechnungsanschrift fuer Admin
Neue Backend-Karte "Rechnungsstellung": eigene Rechnungsanschrift und
Steuerdaten des Betreibers (Steuernummer, USt-IdNr., Kleinunternehmer-
regelung, USt-Satz) - bewusst getrennt von der Betrieb-Karte, da eine
Rechnung eine andere/vollstaendigere Anschrift braucht als das Branding.

Rechnungsnummer wird jetzt serverseitig atomar vergeben (neuer Endpoint
POST /api/admin/rechnungsnummer/naechste, Format {Jahr}-{Nummer:04d}) statt
geraten - Pflicht nach § 14 Abs. 4 Nr. 4 UStG (fortlaufend, einmalig). Die
generierte Rechnung weist je nach Kleinunternehmer-Einstellung entweder
Netto/USt-Satz/USt-Betrag/Brutto getrennt aus oder den Hinweis nach § 19
UStG - vorher fehlten Steuerdaten und Steuerausweis komplett.

Verifiziert per curl: Einstellungen speichern/lesen, fortlaufende
Rechnungsnummern ueber mehrere Aufrufe, Rechtepruefung (nur Admin), Docker-
Rebuild auf leerem Volume. Changelog-Eintrag 1.2.1 ergaenzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 20:07:24 +02:00
adminandClaude Sonnet 5 44b459bce6 open.md Punkte 1-4: Admin-Fokus, Selbstregistrierung, Rechnungen, Rechtstexte
- KI-Claude-API-Bereich im Backend entfernt (ungenutzt).
- Impressum/Datenschutz/Nutzungsbedingungen im Backend editierbar, oeffentlich
  abrufbar, per Sidebar-Link erreichbar - Betrieb-Karte bewusst NICHT entfernt
  (wird fuer PDF-Briefkopf/Sidebar-Branding aktiv gebraucht, Abweichung von
  der urspruenglichen open.md-Formulierung dokumentiert).
- Admin-Sidebar zeigt nur noch admin-relevante Bereiche, Login/Reload leitet
  Admin direkt auf das Admin-Dashboard statt das allgemeine Dashboard.
- Admin-Dashboard ist jetzt die vollstaendige Nutzerverwaltung: Bearbeiten-
  Button (inkl. Rechnungsanschrift), Registriert-am/Letzter-Login/IP-Spalten.
- Selbstregistrierung (POST /api/auth/registrieren, oeffentlich) mit
  Pflichtfeld Rechnungsanschrift; neue Konten duerfen sofort lesen, aber
  Briefe/Leistungen/Kalender-Eintraege anlegen ist gesperrt bis ein Abo
  vorliegt (selbst_registriert-Flag, unabhaengig vom globalen
  abo_pflicht-Schalter - admin-angelegte Konten sind nicht betroffen).
- Admin kann PDF-Rechnungen pro Konto erstellen (clientseitig, gleiche
  Technik wie Musterbrief/Widerspruch).
- Login-Seite zeigt keine Standard-Zugangsdaten (admin/admin) mehr an.
- Changelog-Eintrag 1.2.0 ergaenzt (siehe Aenderungs-Policy in CLAUDE.md).

Verifiziert per curl (kein Playwright, wie gewuenscht): alle vier Punkte
end-to-end getestet inkl. Schreibsperre/Freischaltung/Rechte-Trennung admin-
vs. selbstregistriert, sauberer Docker-Rebuild auf leerem Volume.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 19:53:23 +02:00
adminandClaude Sonnet 5 d8097e1cf5 Changelog admin-editierbar gemacht; open.md mit neuen Punkten umsortiert
Changelog laeuft jetzt DB-gestuetzt (Tabelle changelog_eintraege) statt rein
statisch aus changelog.py: die Datei bleibt der Entwickler-Seed fuer
Release-Notes zu echten Code-Aenderungen (synct einmalig beim Start alles
Fehlende in die DB), Admin kann Eintraege zusaetzlich direkt im Admin-Bereich
anlegen/bearbeiten/loeschen (neue Route /api/admin/changelog, Steuerung auf
der bestehenden "Was ist neu?"-Seite) - z.B. fuer Ankuendigungen ohne Deploy.
App-Version wird jetzt aus dem neuesten DB-Eintrag abgeleitet statt aus einer
Konstante. Policy ergaenzt: jede kuenftige Aenderung bekommt einen
Changelog-Eintrag, nicht nur eine Commit-Message.

open.md: die 4 vom Nutzer nach dem Docker-Testlauf notierten Punkte nach
Abhaengigkeit/Aufwand sortiert und als Checkliste formatiert (KI-Claude-API
entfernen + Rechtstexte statt "Betrieb"-Karte zusammen, dann
Nutzerverwaltung-Bug + Admin-Dashboard-Fokus, dann Rechnungsanschrift +
Rechnungserstellung, Postgres/React-Migration bleibt als Punkt 5 am Ende).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 19:27:02 +02:00
adminandClaude Sonnet 5 15270ecfa0 open.md: erledigte Punkte 1-3 durch neue Beobachtungen nach Docker-Testlauf ersetzt
Notizen zu Admin-Dashboard-Fokus (Nutzerverwaltung statt Leistungskatalog),
Ersatz der veralteten Betrieb-Sektion durch Impressum/Datenschutz/AGB, und
fehlender Funktionalitaet bei manuell angelegten Testkonten (sperren/loeschen/
Freimonate/Rechnungsanschrift) fuer die naechste Arbeitsrunde festgehalten.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 19:13:20 +02:00
adminandClaude Sonnet 5 c631508d42 Update-Benachrichtigung / Changelog-System hinzugefuegt
Neues Datenmodul changelog.py (neueste zuerst, App-Version wird automatisch
aus dem obersten Eintrag abgeleitet - fuer ein Release reicht ein neuer
Eintrag ganz oben). Jedes Konto merkt sich per nutzer.letzte_gesehene_version,
was es schon gesehen hat; nach Login erscheint einmalig ein Hinweis-Modal mit
allem Neuen, per "Gelesen"-Button quittierbar. Neu angelegte Konten starten
bewusst auf aktuellem Stand, bestehende Konten sehen bei einem echten Update
korrekt den Hinweis - wichtig jetzt, wo die App als versionierte Docker-Images
statt eines durchlaufenden Dev-Prozesses ausgeliefert wird. Dazu ein
dauerhafter Sidebar-Eintrag "Was ist neu?" mit Verlaufsansicht.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 18:58:25 +02:00
adminandClaude Sonnet 5 960bcd6dbf Docker-Containerisierung der App (Flask + SQLite, kein Rewrite)
Dockerfile, docker-compose.yml, requirements.txt und .env (gitignored) fuer
pflegepilot_alpha_v2/pflegepilot ergaenzt. Ein App-Service ueber Gunicorn,
Isolation der Daten ueber zwei benannte Volumes (db, static) statt eines
separaten DB-Containers, da SQLite eingebettet ist. Secret-Key kommt jetzt
aus der Umgebungsvariable SECRET_KEY (lokaler Fallback bleibt fuer
"python start.py" ohne Docker erhalten), Host-Port und Worker-Anzahl sind
ueber .env konfigurierbar. Bewusst keine Domain hinterlegt, da die
DynDNS-Domain erst spaeter auf die Testbench gelegt wird.

Dabei einen Bug in der DB-Migrationsreihenfolge gefunden und behoben: die
nutzer-Tabelle wurde zu spaet angelegt und liess auf einer komplett leeren
Datenbank (z.B. frisches Docker-Volume) mehrere Spalten fehlen, was den
Demo-Konto-Bootstrap zum Absturz brachte.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 18:25:10 +02:00
adminandClaude Sonnet 5 6bfb7a07b6 E-Mail-Versand von SMTP auf mailto-Weiterleitung umgestellt
Server-seitiger SMTP-Versand (Zugangsdaten, /api/email/senden, /api/email/test)
vollständig entfernt und durch mailto: ersetzt: PDF wird lokal generiert und
heruntergeladen, danach öffnet sich das E-Mail-Programm des Nutzers mit
vorausgefülltem Empfänger. Vorbereitung für die Docker-Containerisierung, da
dort nur ein Admin (der Betreiber) existiert und die Lösung ohne
rollenspezifische Ausnahmen für jedes Konto gleichermassen funktionieren muss.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 18:16:18 +02:00
admin af43371a5b Demo-Login fuer Vorfuehrungen (open.md Punkt 1)
- nutzer.ist_demo-Spalte, permanentes Konto demo/demo wird in init_db()
  automatisch angelegt
- Vorausgefuellte fiktive Patientin "Grete Musterfrau" (Pflegegrad 3,
  1 Antrag, 2 Leistungen, 2 Aufgaben, 1 Pflegetagebuch-Eintrag) -
  _demo_seed()
- Automatischer Reset alle 6 Stunden per Lazy-Check (kein Cron/Thread
  noetig): _demo_reset_faellig()/_demo_reset() geprueft bei Login und
  bei jedem Request (global_auth_check), damit auch eine laufende
  Sitzung die 6h-Grenze nicht verpasst
- Demo-Konto von der Abo-Zahlungspflicht ausgenommen (_hat_aktiven_
  zugang) - wurde erst beim Testen entdeckt: bei aktiver Zahlungspflicht
  waere das Demo-Konto sonst mit "Zahlung erforderlich" ausgesperrt
  worden, was fuer eine Vorfuehrung inakzeptabel waere
- E-Mail-Versand (api/email/senden + /test) fuer das Demo-Konto
  gesperrt (403) - verhindert Missbrauch der echten SMTP-Konfiguration
  durch Demo-Besucher
- Login-Screen: neuer "Demo ausprobieren"-Button; Topbar zeigt waehrend
  einer Demo-Sitzung ein "Demo-Modus"-Badge

open.md: Reihenfolge sortiert (Docker-Containerisierung und React+
Postgres-Migration als getrennte Aufgaben markiert, da voellig
unterschiedlicher Umfang), Punkt 1 als erledigt markiert.

Verifiziert: Login, vorausgefuellte Patientendaten, Isolation
(Demo sieht nur eigene Patientin), erzwungener Reset (Patient-ID
aendert sich, demo_reset_at aktualisiert), E-Mail-Sperre (403),
Abo-Ausnahme (Zugriff bleibt moeglich auch bei abo_pflicht=1),
Login-Button und Demo-Badge visuell per Playwright bestaetigt.
2026-07-18 17:48:48 +02:00
admin 8a2e338e9d Sanfte Klapp-Animation, gestaffelte Interview-Fragen, Antragsdatum-Wheel
- Akkordeon-Karten (rtable) animieren jetzt sanft statt abrupt:
  display:none/block durch max-height/opacity/padding-Transition
  ersetzt (display ist nicht transition-faehig, das war die Ursache
  des "Hau-Ruck"-Effekts). Per Mid-Transition-Screenshot verifiziert.
- Interview Step 4 (Pflegealltag-Fragen) zeigt jetzt eine Frage nach
  der anderen statt einer langen Liste: neuWiz.q4sub trackt die
  Position, eigener duenner Fortschrittsbalken (.subdots) innerhalb
  des Schritts. Antwort-Klick rueckt automatisch zur naechsten Frage
  vor, ausser bei der letzten (dort erst per bewusstem "Weiter").
  Zurueck von Schritt 5 landet korrekt auf der letzten Unterfrage.
- openGebDatumPicker generalisiert zu openDatePicker(hiddenId,dispId,
  {fallback,titel,icon,yearMin,yearMax}) und beim Antragsdatum (#adt)
  im Antrag-Pflegegrad-Formular eingesetzt (Default-Scrollposition:
  heute, nicht heute-75 Jahre wie beim Geburtsdatum - fuer nahe
  Termine ist "heute" die sinnvollere Startposition)

Verifiziert per Playwright: alle 6 Unterfragen in Step 4 einzeln
durchgeklickt (inkl. Stopp vor Step 5 bei der letzten Frage und
korrekte Zurueck-Navigation), Antragsdatum-Picker mit korrektem Titel/
Icon/Default getestet, Klapp-Animation per Mid-Transition-Screenshot
bestaetigt.
2026-07-18 13:33:43 +02:00
admin 7cb6191e83 Audit-Log als Karten, Geburtsdatum-Wheel-Picker, Sticky-Quickbar
Drei gezielte Mobile-Verbesserungen nach Nutzer-Feedback:

- Audit-Log (bisher .audit-row Flex-Liste mit festen min-width, auf
  Handy unlesbar zusammengequetscht) zu einer echten Tabelle mit
  class="tw rtable" umgebaut - erbt automatisch das bestehende Karten-
  Akkordeon (nur ein Eintrag offen, Rest kompakt gestapelt)
- Neuer Geburtsdatum-Wheel-Picker (Tag/Monat/Jahr-Spalten mit CSS
  scroll-snap, openGebDatumPicker/dwConfirm/dwTriggerLabel) ersetzt
  natives <input type=date> gezielt nur bei echten Geburtsdatum-Feldern
  (Interview-Wizard, Widerspruch-Generator, Musterbrief) - erspart bei
  60-100 Jahre zurückliegenden Daten das endlose Monat-für-Monat-
  Zurückklicken, auf PC (Mausrad) wie Touch gleich schnell. Andere
  Datumsfelder (Antragsdatum, Bescheiddatum etc.) bleiben nativ, da dort
  ein normaler Kalender fuer nahe Termine schneller ist. Default-
  Scrollposition ist heute-75 Jahre statt heute.
- Schnellzugriff-Kachel wird auf dem Dashboard unter 560px zur
  fixierten Bottom-Bar (Icon-Tab-Leiste) statt Teil des scrollbaren
  Bento-Grids zu sein - Hauptaktionen immer ohne Scrollen erreichbar

Verifiziert per Playwright: Wheel-Picker-Interaktion (Scroll per
Mausrad, Bestätigen, korrekter ISO-Wert im hidden Input), Audit-Log-
Karten auf 390px, Sticky-Bar sichtbar+fixiert im Viewport-Screenshot,
Widerspruch/Musterbrief-Trigger inkl. Live-Vorschau-Aktualisierung.
2026-07-18 13:13:17 +02:00