<?php
/**
 * GENERADORES PDF DE LOS FORMULARIOS HCU DE SALUD OCUPACIONAL DEL MSP ECUADOR
 *
 *   HCU 077 - Evaluación Médica Pre-Ocupacional / Ingreso
 *   HCU 078 - Evaluación Médica Periódica
 *   HCU 079 - Evaluación Médica de Reintegro
 *   HCU 080 - Evaluación Médica de Retiro
 *   HCU 081 - Certificado de Aptitud Laboral
 *   HCU 083 - Registro de Inmunizaciones para Salud en el Trabajo
 *
 * Todos aplican la paleta MSP oficial, datos del emisor dinámicos (cero hardcodeo)
 * y QR de firma electrónica simulada (igual que los formatos MSP estándar).
 *
 * Comparten los helpers _msp* definidos en generar_pdf_msp.php.
 */

// ============================================================
// CABECERA OCUPACIONAL: cabecera estándar específica con datos
// del establecimiento, la empresa y el usuario/trabajador.
// ============================================================
function _hcuCabeceraOcupacional($emisor, $p, $d, $codigo, $tituloHCU)
{
    $apellidos = trim(($p['apaterno'] ?? '') . ' ' . ($p['amaterno'] ?? ''));
    $nombreCompleto = trim($apellidos . ' ' . ($p['nombre'] ?? ''));

    // Datos de la empresa donde labora el trabajador (vienen del JSON)
    $valD = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };

    return '
    <table cellpadding="3" cellspacing="0">
        <tr>
            <td colspan="6" class="section-band">
                <span class="section-num">·</span>FORMULARIO HCU ' . htmlspecialchars($codigo) . '   ·   ' . htmlspecialchars($tituloHCU) . '
            </td>
        </tr>
    </table>

    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="6" class="subhead-left">A · DATOS DEL ESTABLECIMIENTO DE SALUD QUE REALIZA LA EVALUACIÓN</td></tr>
        <tr>
            <td width="20%" class="subhead">INSTITUCIÓN DEL SISTEMA</td>
            <td width="22%" class="subhead">UNIDAD OPERATIVA</td>
            <td width="14%" class="subhead">RUC</td>
            <td width="14%" class="subhead">CIIU</td>
            <td width="15%" class="subhead">PROVINCIA</td>
            <td width="15%" class="subhead">CANTÓN</td>
        </tr>
        <tr class="text-center" style="font-size:8.5pt;">
            <td>' . htmlspecialchars($emisor['institucion'] ?: '—') . '</td>
            <td>' . htmlspecialchars($emisor['unidad'] ?: '—') . '</td>
            <td>' . htmlspecialchars($emisor['ruc'] ?: '—') . '</td>
            <td>' . $valD('ciiu_establecimiento') . '</td>
            <td>' . $valD('provincia_establecimiento') . '</td>
            <td>' . $valD('canton_establecimiento') . '</td>
        </tr>
    </table>

    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="6" class="subhead-left">B · DATOS DE LA EMPRESA EMPLEADORA</td></tr>
        <tr>
            <td width="32%" class="subhead">RAZÓN SOCIAL / EMPRESA</td>
            <td width="18%" class="subhead">RUC EMPRESA</td>
            <td width="20%" class="subhead">CIIU (ACTIVIDAD)</td>
            <td width="15%" class="subhead">SECTOR</td>
            <td width="15%" class="subhead">CATEG. RIESGO</td>
        </tr>
        <tr class="text-center" style="font-size:8.5pt;">
            <td>' . $valD('femo_empresa') . '</td>
            <td>' . $valD('femo_ruc') . '</td>
            <td>' . $valD('femo_actividad_eco') . '</td>
            <td>' . $valD('empresa_sector') . '</td>
            <td>' . $valD('empresa_categoria_riesgo') . '</td>
        </tr>
        <tr>
            <td colspan="2" class="subhead">DIRECCIÓN DE LA EMPRESA</td>
            <td colspan="2" class="subhead">TELÉFONO</td>
            <td colspan="2" class="subhead">CORREO ELECTRÓNICO</td>
        </tr>
        <tr class="text-center" style="font-size:8.5pt;">
            <td colspan="2">' . $valD('empresa_direccion') . '</td>
            <td colspan="2">' . $valD('empresa_telefono') . '</td>
            <td colspan="2">' . $valD('empresa_email') . '</td>
        </tr>
    </table>

    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="8" class="subhead-left">C · DATOS DEL TRABAJADOR / USUARIO</td></tr>
        <tr>
            <td width="22%" class="subhead">APELLIDOS</td>
            <td width="22%" class="subhead">NOMBRES</td>
            <td width="12%" class="subhead">CÉDULA / PASAPORTE</td>
            <td width="12%" class="subhead">FECHA NAC.</td>
            <td width="7%" class="subhead">EDAD</td>
            <td width="7%" class="subhead">SEXO</td>
            <td width="9%" class="subhead">ESTADO CIVIL</td>
            <td width="9%" class="subhead">T. SANGRE</td>
        </tr>
        <tr class="text-center" style="font-size:8.5pt;">
            <td>' . htmlspecialchars($apellidos ?: '—') . '</td>
            <td>' . htmlspecialchars($p['nombre'] ?? '—') . '</td>
            <td>' . htmlspecialchars($p['num_documento'] ?? '—') . '</td>
            <td>' . htmlspecialchars($p['fecha_nacimiento'] ?? '—') . '</td>
            <td>' . htmlspecialchars($p['edad_completa'] ?? '—') . '</td>
            <td>' . htmlspecialchars($p['sexo'] ?? '—') . '</td>
            <td>' . htmlspecialchars($p['estado_civil'] ?? '—') . '</td>
            <td>' . htmlspecialchars($p['tipo_sangre'] ?? '—') . '</td>
        </tr>
        <tr>
            <td colspan="3" class="subhead">DIRECCIÓN DOMICILIARIA</td>
            <td colspan="2" class="subhead">TELÉFONO / CELULAR</td>
            <td colspan="3" class="subhead">CORREO ELECTRÓNICO</td>
        </tr>
        <tr class="text-center" style="font-size:8.5pt;">
            <td colspan="3">' . htmlspecialchars($p['direccion'] ?? '—') . '</td>
            <td colspan="2">' . htmlspecialchars($p['telefono'] ?? '—') . '</td>
            <td colspan="3">' . htmlspecialchars($p['email'] ?? '—') . '</td>
        </tr>
        <tr>
            <td colspan="3" class="subhead">GRUPO ÉTNICO / AUTOIDENTIFICACIÓN</td>
            <td colspan="2" class="subhead">NIVEL DE INSTRUCCIÓN</td>
            <td colspan="3" class="subhead">DISCAPACIDAD (TIPO Y %)</td>
        </tr>
        <tr class="text-center" style="font-size:8.5pt;">
            <td colspan="3">' . $valD('grupo_etnico') . '</td>
            <td colspan="2">' . $valD('nivel_instruccion') . '</td>
            <td colspan="3">' . $valD('discapacidad') . '</td>
        </tr>
    </table>
    <br>';
}

