diff --git a/modules/turnero/api/create_solicitud.php b/modules/turnero/api/create_solicitud.php index 5f96c6c..c5daddd 100644 --- a/modules/turnero/api/create_solicitud.php +++ b/modules/turnero/api/create_solicitud.php @@ -63,6 +63,29 @@ if ($metodoPago && !in_array($metodoPago, $metodosValidos, true)) { } $pdo = db(); + +// Validar restricción de género antes de abrir transacción +if (!empty($examIds)) { + $stPac = $pdo->prepare("SELECT genero FROM lab_pacientes WHERE id = ? LIMIT 1"); + $stPac->execute([$pacienteId]); + $genPac = strtoupper(trim((string)($stPac->fetchColumn() ?: ''))); + + if ($genPac) { + $ph = implode(',', array_fill(0, count($examIds), '?')); + $stGp = $pdo->prepare( + "SELECT codigo, nombre, genero_permitido FROM exam_tipos + WHERE id IN ($ph) AND genero_permitido IS NOT NULL AND genero_permitido <> ?" + ); + $stGp->execute(array_merge($examIds, [$genPac])); + $incompatibles = $stGp->fetchAll(PDO::FETCH_ASSOC); + if ($incompatibles) { + $nombres = implode(', ', array_map(fn($r) => $r['codigo'], $incompatibles)); + $sexo = $genPac === 'M' ? 'masculino' : 'femenino'; + jsonError("Examen(es) no disponibles para paciente $sexo: $nombres", 422); + } + } +} + $pdo->beginTransaction(); try { diff --git a/modules/turnero/views/recepcion.php b/modules/turnero/views/recepcion.php index 71dea93..fce0d35 100644 --- a/modules/turnero/views/recepcion.php +++ b/modules/turnero/views/recepcion.php @@ -82,7 +82,7 @@ try { $lugarMuestras = $lugaresDestino[0] ?? null; $examenes = $pdo->query( - "SELECT et.id, et.codigo, et.nombre, et.categoria, et.cups, + "SELECT et.id, et.codigo, et.nombre, et.categoria, et.cups, et.genero_permitido, IF(COUNT(etc.formulario_id) > 0, 1, 0) AS tiene_consentimiento FROM exam_tipos et LEFT JOIN exam_tipo_consentimientos etc ON etc.exam_tipo_id = et.id @@ -732,7 +732,8 @@ document.addEventListener('DOMContentLoaded', function() { @@ -1155,10 +1156,14 @@ document.addEventListener('DOMContentLoaded', () => { render: { option(data, escape) { const consent = data['data-consent'] == '1' || data.consent == '1'; - const cups = data['data-cups'] || data.cups || ''; - return `