feat(turnero): panel de estado de muestras en recepción
Recepción ve en una barra inferior qué turno atiende cada estación de toma de muestras (verde = ocupada, gris = libre), cuántos están en espera y cuántos en espera entre muestras progresivas. Se refresca cada 7 s. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
7b599b28ef
commit
7d444699d3
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* GET get_resumen_muestras.php
|
||||
* Resumen de estaciones de toma de muestras para recepción.
|
||||
*/
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireTurnero();
|
||||
|
||||
$pdo = db();
|
||||
$sesionId = (int)(obtenerOCrearSesionHoy()['id'] ?? 0);
|
||||
|
||||
// Estaciones con el turno en servicio actual
|
||||
$stmt = $pdo->prepare(
|
||||
"SELECT l.id, l.nombre,
|
||||
t.id AS turno_id, t.codigo, t.paciente_nombre
|
||||
FROM turnero_lugares l
|
||||
LEFT JOIN turnero_turnos t
|
||||
ON t.lugar_destino_id = l.id
|
||||
AND t.sesion_id = ?
|
||||
AND t.estado = 'en_servicio'
|
||||
AND t.muestra_espera_at IS NULL
|
||||
AND t.fin_lugar_at IS NULL
|
||||
WHERE l.tipo = 'muestras' AND l.activo = 1
|
||||
ORDER BY l.sort_order"
|
||||
);
|
||||
$stmt->execute([$sesionId]);
|
||||
$estaciones = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
// Cola global de muestras (en_espera_lugar)
|
||||
$s = $pdo->prepare(
|
||||
"SELECT COUNT(*) FROM turnero_turnos
|
||||
WHERE sesion_id = ? AND estado = 'en_espera_lugar' AND muestra_espera_at IS NULL
|
||||
AND lugar_destino_id IN (SELECT id FROM turnero_lugares WHERE tipo='muestras' AND activo=1)"
|
||||
);
|
||||
$s->execute([$sesionId]);
|
||||
$enEspera = (int)$s->fetchColumn();
|
||||
|
||||
// Pacientes entre tomas (espera progresiva)
|
||||
$s2 = $pdo->prepare(
|
||||
"SELECT COUNT(*) FROM turnero_turnos
|
||||
WHERE sesion_id = ? AND muestra_espera_at IS NOT NULL AND fin_lugar_at IS NULL
|
||||
AND lugar_destino_id IN (SELECT id FROM turnero_lugares WHERE tipo='muestras' AND activo=1)"
|
||||
);
|
||||
$s2->execute([$sesionId]);
|
||||
$enEsperaMuestra = (int)$s2->fetchColumn();
|
||||
|
||||
jsonOk([
|
||||
'estaciones' => $estaciones,
|
||||
'en_espera' => $enEspera,
|
||||
'en_espera_muestra' => $enEsperaMuestra,
|
||||
]);
|
||||
Reference in New Issue
Block a user