// ============================================================
// BLOQUE PUESTO DE TRABAJO (común a 077, 078, 079, 080)
// ============================================================
function _hcuPuestoDeTrabajo($d, $sectionNumber = 'D')
{
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    return '
    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="6" class="section-band">
            <span class="section-num">' . $sectionNumber . '</span>PUESTO DE TRABAJO ACTUAL
        </td></tr>
        <tr>
            <td width="22%" class="subhead-left">CARGO / PUESTO</td>
            <td width="28%" class="data-cell">' . $val('cargo_puesto') . '</td>
            <td width="22%" class="subhead-left">ÁREA / DEPARTAMENTO</td>
            <td width="28%" class="data-cell">' . $val('area_trabajo') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">ANTIGÜEDAD EN EL PUESTO</td>
            <td class="data-cell">' . $val('antiguedad_puesto') . '</td>
            <td class="subhead-left">ANTIGÜEDAD EN LA EMPRESA</td>
            <td class="data-cell">' . $val('antiguedad_empresa') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">JORNADA / HORAS DIARIAS</td>
            <td class="data-cell">' . $val('jornada_horas') . '</td>
            <td class="subhead-left">TURNO</td>
            <td class="data-cell">' . $val('turno') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">TIPO DE CONTRATO</td>
            <td class="data-cell">' . $val('tipo_contrato') . '</td>
            <td class="subhead-left">FECHA DE INGRESO</td>
            <td class="data-cell">' . $val('fecha_ingreso_empresa') . '</td>
        </tr>
        <tr>
            <td colspan="4" class="subhead-left">DESCRIPCIÓN DE LAS TAREAS PRINCIPALES DEL PUESTO</td>
        </tr>
        <tr>
            <td colspan="4" class="data-cell" style="height:50px;">' . _mspValnl($d, 'descripcion_tareas') . '</td>
        </tr>
    </table><br>';
}

// ============================================================
// BLOQUE RIESGOS OCUPACIONALES (común a 077, 078, 079, 080)
// ============================================================
function _hcuRiesgos($d, $sectionNumber = 'E')
{
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $marca = function ($k) use ($d) {
        $v = strtolower(trim($d[$k] ?? ''));
        return ($v === 'si' || $v === 'sí' || $v === '1') ? '<span style="font-family:zapfdingbats;">4</span>' : '<span style="font-family:zapfdingbats;">o</span>';
    };
    return '
    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="5" class="section-band">
            <span class="section-num">' . $sectionNumber . '</span>FACTORES DE RIESGO OCUPACIONAL IDENTIFICADOS
        </td></tr>
        <tr>
            <td width="30%" class="subhead">FACTOR DE RIESGO</td>
            <td width="8%" class="subhead">SÍ</td>
            <td width="8%" class="subhead">NO</td>
            <td width="32%" class="subhead">DESCRIPCIÓN / TIEMPO DE EXPOSICIÓN</td>
            <td width="22%" class="subhead">MEDIDA PREVENTIVA / EPP</td>
        </tr>
        <tr style="font-size:8pt;">
            <td class="item-label">FÍSICOS (ruido, vibración, temperatura, iluminación, radiaciones)</td>
            <td class="cp-sp">' . ((strtolower($d['r_fisico']??'') === 'si') ? 'X' : '') . '</td>
            <td class="cp-sp">' . ((strtolower($d['r_fisico']??'') === 'no') ? 'X' : '') . '</td>
            <td class="data-cell">' . $val('r_fisico_desc') . '</td>
            <td class="data-cell">' . $val('r_fisico_epp') . '</td>
        </tr>
        <tr style="font-size:8pt;">
            <td class="item-label">QUÍMICOS (polvos, humos, gases, vapores, líquidos)</td>
            <td class="cp-sp">' . ((strtolower($d['r_quimico']??'') === 'si') ? 'X' : '') . '</td>
            <td class="cp-sp">' . ((strtolower($d['r_quimico']??'') === 'no') ? 'X' : '') . '</td>
            <td class="data-cell">' . $val('r_quimico_desc') . '</td>
            <td class="data-cell">' . $val('r_quimico_epp') . '</td>
        </tr>
        <tr style="font-size:8pt;">
            <td class="item-label">BIOLÓGICOS (virus, bacterias, hongos, parásitos)</td>
            <td class="cp-sp">' . ((strtolower($d['r_biol']??'') === 'si') ? 'X' : '') . '</td>
            <td class="cp-sp">' . ((strtolower($d['r_biol']??'') === 'no') ? 'X' : '') . '</td>
            <td class="data-cell">' . $val('r_biol_desc') . '</td>
            <td class="data-cell">' . $val('r_biol_epp') . '</td>
        </tr>
        <tr style="font-size:8pt;">
            <td class="item-label">ERGONÓMICOS (postura, manipulación de cargas, repetitividad)</td>
            <td class="cp-sp">' . ((strtolower($d['r_ergo']??'') === 'si') ? 'X' : '') . '</td>
            <td class="cp-sp">' . ((strtolower($d['r_ergo']??'') === 'no') ? 'X' : '') . '</td>
            <td class="data-cell">' . $val('r_ergo_desc') . '</td>
            <td class="data-cell">' . $val('r_ergo_epp') . '</td>
        </tr>
        <tr style="font-size:8pt;">
            <td class="item-label">PSICOSOCIALES (carga mental, estrés, horario, relaciones)</td>
            <td class="cp-sp">' . ((strtolower($d['r_psico']??'') === 'si') ? 'X' : '') . '</td>
            <td class="cp-sp">' . ((strtolower($d['r_psico']??'') === 'no') ? 'X' : '') . '</td>
            <td class="data-cell">' . $val('r_psico_desc') . '</td>
            <td class="data-cell">' . $val('r_psico_epp') . '</td>
        </tr>
        <tr style="font-size:8pt;">
            <td class="item-label">MECÁNICOS (atrapamiento, caídas, golpes, cortes)</td>
            <td class="cp-sp">' . ((strtolower($d['r_meca']??'') === 'si') ? 'X' : '') . '</td>
            <td class="cp-sp">' . ((strtolower($d['r_meca']??'') === 'no') ? 'X' : '') . '</td>
            <td class="data-cell">' . $val('r_meca_desc') . '</td>
            <td class="data-cell">' . $val('r_meca_epp') . '</td>
        </tr>
    </table><br>';
}

