Toma progresiva: auto-scroll, cierre automático, countdown en cola y fix filtro por examen

- guardar_toma.php: filtrar firmas por condición del examen seleccionado; corrige
  countdown espurio y detección de 'completado' cuando hay múltiples tipos de examen.
  También descarta siguiente_toma_at si ya es pasado (minuto 0).
- ver_formulario_enviado.php: auto-scroll a primera firma pendiente al cargar el modal;
  si el examen se selecciona y la firma no está en DOM, guarda y recarga el iframe.
  Al completar tomas, cierra el modal directamente sin botón "Finalizar".
- get_cola.php: incluye siguiente_toma_at y en_toma_progresiva por turno desde
  turnero_consentimientos para mostrar cuenta regresiva en tarjetas.
- lugar.php: muestra chip de cuenta regresiva en tarjetas de cola para pacientes
  en toma progresiva; color cambia a warn (<2 min) y crit (¡Ahora!).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-09 20:05:56 -05:00
co-authored by Claude Sonnet 4.6
parent c2605fb274
commit 848dd8e4d0
4 changed files with 149 additions and 32 deletions
+23
View File
@@ -99,6 +99,29 @@ if ($area === 'recepcion') {
}
$cola = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Enriquecer con datos de toma progresiva (cuenta regresiva en tarjetas de cola)
if (!empty($cola)) {
$turnoIds = implode(',', array_map('intval', array_column($cola, 'id')));
$tomaRows = $pdo->query(
"SELECT tc.turno_id, tc.siguiente_toma_at
FROM turnero_consentimientos tc
JOIN lab_formularios f ON f.id = tc.formulario_id AND f.es_toma_progresiva = 1
WHERE tc.turno_id IN ($turnoIds) AND tc.estado = 'en_progreso'
ORDER BY tc.siguiente_toma_at ASC"
)->fetchAll(PDO::FETCH_ASSOC);
$tomaInfo = [];
foreach ($tomaRows as $row) {
if (!isset($tomaInfo[$row['turno_id']])) {
$tomaInfo[$row['turno_id']] = $row['siguiente_toma_at'];
}
}
foreach ($cola as &$t) {
$t['en_toma_progresiva'] = isset($tomaInfo[$t['id']]) ? 1 : 0;
$t['siguiente_toma_at'] = $tomaInfo[$t['id']] ?? null;
}
unset($t);
}
// ── Turno actualmente en pantalla (último llamado) ────────────
$campoLlamado = $area === 'recepcion' ? 'llamado_recepcion_at' : 'llamado_lugar_at';
$estadoActivo = $area === 'recepcion' ? "'en_recepcion'" : "'en_servicio'";