From b1d1c0896f9cccb8fe8a0af64b4c287f27802f03 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Mon, 27 Jul 2026 22:18:38 -0500 Subject: [PATCH] =?UTF-8?q?turnero:=20kiosko=20=E2=80=94=20ni=C3=B1os=20pl?= =?UTF-8?q?aceholder+edad,=20muestras=20desc,=20numpad=20+5%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Prioridad A (Niños): placeholder cedula → 'Tarjeta de Identidad del menor (si tiene)' - Prioridad A: age check via check_paciente.php → toast aviso si paciente ≥ 10 años - Prioridad F: descripción → 'Muestras de días anteriores' (BD + fallback PHP) - Numpad: padding .6rem → .63rem .6rem (+5% alto) - Nuevo: check_paciente.php (endpoint público, solo devuelve fecha_nacimiento) Co-Authored-By: Claude Sonnet 4.6 --- modules/turnero/api/check_paciente.php | 24 ++++++++++++++++++++++++ modules/turnero/views/kiosko.php | 24 ++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 modules/turnero/api/check_paciente.php diff --git a/modules/turnero/api/check_paciente.php b/modules/turnero/api/check_paciente.php new file mode 100644 index 0000000..615d887 --- /dev/null +++ b/modules/turnero/api/check_paciente.php @@ -0,0 +1,24 @@ + false]); exit; } + +$doc = preg_replace('/\D/', '', trim($_GET['doc'] ?? '')); +if (strlen($doc) < 5 || strlen($doc) > 15) { echo json_encode(['ok' => false]); exit; } + +try { + $stmt = Database::getInstance()->getConnection() + ->prepare("SELECT fecha_nacimiento FROM lab_pacientes WHERE numero_documento = ? LIMIT 1"); + $stmt->execute([$doc]); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + if (!$row || !$row['fecha_nacimiento']) { echo json_encode(['ok' => false]); exit; } + echo json_encode(['ok' => true, 'fecha_nacimiento' => $row['fecha_nacimiento']]); +} catch (\Throwable $e) { + echo json_encode(['ok' => false]); +} diff --git a/modules/turnero/views/kiosko.php b/modules/turnero/views/kiosko.php index ad3de33..52ee8a2 100644 --- a/modules/turnero/views/kiosko.php +++ b/modules/turnero/views/kiosko.php @@ -41,7 +41,7 @@ try { ['codigo'=>'C','nombre'=>'Adulto mayor', 'color'=>'#eab308','icono'=>'fas fa-person-cane', 'descripcion'=>'Mayores de 60 años'], ['codigo'=>'D','nombre'=>'Discapacidad', 'color'=>'#8b5cf6','icono'=>'fas fa-wheelchair', 'descripcion'=>'Personas con discapacidad'], ['codigo'=>'E','nombre'=>'Paciente general', 'color'=>'#3b82f6','icono'=>'fas fa-user', 'descripcion'=>'Atención general'], - ['codigo'=>'F','nombre'=>'Muestra pendiente','color'=>'#6b7280','icono'=>'fas fa-vial', 'descripcion'=>'Entrega de muestra tomada'], + ['codigo'=>'F','nombre'=>'Muestra pendiente','color'=>'#6b7280','icono'=>'fas fa-vial', 'descripcion'=>'Muestras de días anteriores'], ]; } @@ -392,7 +392,7 @@ unset($p); margin: .6rem 0 1rem; } .np-btn { - padding: .6rem; + padding: .63rem .6rem; font-size: 1.2rem; font-weight: 700; border: 1.5px solid #e2e8f0; @@ -697,6 +697,9 @@ unset($p); mostrar('screen-datos'); const inpCedula = document.getElementById('inp-cedula'); + inpCedula.placeholder = prioCodigo === 'A' + ? 'Tarjeta de Identidad del menor (si tiene)' + : 'Ej: 1234567890'; inpCedula.focus(); inpCedula.value = ''; _scannerLocked = false; @@ -721,6 +724,23 @@ unset($p); _enviando = true; setSpinner(true); + + // Verificar edad solo para prioridad Niños + if (prioCodigo === 'A') { + try { + const ar = await fetch(`modules/turnero/api/check_paciente.php?doc=${encodeURIComponent(cedula)}`); + const aj = await ar.json(); + if (aj.ok && aj.fecha_nacimiento) { + const dob = new Date(aj.fecha_nacimiento); + const today = new Date(); + let age = today.getFullYear() - dob.getFullYear(); + if (today.getMonth() < dob.getMonth() || + (today.getMonth() === dob.getMonth() && today.getDate() < dob.getDate())) age--; + if (age >= 10) mostrarError('Este turno es para menores de 10 años, verifique la prioridad.'); + } + } catch {} + } + try { const res = await fetch(API_URL, { method: 'POST',