ktv

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
ktv [2026/06/30 18:06] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1ktv [2026/06/30 18:06] (aktuell) – ↷ Seite von modul2:ktv nach ktv verschoben kidneyboy
Zeile 1: Zeile 1:
 +====== Effektivität der Hämodialyse ======
 +
 +<html>
 +<style>
 +  .ktv-wrap{max-width:800px;border:1px solid #ccc;padding:15px;border-radius:12px;background:#fff;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; color: #333;}
 +  .ktv-card{border:1px solid #ddd;border-radius:10px;padding:15px;margin-top:15px; box-shadow: 0 2px 4px rgba(0,0,0,0.05)}
 +  .ktv-card h3{margin:0 0 12px 0;font-size:17px;color:#2c3e50;border-bottom:2px solid #3498db;padding-bottom:5px;}
 +  .ktv-row label{display:block;font-size:13px;margin-bottom:5px;font-weight:600; color: #444;}
 +  .ktv-row input,.ktv-row select{
 +    width:100%; padding:10px; border:1px solid #bbb; border-radius:8px; font-size:15px; box-sizing:border-box; background: #fdfdfd;
 +  }
 +  .ktv-flex-row {display: flex; gap: 12px;}
 +  .ktv-flex-row .ktv-row {flex: 1;}
 +  .ktv-out{
 +    font-family: 'Cascadia Code', 'Courier New', monospace;
 +    background:#2c3e50; color:#ecf0f1; padding:18px; border-radius:10px;
 +    font-size:13px; line-height:1.6; white-space: pre-wrap;
 +  }
 +  .ktv-badge{display:inline-block;padding:3px 12px;border-radius:20px;font-size:12px;margin-left:8px;font-weight:bold; text-transform: uppercase;}
 +  .green{background:#27ae60; color:#fff} .yellow{background:#f1c40f; color:#000} .red{background:#e74c3c; color:#fff}
 +  .warn-box { background: #fff3cd; color: #856404; padding: 10px; border-radius: 8px; font-size: 12px; margin-top: 10px; border: 1px solid #ffeeba; }
 +  
 +  @media print {
 +    .btn-export, .no-print { display: none !important; }
 +    .ktv-wrap { border: none; width: 100%; }
 +    .ktv-out { background: #fff !important; color: #000 !important; border: 1px solid #000; }
 +  }
 +</style>
 +
 +<div class="ktv-wrap" id="ktvApp">
 +  <div class="ktv-card">
 +    <h3>Patient & Datum</h3>
 +    <div class="ktv-flex-row">
 +      <div class="ktv-row"><label>Name</label><input type="text" id="pName"></div>
 +      <div class="ktv-row"><label>Vorname</label><input type="text" id="pVorname"></div>
 +    </div>
 +    <div class="ktv-flex-row">
 +      <div class="ktv-row"><label>Datum</label><input type="date" id="pDate"></div>
 +      <div class="ktv-row"><label>Geschlecht</label><select id="sex"><option value="m">männlich</option><option value="w">weiblich</option></select></div>
 +    </div>
 +  </div>
 +
 +  <div class="ktv-card">
 +    <h3>Anthropometrie (Watson-Korrektur)</h3>
 +    <div class="ktv-flex-row">
 +      <div class="ktv-row"><label>Größe (cm)</label><input type="number" id="heightCm" value="175"></div>
 +      <div class="ktv-row"><label>Gewicht post (kg)</label><input type="number" id="wPostKg" value="75"></div>
 +      <div class="ktv-row"><label>Ödeme (L)</label><input type="number" id="edemaL" value="0"></div>
 +    </div>
 +    <div class="ktv-flex-row">
 +        <div class="ktv-row"><label>Alter (Jahre)</label><input type="number" id="ageYears" value="65"></div>
 +        <div class="ktv-row"><label>V-Modell</label><select id="vModel"><option value="watson">Watson (empfohlen)</option><option value="simple">Einfach (0.6/0.55)</option></select></div>
 +    </div>
 +  </div>
 +
 +  <div class="ktv-card">
 +    <h3>Dialyse & Metabolismus</h3>
 +    <div class="ktv-flex-row">
 +      <div class="ktv-row"><label>Cpre (mg/dl)</label><input type="number" id="cPre" value="80"></div>
 +      <div class="ktv-row"><label>Cpost (mg/dl)</label><input type="number" id="cPost" value="25"></div>
 +      <div class="ktv-row"><label>Cpre_nächste</label><input type="number" id="cPreNext" placeholder="nPCR"></div>
 +    </div>
 +    <div class="ktv-flex-row">
 +      <div class="ktv-row"><label>Zeit t (h)</label><input type="number" id="tHours" value="4"></div>
 +      <div class="ktv-row"><label>UF-Ziel (L)</label><input type="number" id="ufL" value="2"></div>
 +      <div class="ktv-row"><label>Intervall (h)</label><input type="number" id="intervH" value="44"></div>
 +    </div>
 +  </div>
 +
 +  <div class="ktv-card">
 +    <h3>Residualfunktion (Variable Target)</h3>
 +    <div class="ktv-flex-row">
 +      <div class="ktv-row"><label>U-Harnstoff</label><input type="number" id="uUrea"></div>
 +      <div class="ktv-row"><label>Urin (ml)</label><input type="number" id="uVolMl"></div>
 +      <div class="ktv-row"><label>Sitzungen/Wo</label><select id="nWeek"><option value="2">2</option><option value="3" selected>3</option></select></div>
 +    </div>
 +    <div class="ktv-row">
 +        <label>Pu (optional)</label>
 +        <input type="number" id="pUreaOverride" placeholder="falls &ne; Cpre">
 +    </div>
 +  </div>
 +
 +  <div class="ktv-card">
 +    <h3>Klinischer Report</h3>
 +    <div class="ktv-out" id="out"></div>
 +    <div id="warnArea"></div>
 +    <button class="btn-export" style="background:#3498db; color:white; width:100%; border:none; padding:15px; border-radius:8px; margin-top:10px; cursor:pointer; font-weight:bold;" onclick="window.print()">BERICHT ALS PDF SPEICHERN</button>
 +  </div>
 +</div>
 +
 +<script>
 +(function(){
 +  document.getElementById('pDate').valueAsDate = new Date();
 +  const inputs = document.querySelectorAll('input, select');
 +  
 +  function num(id){ return parseFloat(document.getElementById(id).value) || 0; }
 +  function sel(id){ return document.getElementById(id).value; }
 +
 +  function calc(){
 +    const W = num("wPostKg"), H = num("heightCm"), sex = sel("sex"), age = num("ageYears"), edema = num("edemaL");
 +    const dryW = W - edema;
 +    let V = (sex === "m") ? (2.447 - 0.09156*age + 0.1074*H + 0.3362*dryW) : (-2.097 + 0.1069*H + 0.2466*dryW);
 +    if(sel("vModel") === "simple") V = (sex === "m" ? 0.6 : 0.55) * dryW;
 +
 +    const Cpre = num("cPre"), Cpost = num("cPost"), tH = num("tHours"), uf = num("ufL"), N = parseInt(sel("nWeek"));
 +    const R = Cpost / Cpre;
 +    const sp = -Math.log(R - 0.008 * tH) + (4 - 3.5 * R) * (uf / W);
 +    const e = sp * ( (tH*60) / (tH*60 + 35) );
 +    const stdDial = (10080 * (1 - Math.exp(-e)) / (tH*60)) / ((1 - Math.exp(-e)) / sp + (10080 / (N * tH * 60)) - 1);
 +
 +    const ufRate = (uf * 1000) / tH / W;
 +    const Uu = num("uUrea"), Vml = num("uVolMl"), Pu = num("pUreaOverride") || Cpre;
 +    const Kru = (Uu > 0) ? (Uu * Vml) / ( (Pu * 0.9) * 1440 ) : 0;
 +    const stdRenal = (1.25 * Kru / 1000) * 10080 / V;
 +    const total = stdDial + stdRenal;
 +
 +    // --- MODERN: VARIABLE TARGET LOGIK ---
 +    const kruRef = 5.0; 
 +    let dynamicTarget = 2.3;
 +    if (Kru > 0) {
 +        // Reduktion des Ziels um bis zu 0.3 Punkte bei guter Kru
 +        dynamicTarget = Math.max(2.0, 2.3 - (Math.min(1, Kru / kruRef) * 0.3));
 +    }
 +    const isTargetMet = total >= dynamicTarget;
 +    const status = isTargetMet ? {c:"green", t:"ZIEL ERREICHT"} : {c:"red", t:"DOSIS ERHÖHEN"};
 +
 +    const Cnext = num("cPreNext"), interv = num("intervH");
 +    let npcr = (Cnext > 0) ? (((Cnext - Cpost) / interv) * V * 0.6 / dryW) + 0.17 : null;
 +
 +    document.getElementById("out").innerHTML = 
 +      `PATIENT: ${document.getElementById("pName").value || '—'}, ${document.getElementById("pVorname").value || '—'}\n` +
 +      `----------------------------------------------------------------\n` +
 +      `stdKt/V GESAMT:     ${total.toFixed(3)} [${status.t}]\n` +
 +      `INDIV. ZIELWERT:    ${dynamicTarget.toFixed(2)} (basiert auf Kru)\n\n` +
 +      `DETAIL-ANALYSE:\n` +
 +      `stdKt/V dialytisch: ${stdDial.toFixed(3)} (spKt/V: ${sp.toFixed(2)})\n` +
 +      `stdKt/V renal:      ${stdRenal.toFixed(3)} (Kru: ${Kru.toFixed(2)} ml/min)\n\n` +
 +      `SICHERHEIT & ERNÄHRUNG:\n` +
 +      `UF-Rate:            ${ufRate.toFixed(1)} ml/h/kg\n` +
 +      `nPCR (Protein):     ${npcr ? npcr.toFixed(2) + ' g/kg/d' : 'k.A.'}\n` +
 +      `V (Watson):         ${V.toFixed(1)} L`;
 +
 +    let warns = "";
 +    if(!isTargetMet) warns += `<div class="warn-box" style="border-left: 5px solid #e74c3c;">⚠️ <b>Dosis-Defizit:</b> Das individuelle Wochenziel von ${dynamicTarget.toFixed(2)} wurde unterschritten.</div>`;
 +    if(ufRate > 12) warns += `<div class="warn-box" style="border-left: 5px solid #f1c40f;">⚠️ <b>Kardiale Belastung:</b> UF-Rate > 12 ml/h/kg.</div>`;
 +    document.getElementById("warnArea").innerHTML = warns;
 +  }
 +
 +  inputs.forEach(el => el.addEventListener("input", calc));
 +  calc();
 +})();
 +</script>
 +</html>
 +====== Legende ======
 +
 +^ Parameter ^ Bedeutung ^ Klinischer Zielwert ^
 +| **spKt/V** | Single-Pool Kt/V. Misst die Harnstoff-Elimination einer Einzelsitzung ohne Rebound. | > 1,2 (bei 3x wöchentl.) |
 +| **eKt/V** | Equilibrated Kt/V. Berücksichtigt den Harnstoff-Rebound aus dem Gewebe (nach Tattersall/Daugirdas). Entspricht dem double-Pool Kt/V | > 1,05 |
 +| **stdKt/V** | Standardisierter Kt/V (Wochenwert). Erlaubt Vergleichbarkeit bei versch. Frequenzen und ist Voraussetzung, um die residuelle Restfunktion zu berücksichtigen. | **gut > 2,3** (mind. > 2,1), bei relevanter Kru individueller Zielwert|
 +| **UF-Rate** | Ultrafiltrationsrate in ml pro Stunde pro kg Körpergewicht. | **< 10–13 ml/h/kg** |
 +| **Kru** | Residuale Nierenfunktion (Harnstoff-Clearance). | Erhalt anstreben |
 +| **nPCR** | Normalized Protein Catabolic Rate. Marker für die Proteinzufuhr/Ernährung. | **1,0 – 1,2 g/kg/d** |
 +| **V** | Berechnetes Harnstoff-Verteilungsvolumen (entspricht ca. dem Gesamtkörperwasser). | Individuell (anthropometrisch) |
 +
 +==== Sicherheitshinweise ====
 +  * **UF**-Raten > 13 ml/h/kg korrelieren mit erhöhter Mortalität (Myocardial Stunning).
 +  * **nPCR**-Werte < 0,8 g/kg/d deuten auf eine Mangelernährung (PEW) hin.
 +  * **stdKt/V**-Werte < 2,1 erfordern Verlängerung der Dialysezeit oder Erhöhung des Blutflusses.
 +
 +==== Literatur ====
 +
 +  * {{https://www.dgfn.eu/dialyse-standard.html|Dialysestandard 2016, Kapitel B.13.3.2 Dialyseeffektivität}}
 +  * [[https://kidney.wiki/adequacy-calculator/|Pädiatrischer Kt/V-Rechner]]
 +
 +
 +