// ============================================================
// BLOQUE ANTECEDENTES (común a 077, 078, 079, 080)
// ============================================================
function _hcuAntecedentes($d, $sectionNumber = 'F')
{
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };
    return '
    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="2" class="section-band">
            <span class="section-num">' . $sectionNumber . '</span>ANTECEDENTES PERSONALES, FAMILIARES Y LABORALES
        </td></tr>
        <tr>
            <td width="50%" class="subhead-left">ANTECEDENTES PATOLÓGICOS PERSONALES</td>
            <td width="50%" class="subhead-left">ANTECEDENTES QUIRÚRGICOS</td>
        </tr>
        <tr>
            <td class="data-cell" style="height:55px;">' . $valnl('ant_pat_personales') . '</td>
            <td class="data-cell" style="height:55px;">' . $valnl('ant_quirurgicos') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">ANTECEDENTES FAMILIARES</td>
            <td class="subhead-left">ALERGIAS</td>
        </tr>
        <tr>
            <td class="data-cell" style="height:45px;">' . $valnl('ant_familiares') . '</td>
            <td class="data-cell" style="height:45px;"><span class="red-text">' . $val('alergias', 'Ninguna referida') . '</span></td>
        </tr>
        <tr>
            <td class="subhead-left">HÁBITOS (TABACO, ALCOHOL, DROGAS, DEPORTE)</td>
            <td class="subhead-left">ANTECEDENTES GINECO-OBSTÉTRICOS (SI APLICA)</td>
        </tr>
        <tr>
            <td class="data-cell" style="height:45px;">' . $valnl('habitos') . '</td>
            <td class="data-cell" style="height:45px;">' . $valnl('antec_gineco') . '</td>
        </tr>
        <tr>
            <td colspan="2" class="subhead-left">ANTECEDENTES LABORALES (EMPRESAS ANTERIORES, PUESTOS, RIESGOS, AÑOS DE EXPOSICIÓN)</td>
        </tr>
        <tr>
            <td colspan="2" class="data-cell" style="height:55px;">' . $valnl('antec_laborales') . '</td>
        </tr>
        <tr>
            <td colspan="2" class="subhead-left">ENFERMEDADES PROFESIONALES / ACCIDENTES DE TRABAJO PREVIOS</td>
        </tr>
        <tr>
            <td colspan="2" class="data-cell" style="height:45px;">' . $valnl('enf_profesionales_previas') . '</td>
        </tr>
    </table><br>';
}

// ============================================================
// BLOQUE EXAMEN FÍSICO (común a 077, 078, 079, 080)
// ============================================================
function _hcuExamenFisico($d, $sectionNumber = 'G')
{
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };
    return '
    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="4" class="section-band">
            <span class="section-num">' . $sectionNumber . '</span>EXAMEN FÍSICO Y SIGNOS VITALES
        </td></tr>
        <tr>
            <td width="22%" class="subhead-left">PRESIÓN ARTERIAL</td>
            <td width="28%" class="data-cell">' . $val('sv_ta', $val('presion_arterial')) . '</td>
            <td width="22%" class="subhead-left">FRECUENCIA CARDÍACA</td>
            <td width="28%" class="data-cell">' . $val('sv_fc', $val('frecuencia_cardiaca')) . '</td>
        </tr>
        <tr>
            <td class="subhead-left">FRECUENCIA RESPIRATORIA</td>
            <td class="data-cell">' . $val('sv_fr', $val('frecuencia_respiratoria')) . '</td>
            <td class="subhead-left">TEMPERATURA (°C)</td>
            <td class="data-cell">' . $val('sv_temp', $val('temperatura')) . '</td>
        </tr>
        <tr>
            <td class="subhead-left">SATURACIÓN O₂ (%)</td>
            <td class="data-cell">' . $val('sv_sat', $val('saturacion')) . '</td>
            <td class="subhead-left">PESO (kg)</td>
            <td class="data-cell">' . $val('sv_peso', $val('peso')) . '</td>
        </tr>
        <tr>
            <td class="subhead-left">TALLA (cm)</td>
            <td class="data-cell">' . $val('sv_talla', $val('talla')) . '</td>
            <td class="subhead-left">IMC (kg/m²)</td>
            <td class="data-cell">' . $val('sv_imc', $val('imc')) . '</td>
        </tr>
        <tr>
            <td colspan="4" class="subhead-left">EXAMEN FÍSICO REGIONAL (cabeza, cuello, tórax, abdomen, pelvis, extremidades)</td>
        </tr>
        <tr>
            <td colspan="4" class="data-cell" style="height:80px;">' . $valnl('ef_regional') . '</td>
        </tr>
        <tr>
            <td colspan="4" class="subhead-left">EXAMEN FÍSICO POR SISTEMAS (respiratorio, cardiovascular, neurológico, locomotor, sentidos)</td>
        </tr>
        <tr>
            <td colspan="4" class="data-cell" style="height:80px;">' . $valnl('ef_sistemas') . '</td>
        </tr>
    </table><br>';
}

// ============================================================
// BLOQUE EXÁMENES COMPLEMENTARIOS (común a 077, 078, 079, 080)
// ============================================================
function _hcuExamenesComplementarios($d, $sectionNumber = 'H')
{
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };
    return '
    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="2" class="section-band">
            <span class="section-num">' . $sectionNumber . '</span>EXÁMENES COMPLEMENTARIOS REALIZADOS
        </td></tr>
        <tr>
            <td width="50%" class="subhead-left">LABORATORIO CLÍNICO</td>
            <td width="50%" class="subhead-left">IMAGENOLOGÍA / RAYOS X</td>
        </tr>
        <tr>
            <td class="data-cell" style="height:50px;">' . $valnl('examenes_lab') . '</td>
            <td class="data-cell" style="height:50px;">' . $valnl('examenes_img') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">AUDIOMETRÍA</td>
            <td class="subhead-left">VISIOMETRÍA / OPTOMETRÍA</td>
        </tr>
        <tr>
            <td class="data-cell" style="height:35px;">' . $valnl('audiometria') . '</td>
            <td class="data-cell" style="height:35px;">' . $valnl('visiometria') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">ESPIROMETRÍA</td>
            <td class="subhead-left">ELECTROCARDIOGRAMA (EKG)</td>
        </tr>
        <tr>
            <td class="data-cell" style="height:35px;">' . $valnl('espirometria') . '</td>
            <td class="data-cell" style="height:35px;">' . $valnl('ekg') . '</td>
        </tr>
        <tr>
            <td colspan="2" class="subhead-left">OTROS EXÁMENES ESPECÍFICOS (psicotécnico, dermatológico, toxicológico, etc.)</td>
        </tr>
        <tr>
            <td colspan="2" class="data-cell" style="height:40px;">' . $valnl('otros_examenes_esp') . '</td>
        </tr>
    </table><br>';
}

