diff --git a/ver_formulario_enviado.php b/ver_formulario_enviado.php index eeefaa0..96a588f 100644 --- a/ver_formulario_enviado.php +++ b/ver_formulario_enviado.php @@ -37,7 +37,7 @@ if ($modoTurnero) { p.id AS paciente_id, p.nombre_completo AS paciente_nombre, p.numero_documento, p.tipo_documento, - p.fecha_nacimiento, p.telefono AS paciente_telefono, p.eps, p.direccion, + p.fecha_nacimiento, p.telefono AS paciente_telefono, p.eps, p.direccion, p.genero, t.sesion_id, ts.numero_orden, med.nombres AS medico_nombres, med.apellidos AS medico_apellidos, @@ -156,6 +156,7 @@ if ($modoTurnero) { 'telefono' => $tcRow['paciente_telefono'] ?? '', 'eps' => $tcRow['eps'] ?? '', 'direccion' => $tcRow['direccion'] ?? '', + 'genero' => $tcRow['genero'] ?? '', 'medico_nombre' => trim(($tcRow['medico_nombres'] ?? '') . ' ' . ($tcRow['medico_apellidos'] ?? '')), 'medico_especialidad'=> $tcRow['medico_especialidad'] ?? '', 'medico_codigo' => $tcRow['medico_codigo'] ?? '', @@ -178,7 +179,7 @@ if ($modoTurnero) { f.esquema, f.permite_firma, f.requiere_firma, f.doc_encabezado, f.doc_subtitulo, f.doc_logo_base64, f.doc_color, f.doc_pie_pagina, p.nombre_completo AS paciente_nombre, p.numero_documento, p.tipo_documento, - p.fecha_nacimiento, p.telefono AS paciente_telefono, p.eps, p.direccion, + p.fecha_nacimiento, p.telefono AS paciente_telefono, p.eps, p.direccion, p.genero, u.full_name AS enviado_por_nombre, u.email AS enviado_por_email, ld.numero_orden FROM lab_form_envios e @@ -202,7 +203,7 @@ if ($modoTurnero) { f.esquema, f.permite_firma, f.requiere_firma, f.doc_encabezado, f.doc_subtitulo, f.doc_logo_base64, f.doc_color, f.doc_pie_pagina, p.nombre_completo AS paciente_nombre, p.numero_documento, p.tipo_documento, - p.fecha_nacimiento, p.telefono AS paciente_telefono, p.eps, p.direccion, + p.fecha_nacimiento, p.telefono AS paciente_telefono, p.eps, p.direccion, p.genero, u.full_name AS enviado_por_nombre, u.email AS enviado_por_email, ld.numero_orden FROM lab_form_envios e @@ -1010,6 +1011,7 @@ function _addExamWizardHtml(string $cid): string { 'telefono' => $envio['paciente_telefono'] ?? null, 'eps' => $envio['eps'] ?? null, 'direccion' => $envio['direccion'] ?? null, + 'genero' => $envio['genero'] ?? null, ], fn($v) => $v !== null && $v !== ''); // Firma global del profesional (un solo valor para todos los campos firma_profesional) @@ -1061,6 +1063,18 @@ function _addExamWizardHtml(string $cid): string { $cond = $campo['condicion'] ?? null; if ($cond) { $vCtrl = $todos[$cond['campo_id']] ?? null; + // La condición puede depender de un campo vinculado (p. ej. el + // sexo del paciente, que gobierna la sección obstétrica). Esos + // no están en las respuestas: su valor sale de la ficha. + if ($vCtrl === null) { + foreach ($esquema as $__c) { + if (($__c['id'] ?? '') === $cond['campo_id'] + && ($__c['tipo'] ?? '') === 'linked') { + $vCtrl = $paciente[$__c['linked_key'] ?? ''] ?? null; + break; + } + } + } $vCond = $cond['valores'] ?? ($cond['valor'] ? [$cond['valor']] : []); $_saltarSeccion = is_array($vCtrl) ? empty(array_intersect($vCond, $vCtrl)) @@ -3206,13 +3220,25 @@ const topaz = (() => { } else { var radio = ctrl.querySelector('input[type="radio"]:checked'); var sel = ctrl.querySelector('select'); - var v = radio ? radio.value : (sel ? sel.value : ''); + var txt = ctrl.querySelector('input[type="text"], textarea'); + // Un campo vinculado se muestra como texto, no como control: + // es el caso del sexo, que gobierna la sección obstétrica. + var lnk = ctrl.classList.contains('campo-linked') + ? ctrl.querySelector('.campo-linked-valor') : null; + var v = radio ? radio.value + : sel ? sel.value + : lnk ? lnk.textContent.trim() + : txt ? txt.value : ''; activo = valoresCond.includes(v); } var ids = [sec.sepId].concat(sec.elemIds); ids.forEach(function(id) { var el = document.querySelector('[data-campo-id="' + id + '"]'); if (!el) return; + // El PHP marca con display:none los campos de secciones cuya + // condición no se cumple. Esta función anima con max-height y + // opacity, así que sin quitar el display el campo nunca aparece. + if (activo) el.style.removeProperty('display'); el.style.transition = 'opacity .2s, max-height .3s'; el.style.maxHeight = activo ? '2000px' : '0'; el.style.opacity = activo ? '1' : '0';