Files
pflegefuchs/pflegepilot_erp.html
admin f234399d28 Baseline commit: Pflegepilot Alpha v2 (lauffähiger Stand vor Refactoring)
Fixt außerdem UnicodeEncodeError in start.py (▶-Zeichen crashte auf
Windows-Konsolen mit cp1252-Codepage vor app.run()) durch UTF-8-Zwang
auf stdout/stderr.
2026-07-18 10:19:28 +02:00

504 lines
37 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--font-sans);background:var(--color-background-tertiary);color:var(--color-text-primary);font-size:14px}
.app{display:flex;height:100vh;min-height:600px}
.sidebar{width:220px;min-width:220px;background:var(--color-background-primary);border-right:0.5px solid var(--color-border-tertiary);display:flex;flex-direction:column;overflow:hidden}
.logo{padding:18px 16px 14px;border-bottom:0.5px solid var(--color-border-tertiary)}
.logo-text{font-size:16px;font-weight:500;color:var(--color-text-primary)}
.logo-sub{font-size:11px;color:var(--color-text-tertiary);margin-top:2px}
.nav{flex:1;overflow-y:auto;padding:8px 0}
.nav-section{padding:12px 16px 4px;font-size:11px;font-weight:500;color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}
.nav-item{display:flex;align-items:center;gap:9px;padding:8px 16px;cursor:pointer;border-radius:0;font-size:13.5px;color:var(--color-text-secondary);transition:background .12s}
.nav-item:hover{background:var(--color-background-secondary);color:var(--color-text-primary)}
.nav-item.active{background:var(--color-background-secondary);color:var(--color-text-primary);font-weight:500;border-left:2px solid #1D9E75}
.nav-item i{font-size:16px;width:18px;flex-shrink:0}
.nav-badge{margin-left:auto;background:var(--color-background-danger);color:var(--color-text-danger);font-size:11px;padding:1px 6px;border-radius:10px}
.main{flex:1;display:flex;flex-direction:column;overflow:hidden}
.topbar{background:var(--color-background-primary);border-bottom:0.5px solid var(--color-border-tertiary);padding:0 20px;height:52px;display:flex;align-items:center;gap:12px;flex-shrink:0}
.page-title{font-size:15px;font-weight:500;flex:1}
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border:0.5px solid var(--color-border-secondary);border-radius:var(--border-radius-md);background:transparent;color:var(--color-text-primary);cursor:pointer;font-size:13px;font-family:var(--font-sans);transition:background .12s}
.btn:hover{background:var(--color-background-secondary)}
.btn-primary{background:#1D9E75;border-color:#1D9E75;color:#fff}
.btn-primary:hover{background:#0F6E56;border-color:#0F6E56;color:#fff}
.content{flex:1;overflow-y:auto;padding:20px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.card{background:var(--color-background-primary);border:0.5px solid var(--color-border-tertiary);border-radius:var(--border-radius-lg);padding:16px 18px}
.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.card-title{font-size:13px;font-weight:500;color:var(--color-text-secondary)}
.metric-val{font-size:26px;font-weight:500;margin-top:4px}
.metric-sub{font-size:12px;color:var(--color-text-tertiary);margin-top:3px}
.badge{display:inline-flex;align-items:center;padding:2px 9px;border-radius:10px;font-size:12px}
.badge-green{background:#EAF3DE;color:#3B6D11}
.badge-amber{background:#FAEEDA;color:#854F0B}
.badge-blue{background:#E6F1FB;color:#185FA5}
.badge-red{background:#FCEBEB;color:#A32D2D}
.badge-gray{background:#F1EFE8;color:#5F5E5A}
.table{width:100%;border-collapse:collapse}
.table th{text-align:left;padding:8px 12px;font-size:12px;font-weight:500;color:var(--color-text-secondary);border-bottom:0.5px solid var(--color-border-tertiary)}
.table td{padding:10px 12px;border-bottom:0.5px solid var(--color-border-tertiary);font-size:13px;vertical-align:middle}
.table tr:last-child td{border-bottom:none}
.table tr:hover td{background:var(--color-background-secondary)}
.table-link{color:var(--color-text-info);cursor:pointer;text-decoration:none}
.table-link:hover{text-decoration:underline}
.avatar{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:500;flex-shrink:0}
.av-teal{background:#E1F5EE;color:#0F6E56}
.av-blue{background:#E6F1FB;color:#185FA5}
.av-amber{background:#FAEEDA;color:#854F0B}
.av-coral{background:#FAECE7;color:#993C1D}
.form-row{display:grid;gap:10px;margin-bottom:12px}
.form-row.cols2{grid-template-columns:1fr 1fr}
.form-row.cols3{grid-template-columns:1fr 1fr 1fr}
.form-group{display:flex;flex-direction:column;gap:4px}
label{font-size:12px;color:var(--color-text-secondary);font-weight:500}
input,select,textarea{border:0.5px solid var(--color-border-secondary);border-radius:var(--border-radius-md);padding:7px 10px;font-size:13px;font-family:var(--font-sans);background:var(--color-background-primary);color:var(--color-text-primary)}
input:focus,select:focus,textarea:focus{outline:none;border-color:#1D9E75}
.progress-bar{height:6px;background:var(--color-background-secondary);border-radius:4px;overflow:hidden;margin-top:6px}
.progress-fill{height:100%;border-radius:4px;background:#1D9E75;transition:width .4s}
.step-list{display:flex;flex-direction:column;gap:2px}
.step{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:0.5px solid var(--color-border-tertiary)}
.step:last-child{border-bottom:none}
.step-icon{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;flex-shrink:0;margin-top:1px}
.step-done{background:#EAF3DE;color:#3B6D11}
.step-active{background:#E6F1FB;color:#185FA5}
.step-pending{background:#F1EFE8;color:#888780}
.step-text{flex:1}
.step-title{font-size:13px;font-weight:500}
.step-desc{font-size:12px;color:var(--color-text-tertiary);margin-top:2px}
.section-divider{font-size:12px;font-weight:500;color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em;margin:18px 0 10px;padding-bottom:6px;border-bottom:0.5px solid var(--color-border-tertiary)}
.tag{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:var(--border-radius-md);background:var(--color-background-secondary);font-size:12px;border:0.5px solid var(--color-border-tertiary)}
.leistung-row{display:flex;align-items:center;justify-content:space-between;padding:9px 0;border-bottom:0.5px solid var(--color-border-tertiary)}
.leistung-row:last-child{border-bottom:none}
.leistung-name{font-size:13px}
.leistung-val{font-size:13px;font-weight:500;color:#0F6E56}
.alert{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:var(--border-radius-md);margin-bottom:12px}
.alert-info{background:#E6F1FB;border:0.5px solid #B5D4F4}
.alert-info i{color:#185FA5}
.alert-text{font-size:13px;color:var(--color-text-primary)}
.hidden{display:none}
</style>
<h2 class="sr-only">Pflegepilot – ERP-Verwaltungsoberfläche für Pflegeleistungen und Patientendaten</h2>
<div class="app">
<div class="sidebar">
<div class="logo">
<div class="logo-text"><i class="ti ti-heartbeat" aria-hidden="true" style="color:#1D9E75;margin-right:6px"></i>Pflegepilot</div>
<div class="logo-sub">Verwaltungssystem</div>
</div>
<nav class="nav">
<div class="nav-section">Übersicht</div>
<div class="nav-item active" onclick="showPage('dashboard')"><i class="ti ti-layout-dashboard" aria-hidden="true"></i>Dashboard</div>
<div class="nav-section">Patienten</div>
<div class="nav-item" onclick="showPage('patienten')"><i class="ti ti-users" aria-hidden="true"></i>Patientenliste</div>
<div class="nav-item" onclick="showPage('neu')"><i class="ti ti-user-plus" aria-hidden="true"></i>Neuer Patient</div>
<div class="nav-section">Formulare</div>
<div class="nav-item" onclick="showPage('antrag')"><i class="ti ti-file-text" aria-hidden="true"></i>Antrag Pflegegrad</div>
<div class="nav-item" onclick="showPage('leistungen')"><i class="ti ti-checklist" aria-hidden="true"></i>Leistungsübersicht</div>
<div class="nav-item" onclick="showPage('musterbrief')"><i class="ti ti-mail" aria-hidden="true"></i>Musterbrief</div>
<div class="nav-section">Aufgaben</div>
<div class="nav-item" onclick="showPage('aufgaben')"><i class="ti ti-bell" aria-hidden="true"></i>Offene Aufgaben<span class="nav-badge">3</span></div>
</nav>
</div>
<div class="main">
<div class="topbar">
<div class="page-title" id="page-title">Dashboard</div>
<button class="btn" onclick="showPage('neu')"><i class="ti ti-plus" aria-hidden="true"></i>Neuer Patient</button>
<button class="btn btn-primary" onclick="showPage('musterbrief')"><i class="ti ti-file-export" aria-hidden="true"></i>Brief erstellen</button>
</div>
<div class="content" id="content">
</div>
</div>
</div>
<script>
const pages = {
dashboard: {
title: 'Dashboard',
render: () => `
<div class="grid-4" style="margin-bottom:16px">
<div class="card">
<div class="card-title">Aktive Patienten</div>
<div class="metric-val">12</div>
<div class="metric-sub"><span class="badge badge-green">+2 diesen Monat</span></div>
</div>
<div class="card">
<div class="card-title">Offene Anträge</div>
<div class="metric-val">4</div>
<div class="metric-sub"><span class="badge badge-amber">Bearbeitung läuft</span></div>
</div>
<div class="card">
<div class="card-title">Bescheide erwartet</div>
<div class="metric-val">3</div>
<div class="metric-sub"><span class="badge badge-blue">In Prüfung</span></div>
</div>
<div class="card">
<div class="card-title">Widersprüche</div>
<div class="metric-val">1</div>
<div class="metric-sub"><span class="badge badge-red">Fristenkontrolle</span></div>
</div>
</div>
<div class="grid-2">
<div class="card">
<div class="card-header"><span class="card-title">Aktuelle Patienten</span><button class="btn" onclick="showPage('patienten')">Alle anzeigen</button></div>
<table class="table">
<thead><tr><th>Name</th><th>Pflegegrad</th><th>Status</th></tr></thead>
<tbody>
<tr><td><div style="display:flex;align-items:center;gap:8px"><div class="avatar av-teal">EH</div><span class="table-link" onclick="showPage('patient_detail')">Erika Huber</span></div></td><td>Grad 3</td><td><span class="badge badge-green">Genehmigt</span></td></tr>
<tr><td><div style="display:flex;align-items:center;gap:8px"><div class="avatar av-blue">KM</div><span class="table-link" onclick="showPage('patient_detail')">Klaus Meier</span></div></td><td>Beantragt</td><td><span class="badge badge-amber">In Prüfung</span></td></tr>
<tr><td><div style="display:flex;align-items:center;gap:8px"><div class="avatar av-amber">IM</div><span class="table-link" onclick="showPage('patient_detail')">Inge Müller</span></div></td><td>Grad 2</td><td><span class="badge badge-blue">Widerspruch</span></td></tr>
<tr><td><div style="display:flex;align-items:center;gap:8px"><div class="avatar av-coral">GS</div><span class="table-link" onclick="showPage('patient_detail')">Georg Schulz</span></div></td><td>Grad 5</td><td><span class="badge badge-green">Genehmigt</span></td></tr>
</tbody>
</table>
</div>
<div class="card">
<div class="card-header"><span class="card-title">Offene Aufgaben</span><button class="btn" onclick="showPage('aufgaben')">Alle</button></div>
<div class="step-list">
<div class="step"><div class="step-icon step-active"><i class="ti ti-clock" aria-hidden="true"></i></div><div class="step-text"><div class="step-title">Gutachter-Termin: Klaus Meier</div><div class="step-desc">Termin bestätigen – fällig in 3 Tagen</div></div></div>
<div class="step"><div class="step-icon step-active"><i class="ti ti-file-alert" aria-hidden="true"></i></div><div class="step-text"><div class="step-title">Widerspruch: Inge Müller</div><div class="step-desc">Brief muss bis Freitag abgesendet werden</div></div></div>
<div class="step"><div class="step-icon step-pending"><i class="ti ti-mail" aria-hidden="true"></i></div><div class="step-text"><div class="step-title">Antrag: Hildegard Braun</div><div class="step-desc">Erstantrag noch nicht abgeschickt</div></div></div>
</div>
</div>
</div>
`
},
patienten: {
title: 'Patientenliste',
render: () => `
<div class="card" style="margin-bottom:14px">
<div style="display:flex;gap:10px">
<input type="text" placeholder="Patient suchen..." style="flex:1" />
<select><option>Alle Pflegegrade</option><option>Grad 1</option><option>Grad 2</option><option>Grad 3</option><option>Grad 4</option><option>Grad 5</option></select>
<select><option>Alle Status</option><option>Genehmigt</option><option>In Prüfung</option><option>Abgelehnt</option><option>Widerspruch</option></select>
</div>
</div>
<div class="card">
<table class="table">
<thead><tr><th>Name</th><th>Geburtsdatum</th><th>Krankenkasse</th><th>Pflegegrad</th><th>Antragsdatum</th><th>Status</th><th>Aktion</th></tr></thead>
<tbody>
<tr><td><div style="display:flex;align-items:center;gap:8px"><div class="avatar av-teal">EH</div><span class="table-link" onclick="showPage('patient_detail')">Erika Huber</span></div></td><td>12.03.1942</td><td>AOK Bayern</td><td><span class="tag">Grad 3</span></td><td>15.01.2025</td><td><span class="badge badge-green">Genehmigt</span></td><td><button class="btn" onclick="showPage('patient_detail')"><i class="ti ti-eye"></i></button></td></tr>
<tr><td><div style="display:flex;align-items:center;gap:8px"><div class="avatar av-blue">KM</div><span class="table-link" onclick="showPage('patient_detail')">Klaus Meier</span></div></td><td>07.11.1938</td><td>TK</td><td><span class="tag">Beantragt</span></td><td>02.04.2025</td><td><span class="badge badge-amber">In Prüfung</span></td><td><button class="btn" onclick="showPage('patient_detail')"><i class="ti ti-eye"></i></button></td></tr>
<tr><td><div style="display:flex;align-items:center;gap:8px"><div class="avatar av-amber">IM</div><span class="table-link" onclick="showPage('patient_detail')">Inge Müller</span></div></td><td>23.06.1950</td><td>Barmer</td><td><span class="tag">Grad 2</span></td><td>10.11.2024</td><td><span class="badge badge-blue">Widerspruch</span></td><td><button class="btn" onclick="showPage('patient_detail')"><i class="ti ti-eye"></i></button></td></tr>
<tr><td><div style="display:flex;align-items:center;gap:8px"><div class="avatar av-coral">GS</div><span class="table-link" onclick="showPage('patient_detail')">Georg Schulz</span></div></td><td>14.08.1935</td><td>DAK</td><td><span class="tag">Grad 5</span></td><td>05.03.2024</td><td><span class="badge badge-green">Genehmigt</span></td><td><button class="btn" onclick="showPage('patient_detail')"><i class="ti ti-eye"></i></button></td></tr>
<tr><td><div style="display:flex;align-items:center;gap:8px"><div class="avatar av-teal">HB</div><span class="table-link" onclick="showPage('patient_detail')">Hildegard Braun</span></div></td><td>30.09.1947</td><td>AOK Bayern</td><td><span class="tag badge-gray">Offen</span></td><td>–</td><td><span class="badge badge-gray">Neu</span></td><td><button class="btn" onclick="showPage('antrag')"><i class="ti ti-file-plus"></i></button></td></tr>
</tbody>
</table>
</div>
`
},
patient_detail: {
title: 'Patient: Erika Huber',
render: () => `
<div class="alert alert-info"><i class="ti ti-shield-lock" style="font-size:18px;margin-top:1px" aria-hidden="true"></i><div class="alert-text"><strong>Datenschutz:</strong> Diese Ansicht enthält personenbezogene Daten. Bitte sicherstellen, dass nur befugtes Personal Zugang hat.</div></div>
<div class="grid-2" style="margin-bottom:14px">
<div class="card">
<div class="card-header"><span class="card-title">Stammdaten</span><button class="btn"><i class="ti ti-edit"></i>Bearbeiten</button></div>
<div class="form-row cols2">
<div class="form-group"><label>Vorname</label><input value="Erika" /></div>
<div class="form-group"><label>Nachname</label><input value="Huber" /></div>
</div>
<div class="form-row cols2">
<div class="form-group"><label>Geburtsdatum</label><input value="12.03.1942" /></div>
<div class="form-group"><label>Versichertennummer</label><input value="A123456789" /></div>
</div>
<div class="form-row">
<div class="form-group"><label>Anschrift</label><input value="Musterstraße 12, 82256 Fürstenfeldbruck" /></div>
</div>
<div class="form-row cols2">
<div class="form-group"><label>Telefon</label><input value="08141 / 55432" /></div>
<div class="form-group"><label>Krankenkasse</label><input value="AOK Bayern" /></div>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-title">Pflegestatus</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegegrad</span><span class="badge badge-green" style="font-size:14px;padding:4px 12px">Grad 3</span></div>
<div class="leistung-row"><span class="leistung-name">Antragsdatum</span><span>15.01.2025</span></div>
<div class="leistung-row"><span class="leistung-name">Bescheid erhalten</span><span>22.02.2025</span></div>
<div class="leistung-row"><span class="leistung-name">Gutachter-Besuch</span><span>08.02.2025</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegeperson</span><span>Tochter (privat)</span></div>
<div style="margin-top:14px">
<div style="font-size:12px;color:var(--color-text-secondary);margin-bottom:4px">Fortschritt: Pflegegrad-Prozess</div>
<div class="progress-bar"><div class="progress-fill" style="width:100%"></div></div>
<div style="font-size:11px;color:var(--color-text-tertiary);margin-top:4px">Abgeschlossen ✓</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-title">Aktive Leistungen</span></div>
<div class="grid-3">
<div style="padding:10px;background:var(--color-background-secondary);border-radius:var(--border-radius-md)">
<div style="font-size:12px;color:var(--color-text-tertiary)">Pflegegeld (mtl.)</div>
<div style="font-size:18px;font-weight:500;color:#0F6E56;margin-top:2px">773 €</div>
</div>
<div style="padding:10px;background:var(--color-background-secondary);border-radius:var(--border-radius-md)">
<div style="font-size:12px;color:var(--color-text-tertiary)">Entlastungsbetrag</div>
<div style="font-size:18px;font-weight:500;color:#0F6E56;margin-top:2px">131 €</div>
</div>
<div style="padding:10px;background:var(--color-background-secondary);border-radius:var(--border-radius-md)">
<div style="font-size:12px;color:var(--color-text-tertiary)">Hilfsmittel (mtl.)</div>
<div style="font-size:18px;font-weight:500;color:#0F6E56;margin-top:2px">42 €</div>
</div>
</div>
</div>
`
},
neu: {
title: 'Neuer Patient',
render: () => `
<div class="card">
<div class="section-divider">Persönliche Daten</div>
<div class="form-row cols3">
<div class="form-group"><label>Vorname *</label><input placeholder="Vorname" /></div>
<div class="form-group"><label>Nachname *</label><input placeholder="Nachname" /></div>
<div class="form-group"><label>Geburtsdatum *</label><input type="date" /></div>
</div>
<div class="form-row cols2">
<div class="form-group"><label>Straße & Hausnummer</label><input placeholder="Musterstraße 1" /></div>
<div class="form-group"><label>PLZ / Ort</label><input placeholder="82256 Fürstenfeldbruck" /></div>
</div>
<div class="form-row cols2">
<div class="form-group"><label>Telefon</label><input placeholder="08141 / ..." /></div>
<div class="form-group"><label>E-Mail (optional)</label><input placeholder="email@beispiel.de" /></div>
</div>
<div class="section-divider">Krankenversicherung</div>
<div class="form-row cols3">
<div class="form-group"><label>Krankenkasse *</label>
<select>
<option>– bitte wählen –</option>
<option>AOK Bayern</option><option>TK (Techniker Krankenkasse)</option>
<option>Barmer</option><option>DAK-Gesundheit</option>
<option>IKK classic</option><option>hkk</option>
<option>BKK</option><option>Privat versichert (PKV)</option>
</select>
</div>
<div class="form-group"><label>Versichertennummer *</label><input placeholder="A000000000" /></div>
<div class="form-group"><label>Versicherungsart</label>
<select><option>Gesetzlich (GKV)</option><option>Privat (PKV)</option></select>
</div>
</div>
<div class="section-divider">Pflegesituation</div>
<div class="form-row cols3">
<div class="form-group"><label>Aktueller Pflegegrad</label>
<select><option>Noch kein Antrag</option><option>Grad 1</option><option>Grad 2</option><option>Grad 3</option><option>Grad 4</option><option>Grad 5</option><option>Antrag laufend</option></select>
</div>
<div class="form-group"><label>Pflegeperson</label>
<select><option>Angehörige (privat)</option><option>Pflegedienst (ambulant)</option><option>Pflegeheim (stationär)</option><option>Kombination</option></select>
</div>
<div class="form-group"><label>Antragsdatum (falls vorhanden)</label><input type="date" /></div>
</div>
<div class="form-row">
<div class="form-group"><label>Notizen / Besonderheiten</label><textarea rows="3" placeholder="z. B. Demenzerkrankung, Mobilitätseinschränkungen ..."></textarea></div>
</div>
<div style="display:flex;gap:10px;margin-top:6px;justify-content:flex-end">
<button class="btn" onclick="showPage('patienten')">Abbrechen</button>
<button class="btn btn-primary" onclick="showPage('patienten')"><i class="ti ti-check" aria-hidden="true"></i>Patient anlegen</button>
</div>
</div>
`
},
antrag: {
title: 'Antrag Pflegegrad',
render: () => `
<div class="grid-2">
<div>
<div class="card" style="margin-bottom:14px">
<div class="card-header"><span class="card-title">Prozess: Pflegegrad beantragen</span></div>
<div class="step-list">
<div class="step"><div class="step-icon step-done"><i class="ti ti-check" aria-hidden="true"></i></div><div class="step-text"><div class="step-title">Schritt A – Antrag stellen</div><div class="step-desc">Brief / Anruf bei der Krankenkasse – Datum festhalten!</div></div></div>
<div class="step"><div class="step-icon step-active"><i class="ti ti-user-check" aria-hidden="true"></i></div><div class="step-text"><div class="step-title">Schritt B – Gutachter-Besuch</div><div class="step-desc">Prüfer kommt nach Hause. Pflegetagebuch vorbereiten.</div></div></div>
<div class="step"><div class="step-icon step-pending"><i class="ti ti-mail" aria-hidden="true"></i></div><div class="step-text"><div class="step-title">Schritt C – Bescheid abwarten</div><div class="step-desc">Krankenkasse hat 25 Arbeitstage Zeit. (~5 Wochen)</div></div></div>
<div class="step"><div class="step-icon step-pending"><i class="ti ti-file-alert" aria-hidden="true"></i></div><div class="step-text"><div class="step-title">Schritt D – Ggf. Widerspruch</div><div class="step-desc">Bei Ablehnung: Widerspruch innerhalb 1 Monat!</div></div></div>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-title">Patient zuordnen</span></div>
<div class="form-group" style="margin-bottom:10px"><label>Patient auswählen</label>
<select><option>– Patient wählen –</option><option>Hildegard Braun (neu)</option><option>Klaus Meier</option></select>
</div>
<div class="form-group" style="margin-bottom:10px"><label>Antragsdatum</label><input type="date" /></div>
<div class="form-group" style="margin-bottom:14px"><label>Krankenkasse</label>
<select><option>AOK Bayern</option><option>TK</option><option>Barmer</option><option>DAK</option></select>
</div>
<button class="btn btn-primary" style="width:100%" onclick="showPage('musterbrief')"><i class="ti ti-file-export" aria-hidden="true"></i>Musterbrief für diesen Patienten generieren</button>
</div>
</div>
<div class="card">
<div class="card-header"><span class="card-title">Pflegetagebuch-Checkliste</span></div>
<div class="alert alert-info"><i class="ti ti-info-circle" style="font-size:18px" aria-hidden="true"></i><div class="alert-text">Diese Punkte sollten <strong>vor dem Gutachter-Besuch</strong> täglich dokumentiert werden.</div></div>
<div style="display:flex;flex-direction:column;gap:8px">
${[
['Körperpflege','Waschen, Duschen, Haare kämmen'],
['Anziehen','Hilfe beim Ankleiden'],
['Ernährung','Hilfe beim Essen / Trinken'],
['Mobilität','Treppen, Gehen, Aufstehen'],
['Orientierung','Vergessen, Verwirrtheit, Tag/Nacht'],
['Medikamente','Selbstständige Einnahme möglich?'],
['Soziale Aktivitäten','Kontakte, Hobbys, Selbstständigkeit'],
].map(([t,d]) => `<div style="display:flex;align-items:flex-start;gap:8px"><input type="checkbox" style="margin-top:3px;width:auto;flex-shrink:0"><div><div style="font-size:13px;font-weight:500">${t}</div><div style="font-size:12px;color:var(--color-text-tertiary)">${d}</div></div></div>`).join('')}
</div>
</div>
</div>
`
},
leistungen: {
title: 'Leistungsübersicht',
render: () => `
<div class="grid-2">
<div class="card">
<div class="card-header"><span class="card-title">Pflegekasse – Geldleistungen (monatlich)</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegegeld (Grad 1)</span><span class="leistung-val">0 €</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegegeld (Grad 2)</span><span class="leistung-val">332 €</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegegeld (Grad 3)</span><span class="leistung-val">573 €</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegegeld (Grad 4)</span><span class="leistung-val">765 €</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegegeld (Grad 5)</span><span class="leistung-val">947 €</span></div>
<div class="leistung-row" style="background:var(--color-background-secondary);border-radius:var(--border-radius-md);padding:9px 8px;border:none;margin-top:8px"><span class="leistung-name" style="font-weight:500">Entlastungsbetrag (alle Grade)</span><span class="leistung-val">131 €</span></div>
<div class="leistung-row"><span class="leistung-name">Hilfsmittel (Verbrauch)</span><span class="leistung-val">42 €</span></div>
</div>
<div class="card">
<div class="card-header"><span class="card-title">Pflegekasse – Sachleistungen & Einmalig</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegesachleistung Grad 2</span><span class="leistung-val">761 €</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegesachleistung Grad 3</span><span class="leistung-val">1.432 €</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegesachleistung Grad 4</span><span class="leistung-val">1.778 €</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegesachleistung Grad 5</span><span class="leistung-val">2.200 €</span></div>
<div class="leistung-row"><span class="leistung-name">Wohnumfeldverbesserung (max.)</span><span class="leistung-val">4.180 €</span></div>
<div class="leistung-row"><span class="leistung-name">Gemeinsamer Jahresbetrag (ab 07/2025)</span><span class="leistung-val">3.539 €</span></div>
<div class="leistung-row"><span class="leistung-name">Wohngruppen-Zuschlag</span><span class="leistung-val">214 €</span></div>
</div>
<div class="card">
<div class="card-header"><span class="card-title">Krankenkasse – Hilfsmittel (Auswahl)</span></div>
<div class="leistung-row"><span class="leistung-name">Rollstuhl / Rollator</span><span class="badge badge-green">Kassenleistung</span></div>
<div class="leistung-row"><span class="leistung-name">Hörgerät</span><span class="badge badge-green">Zuschuss</span></div>
<div class="leistung-row"><span class="leistung-name">Kompressionsstrümpfe</span><span class="badge badge-green">Kassenleistung</span></div>
<div class="leistung-row"><span class="leistung-name">Pflegebett (technisch)</span><span class="badge badge-blue">Leihe / Zuschuss</span></div>
<div class="leistung-row"><span class="leistung-name">DiPA (Pflege-Apps)</span><span class="leistung-val">bis 50 €</span></div>
<div class="leistung-row"><span class="leistung-name">Hausnotruf</span><span class="badge badge-blue">Pflegekasse</span></div>
</div>
<div class="card">
<div class="card-header"><span class="card-title">Therapie (Krankenkasse, auf Rezept)</span></div>
<div class="leistung-row"><span class="leistung-name">Physiotherapie</span><span class="badge badge-green">Kassenleistung</span></div>
<div class="leistung-row"><span class="leistung-name">Ergotherapie</span><span class="badge badge-green">Kassenleistung</span></div>
<div class="leistung-row"><span class="leistung-name">Logopädie</span><span class="badge badge-green">Kassenleistung</span></div>
<div class="leistung-row"><span class="leistung-name">Podologie (bes. Diabetes)</span><span class="badge badge-green">Kassenleistung</span></div>
<div class="leistung-row"><span class="leistung-name">Häusliche Krankenpflege</span><span class="badge badge-blue">Mit Rezept</span></div>
<div class="leistung-row"><span class="leistung-name">DiGA (Digitale Therapie-Apps)</span><span class="badge badge-blue">Auf Rezept</span></div>
</div>
</div>
`
},
musterbrief: {
title: 'Musterbrief erstellen',
render: () => `
<div class="grid-2">
<div class="card">
<div class="card-header"><span class="card-title">Briefdaten eingeben</span></div>
<div class="section-divider">Absender (Antragsteller)</div>
<div class="form-row cols2">
<div class="form-group"><label>Vorname</label><input id="v_vor" placeholder="Maria" /></div>
<div class="form-group"><label>Nachname</label><input id="v_nach" placeholder="Mustermann" /></div>
</div>
<div class="form-row"><div class="form-group"><label>Straße & Hausnummer</label><input id="v_str" placeholder="Musterstraße 1" /></div></div>
<div class="form-row cols2">
<div class="form-group"><label>PLZ</label><input id="v_plz" placeholder="82256" /></div>
<div class="form-group"><label>Ort</label><input id="v_ort" placeholder="Fürstenfeldbruck" /></div>
</div>
<div class="form-row"><div class="form-group"><label>Telefon</label><input id="v_tel" placeholder="08141 / 12345" /></div></div>
<div class="section-divider">Empfänger (Krankenkasse)</div>
<div class="form-row"><div class="form-group"><label>Krankenkasse</label>
<select id="kk"><option>AOK Bayern</option><option>TK – Techniker Krankenkasse</option><option>Barmer</option><option>DAK-Gesundheit</option><option>IKK classic</option></select>
</div></div>
<div class="section-divider">Versicherte Person</div>
<div class="form-row cols2">
<div class="form-group"><label>Vorname</label><input id="p_vor" placeholder="Vorname" /></div>
<div class="form-group"><label>Nachname</label><input id="p_nach" placeholder="Nachname" /></div>
</div>
<div class="form-row cols2">
<div class="form-group"><label>Geburtsdatum</label><input id="p_geb" type="date" /></div>
<div class="form-group"><label>Versichertennummer</label><input id="p_vnr" placeholder="A000000000" /></div>
</div>
<button class="btn btn-primary" style="width:100%;margin-top:8px" onclick="generateLetter()"><i class="ti ti-refresh" aria-hidden="true"></i>Brief aktualisieren</button>
</div>
<div class="card" id="letter-preview" style="font-family:var(--font-sans);line-height:1.7;font-size:13.5px">
<div style="color:var(--color-text-secondary);font-size:12px;margin-bottom:14px;display:flex;align-items:center;gap:6px"><i class="ti ti-eye" aria-hidden="true"></i>Vorschau – wird live aktualisiert</div>
<div id="letter-body" style="white-space:pre-wrap;color:var(--color-text-primary)">← Formular links ausfüllen, um den Brief zu generieren.</div>
<div style="margin-top:16px;display:flex;gap:8px">
<button class="btn" onclick="copyLetter()"><i class="ti ti-copy" aria-hidden="true"></i>Text kopieren</button>
</div>
</div>
</div>
`
},
aufgaben: {
title: 'Offene Aufgaben',
render: () => `
<div class="card">
<table class="table">
<thead><tr><th>Aufgabe</th><th>Patient</th><th>Fällig</th><th>Priorität</th><th>Status</th></tr></thead>
<tbody>
<tr><td>Gutachter-Termin bestätigen</td><td><span class="table-link" onclick="showPage('patient_detail')">Klaus Meier</span></td><td>13.05.2025</td><td><span class="badge badge-red">Hoch</span></td><td><button class="btn" style="font-size:12px;padding:4px 10px">Erledigt</button></td></tr>
<tr><td>Widerspruch-Brief absenden</td><td><span class="table-link" onclick="showPage('patient_detail')">Inge Müller</span></td><td>16.05.2025</td><td><span class="badge badge-red">Hoch</span></td><td><button class="btn" style="font-size:12px;padding:4px 10px">Erledigt</button></td></tr>
<tr><td>Erstantrag ausfüllen & absenden</td><td><span class="table-link" onclick="showPage('patient_detail')">Hildegard Braun</span></td><td>20.05.2025</td><td><span class="badge badge-amber">Mittel</span></td><td><button class="btn" style="font-size:12px;padding:4px 10px">Erledigt</button></td></tr>
<tr><td>Entlastungsbetrag prüfen (Mai)</td><td><span class="table-link" onclick="showPage('patient_detail')">Erika Huber</span></td><td>31.05.2025</td><td><span class="badge badge-gray">Normal</span></td><td><button class="btn" style="font-size:12px;padding:4px 10px">Erledigt</button></td></tr>
</tbody>
</table>
</div>
`
}
};
function showPage(id) {
const page = pages[id];
if (!page) return;
document.getElementById('page-title').textContent = page.title;
document.getElementById('content').innerHTML = page.render();
document.querySelectorAll('.nav-item').forEach(el => el.classList.remove('active'));
document.querySelectorAll('.nav-item').forEach(el => {
if(el.getAttribute('onclick') && el.getAttribute('onclick').includes(id)) el.classList.add('active');
});
if(id === 'musterbrief') setTimeout(generateLetter, 100);
}
function generateLetter() {
const g = id => (document.getElementById(id) || {}).value || '';
const date = new Date().toLocaleDateString('de-DE');
const brief = `${g('v_vor')||'[Vorname]'} ${g('v_nach')||'[Nachname]'}
${g('v_str')||'[Straße Nr.]'}
${g('v_plz')||'[PLZ]'} ${g('v_ort')||'[Ort]'}
Tel: ${g('v_tel')||'[Telefon]'}
Datum: ${date}
An die:
${document.getElementById('kk')?.value||'[Krankenkasse]'}
Betreff: Antrag auf Leistungen der Pflegekasse
Sehr geehrte Damen und Herren,
hiermit stelle ich einen Antrag auf Leistungen der Pflegeversicherung für:
Name: ${g('p_vor')||'[Vorname]'} ${g('p_nach')||'[Nachname]'}
Geburtsdatum: ${g('p_geb') ? new Date(g('p_geb')).toLocaleDateString('de-DE') : '[Geburtsdatum]'}
Versichertennummer: ${g('p_vnr')||'[Versichertennummer]'}
Bitte bestätigen Sie mir kurz, dass dieser Brief bei Ihnen angekommen ist. Senden Sie mir danach bitte alle weiteren Formulare zu.
Mit freundlichen Grüßen,
_______________________
${g('v_vor')||'[Vorname]'} ${g('v_nach')||'[Nachname]'}`;
const el = document.getElementById('letter-body');
if(el) el.textContent = brief;
}
function copyLetter() {
const text = document.getElementById('letter-body')?.textContent;
if(text) navigator.clipboard.writeText(text).catch(()=>{});
}
showPage('dashboard');
</script>