// ============================================================
// BLOQUE APTITUD MÉDICA (común a 077, 078, 079, 080)
// ============================================================
function _hcuAptitudYRecomendaciones($d, $sectionNumber = 'I')
{
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };

    $aptitud = strtoupper($d['aptitud'] ?? '');
    $checkApto       = ($aptitud === 'APTO') ? 'X' : '';
    $checkObservacion= ($aptitud === 'APTO_OBSERVACION' || $aptitud === 'APTO EN OBSERVACION') ? 'X' : '';
    $checkLimit      = ($aptitud === 'APTO_LIMITACIONES' || $aptitud === 'APTO CON LIMITACIONES') ? 'X' : '';
    $checkNoApto     = ($aptitud === 'NO_APTO' || $aptitud === 'NO APTO') ? 'X' : '';

    return '
    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="8" class="section-band">
            <span class="section-num">' . $sectionNumber . '</span>APTITUD MÉDICA OCUPACIONAL
        </td></tr>
        <tr>
            <td width="6%" class="cp-sp" style="font-size:14pt;">' . $checkApto . '</td>
            <td width="19%" class="item-label" style="font-weight:bold;">APTO</td>
            <td width="6%" class="cp-sp" style="font-size:14pt;">' . $checkObservacion . '</td>
            <td width="19%" class="item-label" style="font-weight:bold;">APTO EN OBSERVACIÓN</td>
            <td width="6%" class="cp-sp" style="font-size:14pt;">' . $checkLimit . '</td>
            <td width="19%" class="item-label" style="font-weight:bold;">APTO CON LIMITACIONES</td>
            <td width="6%" class="cp-sp" style="font-size:14pt;">' . $checkNoApto . '</td>
            <td width="19%" class="item-label" style="font-weight:bold;"><span class="red-text">NO APTO</span></td>
        </tr>
    </table>
    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="4" class="section-band">
            <span class="section-num">·</span>DIAGNÓSTICOS DE LA EVALUACIÓN OCUPACIONAL (CIE-10)
        </td></tr>
        <tr>
            <td width="14%" class="subhead">CIE-10</td>
            <td width="62%" class="subhead">DESCRIPCIÓN</td>
            <td width="12%" class="subhead">PRE</td>
            <td width="12%" class="subhead">DEF</td>
        </tr>
        ' . obtenerDiagnosticosFormat($d['_idatencion'] ?? 0) . '
    </table><br>

    <table cellspacing="0">
        <tr><td colspan="2" class="section-band">
            <span class="section-num">·</span><span class="red-text">RESTRICCIONES, RECOMENDACIONES Y SEGUIMIENTO</span>
        </td></tr>
        <tr>
            <td width="50%" class="subhead-left">RESTRICCIONES LABORALES</td>
            <td width="50%" class="subhead-left">RECOMENDACIONES MÉDICAS</td>
        </tr>
        <tr>
            <td class="data-cell" style="height:65px;">' . $valnl('restricciones') . '</td>
            <td class="data-cell" style="height:65px;">' . $valnl('recomendaciones') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">PRÓXIMA EVALUACIÓN MÉDICA</td>
            <td class="subhead-left">OBSERVACIONES ADICIONALES</td>
        </tr>
        <tr>
            <td class="data-cell">' . $val('proxima_evaluacion') . '</td>
            <td class="data-cell">' . $val('observaciones_adicionales') . '</td>
        </tr>
    </table><br>';
}

// ============================================================
// HCU 077 - EVALUACIÓN MÉDICA PRE-OCUPACIONAL / INGRESO
// ============================================================
function generarPDFHcu077($idatencion, $json)
{
    if (!cargarTCPDF()) return null;
    $p = obtenerDatosPaciente($idatencion);
    $d = json_decode($json, true) ?? [];
    $d['_idatencion'] = $idatencion;
    $emisor = _mspObtenerEmisor();
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };

    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
    $pdf->SetCreator('Sistema Médico HC');
    $pdf->SetAuthor($emisor['institucion'] ?: 'Profesional médico');
    $pdf->SetTitle('HCU 077 - EVALUACIÓN MÉDICA PRE-OCUPACIONAL');
    $pdf->SetMargins(10, 8, 10);
    $pdf->SetAutoPageBreak(TRUE, 12);
    $pdf->AddPage();

    $qrTimestamp = date('Y-m-d H:i:s');
    $qrContent = _mspQrContent($idatencion, 'HCU-077 Evaluación Pre-Ocupacional', $emisor, $qrTimestamp);
    $estilo = _mspEstiloOficial();

    $html = $estilo . _mspCabeceraEmisor($emisor)
        . _hcuCabeceraOcupacional($emisor, $p, $d, '077', 'EVALUACIÓN MÉDICA PRE-OCUPACIONAL / INGRESO');

    // Motivo de la evaluación pre-ocupacional
    $html .= '
    <table cellspacing="0">
        <tr><td class="section-band"><span class="section-num">1</span>OBJETIVO Y MOTIVO DE LA EVALUACIÓN</td></tr>
        <tr><td class="data-cell" style="height:35px;">' . $valnl('motivo_evaluacion', 'Evaluación médica para determinar la aptitud del aspirante al puesto de trabajo previo a su contratación.') . '</td></tr>
    </table><br>';

    $html .= _hcuPuestoDeTrabajo($d, '2');
    $html .= _hcuRiesgos($d, '3');
    $html .= _hcuAntecedentes($d, '4');
    $html .= _hcuExamenFisico($d, '5');
    $html .= _hcuExamenesComplementarios($d, '6');
    $html .= _hcuAptitudYRecomendaciones($d, '7');

    $pdf->writeHTML($html, true, false, true, false, '');
    _mspPieFirmaConQR($pdf, $emisor, $qrContent, $qrTimestamp, $estilo, 'HCU-077', 'EVALUACIÓN MÉDICA PRE-OCUPACIONAL');

    return salvarPDF($pdf, 'hcu077', $idatencion);
}

