| <!DOCTYPE html> |
| <html lang="vi"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Dược Lâm Sàng | Clinical Pharmacy Tools</title> |
| <link href="https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:wght@300;400;500;600;700&family=DM+Mono:wght@400;500&display=swap" rel="stylesheet"> |
| <style> |
| :root{--bg:#0a0f1e;--bg2:#0f1628;--bg3:#151d35;--surface:#1a2340;--surface2:#1f2a4a;--border:#2a3860;--accent:#3b82f6;--accent2:#60a5fa;--accent3:#93c5fd;--green:#10b981;--yellow:#f59e0b;--red:#ef4444;--text:#e2e8f0;--text2:#94a3b8;--text3:#64748b;--mono:'DM Mono',monospace;--sans:'Be Vietnam Pro',sans-serif} |
| *{box-sizing:border-box;margin:0;padding:0} |
| body{background:var(--bg);color:var(--text);font-family:var(--sans);min-height:100vh;display:flex;flex-direction:column} |
| .sidebar{position:fixed;left:0;top:0;bottom:0;width:260px;background:var(--bg2);border-right:1px solid var(--border);overflow-y:auto;z-index:100;transition:transform .3s} |
| .sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px} |
| .sidebar-logo{padding:20px 16px 12px;border-bottom:1px solid var(--border)} |
| .sidebar-logo .logo-icon{font-size:22px;margin-bottom:4px} |
| .sidebar-logo .logo-title{font-size:13px;font-weight:700;letter-spacing:.5px} |
| .sidebar-logo .logo-sub{font-size:11px;color:var(--text3);margin-top:2px} |
| .nav-group{padding:12px 8px 4px} |
| .nav-group-label{font-size:10px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:1px;padding:0 8px 6px} |
| .nav-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--text2);transition:all .15s;margin-bottom:1px} |
| .nav-item:hover{background:var(--surface);color:var(--text)} |
| .nav-item.active{background:rgba(59,130,246,.15);color:var(--accent2);font-weight:500} |
| .nav-item .nav-icon{font-size:14px;min-width:18px;text-align:center} |
| .main{margin-left:260px;flex:1;min-height:100vh} |
| .topbar{position:sticky;top:0;background:rgba(10,15,30,.9);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);padding:12px 24px;display:flex;align-items:center;gap:12px;z-index:50} |
| .topbar-title{font-size:14px;font-weight:600} |
| .topbar-badge{font-size:11px;background:rgba(59,130,246,.15);color:var(--accent2);padding:3px 10px;border-radius:20px;border:1px solid rgba(59,130,246,.3)} |
| .topbar-warning{margin-left:auto;font-size:11px;color:var(--text3)} |
| .content{padding:24px;max-width:900px} |
| .section{display:none}.section.active{display:block} |
| .section-header{margin-bottom:24px} |
| .section-title{font-size:22px;font-weight:700;display:flex;align-items:center;gap:10px} |
| .section-desc{font-size:13px;color:var(--text3);margin-top:6px;line-height:1.6} |
| .card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:16px} |
| .card-title{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;margin-bottom:4px} |
| .card-sub{font-size:12px;color:var(--text3);margin-bottom:16px} |
| .tabs{display:flex;gap:4px;margin-bottom:20px;background:var(--bg3);padding:4px;border-radius:10px;border:1px solid var(--border)} |
| .tab-btn{flex:1;padding:8px 10px;border:none;background:transparent;color:var(--text3);font-family:var(--sans);font-size:11px;font-weight:500;border-radius:7px;cursor:pointer;transition:all .15s} |
| .tab-btn.active{background:var(--surface2);color:var(--text);box-shadow:0 1px 4px rgba(0,0,0,.3)} |
| .tab-content{display:none}.tab-content.active{display:block} |
| .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px} |
| .form-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px} |
| .form-group{display:flex;flex-direction:column;gap:6px} |
| .form-label{font-size:12px;font-weight:500;color:var(--text2)} |
| .form-control{background:var(--bg3);border:1px solid var(--border);border-radius:8px;padding:9px 12px;color:var(--text);font-family:var(--sans);font-size:13px;outline:none;transition:border .15s;width:100%} |
| .form-control:focus{border-color:var(--accent)} |
| .form-control option{background:var(--bg2)} |
| .input-group{display:flex} |
| .input-group .form-control{border-radius:8px 0 0 8px} |
| .input-unit{background:var(--bg2);border:1px solid var(--border);border-left:none;border-radius:0 8px 8px 0;padding:9px 12px;font-size:12px;color:var(--text3);display:flex;align-items:center;white-space:nowrap} |
| .unit-toggle{display:flex;gap:4px;margin-bottom:6px} |
| .unit-btn{padding:3px 10px;border-radius:6px;border:1px solid var(--border);background:transparent;color:var(--text3);font-size:11px;cursor:pointer;transition:all .15s;font-family:var(--sans)} |
| .unit-btn.active{background:rgba(59,130,246,.2);border-color:var(--accent);color:var(--accent2)} |
| .btn-row{display:flex;gap:8px;margin-top:16px} |
| .btn{padding:10px 20px;border-radius:8px;border:none;font-family:var(--sans);font-size:13px;font-weight:600;cursor:pointer;transition:all .15s;display:flex;align-items:center;gap:6px} |
| .btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:#2563eb} |
| .btn-ghost{background:transparent;color:var(--text3);border:1px solid var(--border)}.btn-ghost:hover{background:var(--surface2);color:var(--text)} |
| .result-box{background:var(--bg3);border:1px solid var(--border);border-radius:10px;padding:16px;margin-top:16px} |
| .result-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px} |
| .result-item{text-align:center} |
| .result-label{font-size:11px;color:var(--text3);margin-bottom:4px} |
| .result-val{font-family:var(--mono);font-size:20px;font-weight:500;color:var(--accent2)} |
| .result-unit{font-size:11px;color:var(--text3);margin-top:2px} |
| .interpret{margin-top:12px;padding:12px;border-radius:8px;font-size:12.5px;line-height:1.6} |
| .interpret.green{background:rgba(16,185,129,.08);border:1px solid rgba(16,185,129,.2);color:#6ee7b7} |
| .interpret.yellow{background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.2);color:#fcd34d} |
| .interpret.red{background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.2);color:#fca5a5} |
| .interpret.blue{background:rgba(59,130,246,.08);border:1px solid rgba(59,130,246,.2);color:var(--accent3)} |
| .home-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px} |
| .home-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px;cursor:pointer;transition:all .2s} |
| .home-card:hover{border-color:var(--accent);transform:translateY(-2px);background:var(--surface2)} |
| .home-card .hc-icon{font-size:24px;margin-bottom:8px} |
| .home-card .hc-title{font-size:13px;font-weight:600;margin-bottom:4px} |
| .home-card .hc-desc{font-size:11px;color:var(--text3);line-height:1.5} |
| .hc-group-title{grid-column:1/-1;font-size:11px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:1px;padding-top:8px} |
| .disclaimer{background:rgba(245,158,11,.05);border:1px solid rgba(245,158,11,.2);border-radius:10px;padding:14px 16px;font-size:12px;color:#fcd34d;line-height:1.6;margin-bottom:20px} |
| .disclaimer strong{color:#f59e0b} |
| .table-wrap{overflow-x:auto;margin-top:12px} |
| table{width:100%;border-collapse:collapse;font-size:12px} |
| th{background:var(--bg3);padding:8px 12px;text-align:left;color:var(--text3);font-weight:500;border-bottom:1px solid var(--border)} |
| td{padding:8px 12px;border-bottom:1px solid rgba(42,56,96,.5);color:var(--text2)} |
| tr:last-child td{border-bottom:none} |
| .ref{font-size:11px;color:var(--text3);margin-top:12px;padding-top:10px;border-top:1px solid var(--border);font-style:italic} |
| .hamburger{display:none;background:none;border:none;color:var(--text);font-size:20px;cursor:pointer} |
| .sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:99} |
| @media(max-width:768px){ |
| .sidebar{transform:translateX(-100%)}.sidebar.open{transform:translateX(0)} |
| .sidebar-overlay.open{display:block}.main{margin-left:0}.hamburger{display:block} |
| .form-grid,.form-grid-3{grid-template-columns:1fr}.content{padding:16px} |
| .home-grid{grid-template-columns:1fr 1fr}} |
| </style> |
| </head> |
| <body> |
| <div class="sidebar-overlay" id="overlay" onclick="toggleSidebar()"></div> |
| <nav class="sidebar" id="sidebar"> |
| <div class="sidebar-logo"> |
| <div class="logo-icon">💊</div> |
| <div class="logo-title">Dược Lâm Sàng</div> |
| <div class="logo-sub">Clinical Pharmacy Tools</div> |
| </div> |
| <div class="nav-group"> |
| <div class="nav-group-label">Tổng quan</div> |
| <div class="nav-item active" onclick="showSection('home')"><span class="nav-icon">🏠</span>Trang chủ</div> |
| </div> |
| <div class="nav-group"> |
| <div class="nav-group-label">Chức năng thận & Nhân trắc</div> |
| <div class="nav-item" onclick="showSection('kidney')"><span class="nav-icon">🫘</span>CrCl / eGFR / IBW / ABW</div> |
| </div> |
| <div class="nav-group"> |
| <div class="nav-group-label">Kháng sinh đặc biệt</div> |
| <div class="nav-item" onclick="showSection('vanco')"><span class="nav-icon">💉</span>Vancomycin PK</div> |
| <div class="nav-item" onclick="showSection('amino')"><span class="nav-icon">🔬</span>Aminoglycoside</div> |
| <div class="nav-item" onclick="showSection('colistin')"><span class="nav-icon">🧪</span>Colistin (CMS)</div> |
| </div> |
| <div class="nav-group"> |
| <div class="nav-group-label">Tính liều thuốc khác</div> |
| <div class="nav-item" onclick="showSection('levo')"><span class="nav-icon">🦋</span>Levothyroxine</div> |
| <div class="nav-item" onclick="showSection('anesthetic')"><span class="nav-icon">🩺</span>Thuốc gây tê tối đa</div> |
| <div class="nav-item" onclick="showSection('heparin')"><span class="nav-icon">💧</span>Heparin UFH</div> |
| <div class="nav-item" onclick="showSection('insulin')"><span class="nav-icon">🩸</span>Insulin</div> |
| </div> |
| <div class="nav-group"> |
| <div class="nav-group-label">Chuyển đổi liều</div> |
| <div class="nav-item" onclick="showSection('opioid')"><span class="nav-icon">🔄</span>Opioid (MEDD)</div> |
| <div class="nav-item" onclick="showSection('cortico')"><span class="nav-icon">🔁</span>Corticosteroid</div> |
| <div class="nav-item" onclick="showSection('benzo')"><span class="nav-icon">🔃</span>Benzodiazepine</div> |
| </div> |
| <div class="nav-group"> |
| <div class="nav-group-label">Thang điểm lâm sàng</div> |
| <div class="nav-item" onclick="showSection('sofa')"><span class="nav-icon">📊</span>SOFA / APACHE II / GCS</div> |
| <div class="nav-item" onclick="showSection('chads')"><span class="nav-icon">❤️</span>CHA₂DS₂-VASc / CURB-65</div> |
| <div class="nav-item" onclick="showSection('news2')"><span class="nav-icon">📉</span>NEWS2</div> |
| <div class="nav-item" onclick="showSection('dapt')"><span class="nav-icon">💊</span>DAPT / HAS-BLED</div> |
| </div> |
| <div class="nav-group"> |
| <div class="nav-group-label">Dinh dưỡng & Chuyên biệt</div> |
| <div class="nav-item" onclick="showSection('tpn')"><span class="nav-icon">🍽️</span>TPN / EN Calculator</div> |
| <div class="nav-item" onclick="showSection('phenytoin')"><span class="nav-icon">🧠</span>Phenytoin TDM</div> |
| <div class="nav-item" onclick="showSection('warfarin')"><span class="nav-icon">🩸</span>Warfarin & INR</div> |
| </div> |
| <div class="nav-group"> |
| <div class="nav-group-label">Dịch truyền & Điện giải</div> |
| <div class="nav-item" onclick="showSection('iv')"><span class="nav-icon">🧴</span>Dịch truyền IV</div> |
| <div class="nav-item" onclick="showSection('electrolyte')"><span class="nav-icon">⚗️</span>Bù điện giải</div> |
| </div> |
| </nav> |
| <div class="main"> |
| <div class="topbar"> |
| <button class="hamburger" onclick="toggleSidebar()">☰</button> |
| <div class="topbar-title" id="topbar-title">🏠 Trang chủ</div> |
| <div class="topbar-badge">Clinical Pharmacy</div> |
| <div class="topbar-warning">⚕️ Chỉ dành cho chuyên gia y tế</div> |
| </div> |
| <div class="content"> |
| |
| <div class="section active" id="sec-home"> |
| <div class="section-header"> |
| <div class="section-title">⚕ Công cụ Hỗ trợ Dược Lâm Sàng</div> |
| <div class="section-desc">Hệ thống tính toán dược động học, liều thuốc và thang điểm lâm sàng — chuẩn mực bằng chứng y văn.</div> |
| </div> |
| <div class="disclaimer">⚠️ <strong>Tuyên bố trách nhiệm:</strong> Công cụ này hỗ trợ quyết định lâm sàng, không thay thế đánh giá chuyên môn. Mọi kết quả cần được bác sĩ/dược sĩ xem xét trong bối cảnh lâm sàng cụ thể.</div> |
| <div class="home-grid"> |
| <div class="hc-group-title">🫘 Chức năng thận & Nhân trắc</div> |
| <div class="home-card" onclick="showSection('kidney')"><div class="hc-icon">🫘</div><div class="hc-title">CrCl / eGFR / IBW / ABW</div><div class="hc-desc">Cockcroft-Gault · CKD-EPI 2021 · Cân nặng lý tưởng</div></div> |
| <div class="hc-group-title">💉 Kháng sinh đặc biệt</div> |
| <div class="home-card" onclick="showSection('vanco')"><div class="hc-icon">💉</div><div class="hc-title">Vancomycin PK</div><div class="hc-desc">Liều khởi đầu · AUC/MIC · TDM 2-điểm</div></div> |
| <div class="home-card" onclick="showSection('amino')"><div class="hc-icon">🔬</div><div class="hc-title">Aminoglycoside</div><div class="hc-desc">Traditional · Extended-interval (Hartford)</div></div> |
| <div class="home-card" onclick="showSection('colistin')"><div class="hc-icon">🧪</div><div class="hc-title">Colistin (CMS)</div><div class="hc-desc">Loading dose · Maintenance · Suy thận · CRRT</div></div> |
| <div class="hc-group-title">💊 Tính liều thuốc khác</div> |
| <div class="home-card" onclick="showSection('levo')"><div class="hc-icon">🦋</div><div class="hc-title">Levothyroxine</div><div class="hc-desc">Suy giáp · Ức chế TSH · Cao tuổi</div></div> |
| <div class="home-card" onclick="showSection('anesthetic')"><div class="hc-icon">🩺</div><div class="hc-title">Thuốc gây tê tối đa</div><div class="hc-desc">Lidocain · Bupivacain · Ropivacain</div></div> |
| <div class="home-card" onclick="showSection('heparin')"><div class="hc-icon">💧</div><div class="hc-title">Heparin UFH</div><div class="hc-desc">Weight-based · Điều chỉnh aPTT</div></div> |
| <div class="home-card" onclick="showSection('insulin')"><div class="hc-icon">🩸</div><div class="hc-title">Insulin</div><div class="hc-desc">Sliding scale · IV ICU · Chuyển IV→SC</div></div> |
| <div class="hc-group-title">🔄 Chuyển đổi liều tương đương</div> |
| <div class="home-card" onclick="showSection('opioid')"><div class="hc-icon">🔄</div><div class="hc-title">Opioid (MEDD)</div><div class="hc-desc">Morphine · Fentanyl · Oxycodone · Tramadol</div></div> |
| <div class="home-card" onclick="showSection('cortico')"><div class="hc-icon">🔁</div><div class="hc-title">Corticosteroid</div><div class="hc-desc">Hydrocortisone · Dexamethasone · Methylpred</div></div> |
| <div class="home-card" onclick="showSection('benzo')"><div class="hc-icon">🔃</div><div class="hc-title">Benzodiazepine</div><div class="hc-desc">Diazepam · Lorazepam · Midazolam</div></div> |
| <div class="hc-group-title">📊 Thang điểm lâm sàng</div> |
| <div class="home-card" onclick="showSection('sofa')"><div class="hc-icon">📊</div><div class="hc-title">SOFA / APACHE II / GCS</div><div class="hc-desc">Đánh giá nặng ICU · Suy tạng · Ý thức</div></div> |
| <div class="home-card" onclick="showSection('chads')"><div class="hc-icon">❤️</div><div class="hc-title">CHA₂DS₂-VASc / CURB-65</div><div class="hc-desc">Nguy cơ đột quỵ rung nhĩ · Viêm phổi CAP</div></div> |
| <div class="home-card" onclick="showSection('news2')"><div class="hc-icon">📉</div><div class="hc-title">NEWS2</div><div class="hc-desc">Phát hiện sớm bệnh nặng · Sepsis</div></div> |
| <div class="home-card" onclick="showSection('dapt')"><div class="hc-icon">💊</div><div class="hc-title">DAPT / HAS-BLED</div><div class="hc-desc">Kháng kết tập tiểu cầu kép · Nguy cơ chảy máu</div></div> |
| <div class="hc-group-title">🍽️ Dinh dưỡng & Chuyên biệt</div> |
| <div class="home-card" onclick="showSection('tpn')"><div class="hc-icon">🍽️</div><div class="hc-title">TPN / EN Calculator</div><div class="hc-desc">Năng lượng · Đạm · Lipid · Dịch</div></div> |
| <div class="home-card" onclick="showSection('phenytoin')"><div class="hc-icon">🧠</div><div class="hc-title">Phenytoin TDM</div><div class="hc-desc">Hiệu chỉnh albumin · Loading dose</div></div> |
| <div class="home-card" onclick="showSection('warfarin')"><div class="hc-icon">🩸</div><div class="hc-title">Warfarin & INR</div><div class="hc-desc">Điều chỉnh liều · Fennerty Algorithm</div></div> |
| <div class="hc-group-title">🧴 Dịch truyền & Điện giải</div> |
| <div class="home-card" onclick="showSection('iv')"><div class="hc-icon">🧴</div><div class="hc-title">Dịch truyền IV</div><div class="hc-desc">Tốc độ · Thể tích · Thời gian · Giọt/phút</div></div> |
| <div class="home-card" onclick="showSection('electrolyte')"><div class="hc-icon">⚗️</div><div class="hc-title">Bù điện giải</div><div class="hc-desc">Na⁺ · K⁺ · Tốc độ K⁺ IV · HCO₃⁻</div></div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-kidney"> |
| <div class="section-header"><div class="section-title">🫘 Chức năng thận & Nhân trắc</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'ktab-crcl')">CrCl Cockcroft-Gault</button> |
| <button class="tab-btn" onclick="switchTab(this,'ktab-egfr')">eGFR CKD-EPI 2021</button> |
| <button class="tab-btn" onclick="switchTab(this,'ktab-ibw')">IBW / ABW</button> |
| </div> |
| <div class="tab-content active" id="ktab-crcl"> |
| <div class="card"> |
| <div class="card-title">🫘 Độ thanh thải Creatinine — Cockcroft-Gault</div> |
| <div class="card-sub">Công thức chuẩn cho hiệu chỉnh liều thuốc theo chức năng thận</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Tuổi (năm)</label><input class="form-control" type="number" id="cg-age" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Giới tính</label><select class="form-control" id="cg-sex"><option value="male">Nam</option><option value="female">Nữ</option></select></div> |
| <div class="form-group"><label class="form-label">Cân nặng thực tế (kg)</label><input class="form-control" type="number" id="cg-wt" placeholder="60"></div> |
| <div class="form-group"> |
| <label class="form-label">Creatinine huyết thanh</label> |
| <div class="unit-toggle"> |
| <button class="unit-btn active" id="cg-u1" onclick="setU('cg','mgdl')">mg/dL</button> |
| <button class="unit-btn" id="cg-u2" onclick="setU('cg','mmol')">mmol/L</button> |
| </div> |
| <div class="input-group"><input class="form-control" type="number" id="cg-cr" step="0.01" placeholder="1.0"><div class="input-unit" id="cg-lbl">mg/dL</div></div> |
| </div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcCrCl()">⚡ Tính CrCl</button><button class="btn btn-ghost" onclick="clr('res-crcl','cg-age cg-wt cg-cr')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-crcl" style="display:none"></div> |
| <div class="ref">Cockcroft DW, Gault MH. Nephron. 1976;16(1):31-41.</div> |
| </div> |
| </div> |
| <div class="tab-content" id="ktab-egfr"> |
| <div class="card"> |
| <div class="card-title">🧬 eGFR — CKD-EPI 2021 (race-free)</div> |
| <div class="card-sub">Phân loại bệnh thận mạn theo KDIGO 2022</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Tuổi (năm)</label><input class="form-control" type="number" id="eg-age" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Giới tính</label><select class="form-control" id="eg-sex"><option value="male">Nam</option><option value="female">Nữ</option></select></div> |
| <div class="form-group" style="grid-column:1/-1"> |
| <label class="form-label">Creatinine huyết thanh</label> |
| <div class="unit-toggle"> |
| <button class="unit-btn active" id="eg-u1" onclick="setU('eg','mgdl')">mg/dL</button> |
| <button class="unit-btn" id="eg-u2" onclick="setU('eg','mmol')">mmol/L</button> |
| </div> |
| <div class="input-group"><input class="form-control" type="number" id="eg-cr" step="0.01" placeholder="1.0"><div class="input-unit" id="eg-lbl">mg/dL</div></div> |
| </div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcEGFR()">⚡ Tính eGFR</button><button class="btn btn-ghost" onclick="clr('res-egfr','eg-age eg-cr')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-egfr" style="display:none"></div> |
| <div class="ref">Inker LA et al. N Engl J Med. 2021;385:1737-1749.</div> |
| </div> |
| </div> |
| <div class="tab-content" id="ktab-ibw"> |
| <div class="card"> |
| <div class="card-title">⚖️ Cân nặng lý tưởng IBW & Hiệu chỉnh ABW</div> |
| <div class="card-sub">Công thức Devine · ABW béo phì · BMI</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Giới tính</label><select class="form-control" id="ibw-sex"><option value="male">Nam</option><option value="female">Nữ</option></select></div> |
| <div class="form-group"><label class="form-label">Chiều cao (cm)</label><input class="form-control" type="number" id="ibw-ht" placeholder="165"></div> |
| <div class="form-group"><label class="form-label">Cân nặng thực tế (kg)</label><input class="form-control" type="number" id="ibw-wt" placeholder="70"></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcIBW()">⚡ Tính IBW / ABW</button><button class="btn btn-ghost" onclick="clr('res-ibw','ibw-ht ibw-wt')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-ibw" style="display:none"></div> |
| <div class="ref">Devine BJ. Drug Intell Clin Pharm. 1974;8:650-655.</div> |
| </div> |
| </div> |
| </div> |
| |
| <div class="section" id="sec-vanco"> |
| <div class="section-header"><div class="section-title">💉 Vancomycin — PK/TDM Calculator</div><div class="section-desc">Tính liều khởi đầu và AUC/MIC theo ASHP/IDSA/SIDP 2020.</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'vtab-init')">Liều khởi đầu</button> |
| <button class="tab-btn" onclick="switchTab(this,'vtab-tdm')">TDM / AUC 2-điểm</button> |
| </div> |
| <div class="tab-content active" id="vtab-init"> |
| <div class="card"> |
| <div class="card-title">💉 Liều Vancomycin Khởi đầu</div> |
| <div class="card-sub">Matzke 1984 · Rybak ASHP/IDSA 2020 · Mục tiêu AUC₂₄/MIC = 400–600</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Cân nặng thực tế (kg)</label><input class="form-control" type="number" id="v-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Tuổi (năm)</label><input class="form-control" type="number" id="v-age" placeholder="50"></div> |
| <div class="form-group"><label class="form-label">Giới tính</label><select class="form-control" id="v-sex"><option value="male">Nam</option><option value="female">Nữ</option></select></div> |
| <div class="form-group"> |
| <label class="form-label">Creatinine huyết thanh</label> |
| <div class="unit-toggle"> |
| <button class="unit-btn active" id="v-u1" onclick="setU('v','mgdl')">mg/dL</button> |
| <button class="unit-btn" id="v-u2" onclick="setU('v','mmol')">mmol/L</button> |
| </div> |
| <div class="input-group"><input class="form-control" type="number" id="v-cr" step="0.01" placeholder="1.0"><div class="input-unit" id="v-lbl">mg/dL</div></div> |
| </div> |
| <div class="form-group"><label class="form-label">Chỉ định</label><select class="form-control" id="v-ind"><option value="severe">Nhiễm trùng nặng / MRSA xâm lấn</option><option value="mild">Da mô mềm nhẹ-vừa</option><option value="endo">Viêm nội tâm mạc</option></select></div> |
| <div class="form-group"><label class="form-label">MIC dự kiến (mg/L)</label><select class="form-control" id="v-mic"><option value="1">≤1 mg/L</option><option value="2">2 mg/L</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcVanco()">⚡ Tính liều Vancomycin</button><button class="btn btn-ghost" onclick="clr('res-vanco','v-wt v-age v-cr')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-vanco" style="display:none"></div> |
| <div class="ref">Rybak MJ et al. Am J Health Syst Pharm. 2020;77(11):835-864.</div> |
| </div> |
| </div> |
| <div class="tab-content" id="vtab-tdm"> |
| <div class="card"> |
| <div class="card-title">📈 TDM & AUC₂₄ (2-điểm)</div> |
| <div class="card-sub">Tính Ke, Vd, t½ từ Peak & Trough thực tế</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Liều đang dùng (mg)</label><input class="form-control" type="number" id="tdm-dose" placeholder="1000"></div> |
| <div class="form-group"><label class="form-label">Khoảng cách liều (h)</label><input class="form-control" type="number" id="tdm-interval" placeholder="12"></div> |
| <div class="form-group"><label class="form-label">Thời gian truyền (h)</label><input class="form-control" type="number" id="tdm-infusion" step="0.5" placeholder="1"></div> |
| <div class="form-group"><label class="form-label">MIC (mg/L)</label><select class="form-control" id="tdm-mic"><option value="1">1 mg/L</option><option value="2">2 mg/L</option></select></div> |
| <div class="form-group"><label class="form-label">Trough (mg/L) — trước liều kế</label><input class="form-control" type="number" id="tdm-trough" step="0.1" placeholder="8"></div> |
| <div class="form-group"><label class="form-label">Peak (mg/L) — 1h sau kết thúc</label><input class="form-control" type="number" id="tdm-peak" step="0.1" placeholder="25"></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcTDM()">⚡ Tính AUC</button><button class="btn btn-ghost" onclick="clr('res-tdm','tdm-dose tdm-interval tdm-infusion tdm-trough tdm-peak')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-tdm" style="display:none"></div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-amino"> |
| <div class="section-header"><div class="section-title">🔬 Aminoglycoside Calculator</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'atab-mdd')">Liều truyền thống (MDD)</button> |
| <button class="tab-btn" onclick="switchTab(this,'atab-eid')">Giãn cách mở rộng (EID)</button> |
| </div> |
| <div class="tab-content active" id="atab-mdd"> |
| <div class="card"> |
| <div class="card-title">🔬 Aminoglycoside — Truyền thống</div> |
| <div class="card-sub">Gentamicin · Tobramycin · Amikacin</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Thuốc</label><select class="form-control" id="ag-drug"><option value="genta">Gentamicin</option><option value="tobra">Tobramycin</option><option value="amika">Amikacin</option></select></div> |
| <div class="form-group"><label class="form-label">Cân nặng (kg)</label><input class="form-control" type="number" id="ag-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Tuổi (năm)</label><input class="form-control" type="number" id="ag-age" placeholder="50"></div> |
| <div class="form-group"><label class="form-label">Giới tính</label><select class="form-control" id="ag-sex"><option value="male">Nam</option><option value="female">Nữ</option></select></div> |
| <div class="form-group"> |
| <label class="form-label">Creatinine huyết thanh</label> |
| <div class="unit-toggle"> |
| <button class="unit-btn active" id="ag-u1" onclick="setU('ag','mgdl')">mg/dL</button> |
| <button class="unit-btn" id="ag-u2" onclick="setU('ag','mmol')">mmol/L</button> |
| </div> |
| <div class="input-group"><input class="form-control" type="number" id="ag-cr" step="0.01" placeholder="1.0"><div class="input-unit" id="ag-lbl">mg/dL</div></div> |
| </div> |
| <div class="form-group"><label class="form-label">Chỉ định</label><select class="form-control" id="ag-ind"><option value="uti">Nhiễm trùng tiết niệu</option><option value="severe">Nhiễm khuẩn huyết / Nặng</option><option value="cf">Xơ nang (CF)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcAmino()">⚡ Tính liều</button><button class="btn btn-ghost" onclick="clr('res-amino','ag-wt ag-age ag-cr')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-amino" style="display:none"></div> |
| <div class="ref">Avent ML et al. Intern Med J. 2011;41(6):441-449.</div> |
| </div> |
| </div> |
| <div class="tab-content" id="atab-eid"> |
| <div class="card"> |
| <div class="card-title">⏰ Extended-Interval Dosing — Hartford Nomogram</div> |
| <div class="disclaimer" style="margin-top:0">⚠️ <strong>Chống chỉ định EID:</strong> Mang thai · Viêm nội tâm mạc · Bỏng nặng · Cổ trướng · Lọc máu · Sốt giảm bạch cầu</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Thuốc</label><select class="form-control" id="eid-drug"><option value="genta">Gentamicin (7 mg/kg)</option><option value="tobra">Tobramycin (7 mg/kg)</option><option value="amika">Amikacin (15–20 mg/kg)</option></select></div> |
| <div class="form-group"><label class="form-label">Cân nặng (kg)</label><input class="form-control" type="number" id="eid-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Tuổi (năm)</label><input class="form-control" type="number" id="eid-age" placeholder="50"></div> |
| <div class="form-group"><label class="form-label">Giới tính</label><select class="form-control" id="eid-sex"><option value="male">Nam</option><option value="female">Nữ</option></select></div> |
| <div class="form-group" style="grid-column:1/-1"> |
| <label class="form-label">Creatinine huyết thanh</label> |
| <div class="unit-toggle"> |
| <button class="unit-btn active" id="eid-u1" onclick="setU('eid','mgdl')">mg/dL</button> |
| <button class="unit-btn" id="eid-u2" onclick="setU('eid','mmol')">mmol/L</button> |
| </div> |
| <div class="input-group"><input class="form-control" type="number" id="eid-cr" step="0.01" placeholder="1.0"><div class="input-unit" id="eid-lbl">mg/dL</div></div> |
| </div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcEID()">⚡ Tính liều EID</button><button class="btn btn-ghost" onclick="clr('res-eid','eid-wt eid-age eid-cr')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-eid" style="display:none"></div> |
| <div class="ref">Nicolau DP et al. Antimicrob Agents Chemother. 1995;39(3):650-655.</div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-colistin"> |
| <div class="section-header"><div class="section-title">🧪 Colistin (CMS) Calculator</div></div> |
| <div class="card"> |
| <div class="card-title">🧪 Colistin — Loading & Maintenance Dose</div> |
| <div class="card-sub">IBW-based · Hiệu chỉnh CrCl · HD · CRRT</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">IBW (kg)</label><input class="form-control" type="number" id="col-ibw" placeholder="55"></div> |
| <div class="form-group"><label class="form-label">CrCl (mL/phút)</label><input class="form-control" type="number" id="col-crcl" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Tình trạng thận thay thế</label><select class="form-control" id="col-rrt"><option value="none">Không lọc máu</option><option value="hd">Chạy thận nhân tạo (HD)</option><option value="crrt">CRRT</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcColistin()">⚡ Tính liều Colistin</button><button class="btn btn-ghost" onclick="clr('res-colistin','col-ibw col-crcl')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-colistin" style="display:none"></div> |
| <div class="ref">Nation RL et al. Clin Infect Dis. 2016;62(5):552-558.</div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-levo"> |
| <div class="section-header"><div class="section-title">🦋 Liều Levothyroxine</div></div> |
| <div class="card"> |
| <div class="card-title">🦋 Levothyroxine Dosing — ATA 2014 & ETA 2019</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Cân nặng thực tế (kg)</label><input class="form-control" type="number" id="levo-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Tuổi (năm)</label><input class="form-control" type="number" id="levo-age" placeholder="50"></div> |
| <div class="form-group"><label class="form-label">Chỉ định</label><select class="form-control" id="levo-ind"><option value="full">Suy giáp hoàn toàn (trẻ, khỏe)</option><option value="elderly">Suy giáp (người cao tuổi / tim mạch)</option><option value="sub">Suy giáp dưới lâm sàng</option><option value="suppress">Ức chế TSH (ung thư giáp)</option><option value="postthyroid">Sau cắt toàn bộ tuyến giáp</option></select></div> |
| <div class="form-group"><label class="form-label">Tim mạch</label><select class="form-control" id="levo-cardiac"><option value="normal">Bình thường</option><option value="risk">Bệnh tim / nguy cơ cao</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcLevo()">⚡ Tính liều Levothyroxine</button><button class="btn btn-ghost" onclick="clr('res-levo','levo-wt levo-age')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-levo" style="display:none"></div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-anesthetic"> |
| <div class="section-header"><div class="section-title">🩺 Thuốc gây tê — Liều tối đa</div></div> |
| <div class="card"> |
| <div class="card-title">🩺 Local Anesthetic Maximum Dose — NYSORA 2020</div> |
| <div class="disclaimer" style="margin-top:0">🚨 Luôn chuẩn bị <strong>Intralipid 20%</strong> để xử lý độc tính toàn thân (LAST). Tiêm thử liều trước.</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Thuốc gây tê</label><select class="form-control" id="an-drug"><option value="4.5">Lidocain (4.5 mg/kg)</option><option value="7">Lidocain + Epinephrine (7 mg/kg)</option><option value="2">Bupivacain (2 mg/kg)</option><option value="2.5">Bupivacain + Epinephrine (2.5 mg/kg)</option><option value="3">Ropivacain (3 mg/kg)</option><option value="4">Mepivacain (4 mg/kg)</option></select></div> |
| <div class="form-group"><label class="form-label">Cân nặng (kg)</label><input class="form-control" type="number" id="an-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Nồng độ dung dịch (%)</label><select class="form-control" id="an-conc"><option value="0.25">0.25%</option><option value="0.5" selected>0.5%</option><option value="1.0">1.0%</option><option value="2.0">2.0%</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcAnesthetic()">⚡ Tính liều tối đa</button><button class="btn btn-ghost" onclick="clr('res-anesthetic','an-wt')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-anesthetic" style="display:none"></div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-heparin"> |
| <div class="section-header"><div class="section-title">💧 Heparin UFH — Weight-Based Protocol</div><div class="section-desc">Phác đồ Raschke 1993 · Mục tiêu aPTT 60–100s.</div></div> |
| <div class="card"> |
| <div class="card-title">💧 UFH Weight-Based Dosing</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Cân nặng thực tế (kg)</label><input class="form-control" type="number" id="hep-wt" placeholder="70"></div> |
| <div class="form-group"><label class="form-label">Chỉ định</label><select class="form-control" id="hep-ind"><option value="dvtpe">DVT/PE (80 U/kg bolus + 18 U/kg/h)</option><option value="acs">ACS (60 U/kg bolus + 12 U/kg/h)</option><option value="bridge">Cầu nối (không bolus + 15 U/kg/h)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcHeparin()">⚡ Tính liều Heparin</button><button class="btn btn-ghost" onclick="clr('res-heparin','hep-wt')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-heparin" style="display:none"></div> |
| <div class="table-wrap"><table><thead><tr><th>aPTT (giây)</th><th>Hành động</th><th>Thay đổi tốc độ</th><th>Kiểm tra lại</th></tr></thead><tbody> |
| <tr><td><40</td><td>Bolus 80 U/kg</td><td>↑ 4 U/kg/h</td><td>6h</td></tr> |
| <tr><td>40–59</td><td>Bolus 40 U/kg</td><td>↑ 2 U/kg/h</td><td>6h</td></tr> |
| <tr><td style="color:#10b981;font-weight:600">60–100 ✓</td><td>Không thay đổi</td><td>—</td><td>6h</td></tr> |
| <tr><td>101–120</td><td>—</td><td>↓ 2 U/kg/h</td><td>6h</td></tr> |
| <tr><td>>120</td><td>Ngưng 60 phút</td><td>↓ 3 U/kg/h</td><td>6h sau truyền lại</td></tr> |
| </tbody></table></div> |
| <div class="ref">Raschke RA et al. Ann Intern Med. 1993;119(9):874-881.</div> |
| </div> |
| </div> |
| |
| <div class="section" id="sec-insulin"> |
| <div class="section-header"><div class="section-title">🩸 Insulin — Liều & Phác đồ</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'itab-sliding')">Sliding Scale</button> |
| <button class="tab-btn" onclick="switchTab(this,'itab-iv')">Truyền IV ICU</button> |
| <button class="tab-btn" onclick="switchTab(this,'itab-sc')">IV → SC</button> |
| </div> |
| <div class="tab-content active" id="itab-sliding"> |
| <div class="card"> |
| <div class="card-title">💉 Insulin Regular SC — Sliding Scale</div> |
| <div class="card-sub">Mục tiêu đường huyết nội trú: 7.8–10.0 mmol/L (ADA 2024)</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Đường huyết (mmol/L)</label><input class="form-control" type="number" id="ins-bg" step="0.1" placeholder="12.0"></div> |
| <div class="form-group"><label class="form-label">Độ nhạy insulin</label><select class="form-control" id="ins-sens"><option value="low">Thấp (steroid, béo phì, nhiễm trùng)</option><option value="normal" selected>Bình thường</option><option value="high">Cao (gầy, suy thận, suy thượng thận)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcInsulinSliding()">⚡ Xem phác đồ</button><button class="btn btn-ghost" onclick="clr('res-insulin-sliding','ins-bg')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-insulin-sliding" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="itab-iv"> |
| <div class="card"> |
| <div class="card-title">🏥 Truyền Insulin IV — ICU</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">BG hiện tại (mmol/L)</label><input class="form-control" type="number" id="iiv-bg" step="0.1" placeholder="14.0"></div> |
| <div class="form-group"><label class="form-label">BG trước đó (mmol/L)</label><input class="form-control" type="number" id="iiv-prev" step="0.1" placeholder="16.0"></div> |
| <div class="form-group"><label class="form-label">Tốc độ truyền hiện tại (U/h)</label><input class="form-control" type="number" id="iiv-rate" step="0.5" placeholder="2"></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcInsulinIV()">⚡ Tính điều chỉnh</button><button class="btn btn-ghost" onclick="clr('res-iiv','iiv-bg iiv-prev iiv-rate')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-iiv" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="itab-sc"> |
| <div class="card"> |
| <div class="card-title">🔄 Chuyển đổi Insulin IV → SC Basal-Bolus</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Tổng insulin IV/24h (U)</label><input class="form-control" type="number" id="isc-total" placeholder="40"></div> |
| <div class="form-group"><label class="form-label">BN ăn được?</label><select class="form-control" id="isc-eating"><option value="yes">Có ăn</option><option value="no">Không (NPO)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcInsulinSC()">⚡ Tính liều SC</button><button class="btn btn-ghost" onclick="clr('res-isc','isc-total')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-isc" style="display:none"></div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-opioid"> |
| <div class="section-header"><div class="section-title">🔄 Opioid Tương đương (MEDD)</div></div> |
| <div class="card"> |
| <div class="card-title">🔄 Opioid Equianalgesic Converter — CDC 2022</div> |
| <div class="disclaimer" style="margin-top:0">⚠️ Khi chuyển đổi: giảm <strong>25–50%</strong> do dung nạp chéo không hoàn toàn.</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Opioid nguồn</label><select class="form-control" id="op-from"><option value="morphine_po">Morphine uống (PO)</option><option value="morphine_iv">Morphine tiêm (IV/IM)</option><option value="oxycodone">Oxycodone uống</option><option value="hydromorphone_po">Hydromorphone uống</option><option value="hydromorphone_iv">Hydromorphone tiêm</option><option value="fentanyl_iv">Fentanyl tiêm (mcg/h)</option><option value="fentanyl_patch">Fentanyl dán (mcg/h)</option><option value="codeine">Codeine uống</option><option value="tramadol">Tramadol uống</option><option value="pethidine_iv">Pethidine tiêm</option></select></div> |
| <div class="form-group"><label class="form-label">Liều (mg/ngày hoặc mcg/h)</label><input class="form-control" type="number" id="op-dose" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Chuyển sang</label><select class="form-control" id="op-to"><option value="morphine_po">Morphine uống (PO)</option><option value="morphine_iv">Morphine tiêm (IV/IM)</option><option value="oxycodone">Oxycodone uống</option><option value="hydromorphone_po">Hydromorphone uống</option><option value="fentanyl_iv">Fentanyl tiêm (mcg/h)</option><option value="tramadol">Tramadol uống</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcOpioid()">⚡ Chuyển đổi liều</button><button class="btn btn-ghost" onclick="clr('res-opioid','op-dose')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-opioid" style="display:none"></div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-cortico"> |
| <div class="section-header"><div class="section-title">🔁 Corticosteroid Tương đương</div></div> |
| <div class="card"> |
| <div class="card-title">🔁 Corticosteroid Equivalence Converter</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Corticoid nguồn</label><select class="form-control" id="cs-from"><option value="20">Hydrocortisone (eq=20)</option><option value="25">Cortisone (eq=25)</option><option value="5">Prednisolone/Prednisone (eq=5)</option><option value="4">Methylprednisolone (eq=4)</option><option value="0.75">Dexamethasone (eq=0.75)</option><option value="0.6">Betamethasone (eq=0.6)</option></select></div> |
| <div class="form-group"><label class="form-label">Liều (mg/ngày)</label><input class="form-control" type="number" id="cs-dose" placeholder="40"></div> |
| <div class="form-group"><label class="form-label">Chuyển sang</label><select class="form-control" id="cs-to"><option value="20">Hydrocortisone</option><option value="5">Prednisolone</option><option value="4">Methylprednisolone</option><option value="0.75">Dexamethasone</option><option value="0.6">Betamethasone</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcCortico()">⚡ Chuyển đổi</button><button class="btn btn-ghost" onclick="clr('res-cortico','cs-dose')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-cortico" style="display:none"></div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-benzo"> |
| <div class="section-header"><div class="section-title">🔃 Benzodiazepine Tương đương</div></div> |
| <div class="card"> |
| <div class="card-title">🔃 Benzodiazepine Equivalence Converter — Ashton Manual 2002</div> |
| <div class="disclaimer" style="margin-top:0">⚠️ Khi cai BZD: giảm không quá <strong>10%/2 tuần</strong>. Không ngưng đột ngột.</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">BZD nguồn</label><select class="form-control" id="bz-from"><option value="1">Diazepam (1mg=1mg diaz)</option><option value="0.25">Lorazepam (0.25→1mg diaz)</option><option value="2.5">Midazolam (2.5→1mg diaz)</option><option value="0.125">Alprazolam (0.125→1mg diaz)</option><option value="0.5">Clonazepam (0.5→1mg diaz)</option><option value="10">Oxazepam (10→1mg diaz)</option></select></div> |
| <div class="form-group"><label class="form-label">Liều (mg/ngày)</label><input class="form-control" type="number" id="bz-dose" placeholder="10"></div> |
| <div class="form-group"><label class="form-label">Chuyển sang</label><select class="form-control" id="bz-to"><option value="1">Diazepam</option><option value="0.25">Lorazepam</option><option value="0.5">Clonazepam</option><option value="2.5">Midazolam</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcBenzo()">⚡ Chuyển đổi</button><button class="btn btn-ghost" onclick="clr('res-benzo','bz-dose')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-benzo" style="display:none"></div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-sofa"> |
| <div class="section-header"><div class="section-title">📊 SOFA / APACHE II / GCS</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'stab-sofa')">SOFA</button> |
| <button class="tab-btn" onclick="switchTab(this,'stab-apache')">APACHE II</button> |
| <button class="tab-btn" onclick="switchTab(this,'stab-gcs')">GCS</button> |
| </div> |
| <div class="tab-content active" id="stab-sofa"> |
| <div class="card"> |
| <div class="card-title">🏥 SOFA Score — Sepsis-3 (Singer 2016)</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Hô hấp — PaO₂/FiO₂</label><select class="form-control" id="sofa-resp"><option value="0">≥400 (0đ)</option><option value="1">300–399 (1đ)</option><option value="2">200–299 (2đ)</option><option value="3">100–199 + thở máy (3đ)</option><option value="4"><100 + thở máy (4đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Đông máu — Tiểu cầu (×10³/µL)</label><select class="form-control" id="sofa-coag"><option value="0">≥150 (0đ)</option><option value="1">100–149 (1đ)</option><option value="2">50–99 (2đ)</option><option value="3">20–49 (3đ)</option><option value="4"><20 (4đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Gan — Bilirubin (mg/dL)</label><select class="form-control" id="sofa-liver"><option value="0"><1.2 (0đ)</option><option value="1">1.2–1.9 (1đ)</option><option value="2">2.0–5.9 (2đ)</option><option value="3">6.0–11.9 (3đ)</option><option value="4">≥12.0 (4đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Tim mạch</label><select class="form-control" id="sofa-cv"><option value="0">MAP ≥70 (0đ)</option><option value="1">MAP <70 (1đ)</option><option value="2">Dopamine ≤5 / Dobutamine (2đ)</option><option value="3">Dopamine 5–15 / NE ≤0.1 (3đ)</option><option value="4">Dopamine >15 / NE >0.1 (4đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Thần kinh — GCS</label><select class="form-control" id="sofa-neuro"><option value="0">15 (0đ)</option><option value="1">13–14 (1đ)</option><option value="2">10–12 (2đ)</option><option value="3">6–9 (3đ)</option><option value="4"><6 (4đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Thận — Creatinine (mg/dL)</label><select class="form-control" id="sofa-renal"><option value="0"><1.2 (0đ)</option><option value="1">1.2–1.9 (1đ)</option><option value="2">2.0–3.4 (2đ)</option><option value="3">3.5–4.9 / NT <500mL/ngày (3đ)</option><option value="4">≥5.0 / NT <200mL/ngày (4đ)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcSOFA()">⚡ Tính SOFA</button></div> |
| <div class="result-box" id="res-sofa" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="stab-apache"> |
| <div class="card"> |
| <div class="card-title">📈 APACHE II — Knaus 1985</div> |
| <div class="form-grid-3"> |
| <div class="form-group"><label class="form-label">Tuổi (năm)</label><input class="form-control" type="number" id="ap-age" placeholder="50"></div> |
| <div class="form-group"><label class="form-label">Nhiệt độ hậu môn (°C)</label><input class="form-control" type="number" id="ap-temp" step="0.1" placeholder="37.5"></div> |
| <div class="form-group"><label class="form-label">MAP (mmHg)</label><input class="form-control" type="number" id="ap-map" placeholder="90"></div> |
| <div class="form-group"><label class="form-label">Nhịp tim (/phút)</label><input class="form-control" type="number" id="ap-hr" placeholder="80"></div> |
| <div class="form-group"><label class="form-label">Nhịp thở (/phút)</label><input class="form-control" type="number" id="ap-rr" placeholder="18"></div> |
| <div class="form-group"><label class="form-label">PaO₂ (mmHg)</label><input class="form-control" type="number" id="ap-pao2" placeholder="80"></div> |
| <div class="form-group"><label class="form-label">pH máu ĐM</label><input class="form-control" type="number" id="ap-ph" step="0.01" placeholder="7.40"></div> |
| <div class="form-group"><label class="form-label">Na⁺ (mmol/L)</label><input class="form-control" type="number" id="ap-na" placeholder="140"></div> |
| <div class="form-group"><label class="form-label">K⁺ (mmol/L)</label><input class="form-control" type="number" id="ap-k" step="0.1" placeholder="4.0"></div> |
| <div class="form-group"><label class="form-label">Creatinine (mg/dL)</label><input class="form-control" type="number" id="ap-cr" step="0.1" placeholder="1.0"></div> |
| <div class="form-group"><label class="form-label">Hematocrit (%)</label><input class="form-control" type="number" id="ap-hct" placeholder="40"></div> |
| <div class="form-group"><label class="form-label">WBC (×10³/µL)</label><input class="form-control" type="number" id="ap-wbc" placeholder="10"></div> |
| </div> |
| <div class="form-grid" style="margin-top:12px"> |
| <div class="form-group"><label class="form-label">GCS (thực tế)</label><input class="form-control" type="number" id="ap-gcs" min="3" max="15" placeholder="15"></div> |
| <div class="form-group"><label class="form-label">Bệnh mãn tính nặng</label><select class="form-control" id="ap-chronic"><option value="0">Không</option><option value="2">Có (nhập viện thường)</option><option value="5">Có (phẫu thuật cấp cứu)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcAPACHE()">⚡ Tính APACHE II</button><button class="btn btn-ghost" onclick="clr('res-apache','ap-age ap-temp ap-map ap-hr ap-rr ap-pao2 ap-ph ap-na ap-k ap-cr ap-hct ap-wbc ap-gcs')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-apache" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="stab-gcs"> |
| <div class="card"> |
| <div class="card-title">🧠 Glasgow Coma Scale (GCS)</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Mở mắt (E)</label><select class="form-control" id="gcs-e"><option value="4">4 — Tự nhiên</option><option value="3">3 — Theo lời nói</option><option value="2">2 — Theo đau</option><option value="1">1 — Không mở mắt</option></select></div> |
| <div class="form-group"><label class="form-label">Lời nói (V)</label><select class="form-control" id="gcs-v"><option value="5">5 — Định hướng tốt</option><option value="4">4 — Lú lẫn</option><option value="3">3 — Từng từ</option><option value="2">2 — Âm không nghĩa</option><option value="1">1 — Không đáp ứng</option></select></div> |
| <div class="form-group"><label class="form-label">Vận động (M)</label><select class="form-control" id="gcs-m"><option value="6">6 — Làm theo lệnh</option><option value="5">5 — Định vị đau</option><option value="4">4 — Rút chi</option><option value="3">3 — Gấp bất thường</option><option value="2">2 — Duỗi bất thường</option><option value="1">1 — Không đáp ứng</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcGCS()">⚡ Tính GCS</button></div> |
| <div class="result-box" id="res-gcs" style="display:none"></div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-chads"> |
| <div class="section-header"><div class="section-title">❤️ CHA₂DS₂-VASc / CURB-65</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'chtab-chads')">CHA₂DS₂-VASc</button> |
| <button class="tab-btn" onclick="switchTab(this,'chtab-curb')">CURB-65</button> |
| </div> |
| <div class="tab-content active" id="chtab-chads"> |
| <div class="card"> |
| <div class="card-title">❤️ CHA₂DS₂-VASc — ESC 2020</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">C — Suy tim / rối loạn CN LV</label><select class="form-control" id="ch-c"><option value="0">Không (0)</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">H — Tăng huyết áp</label><select class="form-control" id="ch-h"><option value="0">Không (0)</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">A₂ — Tuổi ≥75</label><select class="form-control" id="ch-a2"><option value="0">Không (0)</option><option value="2">Có (2đ)</option></select></div> |
| <div class="form-group"><label class="form-label">D — Đái tháo đường</label><select class="form-control" id="ch-d"><option value="0">Không (0)</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">S₂ — Tiền sử đột quỵ/TIA</label><select class="form-control" id="ch-s2"><option value="0">Không (0)</option><option value="2">Có (2đ)</option></select></div> |
| <div class="form-group"><label class="form-label">V — Bệnh mạch máu</label><select class="form-control" id="ch-v"><option value="0">Không (0)</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">A — Tuổi 65–74</label><select class="form-control" id="ch-a"><option value="0">Không (0)</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Sc — Giới nữ</label><select class="form-control" id="ch-sc"><option value="0">Nam (0)</option><option value="1">Nữ (1đ)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcCHADS()">⚡ Tính CHA₂DS₂-VASc</button></div> |
| <div class="result-box" id="res-chads" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="chtab-curb"> |
| <div class="card"> |
| <div class="card-title">🫁 CURB-65 — British Thoracic Society 2003</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">C — Rối loạn ý thức mới</label><select class="form-control" id="curb-c"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">U — Ure >7 mmol/L</label><select class="form-control" id="curb-u"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">R — Nhịp thở ≥30/phút</label><select class="form-control" id="curb-r"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">B — HATT <90 hoặc HATTr ≤60</label><select class="form-control" id="curb-b"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">65 — Tuổi ≥65</label><select class="form-control" id="curb-65"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcCURB()">⚡ Tính CURB-65</button></div> |
| <div class="result-box" id="res-curb" style="display:none"></div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-news2"> |
| <div class="section-header"><div class="section-title">📉 NEWS2</div><div class="section-desc">Royal College of Physicians 2017.</div></div> |
| <div class="card"> |
| <div class="card-title">📉 NEWS2 Calculator</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">SpO₂ (%)</label><select class="form-control" id="n2-spo2"><option value="0">≥96 (0đ)</option><option value="1">94–95 (1đ)</option><option value="2">92–93 (2đ)</option><option value="3">≤91 (3đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Thở oxy bổ sung</label><select class="form-control" id="n2-o2"><option value="0">Không (0đ)</option><option value="2">Có (2đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Nhịp thở (/phút)</label><select class="form-control" id="n2-rr"><option value="3">≤8 (3đ)</option><option value="1">9–11 (1đ)</option><option value="0">12–20 (0đ)</option><option value="2">21–24 (2đ)</option><option value="3b">≥25 (3đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Nhiệt độ (°C)</label><select class="form-control" id="n2-temp"><option value="3">≤35.0 (3đ)</option><option value="1">35.1–36.0 (1đ)</option><option value="0">36.1–38.0 (0đ)</option><option value="1b">38.1–39.0 (1đ)</option><option value="2">≥39.1 (2đ)</option></select></div> |
| <div class="form-group"><label class="form-label">HA tâm thu (mmHg)</label><select class="form-control" id="n2-sbp"><option value="3">≤90 (3đ)</option><option value="2">91–100 (2đ)</option><option value="1">101–110 (1đ)</option><option value="0">111–219 (0đ)</option><option value="3b">≥220 (3đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Nhịp tim (/phút)</label><select class="form-control" id="n2-hr"><option value="3">≤40 (3đ)</option><option value="1">41–50 (1đ)</option><option value="0">51–90 (0đ)</option><option value="1b">91–110 (1đ)</option><option value="2">111–130 (2đ)</option><option value="3b">≥131 (3đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Ý thức (AVPU)</label><select class="form-control" id="n2-avpu"><option value="0">A — Tỉnh táo (0đ)</option><option value="3">C — Lú lẫn mới (3đ)</option><option value="3b">V/P/U — Giảm ý thức (3đ)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcNEWS2()">⚡ Tính NEWS2</button></div> |
| <div class="result-box" id="res-news2" style="display:none"></div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-dapt"> |
| <div class="section-header"><div class="section-title">💊 DAPT / HAS-BLED</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'dtab-dapt')">DAPT Score</button> |
| <button class="tab-btn" onclick="switchTab(this,'dtab-bled')">HAS-BLED</button> |
| </div> |
| <div class="tab-content active" id="dtab-dapt"> |
| <div class="card"> |
| <div class="card-title">❤️ DAPT Score — Yeh et al. NEJM 2016</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Tuổi</label><select class="form-control" id="dapt-age"><option value="-2">≥75 (−2đ)</option><option value="-1">65–74 (−1đ)</option><option value="0"><65 (0đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Hút thuốc lá</label><select class="form-control" id="dapt-smoke"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Đái tháo đường</label><select class="form-control" id="dapt-dm"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">NMCT tại nhập viện</label><select class="form-control" id="dapt-mi"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Tiền sử PCI hoặc NMCT</label><select class="form-control" id="dapt-prior"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Stent paclitaxel-eluting</label><select class="form-control" id="dapt-paclitaxel"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Đường kính stent <3mm</label><select class="form-control" id="dapt-small"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Suy tim / EF <30%</label><select class="form-control" id="dapt-hf"><option value="0">Không</option><option value="2">Có (2đ)</option></select></div> |
| <div class="form-group"><label class="form-label">Stent tĩnh mạch graft (SVG)</label><select class="form-control" id="dapt-svg"><option value="0">Không</option><option value="2">Có (2đ)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcDAPT()">⚡ Tính DAPT Score</button></div> |
| <div class="result-box" id="res-dapt" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="dtab-bled"> |
| <div class="card"> |
| <div class="card-title">🩸 HAS-BLED — Pisters et al. Chest 2010</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">H — THA không kiểm soát</label><select class="form-control" id="bled-h"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">A — Suy thận / suy gan nặng</label><select class="form-control" id="bled-a"><option value="0">Không</option><option value="1">Một (1đ)</option><option value="2">Cả hai (2đ)</option></select></div> |
| <div class="form-group"><label class="form-label">S — Tiền sử đột quỵ</label><select class="form-control" id="bled-s"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">B — Chảy máu / thiếu máu</label><select class="form-control" id="bled-b"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">L — INR không ổn định</label><select class="form-control" id="bled-l"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">E — Tuổi >65</label><select class="form-control" id="bled-e"><option value="0">Không</option><option value="1">Có (1đ)</option></select></div> |
| <div class="form-group"><label class="form-label">D — Aspirin/NSAID hoặc rượu</label><select class="form-control" id="bled-d"><option value="0">Không</option><option value="1">Một (1đ)</option><option value="2">Cả hai (2đ)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcBLED()">⚡ Tính HAS-BLED</button></div> |
| <div class="result-box" id="res-bled" style="display:none"></div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-tpn"> |
| <div class="section-header"><div class="section-title">🍽️ Dinh dưỡng TPN / EN</div><div class="section-desc">ASPEN 2022 & ESPEN 2019.</div></div> |
| <div class="card"> |
| <div class="card-title">🍽️ Parenteral & Enteral Nutrition — Mifflin-St Jeor</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Cân nặng (kg)</label><input class="form-control" type="number" id="tpn-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Chiều cao (cm)</label><input class="form-control" type="number" id="tpn-ht" placeholder="160"></div> |
| <div class="form-group"><label class="form-label">Tuổi (năm)</label><input class="form-control" type="number" id="tpn-age" placeholder="50"></div> |
| <div class="form-group"><label class="form-label">Giới tính</label><select class="form-control" id="tpn-sex"><option value="male">Nam</option><option value="female">Nữ</option></select></div> |
| <div class="form-group"><label class="form-label">Tình trạng lâm sàng</label><select class="form-control" id="tpn-stress"><option value="1.2">Bình thường / Sau PT nhỏ</option><option value="1.35">Nhiễm trùng nhẹ–vừa</option><option value="1.5">PT lớn / Sepsis</option><option value="1.8">Bỏng >30% / Đa chấn thương</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcTPN()">⚡ Tính nhu cầu dinh dưỡng</button><button class="btn btn-ghost" onclick="clr('res-tpn','tpn-wt tpn-ht tpn-age')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-tpn" style="display:none"></div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-phenytoin"> |
| <div class="section-header"><div class="section-title">🧠 Phenytoin TDM</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'ptab-corr')">Hiệu chỉnh albumin</button> |
| <button class="tab-btn" onclick="switchTab(this,'ptab-load')">Loading dose</button> |
| </div> |
| <div class="tab-content active" id="ptab-corr"> |
| <div class="card"> |
| <div class="card-title">🧠 Phenytoin Correction — Winter-Tozer</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Phenytoin đo được (mg/L)</label><input class="form-control" type="number" id="ph-measured" step="0.1" placeholder="10"></div> |
| <div class="form-group"><label class="form-label">Albumin huyết thanh (g/dL)</label><input class="form-control" type="number" id="ph-alb" step="0.1" placeholder="3.5"></div> |
| <div class="form-group"><label class="form-label">CrCl (mL/phút)</label><input class="form-control" type="number" id="ph-crcl" placeholder="90"></div> |
| <div class="form-group"><label class="form-label">Dùng Valproic acid?</label><select class="form-control" id="ph-vpa"><option value="no">Không</option><option value="yes">Có</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcPhenytoin()">⚡ Tính Phenytoin hiệu chỉnh</button><button class="btn btn-ghost" onclick="clr('res-phenytoin','ph-measured ph-alb ph-crcl')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-phenytoin" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="ptab-load"> |
| <div class="card"> |
| <div class="card-title">⚡ Phenytoin Loading Dose</div> |
| <div class="disclaimer" style="margin-top:0">🚨 Tốc độ tối đa: <strong>≤50 mg/phút</strong>. Theo dõi ECG. Không pha trong Dextrose.</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Cân nặng (kg)</label><input class="form-control" type="number" id="pl-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Nồng độ hiện tại (mg/L)</label><input class="form-control" type="number" id="pl-current" step="0.1" placeholder="0"></div> |
| <div class="form-group"><label class="form-label">Nồng độ mục tiêu</label><select class="form-control" id="pl-target"><option value="20">20 mg/L (chuẩn)</option><option value="25">25 mg/L (khó)</option></select></div> |
| <div class="form-group"><label class="form-label">Vd (L/kg)</label><select class="form-control" id="pl-vd"><option value="0.7">0.7 (bình thường)</option><option value="1.2">1.2 (béo phì)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcPhenytoinLoad()">⚡ Tính Loading Dose</button><button class="btn btn-ghost" onclick="clr('res-phenload','pl-wt pl-current')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-phenload" style="display:none"></div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-warfarin"> |
| <div class="section-header"><div class="section-title">🩸 Warfarin & INR Management</div></div> |
| <div class="card"> |
| <div class="card-title">🩸 Warfarin Dose Adjustment — Fennerty Algorithm</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">INR hiện tại</label><input class="form-control" type="number" id="wf-inr" step="0.1" placeholder="2.5"></div> |
| <div class="form-group"><label class="form-label">Liều warfarin hiện tại (mg/tuần)</label><input class="form-control" type="number" id="wf-dose" step="0.5" placeholder="35"></div> |
| <div class="form-group"><label class="form-label">Mục tiêu INR</label><select class="form-control" id="wf-target"><option value="2.5">2.0–3.0 (rung nhĩ, DVT, PE)</option><option value="3.0">2.5–3.5 (van tim cơ học)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcWarfarin()">⚡ Gợi ý điều chỉnh liều</button><button class="btn btn-ghost" onclick="clr('res-warfarin','wf-inr wf-dose')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-warfarin" style="display:none"></div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-iv"> |
| <div class="section-header"><div class="section-title">🧴 Tính toán Dịch truyền IV</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'ivtab-rate')">Tốc độ (mL/h)</button> |
| <button class="tab-btn" onclick="switchTab(this,'ivtab-vol')">Thể tích (mL)</button> |
| <button class="tab-btn" onclick="switchTab(this,'ivtab-time')">Thời gian (h)</button> |
| <button class="tab-btn" onclick="switchTab(this,'ivtab-drop')">Giọt/phút</button> |
| </div> |
| <div class="tab-content active" id="ivtab-rate"> |
| <div class="card"><div class="card-title">🧴 Tính tốc độ truyền</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Thể tích (mL)</label><input class="form-control" type="number" id="ivr-vol" placeholder="500"></div> |
| <div class="form-group"><label class="form-label">Thời gian (giờ)</label><input class="form-control" type="number" id="ivr-time" step="0.5" placeholder="4"></div> |
| <div class="form-group"><label class="form-label">Cân nặng BN (kg) — tùy chọn</label><input class="form-control" type="number" id="ivr-wt" placeholder="60"></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcIVRate()">⚡ Tính tốc độ truyền</button><button class="btn btn-ghost" onclick="clr('res-ivrate','ivr-vol ivr-time ivr-wt')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-ivrate" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="ivtab-vol"> |
| <div class="card"><div class="card-title">🧴 Tính thể tích dịch</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Tốc độ (mL/h)</label><input class="form-control" type="number" id="ivv-rate" placeholder="125"></div> |
| <div class="form-group"><label class="form-label">Thời gian (giờ)</label><input class="form-control" type="number" id="ivv-time" step="0.5" placeholder="4"></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcIVVol()">⚡ Tính thể tích</button><button class="btn btn-ghost" onclick="clr('res-ivvol','ivv-rate ivv-time')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-ivvol" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="ivtab-time"> |
| <div class="card"><div class="card-title">⏱️ Tính thời gian truyền</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Thể tích (mL)</label><input class="form-control" type="number" id="ivt-vol" placeholder="500"></div> |
| <div class="form-group"><label class="form-label">Tốc độ (mL/h)</label><input class="form-control" type="number" id="ivt-rate" placeholder="125"></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcIVTime()">⚡ Tính thời gian</button><button class="btn btn-ghost" onclick="clr('res-ivtime','ivt-vol ivt-rate')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-ivtime" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="ivtab-drop"> |
| <div class="card"><div class="card-title">💧 Tính số giọt/phút</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Thể tích (mL)</label><input class="form-control" type="number" id="ivd-vol" placeholder="500"></div> |
| <div class="form-group"><label class="form-label">Thời gian truyền (phút)</label><input class="form-control" type="number" id="ivd-min" placeholder="240"></div> |
| <div class="form-group"><label class="form-label">Loại dây truyền</label><select class="form-control" id="ivd-factor"><option value="15">15 g/mL — dây chuẩn</option><option value="20">20 g/mL — micro chuẩn</option><option value="60">60 g/mL — micro (nhi khoa)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcIVDrop()">⚡ Tính giọt/phút</button><button class="btn btn-ghost" onclick="clr('res-ivdrop','ivd-vol ivd-min')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-ivdrop" style="display:none"></div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="section" id="sec-electrolyte"> |
| <div class="section-header"><div class="section-title">⚗️ Bổ sung Điện giải</div></div> |
| <div class="tabs"> |
| <button class="tab-btn active" onclick="switchTab(this,'eltab-na')">Bù Na⁺</button> |
| <button class="tab-btn" onclick="switchTab(this,'eltab-k')">Bù K⁺</button> |
| <button class="tab-btn" onclick="switchTab(this,'eltab-kiv')">Tốc độ K⁺ IV</button> |
| <button class="tab-btn" onclick="switchTab(this,'eltab-hco3')">Bù HCO₃⁻</button> |
| </div> |
| <div class="tab-content active" id="eltab-na"> |
| <div class="card"> |
| <div class="card-title">🧂 Tính lượng Natri cần bù — Adrogue-Madias</div> |
| <div class="disclaimer" style="margin-top:0">🚨 Hạ Na⁺ mạn: KHÔNG tăng ><strong>6–8 mmol/L/24h</strong> — nguy cơ ODS.</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Na⁺ hiện tại (mmol/L)</label><input class="form-control" type="number" id="na-current" placeholder="125"></div> |
| <div class="form-group"><label class="form-label">Na⁺ mục tiêu (mmol/L)</label><input class="form-control" type="number" id="na-target" placeholder="135"></div> |
| <div class="form-group"><label class="form-label">Cân nặng (kg)</label><input class="form-control" type="number" id="na-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">Giới tính</label><select class="form-control" id="na-sex"><option value="0.6">Nam (TBW=0.6×wt)</option><option value="0.5">Nữ (TBW=0.5×wt)</option></select></div> |
| <div class="form-group"><label class="form-label">Loại dịch bù</label><select class="form-control" id="na-fluid"><option value="513">NaCl 3% (513 mmol/L)</option><option value="154">NaCl 0.9% (154 mmol/L)</option><option value="77">NaCl 0.45% (77 mmol/L)</option></select></div> |
| <div class="form-group"><label class="form-label">Thời gian điều chỉnh (h)</label><input class="form-control" type="number" id="na-time" placeholder="24"></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcNa()">⚡ Tính bù Natri</button><button class="btn btn-ghost" onclick="clr('res-na','na-current na-target na-wt na-time')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-na" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="eltab-k"> |
| <div class="card"> |
| <div class="card-title">⚡ Tính lượng Kali cần bù</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">K⁺ hiện tại (mmol/L)</label><input class="form-control" type="number" id="k-current" step="0.1" placeholder="3.0"></div> |
| <div class="form-group"><label class="form-label">K⁺ mục tiêu (mmol/L)</label><input class="form-control" type="number" id="k-target" step="0.1" placeholder="4.0"></div> |
| <div class="form-group"><label class="form-label">Cân nặng (kg)</label><input class="form-control" type="number" id="k-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">CrCl (mL/phút)</label><input class="form-control" type="number" id="k-crcl" placeholder="80"></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcK()">⚡ Tính bù Kali</button><button class="btn btn-ghost" onclick="clr('res-k','k-current k-target k-wt k-crcl')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-k" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="eltab-kiv"> |
| <div class="card"> |
| <div class="card-title">💉 Tốc độ truyền Kali IV an toàn</div> |
| <div class="disclaimer" style="margin-top:0">🚨 Tốc độ tối đa: Ngoại vi ≤10 mmol/h · Trung tâm ≤20 mmol/h · ICU ≤40 mmol/h. <strong>Không tiêm KCl trực tiếp IV.</strong></div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">Tổng K⁺ cần truyền (mmol)</label><input class="form-control" type="number" id="kiv-total" placeholder="40"></div> |
| <div class="form-group"><label class="form-label">Nồng độ KCl pha (mmol/L)</label><select class="form-control" id="kiv-conc"><option value="20">20 mmol/L — ngoại vi an toàn</option><option value="40" selected>40 mmol/L — ngoại vi chuẩn</option><option value="60">60 mmol/L — trung tâm</option><option value="80">80 mmol/L — CVC ICU</option></select></div> |
| <div class="form-group"><label class="form-label">Đường truyền</label><select class="form-control" id="kiv-route"><option value="10">Ngoại vi (max 10 mmol/h)</option><option value="20">CVC / Trung tâm (max 20)</option><option value="40">CVC + ECG liên tục ICU (max 40)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcKIV()">⚡ Tính tốc độ K⁺ IV</button><button class="btn btn-ghost" onclick="clr('res-kiv','kiv-total')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-kiv" style="display:none"></div> |
| </div> |
| </div> |
| <div class="tab-content" id="eltab-hco3"> |
| <div class="card"> |
| <div class="card-title">⚗️ Tính lượng Bicarbonate cần bù — Astrup</div> |
| <div class="form-grid"> |
| <div class="form-group"><label class="form-label">HCO₃⁻ hiện tại (mmol/L)</label><input class="form-control" type="number" id="hco-current" placeholder="10"></div> |
| <div class="form-group"><label class="form-label">HCO₃⁻ mục tiêu (mmol/L)</label><input class="form-control" type="number" id="hco-target" placeholder="16"></div> |
| <div class="form-group"><label class="form-label">Cân nặng (kg)</label><input class="form-control" type="number" id="hco-wt" placeholder="60"></div> |
| <div class="form-group"><label class="form-label">pH máu động mạch</label><input class="form-control" type="number" id="hco-ph" step="0.01" placeholder="7.15"></div> |
| <div class="form-group"><label class="form-label">Nồng độ NaHCO₃</label><select class="form-control" id="hco-conc"><option value="1">8.4% (1 mmol/mL)</option><option value="0.5" selected>4.2% (0.5 mmol/mL)</option><option value="0.167">1.4% (0.167 mmol/mL)</option></select></div> |
| <div class="form-group"><label class="form-label">Chiến lược bù</label><select class="form-control" id="hco-strategy"><option value="0.5">Bù 50% thiếu hụt (an toàn)</option><option value="1">Bù 100% (cấp cứu)</option><option value="0.333">Bù 1/3 (bảo thủ)</option></select></div> |
| </div> |
| <div class="btn-row"><button class="btn btn-primary" onclick="calcHCO3()">⚡ Tính bù Bicarbonate</button><button class="btn btn-ghost" onclick="clr('res-hco3','hco-current hco-target hco-wt hco-ph')">🗑️ Xoá</button></div> |
| <div class="result-box" id="res-hco3" style="display:none"></div> |
| </div> |
| </div> |
| </div> |
|
|
| </div></div> |
| <script> |
| const ST={home:'🏠 Trang chủ',kidney:'🫘 Chức năng thận & Nhân trắc',vanco:'💉 Vancomycin PK',amino:'🔬 Aminoglycoside',colistin:'🧪 Colistin (CMS)',levo:'🦋 Levothyroxine',anesthetic:'🩺 Thuốc gây tê tối đa',heparin:'💧 Heparin UFH',insulin:'🩸 Insulin',opioid:'🔄 Opioid (MEDD)',cortico:'🔁 Corticosteroid',benzo:'🔃 Benzodiazepine',sofa:'📊 SOFA / APACHE II / GCS',chads:'❤️ CHA₂DS₂-VASc / CURB-65',news2:'📉 NEWS2',dapt:'💊 DAPT / HAS-BLED',tpn:'🍽️ TPN / EN',phenytoin:'🧠 Phenytoin TDM',warfarin:'🩸 Warfarin & INR',iv:'🧴 Dịch truyền IV',electrolyte:'⚗️ Bù điện giải'}; |
| function showSection(id){document.querySelectorAll('.section').forEach(s=>s.classList.remove('active'));document.querySelectorAll('.nav-item').forEach(n=>n.classList.remove('active'));document.getElementById('sec-'+id).classList.add('active');document.querySelector(`.nav-item[onclick="showSection('${id}')"]`)?.classList.add('active');document.getElementById('topbar-title').textContent=ST[id]||'';if(window.innerWidth<=768)toggleSidebar();} |
| function toggleSidebar(){document.getElementById('sidebar').classList.toggle('open');document.getElementById('overlay').classList.toggle('open');} |
| function switchTab(btn,tabId){const sec=btn.closest('.section')||document.body;sec.querySelectorAll('.tab-btn').forEach(b=>b.classList.remove('active'));btn.classList.add('active');sec.querySelectorAll('.tab-content').forEach(t=>t.classList.remove('active'));document.getElementById(tabId).classList.add('active');} |
| function clr(rid,fids){const el=document.getElementById(rid);if(el)el.style.display='none';(fids||'').split(' ').forEach(id=>{const f=document.getElementById(id);if(f)f.value='';});} |
| const CRU={}; |
| function setU(p,u){CRU[p]=u;const lbl=document.getElementById(p+'-lbl');if(lbl)lbl.textContent=u==='mmol'?'mmol/L':'mg/dL';const b1=document.getElementById(p+'-u1'),b2=document.getElementById(p+'-u2');if(b1)b1.classList.toggle('active',u==='mgdl');if(b2)b2.classList.toggle('active',u==='mmol');} |
| function getCr(p){const v=parseFloat(document.getElementById(p+'-cr').value);if(isNaN(v))return NaN;return CRU[p]==='mmol'?v/88.42:v;} |
| function SR(id,html){const el=document.getElementById(id);el.innerHTML=html;el.style.display='block';} |
| function RG(...items){return '<div class="result-grid">'+items.map(i=>'<div class="result-item"><div class="result-label">'+i.l+'</div><div class="result-val">'+i.v+'</div><div class="result-unit">'+(i.u||'')+'</div></div>').join('')+'</div>';} |
| function IB(c,t){return '<div class="interpret '+c+'">'+t+'</div>';} |
| function ckdS(g){if(g>=90)return{s:'G1',l:'Bình thường',d:'Có thể có tổn thương thận nhưng GFR bình thường.',c:'green'};if(g>=60)return{s:'G2',l:'Giảm nhẹ',d:'Theo dõi định kỳ.',c:'green'};if(g>=45)return{s:'G3a',l:'Giảm nhẹ-vừa',d:'Hiệu chỉnh liều nhiều nhóm thuốc.',c:'yellow'};if(g>=30)return{s:'G3b',l:'Giảm vừa-nặng',d:'Tránh nhiều thuốc độc thận.',c:'yellow'};if(g>=15)return{s:'G4',l:'Giảm nặng',d:'Chuẩn bị thận nhân tạo.',c:'red'};return{s:'G5',l:'Suy thận giai đoạn cuối',d:'Cần lọc máu hoặc ghép thận.',c:'red'};} |
| |
| function calcCrCl(){const age=+document.getElementById('cg-age').value,wt=+document.getElementById('cg-wt').value,sex=document.getElementById('cg-sex').value,cr=getCr('cg');if([age,wt,cr].some(isNaN)||cr<=0)return alert('Nhập đầy đủ thông tin!');let v=Math.max(0,((140-age)*wt*(sex==='female'?0.85:1))/(72*cr));const k=ckdS(v);SR('res-crcl',RG({l:'CrCl',v:v.toFixed(1),u:'mL/phút'},{l:'Phân loại CKD',v:k.s,u:''},{l:'Cân nặng tính',v:wt+'kg',u:''})+IB(k.c,'<strong>'+k.s+' — '+k.l+'</strong>: '+k.d));} |
| |
| function calcEGFR(){const age=+document.getElementById('eg-age').value,sex=document.getElementById('eg-sex').value,cr=getCr('eg');if([age,cr].some(isNaN)||cr<=0)return alert('Nhập đầy đủ!');const ka=sex==='female'?0.7:0.9,al=sex==='female'?-0.241:-0.302,sm=sex==='female'?1.012:1,r=cr/ka,g=142*Math.pow(Math.min(r,1),al)*Math.pow(Math.max(r,1),-1.2)*Math.pow(0.9938,age)*sm,k=ckdS(g);SR('res-egfr',RG({l:'eGFR',v:g.toFixed(1),u:'mL/ph/1.73m²'},{l:'Giai đoạn CKD',v:k.s,u:''})+IB(k.c,'<strong>'+k.s+' — '+k.l+'</strong>: '+k.d));} |
| |
| function calcIBW(){const sex=document.getElementById('ibw-sex').value,ht=+document.getElementById('ibw-ht').value,wt=+document.getElementById('ibw-wt').value;if([ht,wt].some(isNaN))return alert('Nhập đầy đủ!');const hi=(ht-152.4)/2.54,ibw=sex==='male'?50+2.3*hi:45.5+2.3*hi,bmi=wt/(ht/100)**2;let abw=ibw,note='Dùng IBW cho PK';if(wt>ibw*1.2){abw=ibw+0.4*(wt-ibw);note='Dùng ABW (béo phì)';}else if(wt<ibw){abw=wt;note='Dùng cân thực (nhẹ hơn IBW)';}const bc=bmi<18.5?'yellow':bmi<25?'green':bmi<30?'yellow':'red',bl=bmi<18.5?'Thiếu cân':bmi<25?'Bình thường':bmi<30?'Thừa cân':'Béo phì';SR('res-ibw',RG({l:'IBW',v:ibw.toFixed(1),u:'kg'},{l:'ABW',v:abw.toFixed(1),u:'kg'},{l:'BMI',v:bmi.toFixed(1),u:'kg/m²'},{l:'Cân nặng PK',v:abw.toFixed(1)+'kg',u:note})+IB(bc,'BMI '+bmi.toFixed(1)+' — <strong>'+bl+'</strong>'));} |
| |
| function calcVanco(){const wt=+document.getElementById('v-wt').value,age=+document.getElementById('v-age').value,sex=document.getElementById('v-sex').value,cr=getCr('v');if([wt,age,cr].some(isNaN)||cr<=0)return alert('Nhập đầy đủ!');const crcl=Math.max(10,((140-age)*wt*(sex==='female'?0.85:1))/(72*cr));let tau=12;if(crcl<10)tau=96;else if(crcl<20)tau=72;else if(crcl<30)tau=48;else if(crcl<50)tau=24;else if(crcl<70)tau=18;const dose=Math.round(wt*17.5/250)*250,daily=dose*(24/tau),cls=crcl<30?'red':crcl<60?'yellow':'green';SR('res-vanco',RG({l:'Liều mỗi lần',v:dose,u:'mg'},{l:'Khoảng cách',v:tau,u:'h'},{l:'Liều ngày',v:daily,u:'mg'},{l:'CrCl',v:crcl.toFixed(0),u:'mL/phút'})+IB(cls,'CrCl: <strong>'+crcl.toFixed(0)+' mL/phút</strong> → q'+tau+'h. Điều chỉnh dựa trên TDM. Mục tiêu AUC₂₄/MIC = 400–600.'));} |
| |
| function calcTDM(){const dose=+document.getElementById('tdm-dose').value,tau=+document.getElementById('tdm-interval').value,tinf=+document.getElementById('tdm-infusion').value,tr=+document.getElementById('tdm-trough').value,pk=+document.getElementById('tdm-peak').value,mic=+document.getElementById('tdm-mic').value;if([dose,tau,tinf,tr,pk].some(isNaN))return alert('Nhập đầy đủ!');const dt=tau-tinf-1,ke=-Math.log(tr/pk)/dt,t12=0.693/ke,auc=dose*Math.log(pk/tr)/ke*(24/tau);const am=auc/mic,cls=auc>=400&&auc<=600?'green':auc<400?'yellow':'red';SR('res-tdm',RG({l:'AUC₂₄',v:auc.toFixed(0),u:'mg·h/L'},{l:'AUC/MIC',v:am.toFixed(0),u:''},{l:'Ke',v:ke.toFixed(4),u:'h⁻¹'},{l:'t½',v:t12.toFixed(1),u:'h'})+IB(cls,'AUC₂₄: <strong>'+auc.toFixed(0)+'</strong> mg·h/L. '+(auc<400?'⚠️ Dưới mục tiêu — cân nhắc tăng liều.':auc>600?'⚠️ Trên mục tiêu — cân nhắc giảm liều.':'✅ Trong mục tiêu 400–600.')));} |
| |
| function calcAmino(){const drug=document.getElementById('ag-drug').value,wt=+document.getElementById('ag-wt').value,age=+document.getElementById('ag-age').value,sex=document.getElementById('ag-sex').value,cr=getCr('ag'),ind=document.getElementById('ag-ind').value;if([wt,age,cr].some(isNaN)||cr<=0)return alert('Nhập đầy đủ!');const crcl=((140-age)*wt*(sex==='female'?0.85:1))/(72*cr);const dp={genta:{uti:3,severe:5,cf:10},tobra:{uti:3,severe:5,cf:10},amika:{uti:7.5,severe:7.5,cf:15}},pk={genta:{uti:'5–8',severe:'8–12',cf:'20–30'},tobra:{uti:'5–8',severe:'8–12',cf:'20–30'},amika:{uti:'20–30',severe:'20–30',cf:'55–65'}},tr={genta:'<2',tobra:'<2',amika:'<10'};const dose=Math.round(dp[drug][ind]*wt/10)*10;let tau=8;if(crcl<10)tau=48;else if(crcl<30)tau=24;else if(crcl<60)tau=12;SR('res-amino',RG({l:'Liều',v:dose,u:'mg'},{l:'mg/kg/lần',v:(dose/wt).toFixed(1),u:'mg/kg'},{l:'Khoảng cách',v:tau,u:'h'},{l:'Peak mục tiêu',v:pk[drug][ind],u:'mg/L'},{l:'Trough mục tiêu',v:tr[drug],u:'mg/L'})+IB('blue','CrCl: '+crcl.toFixed(0)+' mL/phút → q'+tau+'h. TDM: Peak sau liều 1, Trough trước liều 3.'));} |
| |
| function calcEID(){const drug=document.getElementById('eid-drug').value,wt=+document.getElementById('eid-wt').value,age=+document.getElementById('eid-age').value,sex=document.getElementById('eid-sex').value,cr=getCr('eid');if([wt,age,cr].some(isNaN)||cr<=0)return alert('Nhập đầy đủ!');const crcl=((140-age)*wt*(sex==='female'?0.85:1))/(72*cr);if(crcl<20)return SR('res-eid',IB('red','⚠️ CrCl < 20 mL/phút — Không áp dụng EID. Dùng phác đồ truyền thống có TDM.'));const dp={genta:7,tobra:7,amika:17.5},dose=Math.round(dp[drug]*wt/50)*50;let tau=24;if(crcl<40)tau=48;else if(crcl<60)tau=36;SR('res-eid',RG({l:'Liều',v:dose,u:'mg'},{l:'mg/kg',v:(dose/wt).toFixed(1),u:''},{l:'Khoảng cách',v:tau,u:'h'},{l:'CrCl',v:crcl.toFixed(0),u:'mL/phút'})+IB('blue','Hartford Nomogram: Lấy nồng độ ngẫu nhiên 6–14h sau liều để xác định khoảng cách.'));} |
| |
| function calcColistin(){const ibw=+document.getElementById('col-ibw').value,crcl=+document.getElementById('col-crcl').value,rrt=document.getElementById('col-rrt').value;if(isNaN(ibw))return alert('Nhập IBW!');let maint,tau,note;if(rrt==='hd'){maint=2.5;tau=48;note='Chạy thận HD — truyền sau mỗi buổi lọc';}else if(rrt==='crrt'){maint=3;tau=12;note='CRRT — điều chỉnh theo tốc độ lọc';}else{const c=crcl||30,tot=((1.5*c+30)*ibw)/1000;if(c<10){maint=Math.max(1,tot/2);tau=24;note='Suy thận nặng';}else if(c<30){maint=tot/2;tau=12;note='Suy thận vừa';}else{maint=tot/3;tau=8;note='Chức năng thận bình thường-nhẹ';}}SR('res-colistin',RG({l:'Loading dose',v:9,u:'MIU'},{l:'Maintenance',v:maint.toFixed(1),u:'MIU/lần'},{l:'Khoảng cách',v:tau,u:'h'},{l:'Tổng/ngày',v:(maint*(24/tau)).toFixed(1),u:'MIU/ngày'})+IB('yellow','<strong>'+note+'.</strong> CMS 1 MIU = 80mg. Theo dõi chức năng thận hàng ngày.'));} |
| |
| function calcLevo(){const wt=+document.getElementById('levo-wt').value,age=+document.getElementById('levo-age').value,ind=document.getElementById('levo-ind').value,c=document.getElementById('levo-cardiac').value;if([wt,age].some(isNaN))return alert('Nhập đầy đủ!');const base={full:[1.6,1.8],elderly:[0.5,1.0],sub:[0.5,1.0],suppress:[2.0,2.5],postthyroid:[1.8,2.0]};let lo=base[ind][0]*wt,hi=base[ind][1]*wt;if(c==='risk'){lo*=0.5;hi*=0.5;}if(age>=65){lo*=0.7;hi*=0.8;}const start=c==='risk'?12.5:age>=65?25:50;SR('res-levo',RG({l:'Liều thấp',v:Math.round(lo),u:'mcg/ngày'},{l:'Liều cao',v:Math.round(hi),u:'mcg/ngày'},{l:'Liều khởi đầu',v:start,u:'mcg'})+IB('blue','Tăng dần 25 mcg mỗi 4–6 tuần. Kiểm tra TSH sau 6 tuần.'));} |
| |
| function calcAnesthetic(){const mpk=+document.getElementById('an-drug').value,wt=+document.getElementById('an-wt').value,conc=+document.getElementById('an-conc').value/100;if(isNaN(wt))return alert('Nhập cân nặng!');const mg=mpk*wt,vol=mg/(conc*1000);SR('res-anesthetic',RG({l:'mg/kg tối đa',v:mpk,u:'mg/kg'},{l:'Tổng tối đa',v:mg.toFixed(0),u:'mg'},{l:'Thể tích tối đa',v:vol.toFixed(1),u:'mL'})+IB('yellow','⚠️ Đây là liều tối đa tuyệt đối. Chuẩn bị Intralipid 20%.'));} |
| |
| function calcHeparin(){const wt=+document.getElementById('hep-wt').value,ind=document.getElementById('hep-ind').value;if(isNaN(wt))return alert('Nhập cân nặng!');const p={dvtpe:{bolus:80,rate:18},acs:{bolus:60,rate:12},bridge:{bolus:0,rate:15}}[ind],bolus=Math.round(p.bolus*wt/1000)*1000,rate=p.rate*wt;SR('res-heparin',RG({l:'Bolus',v:p.bolus>0?bolus:'—',u:''},{l:'Tốc độ khởi đầu',v:rate.toFixed(0),u:'U/h'},{l:'mL/h (25kU/250mL)',v:(rate/100).toFixed(1),u:'mL/h'})+IB('blue','Kiểm tra aPTT sau 6h. Điều chỉnh theo bảng phác đồ Raschke.'));} |
| |
| function calcInsulinSliding(){const bg=+document.getElementById('ins-bg').value,sens=document.getElementById('ins-sens').value;if(isNaN(bg))return alert('Nhập đường huyết!');const sc={low:[[0,7.8,0],[7.8,10,4],[10,13.9,6],[13.9,16.7,8],[16.7,19.4,12],[19.4,999,16]],normal:[[0,7.8,0],[7.8,10,2],[10,13.9,4],[13.9,16.7,6],[16.7,19.4,8],[19.4,999,12]],high:[[0,7.8,0],[7.8,10,1],[10,13.9,2],[13.9,16.7,3],[16.7,19.4,5],[19.4,999,8]]}[sens];let dose=0;for(const r of sc)if(bg>=r[0]&&bg<r[1]){dose=r[2];break;}const cls=bg<3.9?'red':bg<=10?'green':'yellow';SR('res-insulin-sliding',RG({l:'Đường huyết',v:bg.toFixed(1),u:'mmol/L'},{l:'Liều insulin',v:dose,u:'đơn vị'})+IB(cls,(bg<3.9?'🚨 Hạ đường huyết! Điều trị ngay!':'BG '+bg.toFixed(1)+' mmol/L → <strong>'+dose+' đơn vị Insulin Regular SC</strong>. Mục tiêu: 7.8–10.0 mmol/L.')));} |
| |
| function calcInsulinIV(){const bg=+document.getElementById('iiv-bg').value,prev=+document.getElementById('iiv-prev').value,rate=+document.getElementById('iiv-rate').value;if([bg,prev,rate].some(isNaN))return alert('Nhập đầy đủ!');const trend=bg-prev;let nr=rate,action='Duy trì';if(bg<4){nr=0;action='NGƯNG — Hạ đường huyết nặng!';}else if(bg<6){nr=Math.max(0,rate-2);action='Giảm 2 U/h';}else if(bg<8){nr=Math.max(0,rate-1);action='Giảm 1 U/h';}else if(bg<=10){action='Duy trì tốc độ hiện tại';}else if(bg<=14){nr=rate+1;action='Tăng 1 U/h';}else if(bg<=18){nr=rate+2;action='Tăng 2 U/h';}else{nr=rate+3;action='Tăng 3 U/h';}const cls=bg<4?'red':bg<=10?'green':'yellow';SR('res-iiv',RG({l:'BG hiện tại',v:bg.toFixed(1),u:'mmol/L'},{l:'Xu hướng',v:(trend>0?'+':'')+trend.toFixed(1),u:'mmol/L'},{l:'Tốc độ mới',v:nr.toFixed(1),u:'U/h'})+IB(cls,'→ <strong>'+action+': '+nr.toFixed(1)+' U/h</strong>'));} |
| |
| function calcInsulinSC(){const total=+document.getElementById('isc-total').value,eating=document.getElementById('isc-eating').value;if(isNaN(total))return alert('Nhập tổng liều!');const sc=total*0.8,basal=sc*0.5,bolus=eating==='yes'?sc*0.5/3:0;SR('res-isc',RG({l:'Tổng SC/ngày',v:Math.round(sc),u:'đơn vị'},{l:'Basal (Glargine)',v:Math.round(basal),u:'U/ngày'},{l:'Bolus/bữa',v:eating==='yes'?Math.round(bolus):'—',u:'U'})+IB('blue','IV '+total+'U → SC = 80% = '+Math.round(sc)+'U. Basal 50% + Bolus 50%. Overlap IV 1–2h.'));} |
| |
| const OF={morphine_po:1,morphine_iv:3,oxycodone:1.5,hydromorphone_po:5,hydromorphone_iv:20,fentanyl_iv:100,fentanyl_patch:100,codeine:0.15,tramadol:0.1,pethidine_iv:0.1}; |
| function calcOpioid(){const f=document.getElementById('op-from').value,t=document.getElementById('op-to').value,d=+document.getElementById('op-dose').value;if(isNaN(d))return alert('Nhập liều!');const medd=d*OF[f],eq=medd/OF[t];SR('res-opioid',RG({l:'MEDD',v:medd.toFixed(1),u:'mg morphine/ngày'},{l:'Liều tương đương',v:eq.toFixed(1),u:'mg/ngày'},{l:'Liều khuyến nghị (−30%)',v:(eq*0.7).toFixed(1),u:'mg/ngày'})+IB('yellow','⚠️ Giảm 25–50% do dung nạp chéo. Điều chỉnh theo đáp ứng lâm sàng.'));} |
| |
| function calcCortico(){const from=+document.getElementById('cs-from').value,dose=+document.getElementById('cs-dose').value,to=+document.getElementById('cs-to').value;if(isNaN(dose))return alert('Nhập liều!');const hc=dose/from*20,res=hc/20*to;SR('res-cortico',RG({l:'Liều tương đương',v:res.toFixed(2),u:'mg/ngày'},{l:'Tương đương HC',v:hc.toFixed(0),u:'mg hydrocortisone'})+IB('blue',dose+'mg → '+hc.toFixed(0)+'mg HC = <strong>'+res.toFixed(2)+'mg</strong> thuốc đích.'));} |
| |
| function calcBenzo(){const from=+document.getElementById('bz-from').value,dose=+document.getElementById('bz-dose').value,to=+document.getElementById('bz-to').value;if(isNaN(dose))return alert('Nhập liều!');const diaz=dose/from,res=diaz*to;SR('res-benzo',RG({l:'Tương đương Diazepam',v:diaz.toFixed(1),u:'mg'},{l:'Liều thuốc đích',v:res.toFixed(2),u:'mg/ngày'})+IB('yellow','⚠️ Cai BZD: giảm tối đa 10%/2 tuần. Không ngưng đột ngột — nguy cơ co giật.'));} |
| |
| function calcSOFA(){const ids=['sofa-resp','sofa-coag','sofa-liver','sofa-cv','sofa-neuro','sofa-renal'],t=ids.reduce((s,id)=>s+parseInt(document.getElementById(id).value),0);let mort,risk,cls;if(t<7){mort='<10%';risk='Thấp';cls='green';}else if(t<10){mort='15–20%';risk='Trung bình';cls='yellow';}else if(t<13){mort='40–50%';risk='Cao';cls='red';}else{mort='>80%';risk='Rất cao';cls='red';}SR('res-sofa',RG({l:'Tổng SOFA',v:t+'/24',u:''},{l:'Tử vong ICU',v:mort,u:''},{l:'Nguy cơ',v:risk,u:''})+IB(cls,'SOFA '+t+' — '+risk+'. '+(t>=2?'✅ Đáp ứng tiêu chí Sepsis-3.':'Chưa đáp ứng tiêu chí Sepsis.')));} |
| |
| function sA(v,sc){for(const r of sc)if(v>=r[0]&&v<=r[1])return r[2];return 0;} |
| function calcAPACHE(){const age=+document.getElementById('ap-age').value,temp=+document.getElementById('ap-temp').value,map=+document.getElementById('ap-map').value,hr=+document.getElementById('ap-hr').value,rr=+document.getElementById('ap-rr').value,pao2=+document.getElementById('ap-pao2').value,ph=+document.getElementById('ap-ph').value,na=+document.getElementById('ap-na').value,k=+document.getElementById('ap-k').value,cr=+document.getElementById('ap-cr').value,hct=+document.getElementById('ap-hct').value,wbc=+document.getElementById('ap-wbc').value,gcs=+document.getElementById('ap-gcs').value,ch=+document.getElementById('ap-chronic').value;if([age,temp,map,hr,rr,ph,na,k,cr,hct,wbc,gcs].some(isNaN))return alert('Nhập đầy đủ!');const aS=age<45?0:age<55?2:age<65?3:age<75?5:6;const tS=sA(temp,[[34,35.9,3],[36,38.4,0],[38.5,38.9,1],[39,40.9,2],[41,99,4],[0,33.9,4]]),mS=sA(map,[[50,69,2],[70,109,0],[110,129,2],[130,159,3],[160,999,4],[0,49,4]]),hS=sA(hr,[[40,54,3],[55,69,2],[70,109,0],[110,139,2],[140,179,3],[180,999,4],[0,39,4]]),rS=sA(rr,[[6,11,2],[12,24,0],[25,34,1],[35,49,3],[50,999,4],[0,5,4]]),pS=sA(pao2,[[61,70,1],[71,999,0],[55,60,3],[0,54,4]]),phS=sA(ph,[[7.33,7.49,0],[7.25,7.32,2],[7.15,7.24,3],[0,7.14,4],[7.5,7.59,1],[7.6,7.69,3],[7.7,99,4]]),naS=sA(na,[[130,149,0],[120,129,2],[111,119,3],[0,110,4],[150,154,1],[155,159,2],[160,179,3],[180,999,4]]),kS=sA(k,[[3.5,5.4,0],[3.0,3.4,1],[2.5,2.9,2],[0,2.4,4],[5.5,5.9,1],[6.0,6.9,3],[7.0,99,4]]),cS=sA(cr,[[0.6,1.4,0],[0,0.59,2],[1.5,1.9,2],[2.0,3.4,3],[3.5,99,4]]),hcS=sA(hct,[[30,45.9,0],[20,29.9,2],[46,49.9,1],[50,59.9,2],[60,999,4],[0,19.9,4]]),wS=sA(wbc,[[3,14.9,0],[1,2.9,2],[15,19.9,1],[20,39.9,2],[40,999,4],[0,0.99,4]]);const phyS=tS+mS+hS+rS+pS+phS+naS+kS+cS+hcS+wS,gcsS=15-gcs,tot=phyS+aS+gcsS+ch;const mort=Math.min(99,Math.round(100/(1+Math.exp(-(-3.517+tot*0.146)))));const cls=tot<10?'green':tot<20?'yellow':'red';SR('res-apache',RG({l:'APACHE II',v:tot,u:'/71'},{l:'Tử vong dự đoán',v:mort+'%',u:''})+IB(cls,'APACHE II: '+tot+'. Tử vong: ~'+mort+'%. '+(tot<10?'Nhẹ':tot<20?'Trung bình':tot<30?'Nặng':'Rất nặng')+'.')); } |
| |
| function calcGCS(){const e=+document.getElementById('gcs-e').value,v=+document.getElementById('gcs-v').value,m=+document.getElementById('gcs-m').value,t=e+v+m;const cls=t>=13?'green':t>=9?'yellow':'red',lbl=t>=13?'Nhẹ (13–15)':t>=9?'Vừa (9–12)':'Nặng (3–8)';SR('res-gcs',RG({l:'Tổng GCS',v:t+'/15',u:''},{l:'E',v:e,u:''},{l:'V',v:v,u:''},{l:'M',v:m,u:''})+IB(cls,'GCS '+t+'/15 — <strong>'+lbl+'</strong>.'+(t<=8?' 🚨 Xem xét đặt NKQ bảo vệ đường thở.':'')));} |
| |
| function calcCHADS(){const ids=['ch-c','ch-h','ch-a2','ch-d','ch-s2','ch-v','ch-a','ch-sc'],t=ids.reduce((s,id)=>s+parseInt(document.getElementById(id).value),0);let risk,rec,cls;if(t===0){risk='<1%/năm';rec='Không cần kháng đông';cls='green';}else if(t===1&&document.getElementById('ch-sc').value==='1'){risk='~1%/năm';rec='Không cần kháng đông (yếu tố nữ đơn độc)';cls='green';}else if(t===1){risk='~1.3%/năm';rec='Xem xét kháng đông (NOAC)';cls='yellow';}else{risk='~'+(t*1.5).toFixed(0)+'%/năm';rec='Chỉ định kháng đông (NOAC ưu tiên)';cls='red';}SR('res-chads',RG({l:'CHA₂DS₂-VASc',v:t,u:'/9'},{l:'Nguy cơ đột quỵ/năm',v:risk,u:''})+IB(cls,'<strong>'+rec+'</strong>. NOAC ưu tiên hơn warfarin (ESC 2020).'));} |
| |
| function calcCURB(){const ids=['curb-c','curb-u','curb-r','curb-b','curb-65'],t=ids.reduce((s,id)=>s+parseInt(document.getElementById(id).value),0);let mort,sev,cls,rec;if(t<=1){mort='<3%';sev='Nhẹ';cls='green';rec='Điều trị ngoại trú';}else if(t===2){mort='9%';sev='Trung bình';cls='yellow';rec='Cân nhắc nhập viện ngắn hạn';}else{mort=t===3?'17%':t===4?'41%':'>57%';sev='Nặng';cls='red';rec='Nhập viện, xem xét ICU nếu ≥4';}SR('res-curb',RG({l:'CURB-65',v:t,u:'/5'},{l:'Tử vong 30 ngày',v:mort,u:''},{l:'Mức độ nặng',v:sev,u:''})+IB(cls,'<strong>'+rec+'</strong>. Tử vong 30 ngày: '+mort+'.'));} |
| |
| function calcNEWS2(){const vals=['n2-spo2','n2-o2','n2-rr','n2-temp','n2-sbp','n2-hr','n2-avpu'].map(id=>document.getElementById(id).value),t=vals.reduce((s,v)=>s+parseInt(v.replace('b','')),0);let risk,resp,cls;if(t<=4&&!vals.some(v=>parseInt(v.replace('b',''))>=3)){risk='Thấp';resp='Đánh giá mỗi 12h';cls='green';}else if(t<=6||vals.some(v=>parseInt(v.replace('b',''))>=3)){risk='Trung bình';resp='Thông báo bác sĩ — đánh giá mỗi 1h';cls='yellow';}else{risk='Cao';resp='Báo động khẩn — ICU/RRT';cls='red';}SR('res-news2',RG({l:'Tổng NEWS2',v:t,u:''},{l:'Nguy cơ',v:risk,u:''},{l:'Đáp ứng',v:resp,u:''})+IB(cls,'NEWS2: <strong>'+t+'</strong> — '+risk+'. <strong>'+resp+'.</strong>'));} |
| |
| function calcDAPT(){const ids=['dapt-age','dapt-smoke','dapt-dm','dapt-mi','dapt-prior','dapt-paclitaxel','dapt-small','dapt-hf','dapt-svg'],t=ids.reduce((s,id)=>s+parseInt(document.getElementById(id).value),0);const rec=t>=2?'Kéo dài DAPT >12 tháng':'DAPT 12 tháng tiêu chuẩn';SR('res-dapt',RG({l:'DAPT Score',v:t,u:''})+IB(t>=2?'yellow':'green','Score: '+t+'. <strong>'+rec+'</strong>.'));} |
| |
| function calcBLED(){const ids=['bled-h','bled-a','bled-s','bled-b','bled-l','bled-e','bled-d'],t=ids.reduce((s,id)=>s+parseInt(document.getElementById(id).value),0);let risk,mort,cls;if(t<=1){risk='Thấp';mort='~1%';cls='green';}else if(t===2){risk='Trung bình';mort='~2%';cls='yellow';}else{risk='Cao';mort='~'+(t*1.5).toFixed(0)+'%';cls='red';}SR('res-bled',RG({l:'HAS-BLED',v:t,u:'/9'},{l:'Nguy cơ CM/năm',v:mort,u:''},{l:'Phân loại',v:risk,u:''})+IB(cls,'HAS-BLED: '+t+' — '+risk+'. Điểm cao không chống chỉ định kháng đông — kiểm soát yếu tố có thể chỉnh được.'));} |
| |
| function calcTPN(){const wt=+document.getElementById('tpn-wt').value,ht=+document.getElementById('tpn-ht').value,age=+document.getElementById('tpn-age').value,sex=document.getElementById('tpn-sex').value,stress=+document.getElementById('tpn-stress').value;if([wt,ht,age].some(isNaN))return alert('Nhập đầy đủ!');const bmr=sex==='male'?10*wt+6.25*ht-5*age+5:10*wt+6.25*ht-5*age-161,kcal=Math.round(bmr*stress),prot=Math.round(wt*(stress>1.4?1.5:1.2)),gluc=Math.round(kcal*0.6/4),lip=Math.round(kcal*0.4/9),fl=Math.round(wt*30+500),bmi=wt/(ht/100)**2;SR('res-tpn',RG({l:'Năng lượng',v:kcal,u:'kcal/ngày'},{l:'Đạm',v:prot,u:'g/ngày'},{l:'Glucose',v:gluc,u:'g/ngày'},{l:'Lipid',v:lip,u:'g/ngày'},{l:'Dịch',v:fl,u:'mL/ngày'},{l:'BMI',v:bmi.toFixed(1),u:'kg/m²'})+IB('blue','BMR: '+Math.round(bmr)+' kcal × '+stress+' = '+kcal+' kcal/ngày. Đạm '+(prot/wt).toFixed(2)+' g/kg/ngày.'));} |
| |
| function calcPhenytoin(){const m=+document.getElementById('ph-measured').value,alb=+document.getElementById('ph-alb').value,crcl=+document.getElementById('ph-crcl').value||90,vpa=document.getElementById('ph-vpa').value==='yes';if([m,alb].some(isNaN))return alert('Nhập đầy đủ!');let c;if(vpa||crcl<10)c=m/(0.48*alb/4.4+0.1);else c=m/(0.9*alb/4.4+0.1);const fr=c*0.1,cls=c>=10&&c<=20?'green':c<10?'yellow':'red';SR('res-phenytoin',RG({l:'Phenytoin hiệu chỉnh',v:c.toFixed(1),u:'mg/L'},{l:'Ước tính tự do',v:fr.toFixed(2),u:'mg/L'},{l:'Trạng thái',v:c<10?'Dưới điều trị':c<=20?'Đạt mục tiêu':'Trên điều trị',u:''})+IB(cls,'Hiệu chỉnh: '+c.toFixed(1)+' mg/L (mục tiêu: 10–20 mg/L). Phenytoin tự do mục tiêu: 1–2 mg/L.'));} |
| |
| function calcPhenytoinLoad(){const wt=+document.getElementById('pl-wt').value,curr=+document.getElementById('pl-current').value||0,tgt=+document.getElementById('pl-target').value,vd=+document.getElementById('pl-vd').value;if(isNaN(wt))return alert('Nhập cân nặng!');const dose=(tgt-curr)*vd*wt;SR('res-phenload',RG({l:'Loading dose',v:Math.round(dose),u:'mg'},{l:'Tốc độ tối đa',v:50,u:'mg/phút'},{l:'Thời gian tối thiểu',v:(dose/50/60).toFixed(1),u:'phút'})+IB('yellow','🚨 Pha trong NaCl 0.9%. Theo dõi ECG liên tục.'));} |
| |
| function calcWarfarin(){const inr=+document.getElementById('wf-inr').value,dose=+document.getElementById('wf-dose').value,tgt=document.getElementById('wf-target').value;if([inr,dose].some(isNaN))return alert('Nhập đầy đủ!');const r=tgt==='2.5'?[2.0,3.0]:[2.5,3.5];let nd=dose,action='';if(inr<r[0]-0.5){nd=dose*1.15;action='Tăng 15% liều tuần';}else if(inr<r[0]){nd=dose*1.1;action='Tăng 10% liều tuần';}else if(inr<=r[1]){action='Duy trì liều hiện tại';nd=dose;}else if(inr<=r[1]+0.5){nd=dose*0.9;action='Giảm 10% liều tuần';}else if(inr<=4.0){nd=dose*0.85;action='Giảm 15% liều tuần';}else if(inr<=5.0){nd=0;action='Bỏ 1–2 liều, giảm 15–20% sau';}else{nd=0;action='🚨 Ngưng warfarin, xem xét Vitamin K';}const cls=inr>=r[0]&&inr<=r[1]?'green':inr>4?'red':'yellow';SR('res-warfarin',RG({l:'INR hiện tại',v:inr,u:''},{l:'Mục tiêu',v:r[0]+'–'+r[1],u:''},{l:'Liều mới',v:nd>0?nd.toFixed(1):'Ngưng',u:nd>0?'mg/tuần':''})+IB(cls,'INR '+inr+' → <strong>'+action+'</strong>. Kiểm tra INR lại sau 3–7 ngày.'));} |
| |
| function calcIVRate(){const vol=+document.getElementById('ivr-vol').value,t=+document.getElementById('ivr-time').value,wt=+document.getElementById('ivr-wt').value;if([vol,t].some(isNaN)||t<=0)return alert('Nhập đầy đủ!');const r=vol/t;SR('res-ivrate',RG({l:'Tốc độ',v:r.toFixed(1),u:'mL/h'},{l:'mL/kg/h',v:!isNaN(wt)?(r/wt).toFixed(2):'—',u:''},{l:'Giọt/phút (15)',v:Math.round(vol/t/60*15),u:'gtt/min'},{l:'Giọt/phút (20)',v:Math.round(vol/t/60*20),u:'gtt/min'}));} |
| |
| function calcIVVol(){const r=+document.getElementById('ivv-rate').value,t=+document.getElementById('ivv-time').value;if([r,t].some(isNaN))return alert('Nhập đầy đủ!');SR('res-ivvol',RG({l:'Thể tích',v:(r*t).toFixed(0),u:'mL'},{l:'Túi 500mL cần',v:Math.ceil(r*t/500),u:'túi'}));} |
| |
| function calcIVTime(){const vol=+document.getElementById('ivt-vol').value,r=+document.getElementById('ivt-rate').value;if([vol,r].some(isNaN)||r<=0)return alert('Nhập đầy đủ!');const t=vol/r,h=Math.floor(t),m=Math.round((t-h)*60);SR('res-ivtime',RG({l:'Thời gian',v:t.toFixed(1),u:'h'},{l:'Giờ:Phút',v:h+'h '+m+'p',u:''}));} |
| |
| function calcIVDrop(){const vol=+document.getElementById('ivd-vol').value,min=+document.getElementById('ivd-min').value,f=+document.getElementById('ivd-factor').value;if([vol,min].some(isNaN)||min<=0)return alert('Nhập đầy đủ!');const d=Math.round(vol*f/min);SR('res-ivdrop',RG({l:'Giọt/phút',v:d,u:'gtt/phút'},{l:'Giọt/10 giây',v:Math.round(d/6),u:'gtt'},{l:'Tốc độ',v:(vol/min*60).toFixed(1),u:'mL/h'}));} |
| |
| function calcNa(){const curr=+document.getElementById('na-current').value,tgt=+document.getElementById('na-target').value,wt=+document.getElementById('na-wt').value,tbwF=+document.getElementById('na-sex').value,fNa=+document.getElementById('na-fluid').value,t=+document.getElementById('na-time').value;if([curr,tgt,wt,t].some(isNaN))return alert('Nhập đầy đủ!');const tbw=wt*tbwF,def=(tgt-curr)*tbw,vol=(def/fNa)*1000,rate=vol/t,chg=def/tbw;const cls=chg>8?'red':chg>6?'yellow':'green';SR('res-na',RG({l:'Thiếu hụt Na⁺',v:def.toFixed(0),u:'mmol'},{l:'Thể tích dịch',v:Math.round(vol),u:'mL'},{l:'Tốc độ',v:rate.toFixed(1),u:'mL/h'},{l:'Tăng Na⁺/24h',v:chg.toFixed(1),u:'mmol'})+IB(cls,'Na⁺ dự kiến tăng '+chg.toFixed(1)+' mmol/L/24h. '+(chg>8?'🚨 Nguy cơ ODS! Giảm tốc độ.':'✅ Trong giới hạn an toàn (≤6–8 mmol/24h).')));} |
| |
| function calcK(){const curr=+document.getElementById('k-current').value,tgt=+document.getElementById('k-target').value,wt=+document.getElementById('k-wt').value,crcl=+document.getElementById('k-crcl').value||80;if([curr,tgt,wt].some(isNaN))return alert('Nhập đầy đủ!');const def=Math.max(0,(tgt-curr)*wt*2.5),kcl=def/1.34,sess=Math.ceil(def/10);const cls=curr<3?'red':curr<3.5?'yellow':'green';SR('res-k',RG({l:'Tổng K⁺ cần bù',v:Math.round(def),u:'mmol'},{l:'KCl 10% cần',v:Math.round(kcl),u:'mL'},{l:'Số lần bù',v:sess,u:'lần (10mmol/lần)'})+IB(cls,'K⁺ '+curr+' → Bù '+Math.round(def)+' mmol KCl.'+(crcl<30?' ⚠️ Suy thận: bù chậm, theo dõi ECG.':'')));} |
| |
| function calcKIV(){const total=+document.getElementById('kiv-total').value,conc=+document.getElementById('kiv-conc').value,maxR=+document.getElementById('kiv-route').value;if(isNaN(total))return alert('Nhập tổng K⁺!');const vol=(total/conc)*1000,r=Math.min(maxR,total),t=total/r;SR('res-kiv',RG({l:'Tốc độ tối đa',v:maxR,u:'mmol/h'},{l:'Tốc độ',v:r.toFixed(1),u:'mmol/h'},{l:'Thể tích pha',v:Math.round(vol),u:'mL'},{l:'Thời gian truyền',v:t.toFixed(1),u:'h'})+IB('yellow','Tốc độ '+r.toFixed(1)+' mmol/h trong '+t.toFixed(1)+'h. Theo dõi K⁺ mỗi 2h, ECG nếu tốc độ cao.'));} |
| |
| function calcHCO3(){const curr=+document.getElementById('hco-current').value,tgt=+document.getElementById('hco-target').value,wt=+document.getElementById('hco-wt').value,ph=+document.getElementById('hco-ph').value,conc=+document.getElementById('hco-conc').value,strat=+document.getElementById('hco-strategy').value;if([curr,tgt,wt,ph].some(isNaN))return alert('Nhập đầy đủ!');const def=(tgt-curr)*wt*0.3,toBu=def*strat,vol=toBu/conc;SR('res-hco3',RG({l:'Thiếu hụt HCO₃⁻',v:def.toFixed(0),u:'mmol'},{l:'Lượng cần bù',v:Math.round(toBu),u:'mmol'},{l:'Thể tích dung dịch',v:Math.round(vol),u:'mL'},{l:'Tốc độ (4h)',v:(vol/4).toFixed(0),u:'mL/h'})+IB(ph<7.1?'red':'yellow','pH '+ph+' — Bù '+(strat*100).toFixed(0)+'% = '+Math.round(toBu)+' mmol. Kiểm tra khí máu sau 1–2h.'));} |
| </script> |
| </body> |
| </html> |
|
|