<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Auditoría Notas de Enfermería — SION</title>
<style>
/* ── Reset & base ─────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
    font-family: 'Segoe UI', system-ui, sans-serif;
    background: #f0f4f8;
    color: #1a2332;
    min-height: 100vh;
}

/* ── Header ───────────────────────────────────────────────── */
.header {
    background: linear-gradient(135deg, #1a3a5c, #2563a8);
    color: #fff;
    padding: 14px 28px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    box-shadow: 0 2px 8px rgba(0,0,0,.25);
}
.header h1 { font-size: 1.15rem; font-weight: 600; letter-spacing: .3px; }
.header .meta { font-size: .8rem; opacity: .8; }
.btn-logout {
    background: rgba(255,255,255,.15);
    border: 1px solid rgba(255,255,255,.35);
    color: #fff;
    padding: 6px 14px;
    border-radius: 6px;
    cursor: pointer;
    font-size: .82rem;
    text-decoration: none;
    transition: background .2s;
}
.btn-logout:hover { background: rgba(255,255,255,.28); }

/* ── Menú de navegación entre módulos ────────────────────── */
.nav-tabs {
    background: #142a45;
    display: flex;
    gap: 4px;
    padding: 0 24px;
    box-shadow: 0 2px 6px rgba(0,0,0,.15);
}
.nav-tab {
    background: transparent;
    border: none;
    color: rgba(255,255,255,.65);
    padding: 12px 20px;
    font-size: .87rem;
    font-weight: 600;
    cursor: pointer;
    border-bottom: 3px solid transparent;
    transition: color .15s, border-color .15s, background .15s;
}
.nav-tab:hover { color: #fff; background: rgba(255,255,255,.06); }
.nav-tab.activo { color: #fff; border-bottom-color: #38b2ac; }

/* ── Main container ───────────────────────────────────────── */
.container { max-width: 1280px; margin: 0 auto; padding: 24px 20px; }

/* ── Upload card ──────────────────────────────────────────── */
.card {
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 1px 6px rgba(0,0,0,.08);
    padding: 20px 24px;
    margin-bottom: 24px;
}
.card h2 { font-size: .95rem; font-weight: 600; color: #1a3a5c; margin-bottom: 14px; }
.upload-row { display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; }
.upload-row label { font-size: .82rem; color: #4a5568; display: block; margin-bottom: 4px; }
.upload-row input[type=text],
.upload-row input[type=file] {
    border: 1px solid #cbd5e0;
    border-radius: 7px;
    padding: 8px 12px;
    font-size: .87rem;
    outline: none;
    transition: border-color .2s;
}
.upload-row input[type=text]:focus,
.upload-row input[type=file]:focus { border-color: #2563a8; }
.btn-primary {
    background: #2563a8;
    color: #fff;
    border: none;
    padding: 9px 22px;
    border-radius: 7px;
    font-size: .87rem;
    font-weight: 600;
    cursor: pointer;
    transition: background .2s;
}
.btn-primary:hover:not(:disabled) { background: #1a4f8a; }
.btn-primary:disabled { opacity: .55; cursor: not-allowed; }

/* ── Progress ─────────────────────────────────────────────── */
.progress-wrap { margin-top: 14px; display: none; }
.progress-bar-bg {
    background: #e2e8f0;
    border-radius: 8px;
    height: 10px;
    overflow: hidden;
}
.progress-bar-fill {
    background: linear-gradient(90deg, #2563a8, #38b2ac);
    height: 100%;
    width: 0%;
    border-radius: 8px;
    transition: width .4s ease;
}
.progress-label { font-size: .78rem; color: #4a5568; margin-top: 5px; }

/* ── Table ────────────────────────────────────────────────── */
.table-wrap { overflow-x: auto; }
table {
    width: 100%;
    border-collapse: collapse;
    font-size: .84rem;
}
thead tr { background: #1a3a5c; color: #fff; }
thead th { padding: 11px 14px; text-align: left; font-weight: 600; white-space: nowrap; }
tbody tr { border-bottom: 1px solid #e8edf2; transition: background .15s; }
tbody tr:hover { background: #f7faff; }
tbody td { padding: 11px 14px; vertical-align: middle; }

.badge {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 20px;
    font-size: .75rem;
    font-weight: 600;
}
.badge-hallazgo { background: #fee2e2; color: #b91c1c; }
.badge-ok       { background: #d1fae5; color: #065f46; }
.badge-pendiente { background: #fef3c7; color: #92400e; }
.badge-comprometido { background: #dbeafe; color: #1e40af; }

/* ── Tabla hallazgos principal ────────────────────────────── */
.tr-hallazgo { background: #fff0f0; }
.tr-hallazgo:hover { background: #ffe4e4 !important; }
.tr-ok { background: #f0fff4; }
.tr-ok:hover { background: #e0faea !important; }
.detalle-hallazgo { color: #c53030; font-size: .8rem; }
.icon-ok  { color: #16a34a; font-size: 1rem; }
.icon-err { color: #dc2626; font-size: 1rem; }

/* ── Filtros ──────────────────────────────────────────────── */
.filtros-bar {
    display: flex; align-items: center; gap: 14px;
    flex-wrap: wrap; margin-bottom: 14px;
    padding: 10px 14px; background: #f7faff;
    border-radius: 8px; border: 1px solid #e2e8f0;
}
.filtros-bar select {
    border: 1px solid #cbd5e0; border-radius: 6px;
    padding: 5px 10px; font-size: .83rem; outline: none;
    background: #fff; cursor: pointer;
}
.filtros-bar label { font-size: .82rem; color: #2d3748; display: flex; align-items: center; gap: 5px; cursor: pointer; }
.chip-r1 { background: #dbeafe; color: #1e40af; padding: 2px 9px; border-radius: 12px; font-weight: 700; font-size: .75rem; }
.chip-r2 { background: #fef3c7; color: #92400e; padding: 2px 9px; border-radius: 12px; font-weight: 700; font-size: .75rem; }
.chip-r3 { background: #fce7f3; color: #9d174d; padding: 2px 9px; border-radius: 12px; font-weight: 700; font-size: .75rem; }
.filtros-bar input[type=text] {
    border: 1px solid #cbd5e0; border-radius: 6px;
    padding: 5px 10px; font-size: .83rem; outline: none;
    min-width: 180px; flex: 1;
}
.btn-clear-search {
    background: #e2e8f0; border: none; border-radius: 6px;
    padding: 5px 10px; cursor: pointer; font-size: .82rem;
    color: #4a5568;
}

/* ── Action buttons ───────────────────────────────────────── */
.actions { display: flex; gap: 7px; flex-wrap: nowrap; }
.btn-sm {
    padding: 5px 11px;
    border-radius: 6px;
    font-size: .78rem;
    font-weight: 600;
    border: none;
    cursor: pointer;
    transition: opacity .15s, transform .1s;
    white-space: nowrap;
}
.btn-sm:hover { opacity: .85; transform: translateY(-1px); }
.btn-detalles     { background: #2563a8; color: #fff; }
.btn-descargar    { background: #059669; color: #fff; }
.btn-compromiso   { background: #7c3aed; color: #fff; }
.btn-compromiso.tiene { background: #1e40af; }

/* ── Empty state ──────────────────────────────────────────── */
.empty {
    text-align: center;
    padding: 40px 20px;
    color: #718096;
    font-size: .9rem;
}

/* ── MODAL base ───────────────────────────────────────────── */
.modal-overlay {
    display: none;
    position: fixed; inset: 0;
    background: rgba(0,0,0,.45);
    z-index: 900;
    align-items: center;
    justify-content: center;
    padding: 20px;
}
.modal-overlay.open { display: flex; }
.modal {
    background: #fff;
    border-radius: 14px;
    box-shadow: 0 8px 40px rgba(0,0,0,.2);
    width: 100%;
    max-width: 96vw;
    max-height: 92vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}
.modal-header {
    background: #1a3a5c;
    color: #fff;
    padding: 16px 22px;
    display: flex;
    align-items: center;
    justify-content: space-between;
}
.modal-header h3 { font-size: .97rem; }
.modal-close {
    background: none;
    border: none;
    color: #fff;
    font-size: 1.4rem;
    cursor: pointer;
    line-height: 1;
    opacity: .8;
}
.modal-close:hover { opacity: 1; }
.modal-body { padding: 20px 22px; overflow: auto; flex: 1; }

/* Tabla dentro del modal */
.modal-body table { font-size: .82rem; width: auto; min-width: 100%; border-collapse: collapse; }
.modal-body thead tr { background: #2563a8; }
.modal-body thead th { white-space: nowrap; padding: 10px 14px; }
.modal-body tbody td { white-space: nowrap; padding: 9px 14px; }
.row-hallazgo td { background: #fff5f5; color: #c53030; font-weight: 500; }
.row-ok td { background: #f0fff4; }
.row-corregido td { background: #d1fae5 !important; color: #065f46 !important; font-weight: 500; }

/* ── Modal Compromiso ─────────────────────────────────────── */
#modalCompromiso .modal { max-width: 600px; }
.comp-meta {
    background: #f7faff;
    border: 1px solid #bee3f8;
    border-radius: 8px;
    padding: 12px 16px;
    font-size: .82rem;
    color: #2b6cb0;
    margin-bottom: 14px;
    display: none;
}
.comp-meta strong { display: block; margin-bottom: 2px; font-size: .85rem; }
.comp-textarea {
    width: 100%;
    min-height: 130px;
    border: 1px solid #cbd5e0;
    border-radius: 8px;
    padding: 12px;
    font-size: .87rem;
    font-family: inherit;
    resize: vertical;
    outline: none;
    transition: border-color .2s;
}
.comp-textarea:focus { border-color: #7c3aed; }
.comp-footer { margin-top: 14px; display: flex; justify-content: flex-end; gap: 10px; }
.btn-secondary {
    padding: 8px 18px;
    border-radius: 7px;
    font-size: .86rem;
    font-weight: 600;
    border: 1px solid #cbd5e0;
    background: #fff;
    cursor: pointer;
}
.btn-save-comp {
    background: #7c3aed;
    color: #fff;
    border: none;
    padding: 8px 22px;
    border-radius: 7px;
    font-size: .86rem;
    font-weight: 600;
    cursor: pointer;
}
/* ── Paginado ──────────────────────────────────────────── */
.paginado {
    display: flex; align-items: center; justify-content: space-between;
    flex-wrap: wrap; gap: 10px;
    margin-top: 14px; padding-top: 12px;
    border-top: 1px solid #e2e8f0;
    font-size: .83rem; color: #4a5568;
}
.paginado-btns { display: flex; gap: 6px; }
.btn-pag {
    padding: 5px 11px; border-radius: 6px; border: 1px solid #cbd5e0;
    background: #fff; cursor: pointer; font-size: .82rem; color: #2d3748;
    transition: background .15s;
}
.btn-pag:hover:not(:disabled) { background: #ebf4ff; border-color: #2563a8; color: #2563a8; }
.btn-pag:disabled { opacity: .45; cursor: not-allowed; }
.btn-pag.activo { background: #2563a8; color: #fff; border-color: #2563a8; font-weight: 600; }

/* ── Footer ────────────────────────────────────────────── */
.footer {
    text-align: center; padding: 18px 20px;
    font-size: .78rem; color: #718096;
    border-top: 1px solid #e2e8f0;
    margin-top: 10px;
}
.footer strong { color: #2d3748; }

.toast {
    position: fixed;
    bottom: 24px;
    right: 24px;
    background: #1a3a5c;
    color: #fff;
    padding: 11px 20px;
    border-radius: 8px;
    font-size: .86rem;
    box-shadow: 0 4px 14px rgba(0,0,0,.25);
    opacity: 0;
    transform: translateY(10px);
    transition: opacity .3s, transform .3s;
    z-index: 9999;
}
.toast.show { opacity: 1; transform: translateY(0); }
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.min.js"></script>
<script>
  // Configurar worker de PDF.js
  if (typeof pdfjsLib !== "undefined") {
    pdfjsLib.GlobalWorkerOptions.workerSrc = "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js";
  }
</script>
</head>
<body>

<!-- Header -->
<div class="header">
    <h1>🏥 Auditoría Clínica — Clínica SION</h1>
    <div style="display:flex;gap:16px;align-items:center">
        <span class="meta" id="lblUsuario"></span>
        <a class="btn-logout" href="#" onclick="cerrarSesion()">Salir</a>
    </div>
</div>

<!-- Menú de navegación entre módulos de auditoría -->
<div class="nav-tabs">
    <button class="nav-tab activo" id="tabEnfermeria" onclick="cambiarSeccion('enfermeria')">
        🩺 Auditar Notas Enfermería
    </button>
    <button class="nav-tab" id="tabMultidisciplinario" onclick="cambiarSeccion('multidisciplinario')">
        🧑‍⚕️ Auditar Multidisciplinario
    </button>
</div>

<div class="container">

<!-- ══════════════════════════════════════════════════════════
     SECCIÓN 1: AUDITORÍA DE NOTAS DE ENFERMERÍA (existente)
     ══════════════════════════════════════════════════════════ -->
<div id="seccionEnfermeria">

    <!-- Upload -->
    <div class="card">
        <h2>📄 Nueva auditoría</h2>
        <div class="upload-row">
            <div>
                <label>Archivos PDF (puede seleccionar varios)</label>
                <input type="file" id="inpPdf" accept=".pdf" multiple>
            </div>
            <button class="btn-primary" id="btnAnalizar" onclick="iniciarAnalisis()">Analizar</button>
            <button class="btn-secondary" id="btnVerLog" onclick="toggleLog()" style="display:none">
                📋 Ver log
            </button>
        </div>
        <div id="listaArchivos" style="margin-top:10px;font-size:.82rem;color:#4a5568;"></div>
        <div id="logProceso" style="display:none;margin-top:12px;background:#1a2332;color:#e2e8f0;border-radius:8px;padding:12px 16px;font-size:.78rem;font-family:monospace;max-height:200px;overflow-y:auto;line-height:1.7;"></div>
        <div class="progress-wrap" id="progWrap">
            <div class="progress-bar-bg">
                <div class="progress-bar-fill" id="progBar"></div>
            </div>
            <div class="progress-label" id="progLabel">Iniciando…</div>
        </div>
    </div>

    <!-- Tabla de auditorías -->
    <div class="card">
        <h2>📋 Auditorías realizadas</h2>

        <!-- Filtros -->
        <div class="filtros-bar">
            <select id="filtroEstado" onchange="filtrar()">
                <option value="hallazgos">Solo hallazgos</option>
                <option value="todos">Todos</option>
                <option value="ok">Solo OK</option>
            </select>
            <label>Regla:
                <input type="checkbox" id="filtroR1" onchange="filtrar()">
                <span class="chip-r1">R1</span>
            </label>
            <label>
                <input type="checkbox" id="filtroR2" onchange="filtrar()">
                <span class="chip-r2">R2</span>
            </label>
            <label>
                <input type="checkbox" id="filtroR3" onchange="filtrar()">
                <span class="chip-r3">R3</span>
            </label>
            <input type="text" id="filtroBuscar" placeholder="Buscar en detalle…" oninput="filtrar()">
            <button class="btn-clear-search" onclick="limpiarFiltros()">✕</button>
        </div>

        <div class="table-wrap">
            <table id="tblAuditorias">
                <thead>
                    <tr>
                        <th>Paciente</th>
                        <th>CC</th>
                        <th>Fecha auditoría</th>
                        <th>Notas</th>
                        <th>Hallazgos</th>
                        <th>Compromiso</th>
                        <th>Estado</th>
                        <th>Acciones</th>
                    </tr>
                </thead>
                <tbody id="tbodyAuditorias">
                    <tr><td colspan="7" class="empty">Cargando…</td></tr>
                </tbody>
            </table>
        </div>
        <!-- Paginado -->
        <div class="paginado" id="paginadoWrap" style="display:none">
            <span id="paginadoInfo"></span>
            <div class="paginado-btns" id="paginadoBtns"></div>
        </div>
    </div>
</div>
<!-- FIN seccionEnfermeria -->

<!-- ══════════════════════════════════════════════════════════
     SECCIÓN 2: AUDITORÍA MULTIDISCIPLINARIO (intervenciones)
     ══════════════════════════════════════════════════════════ -->
<div id="seccionMultidisciplinario" style="display:none">

    <!-- Upload -->
    <div class="card">
        <h2>📄 Nueva auditoría multidisciplinaria</h2>
        <div class="upload-row">
            <div>
                <label>Archivos PDF (puede seleccionar varios)</label>
                <input type="file" id="inpPdfInterv" accept=".pdf" multiple>
            </div>
            <button class="btn-primary" id="btnAnalizarInterv" onclick="iniciarAnalisisInterv()">Analizar</button>
            <button class="btn-secondary" id="btnVerLogInterv" onclick="toggleLogInterv()" style="display:none">
                📋 Ver log
            </button>
        </div>
        <div id="listaArchivosInterv" style="margin-top:10px;font-size:.82rem;color:#4a5568;"></div>
        <div id="logProcesoInterv" style="display:none;margin-top:12px;background:#1a2332;color:#e2e8f0;border-radius:8px;padding:12px 16px;font-size:.78rem;font-family:monospace;max-height:200px;overflow-y:auto;line-height:1.7;"></div>
        <div class="progress-wrap" id="progWrapInterv">
            <div class="progress-bar-bg">
                <div class="progress-bar-fill" id="progBarInterv"></div>
            </div>
            <div class="progress-label" id="progLabelInterv">Iniciando…</div>
        </div>
    </div>

    <!-- Tabla de auditorías multidisciplinarias -->
    <div class="card">
        <h2>📋 Auditorías multidisciplinarias realizadas</h2>

        <!-- Filtros -->
        <div class="filtros-bar">
            <select id="filtroEstadoInterv" onchange="filtrarInterv()">
                <option value="hallazgos">Solo hallazgos</option>
                <option value="todos">Todos</option>
                <option value="ok">Solo OK</option>
            </select>
            <input type="text" id="filtroBuscarInterv" placeholder="Buscar paciente/CC…" oninput="filtrarInterv()">
            <button class="btn-clear-search" onclick="limpiarFiltrosInterv()">✕</button>
        </div>

        <div class="table-wrap">
            <table id="tblAuditoriasInterv">
                <thead>
                    <tr>
                        <th>Paciente</th>
                        <th>CC</th>
                        <th>Fecha auditoría</th>
                        <th>Periodo auditado</th>
                        <th>Notas</th>
                        <th>Hallazgos</th>
                        <th>Sin mapear</th>
                        <th>Estado</th>
                        <th>Acciones</th>
                    </tr>
                </thead>
                <tbody id="tbodyAuditoriasInterv">
                    <tr><td colspan="9" class="empty">Cargando…</td></tr>
                </tbody>
            </table>
        </div>
        <!-- Paginado -->
        <div class="paginado" id="paginadoWrapInterv" style="display:none">
            <span id="paginadoInfoInterv"></span>
            <div class="paginado-btns" id="paginadoBtnsInterv"></div>
        </div>
    </div>
</div>
<!-- FIN seccionMultidisciplinario -->

</div>

<!-- Footer -->
<div class="footer">
    Desarrollado por <strong>Ing. Víctor Mario Medina Cano</strong> &nbsp;|&nbsp;
    <a href="tel:+573002261133" style="color:#2563a8;text-decoration:none">(+57) 300-226-1133</a>
    &nbsp;|&nbsp; Clínica SION &copy; 2026
</div>

<!-- ── Modal Detalles ────────────────────────────────────── -->
<div class="modal-overlay" id="modalDetalles">
    <div class="modal">
        <div class="modal-header">
            <h3 id="modalDetallesTitulo">Hallazgos del paciente</h3>
            <button class="modal-close" onclick="cerrarModal('modalDetalles')">✕</button>
        </div>
        <div class="modal-body">
            <!-- Filtros del modal -->
            <div class="filtros-bar" style="margin-bottom:12px">
                <select id="mFiltroEstado" onchange="filtrarModal()">
                    <option value="hallazgos">Solo hallazgos</option>
                    <option value="todos">Todos</option>
                    <option value="ok">Solo OK</option>
                </select>
                <label>Regla:
                    <input type="checkbox" id="mFiltroR1" onchange="filtrarModal()">
                    <span class="chip-r1">R1</span>
                </label>
                <label>
                    <input type="checkbox" id="mFiltroR2" onchange="filtrarModal()">
                    <span class="chip-r2">R2</span>
                </label>
                <label>
                    <input type="checkbox" id="mFiltroR3" onchange="filtrarModal()">
                    <span class="chip-r3">R3</span>
                </label>
                <input type="text" id="mFiltroBuscar" placeholder="Buscar…" oninput="filtrarModal()" style="min-width:140px">
                <button class="btn-clear-search" onclick="limpiarFiltrosModal()">✕</button>
            </div>
            <table id="tblDetalles">
                <thead>
                    <tr>
                        <th>ID Nota</th>
                        <th>Profesional</th>
                        <th>F. Grabación</th>
                        <th>H. Grabación</th>
                        <th>F. Atención</th>
                        <th>H. Atención</th>
                        <th>R1</th>
                        <th>R2</th>
                        <th>R3</th>
                        <th>Detalle hallazgo</th>
                        <th>Corregido</th>
                        <th>Estado</th>
                    </tr>
                </thead>
                <tbody id="tbodyDetalles"></tbody>
            </table>
        </div>
    </div>
</div>

<!-- ── Modal Compromiso ──────────────────────────────────── -->
<div class="modal-overlay" id="modalCompromiso">
    <div class="modal">
        <div class="modal-header">
            <h3 id="modalCompromisoTitulo">Nota de compromiso de enfermería</h3>
            <button class="modal-close" onclick="cerrarModal('modalCompromiso')">✕</button>
        </div>
        <div class="modal-body">
            <p style="font-size:.84rem;color:#4a5568;margin-bottom:14px">
                Carga el PDF con la nueva nota de enfermería o escríbela directamente.
                El sistema comparará contra los hallazgos y calculará cuántos fueron subsanados.
            </p>
            <div style="display:flex;align-items:center;gap:10px;margin-bottom:12px;background:#f7faff;border:1px solid #bee3f8;border-radius:8px;padding:10px 14px">
                <span style="font-size:.82rem;color:#2b6cb0;font-weight:600">📄 Cargar PDF:</span>
                <input type="file" id="compPdf" accept=".pdf" style="font-size:.82rem;flex:1" onchange="cargarPdfCompromiso()">
                <span id="compPdfStatus" style="font-size:.78rem;color:#718096"></span>
            </div>
            <div class="comp-meta" id="compMetaExistente">
                <strong>⚠ Ya existe un compromiso para esta auditoría</strong>
                <span id="compMetaFecha"></span>
            </div>
            <div id="compError" style="display:none;background:#fff5f5;border:1px solid #feb2b2;
                 border-radius:8px;padding:12px 16px;margin-bottom:12px;font-size:.84rem;
                 color:#c53030;line-height:1.5"></div>
            <textarea class="comp-textarea" id="compTexto"
                placeholder="El texto se cargará automáticamente al seleccionar un PDF, o escríbelo aquí…"></textarea>
            <div class="comp-footer">
                <button class="btn-secondary" onclick="cerrarModal('modalCompromiso')">Cancelar</button>
                <button class="btn-save-comp" id="btnGuardarComp" onclick="guardarCompromiso()">💾 Guardar compromiso</button>
            </div>
        </div>
    </div>
</div>

<!-- Toast -->
<div class="toast" id="toast"></div>

<!-- ── Modal Detalles Multidisciplinario ─────────────────── -->
<div class="modal-overlay" id="modalDetallesInterv">
    <div class="modal">
        <div class="modal-header">
            <h3 id="modalDetallesIntervTitulo">Hallazgos multidisciplinario</h3>
            <button class="modal-close" onclick="cerrarModal('modalDetallesInterv')">✕</button>
        </div>
        <div class="modal-body">
            <div style="font-size:.82rem;color:#4a5568;margin-bottom:12px" id="modalDetallesIntervPeriodo"></div>
            <div id="modalDetallesIntervAdvertencias" style="display:none;background:#fff8e1;border:1px solid #fde68a;
                 border-radius:8px;padding:10px 14px;margin-bottom:14px;font-size:.8rem;color:#92400e"></div>
            <table id="tblDetallesInterv">
                <thead>
                    <tr>
                        <th>Tipo</th>
                        <th>Terapia</th>
                        <th>Fecha</th>
                        <th>Descripción del hallazgo</th>
                    </tr>
                </thead>
                <tbody id="tbodyDetallesInterv"></tbody>
            </table>
            <div style="margin-top:18px" id="wrapSinMapeoInterv">
                <strong style="font-size:.85rem;color:#92400e">⚠ Actividades sin mapear (no auditables aún):</strong>
                <ul id="listaSinMapeoInterv" style="margin:8px 0 0 20px;font-size:.83rem;color:#4a5568"></ul>
            </div>
        </div>
    </div>
</div>

<!-- =========================================================
     JAVASCRIPT
     ========================================================= -->
<script>
/* ── Token y usuario ────────────────────────────────────── */
const token = sessionStorage.getItem('token');
if (!token) location.href = 'login.php';
document.getElementById('lblUsuario').textContent =
    sessionStorage.getItem('nombre') || '';

let auditoriaActiva = null; // para el modal compromiso

/* ── Toast helper ───────────────────────────────────────── */
function toast(msg, color = '#1a3a5c', duracion = 3200) {
    const t = document.getElementById('toast');
    t.textContent = msg;
    t.style.background = color;
    t.classList.add('show');
    clearTimeout(t._timer);
    t._timer = setTimeout(() => t.classList.remove('show'), duracion);
}

/* ── Modales ────────────────────────────────────────────── */
function abrirModal(id)  { document.getElementById(id).classList.add('open'); }
function cerrarModal(id) { document.getElementById(id).classList.remove('open'); }

/* ── Datos globales para filtrar ────────────────────────── */
let _todasAuditorias = [];

/* ── Cargar tabla de auditorías ─────────────────────────── */
async function cargarAuditorias() {
    const tbody = document.getElementById('tbodyAuditorias');
    tbody.innerHTML = '<tr><td colspan="7" class="empty">Cargando…</td></tr>';

    const res  = await fetch('api/auditorias.php', { headers: { 'X-Token': token } });
    const json = await res.json();

    if (!json.ok || !json.data.length) {
        tbody.innerHTML = '<tr><td colspan="7" class="empty">No hay auditorías registradas aún.</td></tr>';
        return;
    }

    _todasAuditorias = json.data;
    filtrar();
}

/* ── Paginado ───────────────────────────────────────────── */
const POR_PAGINA = 10;
let _paginaActual = 1;
let _filasFiltradas = [];

function renderPagina(pagina) {
    _paginaActual = pagina;
    const tbody = document.getElementById('tbodyAuditorias');
    tbody.innerHTML = '';

    const inicio = (pagina - 1) * POR_PAGINA;
    const fin    = inicio + POR_PAGINA;
    const pagFils = _filasFiltradas.slice(inicio, fin);

    if (pagFils.length === 0) {
        tbody.innerHTML = '<tr><td colspan="7" class="empty">No hay registros con los filtros actuales.</td></tr>';
    } else {
        pagFils.forEach(a => renderFila(a, tbody));
    }

    // Info y botones
    const total  = _filasFiltradas.length;
    const totPag = Math.ceil(total / POR_PAGINA);
    const wrap   = document.getElementById('paginadoWrap');
    wrap.style.display = total > POR_PAGINA ? 'flex' : 'none';

    document.getElementById('paginadoInfo').textContent =
        `Mostrando ${Math.min(inicio+1, total)}–${Math.min(fin, total)} de ${total} registros`;

    const btns = document.getElementById('paginadoBtns');
    btns.innerHTML = '';

    const btnPrev = document.createElement('button');
    btnPrev.className = 'btn-pag';
    btnPrev.textContent = '‹ Anterior';
    btnPrev.disabled = pagina === 1;
    btnPrev.onclick = () => renderPagina(pagina - 1);
    btns.appendChild(btnPrev);

    for (let p = 1; p <= totPag; p++) {
        const btn = document.createElement('button');
        btn.className = 'btn-pag' + (p === pagina ? ' activo' : '');
        btn.textContent = p;
        btn.onclick = () => renderPagina(p);
        btns.appendChild(btn);
    }

    const btnNext = document.createElement('button');
    btnNext.className = 'btn-pag';
    btnNext.textContent = 'Siguiente ›';
    btnNext.disabled = pagina === totPag || totPag === 0;
    btnNext.onclick = () => renderPagina(pagina + 1);
    btns.appendChild(btnNext);
}

/* ── Renderizar filas según filtros ─────────────────────── */
function filtrar() {
    const estado  = document.getElementById('filtroEstado').value;
    const r1      = document.getElementById('filtroR1').checked;
    const r2      = document.getElementById('filtroR2').checked;
    const r3      = document.getElementById('filtroR3').checked;
    const buscar  = document.getElementById('filtroBuscar').value.toLowerCase().trim();

    _filasFiltradas = [];

    _todasAuditorias.forEach(a => {
        const tieneHallazgos  = a.total_hallazgos > 0;
        const tieneCompromiso = a.tiene_compromiso == 1;

        // Filtro estado
        if (estado === 'hallazgos' && !tieneHallazgos) return;
        if (estado === 'ok'        &&  tieneHallazgos) return;

        // Filtro reglas — solo aplica si hay hallazgos
        // (filtramos por nombre/cc ya que no tenemos detalle aquí)
        if (buscar) {
            const hay = [a.paciente_nombre, a.paciente_cc, a.auditor].join(' ').toLowerCase();
            if (!hay.includes(buscar)) return;
        }

        const trClass = tieneHallazgos ? 'tr-hallazgo' : 'tr-ok';
        const compLabel = tieneCompromiso ? 'Ver compromiso' : 'Compromiso';
        const compClass = tieneCompromiso ? 'btn-compromiso tiene' : 'btn-compromiso';

        let badgeEstado;
        if (!tieneHallazgos) {
            badgeEstado = '<span class="badge badge-ok">Sin hallazgos</span>';
        } else if (tieneCompromiso) {
            badgeEstado = '<span class="badge badge-comprometido">Comprometido</span>';
        } else {
            badgeEstado = '<span class="badge badge-pendiente">Pendiente</span>';
        }

        _filasFiltradas.push(a);
    });

    renderPagina(1);
}

function renderFila(a, tbody) {
    const tieneHallazgos  = a.total_hallazgos > 0;
    const tieneCompromiso = a.tiene_compromiso == 1;
    const trClass   = tieneHallazgos ? 'tr-hallazgo' : 'tr-ok';
    const compLabel = tieneCompromiso ? 'Ver compromiso' : 'Compromiso';
    const compClass = tieneCompromiso ? 'btn-compromiso tiene' : 'btn-compromiso';

    let badgeEstado;
    if (!tieneHallazgos) {
        badgeEstado = '<span class="badge badge-ok">Sin hallazgos</span>';
    } else if (tieneCompromiso) {
        badgeEstado = '<span class="badge badge-comprometido">Comprometido</span>';
    } else {
        badgeEstado = '<span class="badge badge-pendiente">Pendiente</span>';
    }

    tbody.insertAdjacentHTML('beforeend', `
        <tr class="${trClass}">
            <td><strong>${a.paciente_nombre}</strong></td>
            <td>${a.paciente_cc}</td>
            <td>${formatFecha(a.fecha_audit)}</td>
            <td style="text-align:center">${a.total_notas}</td>
            <td style="text-align:center">
                ${tieneHallazgos
                    ? `<span class="badge badge-hallazgo">${a.total_hallazgos}</span>`
                    : `<span class="badge badge-ok">0</span>`}
            </td>
            <td style="text-align:center">
                ${tieneHallazgos
                    ? badgeCompromiso(a.subsanados, a.total_hallazgos_comp, tieneCompromiso)
                    : '<span style="color:#a0aec0;font-size:.8rem">—</span>'}
            </td>
            <td>${badgeEstado}</td>
            <td>
                <div class="actions">
                    <button class="btn-sm btn-detalles"
                        onclick="verDetalles(${a.auditoria_id},'${esc(a.paciente_nombre)}','${formatFecha(a.fecha_audit)}')">
                        🔍 Detalles
                    </button>
                    <button class="btn-sm btn-descargar"
                        onclick="descargarExcel(${a.auditoria_id})">
                        ⬇ Excel
                    </button>
                    <button class="btn-sm ${compClass}"
                        onclick="abrirCompromiso(${a.auditoria_id},'${esc(a.paciente_nombre)}',${tieneCompromiso ? 1 : 0})">
                        📝 ${compLabel}
                    </button>
                </div>
            </td>
        </tr>
    `);
}

function limpiarFiltros() {
    document.getElementById('filtroEstado').value = 'hallazgos';
    document.getElementById('filtroR1').checked   = false;
    document.getElementById('filtroR2').checked   = false;
    document.getElementById('filtroR3').checked   = false;
    document.getElementById('filtroBuscar').value = '';
    filtrar();
}

/* ── Detalles ───────────────────────────────────────────── */
let _detalleFilas = [];

async function verDetalles(auditoriaId, nombre, fecha) {
    document.getElementById('modalDetallesTitulo').textContent =
        `Hallazgos — ${nombre} (${fecha})`;
    document.getElementById('tbodyDetalles').innerHTML =
        '<tr><td colspan="11" class="empty">Cargando…</td></tr>';

    // Resetear filtros del modal
    document.getElementById('mFiltroEstado').value = 'hallazgos';
    document.getElementById('mFiltroR1').checked   = false;
    document.getElementById('mFiltroR2').checked   = false;
    document.getElementById('mFiltroR3').checked   = false;
    document.getElementById('mFiltroBuscar').value = '';

    abrirModal('modalDetalles');

    const res  = await fetch(`api/auditorias.php?id=${auditoriaId}`,
                             { headers: { 'X-Token': token } });
    const json = await res.json();

    if (!json.ok || !json.data.length) {
        document.getElementById('tbodyDetalles').innerHTML =
            '<tr><td colspan="11" class="empty">Sin registros.</td></tr>';
        return;
    }

    _detalleFilas = json.data;
    filtrarModal();
}

function filtrarModal() {
    const estado = document.getElementById('mFiltroEstado').value;
    const r1     = document.getElementById('mFiltroR1').checked;
    const r2     = document.getElementById('mFiltroR2').checked;
    const r3     = document.getElementById('mFiltroR3').checked;
    const buscar = document.getElementById('mFiltroBuscar').value.toLowerCase().trim();

    const tbody = document.getElementById('tbodyDetalles');
    tbody.innerHTML = '';
    let count = 0;

    _detalleFilas.forEach(h => {
        const esH = h.estado === 'HALLAZGO';

        if (estado === 'hallazgos' && !esH) return;
        if (estado === 'ok'        &&  esH) return;

        if (r1 || r2 || r3) {
            const falla = (r1 && !h.r1_ok) || (r2 && !h.r2_ok) || (r3 && !h.r3_ok);
            if (!falla) return;
        }

        if (buscar) {
            const hay = [h.profesional, h.id_nota, h.r1_detalle, h.r2_detalle, h.r3_detalle]
                .join(' ').toLowerCase();
            if (!hay.includes(buscar)) return;
        }

        const detalle     = [h.r1_detalle, h.r2_detalle, h.r3_detalle].filter(Boolean).join(' | ');
        const corregido   = esH && h.subsanado == 1;
        const trClass     = !esH ? 'row-ok' : corregido ? 'row-corregido' : 'row-hallazgo';

        tbody.insertAdjacentHTML('beforeend', `
            <tr class="${trClass}">
                <td>${h.id_nota}</td>
                <td>${h.profesional}</td>
                <td>${h.fecha_grabacion}</td>
                <td>${h.hora_grabacion} ${h.ampm_grabacion ?? ''}</td>
                <td>${h.fecha_atencion ?? '—'}</td>
                <td>${h.hora_atencion ? h.hora_atencion + ' ' + (h.ampm_atencion ?? '') : '—'}</td>
                <td style="text-align:center">${icono(h.r1_ok)}</td>
                <td style="text-align:center">${icono(h.r2_ok)}</td>
                <td style="text-align:center">${icono(h.r3_ok)}</td>
                <td style="font-size:.8rem">${detalle || '—'}</td>
                <td style="text-align:center">
                    ${corregido
                        ? '<span class="badge badge-ok">✓ OK</span>'
                        : esH ? '<span style="color:#a0aec0;font-size:.8rem">Pendiente</span>' : '—'}
                </td>
                <td>${esH
                    ? '<span class="badge badge-hallazgo">HALLAZGO</span>'
                    : '<span class="badge badge-ok">OK</span>'}
                </td>
            </tr>
        `);
        count++;
    });

    if (count === 0) {
        tbody.innerHTML = '<tr><td colspan="12" class="empty">Sin registros con estos filtros.</td></tr>';
    }
}

function limpiarFiltrosModal() {
    document.getElementById('mFiltroEstado').value = 'hallazgos';
    document.getElementById('mFiltroR1').checked   = false;
    document.getElementById('mFiltroR2').checked   = false;
    document.getElementById('mFiltroR3').checked   = false;
    document.getElementById('mFiltroBuscar').value = '';
    filtrarModal();
}

/* ── Descarga Excel ─────────────────────────────────────── */
function descargarExcel(auditoriaId) {
    const url = `api/export.php?auditoria_id=${auditoriaId}&token=${encodeURIComponent(token)}`;
    const a = document.createElement('a');
    a.href = url;
    a.download = '';
    a.click();
}

/* ── Compromiso ─────────────────────────────────────────── */
async function abrirCompromiso(auditoriaId, nombre, tieneCompromiso) {
    auditoriaActiva = auditoriaId;
    document.getElementById('modalCompromisoTitulo').textContent =
        `Compromiso — ${nombre}`;
    document.getElementById('compTexto').value    = '';
    document.getElementById('compPdf').value      = '';
    document.getElementById('compPdfStatus').textContent = '';
    document.getElementById('compMetaExistente').style.display = 'none';
    document.getElementById('compError').style.display = 'none';
    document.getElementById('compError').textContent   = '';
    abrirModal('modalCompromiso');

    if (tieneCompromiso) {
        const res  = await fetch(`api/compromisos.php?id=${auditoriaId}`,
                                 { headers: { 'X-Token': token } });
        const json = await res.json();
        if (json.ok && json.data) {
            document.getElementById('compMetaExistente').style.display = 'block';
            const sub = json.data.subsanados ?? 0;
            const tot = json.data.total_hallazgos ?? 0;
            const subInfo = tot > 0 ? ` — ${sub}/${tot} hallazgos subsanados` : '';
            document.getElementById('compMetaFecha').textContent =
                `Registrado el ${formatFecha(json.data.fecha_registro)} por ${json.data.registrado_por}${subInfo}`;
            document.getElementById('compTexto').value = json.data.nota_texto;
        }
    }
}

/* ── Cargar PDF en modal compromiso ─────────────────────── */
async function cargarPdfCompromiso() {
    const file = document.getElementById('compPdf').files[0];
    if (!file) return;

    const status = document.getElementById('compPdfStatus');
    status.textContent = 'Leyendo PDF…';
    status.style.color = '#2b6cb0';

    try {
        const texto = await extraerTextoPDF(file);
        if (!texto || texto.trim().length < 50) {
            status.textContent = '❌ No se pudo extraer texto del PDF';
            status.style.color = '#c53030';
            return;
        }
        document.getElementById('compTexto').value = texto;
        status.textContent = `✅ ${file.name} cargado (${texto.length.toLocaleString()} chars)`;
        status.style.color = '#065f46';
    } catch(e) {
        status.textContent = '❌ Error: ' + e.message;
        status.style.color = '#c53030';
    }
}

async function guardarCompromiso() {
    const nota = document.getElementById('compTexto').value.trim();
    if (!nota) { toast('Escribe la nota de enfermería antes de guardar', '#b91c1c'); return; }

    document.getElementById('btnGuardarComp').disabled = true;
    document.getElementById('btnGuardarComp').textContent = 'Procesando…';

    const res  = await fetch('api/compromisos.php', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json', 'X-Token': token },
        body: JSON.stringify({ auditoria_id: auditoriaActiva, nota_texto: nota })
    });
    const json = await res.json();
    document.getElementById('btnGuardarComp').disabled = false;
    document.getElementById('btnGuardarComp').textContent = '💾 Guardar compromiso';

    if (json.ok) {
        toast(`✅ ${json.msg}`);
        cerrarModal('modalCompromiso');
        cargarAuditorias();
    } else {
        // Mostrar error dentro del modal y toast duradero
        const errDiv = document.getElementById('compError');
        errDiv.textContent = '⚠ ' + json.msg;
        errDiv.style.display = 'block';
        toast('Error: ' + json.msg, '#b91c1c', 8000);
    }
}

/* ── Log en pantalla ────────────────────────────────────── */
function logPantalla(msg, tipo = 'info') {
    const el = document.getElementById('logProceso');
    const color = tipo === 'ok' ? '#68d391' : tipo === 'error' ? '#fc8181' : '#90cdf4';
    const prefix = tipo === 'ok' ? '✅' : tipo === 'error' ? '❌' : 'ℹ';
    el.innerHTML += `<div style="color:${color}">${prefix} ${msg}</div>`;
    el.scrollTop = el.scrollHeight;
    // Mostrar botón Ver log pero mantener log oculto
    document.getElementById('btnVerLog').style.display = 'inline-block';
}
function limpiarLog() {
    const el = document.getElementById('logProceso');
    el.innerHTML = '';
    el.style.display = 'none';
    document.getElementById('btnVerLog').style.display = 'none';
    document.getElementById('btnVerLog').textContent = '📋 Ver log';
}
function toggleLog() {
    const el  = document.getElementById('logProceso');
    const btn = document.getElementById('btnVerLog');
    if (el.style.display === 'none') {
        el.style.display = 'block';
        btn.textContent  = '🙈 Ocultar log';
    } else {
        el.style.display = 'none';
        btn.textContent  = '📋 Ver log';
    }
}

/* ── Análisis PDF — soporta múltiples archivos ──────────── */
async function iniciarAnalisis() {
    const files = Array.from(document.getElementById('inpPdf').files);

    if (!files.length) { toast('Selecciona al menos un archivo PDF', '#b91c1c'); return; }

    const invalidos = files.filter(f => !f.name.toLowerCase().endsWith('.pdf'));
    if (invalidos.length) { toast('Solo se aceptan archivos PDF', '#b91c1c'); return; }

    document.getElementById('btnAnalizar').disabled = true;
    limpiarLog();

    let procesados = 0, errores = 0, totalHallazgos = 0;

    for (const file of files) {
        const pct = Math.round((procesados / files.length) * 90);
        mostrarProgreso(pct, `Procesando ${file.name} (${procesados + 1}/${files.length})…`);
        logPantalla(`Leyendo: <strong>${file.name}</strong>`);

        try {
            const texto = await extraerTextoPDF(file);

            if (!texto || texto.trim().length < 50) {
                logPantalla(`${file.name} — texto extraído muy corto (${texto?.length ?? 0} chars). PDF protegido o vacío.`, 'error');
                errores++;
                procesados++;
                continue;
            }

            logPantalla(`${file.name} — texto OK (${texto.length} chars), enviando al servidor…`);

            const res  = await fetch('api/analizar.php', {
                method:  'POST',
                headers: { 'Content-Type': 'application/json', 'X-Token': token },
                body:    JSON.stringify({ texto_pdf: texto })
            });

            const rawText = await res.text();
            let json;
            try {
                json = JSON.parse(rawText);
            } catch(e) {
                logPantalla(`${file.name} — respuesta inválida del servidor (HTTP ${res.status}): ${rawText.substring(0, 300)}`, 'error');
                errores++;
                procesados++;
                continue;
            }

            if (json.ok) {
                totalHallazgos += json.total_hallazgos || 0;
                logPantalla(`${file.name} — ${json.total_notas} notas, ${json.total_hallazgos} hallazgo(s). Paciente: ${json.paciente_nombre || ''} CC:${json.paciente_cc || ''}`, 'ok');
            } else {
                logPantalla(`${file.name} — Error del servidor: ${json.msg}`, 'error');
                errores++;
            }
        } catch (e) {
            logPantalla(`${file.name} — Excepción: ${e.message}`, 'error');
            errores++;
        }

        procesados++;
    }

    mostrarProgreso(100, '¡Listo!');
    document.getElementById('inpPdf').value = '';

    if (errores === 0) {
        toast(`✅ ${procesados} archivo(s) procesado(s) — ${totalHallazgos} hallazgo(s)`);
    } else {
        toast(`⚠ ${procesados - errores} OK, ${errores} con error — ver log abajo`, '#b45309');
    }

    setTimeout(() => {
        ocultarProgreso();
        cargarAuditorias();
        document.getElementById('btnAnalizar').disabled = false;
    }, 1500);
}

/* ── PDF.js text extraction ─────────────────────────────── */
async function extraerTextoPDF(archivo) {
    // Esperar a que pdfjsLib esté disponible (carga async desde CDN)
    const pdfjs = window.pdfjsLib || window['pdfjs-dist/build/pdf'];
    if (pdfjs) {
        try {
            const ab  = await archivo.arrayBuffer();
            const pdf = await pdfjs.getDocument({ data: new Uint8Array(ab) }).promise;
            let txt = '';
            for (let i = 1; i <= pdf.numPages; i++) {
                const pg = await pdf.getPage(i);
                const ct = await pg.getTextContent();
                txt += ct.items.map(it => it.str).join(' ') + '\n';
            }
            if (txt.trim().length > 100) return txt;
            logPantalla('PDF.js extrajo texto muy corto — puede ser PDF escaneado', 'error');
        } catch (e) {
            logPantalla('PDF.js error: ' + e.message, 'error');
        }
    } else {
        logPantalla('PDF.js no disponible — usando fallback base64', 'error');
    }
    // Fallback: enviar binario base64
    return new Promise((res, rej) => {
        const r = new FileReader();
        r.onload  = () => res('__BASE64__:' + r.result.split(',')[1]);
        r.onerror = () => rej(new Error('No se pudo leer el PDF'));
        r.readAsDataURL(archivo);
    });
}

/* ── Progress helpers ───────────────────────────────────── */
function mostrarProgreso(pct, msg) {
    document.getElementById('progWrap').style.display = 'block';
    document.getElementById('progBar').style.width    = pct + '%';
    document.getElementById('progLabel').textContent  = msg;
}
function ocultarProgreso() {
    document.getElementById('progWrap').style.display = 'none';
    document.getElementById('progBar').style.width    = '0%';
}

/* ── Helpers ────────────────────────────────────────────── */
function formatFecha(s) {
    if (!s) return '';
    const d = new Date(s);
    return isNaN(d) ? s : d.toLocaleDateString('es-CO', { day:'2-digit', month:'short', year:'numeric' });
}
function esc(s) { return (s || '').replace(/'/g, "\\'"); }
function badgeCompromiso(subsanados, total, tieneComp) {
    if (!tieneComp) return '<span style="color:#a0aec0;font-size:.8rem">Sin compromiso</span>';
    const s = parseInt(subsanados) || 0;
    const t = parseInt(total)      || 0;
    const color = s === t ? '#065f46' : s > 0 ? '#92400e' : '#b91c1c';
    const bg    = s === t ? '#d1fae5' : s > 0 ? '#fef3c7' : '#fee2e2';
    return `<span class="badge" style="background:${bg};color:${color}">${s} / ${t}</span>`;
}

function icono(v) {
    if (v === null || v === undefined || v === '') return '—';
    return v == 1 || v === true || v === '1' ? '✅' : '❌';
}

/* ── Cerrar modal al hacer clic fuera ───────────────────── */
document.querySelectorAll('.modal-overlay').forEach(o => {
    o.addEventListener('click', e => {
        if (e.target === o) o.classList.remove('open');
    });
});

/* ── Cerrar sesión ──────────────────────────────────────── */
function cerrarSesion() {
    sessionStorage.clear();
    localStorage.clear();
    window.location.href = 'login.php';
}

/* ══════════════════════════════════════════════════════════
   MÓDULO MULTIDISCIPLINARIO (intervenciones)
   Espera los endpoints api/analizar_intervencion.php y
   api/auditorias_intervencion.php — ver nota al final del archivo.
   ══════════════════════════════════════════════════════════ */

let _seccionCargada = { enfermeria: true, multidisciplinario: false };

function cambiarSeccion(tipo) {
    const esEnf = tipo === 'enfermeria';
    document.getElementById('seccionEnfermeria').style.display          = esEnf ? 'block' : 'none';
    document.getElementById('seccionMultidisciplinario').style.display  = esEnf ? 'none'  : 'block';
    document.getElementById('tabEnfermeria').classList.toggle('activo', esEnf);
    document.getElementById('tabMultidisciplinario').classList.toggle('activo', !esEnf);

    if (!esEnf && !_seccionCargada.multidisciplinario) {
        _seccionCargada.multidisciplinario = true;
        cargarAuditoriasInterv();
    }
}

let _todasAuditoriasInterv = [];
let _filasFiltradasInterv  = [];
let _paginaActualInterv    = 1;

async function cargarAuditoriasInterv() {
    const tbody = document.getElementById('tbodyAuditoriasInterv');
    tbody.innerHTML = '<tr><td colspan="9" class="empty">Cargando…</td></tr>';

    try {
        const res  = await fetch('api/auditorias_intervencion.php', { headers: { 'X-Token': token } });
        const json = await res.json();

        if (!json.ok || !json.data.length) {
            tbody.innerHTML = '<tr><td colspan="9" class="empty">No hay auditorías multidisciplinarias registradas aún.</td></tr>';
            return;
        }
        _todasAuditoriasInterv = json.data;
        filtrarInterv();
    } catch (e) {
        tbody.innerHTML = `<tr><td colspan="9" class="empty">Error cargando auditorías: ${e.message}</td></tr>`;
    }
}

function filtrarInterv() {
    const estado = document.getElementById('filtroEstadoInterv').value;
    const buscar  = document.getElementById('filtroBuscarInterv').value.toLowerCase().trim();

    _filasFiltradasInterv = _todasAuditoriasInterv.filter(a => {
        const tieneHallazgos = a.total_hallazgos > 0;
        if (estado === 'hallazgos' && !tieneHallazgos) return false;
        if (estado === 'ok'        &&  tieneHallazgos) return false;
        if (buscar) {
            const hay = [a.paciente_nombre, a.paciente_cc].join(' ').toLowerCase();
            if (!hay.includes(buscar)) return false;
        }
        return true;
    });

    renderPaginaInterv(1);
}

function limpiarFiltrosInterv() {
    document.getElementById('filtroEstadoInterv').value = 'hallazgos';
    document.getElementById('filtroBuscarInterv').value = '';
    filtrarInterv();
}

const POR_PAGINA_INTERV = 10;

function renderPaginaInterv(pagina) {
    _paginaActualInterv = pagina;
    const tbody = document.getElementById('tbodyAuditoriasInterv');
    tbody.innerHTML = '';

    const inicio = (pagina - 1) * POR_PAGINA_INTERV;
    const fin    = inicio + POR_PAGINA_INTERV;
    const pagFils = _filasFiltradasInterv.slice(inicio, fin);

    if (pagFils.length === 0) {
        tbody.innerHTML = '<tr><td colspan="9" class="empty">No hay registros con los filtros actuales.</td></tr>';
    } else {
        pagFils.forEach(a => renderFilaInterv(a, tbody));
    }

    const total  = _filasFiltradasInterv.length;
    const totPag = Math.ceil(total / POR_PAGINA_INTERV);
    const wrap   = document.getElementById('paginadoWrapInterv');
    wrap.style.display = total > POR_PAGINA_INTERV ? 'flex' : 'none';

    document.getElementById('paginadoInfoInterv').textContent =
        `Mostrando ${Math.min(inicio+1, total)}–${Math.min(fin, total)} de ${total} registros`;

    const btns = document.getElementById('paginadoBtnsInterv');
    btns.innerHTML = '';

    const btnPrev = document.createElement('button');
    btnPrev.className = 'btn-pag';
    btnPrev.textContent = '‹ Anterior';
    btnPrev.disabled = pagina === 1;
    btnPrev.onclick = () => renderPaginaInterv(pagina - 1);
    btns.appendChild(btnPrev);

    for (let p = 1; p <= totPag; p++) {
        const btn = document.createElement('button');
        btn.className = 'btn-pag' + (p === pagina ? ' activo' : '');
        btn.textContent = p;
        btn.onclick = () => renderPaginaInterv(p);
        btns.appendChild(btn);
    }

    const btnNext = document.createElement('button');
    btnNext.className = 'btn-pag';
    btnNext.textContent = 'Siguiente ›';
    btnNext.disabled = pagina === totPag || totPag === 0;
    btnNext.onclick = () => renderPaginaInterv(pagina + 1);
    btns.appendChild(btnNext);
}

function renderFilaInterv(a, tbody) {
    const tieneHallazgos = a.total_hallazgos > 0;
    const trClass = tieneHallazgos ? 'tr-hallazgo' : 'tr-ok';
    const badgeEstado = tieneHallazgos
        ? '<span class="badge badge-hallazgo">Con hallazgos</span>'
        : '<span class="badge badge-ok">Sin hallazgos</span>';

    tbody.insertAdjacentHTML('beforeend', `
        <tr class="${trClass}">
            <td><strong>${a.paciente_nombre}</strong></td>
            <td>${a.paciente_cc}</td>
            <td>${formatFecha(a.fecha_audit)}</td>
            <td>${formatFecha(a.fecha_ingreso)} – ${formatFecha(a.fecha_egreso)}</td>
            <td style="text-align:center">${a.total_notas}</td>
            <td style="text-align:center">
                ${tieneHallazgos
                    ? `<span class="badge badge-hallazgo">${a.total_hallazgos}</span>`
                    : `<span class="badge badge-ok">0</span>`}
            </td>
            <td style="text-align:center">
                ${a.total_sin_mapeo > 0
                    ? `<span class="badge badge-pendiente">${a.total_sin_mapeo}</span>`
                    : '<span style="color:#a0aec0;font-size:.8rem">—</span>'}
            </td>
            <td>${badgeEstado}</td>
            <td>
                <div class="actions">
                    <button class="btn-sm btn-detalles"
                        onclick="verDetallesInterv(${a.auditoria_id},'${esc(a.paciente_nombre)}','${formatFecha(a.fecha_audit)}')">
                        🔍 Detalles
                    </button>
                    <button class="btn-sm btn-descargar"
                        onclick="descargarExcelInterv(${a.auditoria_id})">
                        ⬇ Excel
                    </button>
                </div>
            </td>
        </tr>
    `);
}

async function verDetallesInterv(auditoriaId, nombre, fecha) {
    document.getElementById('modalDetallesIntervTitulo').textContent =
        `Hallazgos multidisciplinario — ${nombre} (${fecha})`;
    document.getElementById('tbodyDetallesInterv').innerHTML =
        '<tr><td colspan="4" class="empty">Cargando…</td></tr>';
    document.getElementById('modalDetallesIntervAdvertencias').style.display = 'none';

    abrirModal('modalDetallesInterv');

    try {
        const res  = await fetch(`api/auditorias_intervencion.php?id=${auditoriaId}`,
                                  { headers: { 'X-Token': token } });
        const json = await res.json();

        if (!json.ok) {
            document.getElementById('tbodyDetallesInterv').innerHTML =
                `<tr><td colspan="4" class="empty">Error: ${json.msg}</td></tr>`;
            return;
        }

        const d = json.data;
        document.getElementById('modalDetallesIntervPeriodo').textContent =
            `Periodo auditado: ${formatFecha(d.fecha_ingreso)} – ${formatFecha(d.fecha_egreso)}`;

        if (d.advertencias_fecha && d.advertencias_fecha.length) {
            document.getElementById('modalDetallesIntervAdvertencias').style.display = 'block';
            document.getElementById('modalDetallesIntervAdvertencias').innerHTML =
                '⚠ ' + d.advertencias_fecha.join('<br>⚠ ');
        }

        const tbody = document.getElementById('tbodyDetallesInterv');
        tbody.innerHTML = '';
        if (!d.hallazgos || !d.hallazgos.length) {
            tbody.innerHTML = '<tr><td colspan="4" class="empty">Sin hallazgos de frecuencia.</td></tr>';
        } else {
            d.hallazgos.forEach(h => {
                tbody.insertAdjacentHTML('beforeend', `
                    <tr class="row-hallazgo">
                        <td>${h.tipo}</td>
                        <td>${h.terapia}</td>
                        <td>${h.fecha}</td>
                        <td>${h.descripcion}</td>
                    </tr>
                `);
            });
        }

        const lista = document.getElementById('listaSinMapeoInterv');
        lista.innerHTML = '';
        (d.actividades_sin_mapeo || []).forEach(t => {
            lista.insertAdjacentHTML('beforeend', `<li>${t}</li>`);
        });
        document.getElementById('wrapSinMapeoInterv').style.display =
            (d.actividades_sin_mapeo && d.actividades_sin_mapeo.length) ? 'block' : 'none';

    } catch (e) {
        document.getElementById('tbodyDetallesInterv').innerHTML =
            `<tr><td colspan="4" class="empty">Error: ${e.message}</td></tr>`;
    }
}

function descargarExcelInterv(auditoriaId) {
    window.open(`api/exportar_intervencion.php?id=${auditoriaId}&token=${token}`, '_blank');
}

/* ── Log en pantalla (multidisciplinario) ──────────────── */
function logPantallaInterv(msg, tipo = 'info') {
    const el = document.getElementById('logProcesoInterv');
    const color = tipo === 'ok' ? '#68d391' : tipo === 'error' ? '#fc8181' : '#90cdf4';
    const prefix = tipo === 'ok' ? '✅' : tipo === 'error' ? '❌' : 'ℹ';
    el.innerHTML += `<div style="color:${color}">${prefix} ${msg}</div>`;
    el.scrollTop = el.scrollHeight;
    document.getElementById('btnVerLogInterv').style.display = 'inline-block';
}
function limpiarLogInterv() {
    const el = document.getElementById('logProcesoInterv');
    el.innerHTML = '';
    el.style.display = 'none';
    document.getElementById('btnVerLogInterv').style.display = 'none';
    document.getElementById('btnVerLogInterv').textContent = '📋 Ver log';
}
function toggleLogInterv() {
    const el  = document.getElementById('logProcesoInterv');
    const btn = document.getElementById('btnVerLogInterv');
    if (el.style.display === 'none') {
        el.style.display = 'block';
        btn.textContent  = '🙈 Ocultar log';
    } else {
        el.style.display = 'none';
        btn.textContent  = '📋 Ver log';
    }
}

/* ── Progress helpers (multidisciplinario) ──────────────── */
function mostrarProgresoInterv(pct, msg) {
    document.getElementById('progWrapInterv').style.display = 'block';
    document.getElementById('progBarInterv').style.width    = pct + '%';
    document.getElementById('progLabelInterv').textContent  = msg;
}
function ocultarProgresoInterv() {
    document.getElementById('progWrapInterv').style.display = 'none';
    document.getElementById('progBarInterv').style.width    = '0%';
}

/* ── Análisis PDF multidisciplinario — soporta varios archivos ── */
async function iniciarAnalisisInterv() {
    const files = Array.from(document.getElementById('inpPdfInterv').files);

    if (!files.length) { toast('Selecciona al menos un archivo PDF', '#b91c1c'); return; }

    const invalidos = files.filter(f => !f.name.toLowerCase().endsWith('.pdf'));
    if (invalidos.length) { toast('Solo se aceptan archivos PDF', '#b91c1c'); return; }

    document.getElementById('btnAnalizarInterv').disabled = true;
    limpiarLogInterv();

    let procesados = 0, errores = 0, totalHallazgos = 0;

    for (const file of files) {
        const pct = Math.round((procesados / files.length) * 90);
        mostrarProgresoInterv(pct, `Procesando ${file.name} (${procesados + 1}/${files.length})…`);
        logPantallaInterv(`Leyendo: <strong>${file.name}</strong>`);

        try {
            const texto = await extraerTextoPDF(file);

            if (!texto || texto.trim().length < 50) {
                logPantallaInterv(`${file.name} — texto extraído muy corto (${texto?.length ?? 0} chars). PDF protegido o vacío.`, 'error');
                errores++;
                procesados++;
                continue;
            }

            logPantallaInterv(`${file.name} — texto OK (${texto.length} chars), enviando al servidor…`);

            // NOTA: este endpoint aún no existe — ver procesar_intervencion.php pendiente.
            // Debe internamente usar ParserIntervencion::parsearTexto() +
            // AuditorFrecuencia::auditar() y devolver el mismo formato de
            // respuesta que api/analizar.php (ok, total_notas, total_hallazgos,
            // paciente_nombre, paciente_cc).
            const res  = await fetch('api/analizar_intervencion.php', {
                method:  'POST',
                headers: { 'Content-Type': 'application/json', 'X-Token': token },
                body:    JSON.stringify({ texto_pdf: texto })
            });

            const rawText = await res.text();
            let json;
            try {
                json = JSON.parse(rawText);
            } catch(e) {
                logPantallaInterv(`${file.name} — respuesta inválida del servidor (HTTP ${res.status}): ${rawText.substring(0, 300)}`, 'error');
                errores++;
                procesados++;
                continue;
            }

            if (json.ok) {
                totalHallazgos += json.total_hallazgos || 0;
                logPantallaInterv(`${file.name} — ${json.total_notas} notas, ${json.total_hallazgos} hallazgo(s). Paciente: ${json.paciente_nombre || ''} CC:${json.paciente_cc || ''}`, 'ok');
            } else {
                logPantallaInterv(`${file.name} — Error del servidor: ${json.msg}`, 'error');
                errores++;
            }
        } catch (e) {
            logPantallaInterv(`${file.name} — Excepción: ${e.message}`, 'error');
            errores++;
        }

        procesados++;
    }

    mostrarProgresoInterv(100, '¡Listo!');
    document.getElementById('inpPdfInterv').value = '';

    if (errores === 0) {
        toast(`✅ ${procesados} archivo(s) procesado(s) — ${totalHallazgos} hallazgo(s)`);
    } else {
        toast(`⚠ ${procesados - errores} OK, ${errores} con error — ver log abajo`, '#b45309');
    }

    setTimeout(() => {
        ocultarProgresoInterv();
        cargarAuditoriasInterv();
        document.getElementById('btnAnalizarInterv').disabled = false;
    }, 1500);
}

/* ── Init ───────────────────────────────────────────────── */
cargarAuditorias();
</script>
</body>
</html>