// ============================================================
// HCU 078 - EVALUACIÓN MÉDICA PERIÓDICA
// ============================================================
function generarPDFHcu078($idatencion, $json)
{
    if (!cargarTCPDF()) return null;
    $p = obtenerDatosPaciente($idatencion);
    $d = json_decode($json, true) ?? [];
    $d['_idatencion'] = $idatencion;
    $emisor = _mspObtenerEmisor();
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };

    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
    $pdf->SetCreator('Sistema Médico HC');
    $pdf->SetAuthor($emisor['institucion'] ?: 'Profesional médico');
    $pdf->SetTitle('HCU 078 - EVALUACIÓN MÉDICA PERIÓDICA');
    $pdf->SetMargins(10, 8, 10);
    $pdf->SetAutoPageBreak(TRUE, 12);
    $pdf->AddPage();

    $qrTimestamp = date('Y-m-d H:i:s');
    $qrContent = _mspQrContent($idatencion, 'HCU-078 Evaluación Periódica', $emisor, $qrTimestamp);
    $estilo = _mspEstiloOficial();

    $html = $estilo . _mspCabeceraEmisor($emisor)
        . _hcuCabeceraOcupacional($emisor, $p, $d, '078', 'EVALUACIÓN MÉDICA PERIÓDICA');

    // Datos específicos de la evaluación periódica
    $html .= '
    <table cellspacing="0">
        <tr><td colspan="4" class="section-band"><span class="section-num">1</span>DATOS DE LA EVALUACIÓN PERIÓDICA</td></tr>
        <tr>
            <td width="25%" class="subhead-left">FECHA EVALUACIÓN ANTERIOR</td>
            <td width="25%" class="data-cell">' . $val('fecha_eval_anterior') . '</td>
            <td width="25%" class="subhead-left">FECHA EVALUACIÓN ACTUAL</td>
            <td width="25%" class="dataatos-cell">' . $val('fecha_eval_actual', date('Y-m-d')) . '</td>
        </tr>
        <tr>
            <td class="subhead-left">PERIODICIDAD ESTABLECIDA</td>
            <td class="data-cell">' . $val('periodicidad') . '</td>
            <td class="subhead-left">APTITUD ANTERIOR</td>
            <td class="data-cell">' . $val('aptitud_anterior') . '</td>
        </tr>
        <tr>
            <td colspan="4" class="subhead-left">CAMBIOS RESPECTO A LA EVALUACIÓN ANTERIOR</td>
        </tr>
        <tr>
            <td colspan="4" class="data-cell" style="height:50px;">' . $valnl('cambios_anterior') . '</td>
        </tr>
        <tr>
            <td colspan="4" class="subhead-left">SEGUIMIENTO DE PATOLOGÍAS PROFESIONALES / OCUPACIONALES</td>
        </tr>
        <tr>
            <td colspan="4" class="data-cell" style="height:45px;">' . $valnl('seguimiento_patologias') . '</td>
        </tr>
    </table><br>';

    $html .= _hcuPuestoDeTrabajo($d, '2');
    $html .= _hcuRiesgos($d, '3');
    $html .= _hcuAntecedentes($d, '4');
    $html .= _hcuExamenFisico($d, '5');
    $html .= _hcuExamenesComplementarios($d, '6');
    $html .= _hcuAptitudYRecomendaciones($d, '7');

    $pdf->writeHTML($html, true, false, true, false, '');
    _mspPieFirmaConQR($pdf, $emisor, $qrContent, $qrTimestamp, $estilo, 'HCU-078', 'EVALUACIÓN MÉDICA PERIÓDICA');

    return salvarPDF($pdf, 'hcu078', $idatencion);
}

// ============================================================
// HCU 079 - EVALUACIÓN MÉDICA DE REINTEGRO
// ============================================================
function generarPDFHcu079($idatencion, $json)
{
    if (!cargarTCPDF()) return null;
    $p = obtenerDatosPaciente($idatencion);
    $d = json_decode($json, true) ?? [];
    $d['_idatencion'] = $idatencion;
    $emisor = _mspObtenerEmisor();
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };

    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
    $pdf->SetCreator('Sistema Médico HC');
    $pdf->SetAuthor($emisor['institucion'] ?: 'Profesional médico');
    $pdf->SetTitle('HCU 079 - EVALUACIÓN MÉDICA DE REINTEGRO LABORAL');
    $pdf->SetMargins(10, 8, 10);
    $pdf->SetAutoPageBreak(TRUE, 12);
    $pdf->AddPage();

    $qrTimestamp = date('Y-m-d H:i:s');
    $qrContent = _mspQrContent($idatencion, 'HCU-079 Evaluación de Reintegro', $emisor, $qrTimestamp);
    $estilo = _mspEstiloOficial();

    $html = $estilo . _mspCabeceraEmisor($emisor)
        . _hcuCabeceraOcupacional($emisor, $p, $d, '079', 'EVALUACIÓN MÉDICA DE REINTEGRO LABORAL');

    // Datos específicos del reintegro
    $tipoInc = strtoupper($d['tipo_incapacidad'] ?? '');
    $html .= '
    <table cellspacing="0">
        <tr><td colspan="4" class="section-band">
            <span class="section-num">1</span>DATOS DE LA INCAPACIDAD / AUSENCIA LABORAL
        </td></tr>
        <tr>
            <td width="25%" class="subhead-left">MOTIVO DE LA INCAPACIDAD</td>
            <td colspan="3" class="data-cell" style="font-weight:bold;">' . $val('motivo_incapacidad') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">TIPO DE INCAPACIDAD</td>
            <td width="25%" class="data-cell">' . htmlspecialchars($tipoInc ?: '—') . '</td>
            <td width="25%" class="subhead-left">N° CERTIFICADO IESS / MSP</td>
            <td width="25%" class="data-cell">' . $val('num_certificado_incapacidad') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">FECHA INICIO INCAPACIDAD</td>
            <td class="data-cell">' . $val('fecha_inicio_incapacidad') . '</td>
            <td class="subhead-left">FECHA DE ALTA MÉDICA</td>
            <td class="data-cell">' . $val('fecha_alta_medica') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">DÍAS DE AUSENCIA TOTAL</td>
            <td class="data-cell">' . $val('dias_ausencia') . '</td>
            <td class="subhead-left">FECHA DE REINTEGRO PROPUESTO</td>
            <td class="data-cell">' . $val('fecha_reintegro_propuesto') . '</td>
        </tr>
        <tr>
            <td colspan="4" class="subhead-left">DIAGNÓSTICO DE LA INCAPACIDAD (que motivó la ausencia)</td>
        </tr>
        <tr>
            <td colspan="4" class="data-cell" style="height:40px;">' . $valnl('diagnostico_incapacidad') . '</td>
        </tr>
        <tr>
            <td colspan="4" class="subhead-left">TRATAMIENTO RECIBIDO Y EVOLUCIÓN</td>
        </tr>
        <tr>
            <td colspan="4" class="data-cell" style="height:55px;">' . $valnl('tratamiento_recibido') . '</td>
        </tr>
        <tr>
            <td colspan="4" class="subhead-left">SECUELAS / LIMITACIONES RESIDUALES (en caso de existir)</td>
        </tr>
        <tr>
            <td colspan="4" class="data-cell" style="height:45px;">' . $valnl('secuelas_limitaciones') . '</td>
        </tr>
    </table><br>';

    $html .= _hcuPuestoDeTrabajo($d, '2');
    $html .= _hcuRiesgos($d, '3');
    $html .= _hcuExamenFisico($d, '4');
    $html .= _hcuExamenesComplementarios($d, '5');

    // Evaluación específica de capacidad de reintegro
    $html .= '
    <table cellspacing="0">
        <tr><td class="section-band">
            <span class="section-num">6</span>EVALUACIÓN DE LA CAPACIDAD DE REINTEGRO LABORAL
        </td></tr>
        <tr><td class="subhead-left">CAPACIDAD FUNCIONAL ACTUAL DEL TRABAJADOR</td></tr>
        <tr><td class="data-cell" style="height:45px;">' . $valnl('capacidad_funcional') . '</td></tr>
        <tr><td class="subhead-left">¿REQUIERE REUBICACIÓN DE PUESTO O ADAPTACIÓN ERGONÓMICA?</td></tr>
        <tr><td class="data-cell" style="height:40px;">' . $valnl('requiere_reubicacion') . '</td></tr>
    </table><br>';

    $html .= _hcuAptitudYRecomendaciones($d, '7');

    $pdf->writeHTML($html, true, false, true, false, '');
    _mspPieFirmaConQR($pdf, $emisor, $qrContent, $qrTimestamp, $estilo, 'HCU-079', 'EVALUACIÓN DE REINTEGRO LABORAL');

    return salvarPDF($pdf, 'hcu079', $idatencion);
}

