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.
504 lines
37 KiB
HTML
504 lines
37 KiB
HTML
|
||
<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>
|