// ============================================================
// HCU 080 - EVALUACIÓN MÉDICA DE RETIRO
// ============================================================
function generarPDFHcu080($idatencion, $json)
{
    if (!cargarTCPDF()) return null;
    $p = obtenerDatosPaciente($idatencion);
    $d = json_decode($json, true) ?? [];
    $d['_idatencion'] = $idatencion;
    $emisor = _mspObtenerEmisor();
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };

    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
    $pdf->SetCreator('Sistema Médico HC');
    $pdf->SetAuthor($emisor['institucion'] ?: 'Profesional médico');
    $pdf->SetTitle('HCU 080 - EVALUACIÓN MÉDICA DE RETIRO');
    $pdf->SetMargins(10, 8, 10);
    $pdf->SetAutoPageBreak(TRUE, 12);
    $pdf->AddPage();

    $qrTimestamp = date('Y-m-d H:i:s');
    $qrContent = _mspQrContent($idatencion, 'HCU-080 Evaluación de Retiro', $emisor, $qrTimestamp);
    $estilo = _mspEstiloOficial();

    $html = $estilo . _mspCabeceraEmisor($emisor)
        . _hcuCabeceraOcupacional($emisor, $p, $d, '080', 'EVALUACIÓN MÉDICA DE RETIRO');

    // Datos específicos del retiro
    $html .= '
    <table cellspacing="0">
        <tr><td colspan="4" class="section-band">
            <span class="section-num">1</span>DATOS DEL RETIRO LABORAL
        </td></tr>
        <tr>
            <td width="25%" class="subhead-left">FECHA DE INGRESO A LA EMPRESA</td>
            <td width="25%" class="data-cell">' . $val('fecha_ingreso_empresa') . '</td>
            <td width="25%" class="subhead-left">FECHA DE RETIRO</td>
            <td width="25%" class="data-cell">' . $val('fecha_retiro') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">TIEMPO TOTAL DE SERVICIO</td>
            <td class="data-cell">' . $val('tiempo_servicio') . '</td>
            <td class="subhead-left">MOTIVO DEL RETIRO</td>
            <td class="data-cell">' . $val('motivo_retiro') . '</td>
        </tr>
        <tr>
            <td colspan="4" class="subhead-left">DETALLES DEL RETIRO (renuncia, despido, jubilación, fin de contrato, etc.)</td>
        </tr>
        <tr>
            <td colspan="4" class="data-cell" style="height:40px;">' . $valnl('detalles_retiro') . '</td>
        </tr>
    </table><br>';

    $html .= _hcuPuestoDeTrabajo($d, '2');
    $html .= _hcuRiesgos($d, '3');
    $html .= _hcuAntecedentes($d, '4');
    $html .= _hcuExamenFisico($d, '5');
    $html .= _hcuExamenesComplementarios($d, '6');

    // Bloque específico: patologías relacionadas con el trabajo
    $html .= '
    <table cellspacing="0">
        <tr><td class="section-band">
            <span class="section-num">7</span>EVALUACIÓN FINAL DE PATOLOGÍAS RELACIONADAS CON EL TRABAJO
        </td></tr>
        <tr><td class="subhead-left">¿SE EVIDENCIAN ENFERMEDADES PROFESIONALES U OCUPACIONALES?</td></tr>
        <tr><td class="data-cell" style="height:50px;">' . $valnl('enf_ocupacionales_evidenciadas') . '</td></tr>
        <tr><td class="subhead-left">¿SE EVIDENCIAN SECUELAS DE ACCIDENTES DE TRABAJO?</td></tr>
        <tr><td class="data-cell" style="height:40px;">' . $valnl('secuelas_accidentes_trabajo') . '</td></tr>
        <tr><td class="subhead-left">PRONÓSTICO Y RECOMENDACIONES A FUTURO</td></tr>
        <tr><td class="data-cell" style="height:50px;">' . $valnl('pronostico_futuro') . '</td></tr>
    </table><br>';

    $html .= _hcuAptitudYRecomendaciones($d, '8');

    $pdf->writeHTML($html, true, false, true, false, '');
    _mspPieFirmaConQR($pdf, $emisor, $qrContent, $qrTimestamp, $estilo, 'HCU-080', 'EVALUACIÓN MÉDICA DE RETIRO');

    return salvarPDF($pdf, 'hcu080', $idatencion);
}

// ============================================================
// HCU 081 - CERTIFICADO DE APTITUD LABORAL
// ============================================================
function generarPDFHcu081($idatencion, $json)
{
    if (!cargarTCPDF()) return null;
    $p = obtenerDatosPaciente($idatencion);
    $d = json_decode($json, true) ?? [];
    $d['_idatencion'] = $idatencion;
    $emisor = _mspObtenerEmisor();
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };

    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
    $pdf->SetCreator('Sistema Médico HC');
    $pdf->SetAuthor($emisor['institucion'] ?: 'Profesional médico');
    $pdf->SetTitle('HCU 081 - CERTIFICADO DE APTITUD LABORAL');
    $pdf->SetMargins(10, 8, 10);
    $pdf->SetAutoPageBreak(TRUE, 12);
    $pdf->AddPage();

    $qrTimestamp = date('Y-m-d H:i:s');
    $qrContent = _mspQrContent($idatencion, 'HCU-081 Certificado de Aptitud Laboral', $emisor, $qrTimestamp);
    $estilo = _mspEstiloOficial();

    $html = $estilo . _mspCabeceraEmisor($emisor) . _mspIdentificacionPaciente($emisor, $p);

    // A. DATOS DEL ESTABLECIMIENTO (resumen para certificado compacto)
    $html .= '
    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="4" class="section-band">
            <span class="section-num">·</span>CERTIFICADO HCU 081 · SALUD EN EL TRABAJO
        </td></tr>
        <tr>
            <td width="25%" class="subhead-left">EMPRESA / EMPLEADOR</td>
            <td width="25%" class="data-cell">' . $val('femo_empresa') . '</td>
            <td width="25%" class="subhead-left">RUC EMPRESA</td>
            <td width="25%" class="data-cell">' . $val('femo_ruc') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">CARGO / PUESTO DE TRABAJO</td>
            <td class="data-cell">' . $val('cargo_puesto') . '</td>
            <td class="subhead-left">ÁREA / DEPARTAMENTO</td>
            <td class="data-cell">' . $val('area_trabajo') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">TIPO DE EVALUACIÓN</td>
            <td class="data-cell" style="font-weight:bold;">' . $val('tipo_evaluacion_cert', 'PERIÓDICA') . '</td>
            <td class="subhead-left">FECHA DE LA EVALUACIÓN</td>
            <td class="data-cell">' . $val('fecha_evaluacion_cert', date('Y-m-d')) . '</td>
        </tr>
    </table><br>';

    // C. APTITUD MÉDICA LABORAL — bloque oficial del HCU 081
    $aptitud = strtoupper($d['aptitud'] ?? '');
    $checkApto       = ($aptitud === 'APTO') ? 'X' : '';
    $checkObs        = ($aptitud === 'APTO_OBSERVACION' || $aptitud === 'APTO EN OBSERVACION') ? 'X' : '';
    $checkLimit      = ($aptitud === 'APTO_LIMITACIONES' || $aptitud === 'APTO CON LIMITACIONES') ? 'X' : '';
    $checkNoApto     = ($aptitud === 'NO_APTO' || $aptitud === 'NO APTO') ? 'X' : '';

    $html .= '
    <table cellpadding="4" cellspacing="0">
        <tr><td colspan="8" class="section-band" style="font-size:11pt;">
            APTITUD MÉDICA OCUPACIONAL
        </td></tr>
        <tr>
            <td width="8%" class="cp-sp" style="font-size:18pt; height:14mm;">' . $checkApto . '</td>
            <td width="17%" class="item-label" style="font-weight:bold; font-size:9pt;">APTO</td>
            <td width="8%" class="cp-sp" style="font-size:18pt;">' . $checkObs . '</td>
            <td width="17%" class="item-label" style="font-weight:bold; font-size:9pt;">APTO EN OBSERVACIÓN</td>
            <td width="8%" class="cp-sp" style="font-size:18pt;">' . $checkLimit . '</td>
            <td width="17%" class="item-label" style="font-weight:bold; font-size:9pt;">APTO CON LIMITACIONES</td>
            <td width="8%" class="cp-sp" style="font-size:18pt;">' . $checkNoApto . '</td>
            <td width="17%" class="item-label" style="font-weight:bold; font-size:9pt;"><span class="red-text">NO APTO</span></td>
        </tr>
    </table><br>';

    // D. CERTIFICACIÓN TEXTO LEGAL
    $nombreCompleto = trim(($p['apaterno']??'') . ' ' . ($p['amaterno']??'') . ' ' . ($p['nombre']??''));
    $html .= '
    <table cellspacing="0">
        <tr><td class="section-band"><span class="section-num">·</span>CERTIFICACIÓN MÉDICA</td></tr>
        <tr><td class="data-cell" style="font-size:9pt; text-align:justify; line-height:1.5;">
            El profesional de la salud abajo firmante certifica que el/la trabajador/a
            <b>' . htmlspecialchars($nombreCompleto ?: '—') . '</b>,
            con documento de identidad <b>' . htmlspecialchars($p['num_documento'] ?? '—') . '</b>,
            ha sido sometido/a a evaluación médica ocupacional de acuerdo con los lineamientos del
            <b>Ministerio de Salud Pública del Ecuador</b> y la normativa vigente (Reglamento de Seguridad y Salud
            de los Trabajadores y Mejoramiento del Medio Ambiente de Trabajo · Decreto Ejecutivo 2393),
            con el resultado de aptitud médica laboral señalado arriba.
            <br><br>
            Se ha informado al/a la trabajador/a sobre los riesgos a los que está expuesto/a en su puesto de
            trabajo, así como las recomendaciones médicas y/o restricciones que correspondan.
        </td></tr>
    </table><br>';

    // E. RESTRICCIONES Y RECOMENDACIONES
    $html .= '
    <table cellspacing="0">
        <tr><td colspan="2" class="section-band">
            <span class="section-num">·</span>RESTRICCIONES, RECOMENDACIONES Y SEGUIMIENTO
        </td></tr>
        <tr>
            <td width="50%" class="subhead-left">RESTRICCIONES LABORALES</td>
            <td width="50%" class="subhead-left">RECOMENDACIONES MÉDICAS</td>
        </tr>
        <tr>
            <td class="data-cell" style="height:55px;">' . $valnl('restricciones') . '</td>
            <td class="data-cell" style="height:55px;">' . $valnl('recomendaciones') . '</td>
        </tr>
        <tr>
            <td class="subhead-left">PRÓXIMA EVALUACIÓN MÉDICA</td>
            <td class="subhead-left">VIGENCIA DEL CERTIFICADO</td>
        </tr>
        <tr>
            <td class="data-cell">' . $val('proxima_evaluacion') . '</td>
            <td class="data-cell">' . $val('vigencia_certificado') . '</td>
        </tr>
    </table><br>';

    // G. FIRMA DEL USUARIO / TRABAJADOR
    $html .= '
    <table cellspacing="0">
        <tr><td class="section-band">
            <span class="section-num">·</span>RECEPCIÓN POR EL/LA TRABAJADOR/A
        </td></tr>
        <tr><td class="data-cell" style="font-size:8.5pt; text-align:justify;">
            Declaro haber sido informado/a sobre los riesgos asociados a mi puesto de trabajo, las recomendaciones médicas
            y/o restricciones que correspondan según los resultados de mi evaluación médica ocupacional, y haber recibido
            copia del presente certificado.
        </td></tr>
        <tr>
            <td class="subhead-left">FIRMA DEL TRABAJADOR / NOMBRE / CÉDULA / FECHA</td>
        </tr>
        <tr><td class="data-cell" style="height:25mm;">&nbsp;</td></tr>
    </table>';

    $pdf->writeHTML($html, true, false, true, false, '');
    _mspPieFirmaConQR($pdf, $emisor, $qrContent, $qrTimestamp, $estilo, 'HCU-081', 'CERTIFICADO DE APTITUD LABORAL');

    return salvarPDF($pdf, 'hcu081', $idatencion);
}

// ============================================================
// HCU 083 - REGISTRO DE INMUNIZACIONES PARA SALUD EN EL TRABAJO
// ============================================================
function generarPDFHcu083($idatencion, $json)
{
    if (!cargarTCPDF()) return null;
    $p = obtenerDatosPaciente($idatencion);
    $d = json_decode($json, true) ?? [];
    $d['_idatencion'] = $idatencion;
    $emisor = _mspObtenerEmisor();
    $val = function ($k, $alt = '—') use ($d) { return _mspVal($d, $k, $alt); };
    $valnl = function ($k, $alt = '—') use ($d) { return _mspValnl($d, $k, $alt); };

    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
    $pdf->SetCreator('Sistema Médico HC');
    $pdf->SetAuthor($emisor['institucion'] ?: 'Profesional médico');
    $pdf->SetTitle('HCU 083 - REGISTRO DE INMUNIZACIONES OCUPACIONALES');
    $pdf->SetMargins(10, 8, 10);
    $pdf->SetAutoPageBreak(TRUE, 12);
    $pdf->AddPage();

    $qrTimestamp = date('Y-m-d H:i:s');
    $qrContent = _mspQrContent($idatencion, 'HCU-083 Inmunizaciones', $emisor, $qrTimestamp);
    $estilo = _mspEstiloOficial();

    $html = $estilo . _mspCabeceraEmisor($emisor)
        . _hcuCabeceraOcupacional($emisor, $p, $d, '083', 'REGISTRO DE INMUNIZACIONES PARA SALUD EN EL TRABAJO');

    // Vacunas estándar para salud ocupacional (catálogo MSP)
    $vacunas = [
        'tetanos'       => 'TÉTANOS / DIFTERIA (dT)',
        'hep_b'         => 'HEPATITIS B',
        'hep_a'         => 'HEPATITIS A',
        'influenza'     => 'INFLUENZA ESTACIONAL',
        'covid'         => 'COVID-19',
        'fiebre_amar'   => 'FIEBRE AMARILLA',
        'sarampion'     => 'SARAMPIÓN / RUBÉOLA / PAROTIDITIS (SRP)',
        'varicela'      => 'VARICELA',
        'rabia'         => 'ANTIRRÁBICA',
        'meningo'       => 'MENINGOCÓCICA',
        'neumococo'     => 'NEUMOCÓCICA',
        'tifoidea'      => 'FIEBRE TIFOIDEA',
    ];

    $html .= '
    <table cellpadding="3" cellspacing="0">
        <tr><td colspan="7" class="section-band">
            <span class="section-num">1</span>ESQUEMA DE INMUNIZACIONES REGISTRADAS
        </td></tr>
        <tr>
            <td width="22%" class="subhead">VACUNA</td>
            <td width="12%" class="subhead">FECHA</td>
            <td width="10%" class="subhead">DOSIS</td>
            <td width="14%" class="subhead">LOTE</td>
            <td width="14%" class="subhead">VÍA</td>
            <td width="14%" class="subhead">SITIO</td>
            <td width="14%" class="subhead">REACCIÓN</td>
        </tr>';

    foreach ($vacunas as $key => $label) {
        $html .= '<tr style="font-size:8pt;">
            <td class="item-label">' . $label . '</td>
            <td class="data-cell text-center">' . $val('vac_' . $key . '_fecha', '') . '</td>
            <td class="data-cell text-center">' . $val('vac_' . $key . '_dosis', '') . '</td>
            <td class="data-cell text-center">' . $val('vac_' . $key . '_lote', '') . '</td>
            <td class="data-cell text-center">' . $val('vac_' . $key . '_via', '') . '</td>
            <td class="data-cell text-center">' . $val('vac_' . $key . '_sitio', '') . '</td>
            <td class="data-cell text-center">' . $val('vac_' . $key . '_reaccion', '') . '</td>
        </tr>';
    }

    // Filas extra para "Otra vacuna" personalizada
    $html .= '<tr style="font-size:8pt;">
        <td class="item-label">' . $val('vac_otra1_nombre', 'OTRA VACUNA (especificar)') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra1_fecha', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra1_dosis', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra1_lote', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra1_via', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra1_sitio', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra1_reaccion', '') . '</td>
    </tr>';
    $html .= '<tr style="font-size:8pt;">
        <td class="item-label">' . $val('vac_otra2_nombre', 'OTRA VACUNA (especificar)') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra2_fecha', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra2_dosis', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra2_lote', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra2_via', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra2_sitio', '') . '</td>
        <td class="data-cell text-center">' . $val('vac_otra2_reaccion', '') . '</td>
    </tr>';

    $html .= '</table><br>';

    // Observaciones generales
    $html .= '
    <table cellspacing="0">
        <tr><td class="section-band"><span class="section-num">2</span>OBSERVACIONES Y SEGUIMIENTO</td></tr>
        <tr><td class="subhead-left">EFECTOS ADVERSOS REPORTADOS (ESAVI)</td></tr>
        <tr><td class="data-cell" style="height:45px;">' . $valnl('esavi') . '</td></tr>
        <tr><td class="subhead-left">RECOMENDACIONES / PRÓXIMAS DOSIS</td></tr>
        <tr><td class="data-cell" style="height:50px;">' . $valnl('rec_inmunizaciones') . '</td></tr>
        <tr><td class="subhead-left">VACUNAS RECOMENDADAS SEGÚN PUESTO DE TRABAJO</td></tr>
        <tr><td class="data-cell" style="height:45px;">' . $valnl('vac_recomendadas_puesto') . '</td></tr>
    </table>';

    $pdf->writeHTML($html, true, false, true, false, '');
    _mspPieFirmaConQR($pdf, $emisor, $qrContent, $qrTimestamp, $estilo, 'HCU-083', 'INMUNIZACIONES OCUPACIONALES');

    return salvarPDF($pdf, 'hcu083', $idatencion);
}
