Pantalla TV: dejar de llamar a pacientes que ya se fueron
Reportan que a veces llama a otro paciente. Sí ocurre, y hay 26 turnos sin cerrar en estado "en servicio" desde el 28 de julio, varios de ellos dos y tres en el mismo puesto a la vez. La pantalla pregunta por cada puesto cuál turno está en servicio y se queda con el más reciente. Mientras hay uno real todo va bien, pero al cerrarse ese, el puesto queda con el viejo como único en servicio y sube al panel como si lo estuvieran llamando. Peor: al cargar, la pantalla anunciaba POR VOZ el turno que encontrara arriba, así que cada recarga —y se recarga sola— podía gritar el nombre de alguien que se fue hace días. - Al abrir ya no se anuncia nada: los turnos presentes se dan por vistos y solo se anuncia lo que pase de ahí en adelante. Mostrar el estado actual es correcto; declamarlo como si fuera un llamado nuevo, no. - Un turno vale hasta la medianoche de su día, tanto en recepción como en los puestos. De los 26 atascados, 25 dejan de aparecer; queda el único de hoy. El filtro es una red, no la solución: esos 26 turnos hay que cerrarlos, y mientras existan siguen inflando el "en proceso" del dashboard. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
0ec0edf245
commit
2a87f66bb7
@@ -76,6 +76,8 @@ if (empty($escritoriosRec)) {
|
|||||||
JOIN turnero_prioridades p ON p.id = t.prioridad_id
|
JOIN turnero_prioridades p ON p.id = t.prioridad_id
|
||||||
WHERE t.sesion_id = ?
|
WHERE t.sesion_id = ?
|
||||||
AND t.estado = 'en_recepcion'
|
AND t.estado = 'en_recepcion'
|
||||||
|
-- Misma regla que en los puestos: el turno vale hasta medianoche
|
||||||
|
AND DATE(t.llamado_recepcion_at) = CURDATE()
|
||||||
ORDER BY t.llamado_recepcion_at DESC"
|
ORDER BY t.llamado_recepcion_at DESC"
|
||||||
);
|
);
|
||||||
$stmtRec->execute([$sesionId]);
|
$stmtRec->execute([$sesionId]);
|
||||||
@@ -120,6 +122,10 @@ foreach ($lugares as $lugar) {
|
|||||||
WHERE t.sesion_id = ?
|
WHERE t.sesion_id = ?
|
||||||
AND t.estado = 'en_servicio'
|
AND t.estado = 'en_servicio'
|
||||||
AND t.lugar_destino_id = ?
|
AND t.lugar_destino_id = ?
|
||||||
|
-- Un turno vale hasta la medianoche de su día. Quedan bastantes sin
|
||||||
|
-- cerrar, y sin este filtro el puesto mostraba como \"llamado ahora\"
|
||||||
|
-- a un paciente de días atrás en cuanto se cerraba el turno real.
|
||||||
|
AND DATE(t.llamado_lugar_at) = CURDATE()
|
||||||
ORDER BY t.llamado_lugar_at DESC
|
ORDER BY t.llamado_lugar_at DESC
|
||||||
LIMIT 1"
|
LIMIT 1"
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -841,18 +841,16 @@ function renderSnapshot(snap) {
|
|||||||
});
|
});
|
||||||
lastSeenKeys = currentKeys;
|
lastSeenKeys = currentKeys;
|
||||||
|
|
||||||
if (_firstLoad) {
|
// Al abrir la pantalla NO se anuncia nada por voz. Antes se llamaba al turno
|
||||||
_firstLoad = false;
|
// que estuviera arriba, pero eso no es un llamado nuevo: es el estado en que
|
||||||
const sorted = allTurnos.slice().sort((a, b) => new Date(b.llamado_at || 0) - new Date(a.llamado_at || 0));
|
// se encontró el puesto. Si allí había un turno sin cerrar de horas atrás, el
|
||||||
if (sorted.length > 0) {
|
// televisor gritaba el nombre de un paciente que ya se había ido. Y como esta
|
||||||
const t = sorted[0];
|
// pantalla se recarga sola, cada recarga era una oportunidad de equivocarse.
|
||||||
const c = t.prioridad_color || '<?= $_labColor ?>';
|
//
|
||||||
const key = t.codigo + '|' + t.destino + '|' + (t.llamado_at || '');
|
// El recorrido de arriba ya dio por vistos los turnos presentes —registra la
|
||||||
const nomVoz = t.paciente_id ? t.paciente_nombre : null;
|
// clave sin anunciar mientras _firstLoad siga en pie—, así que aquí solo hay
|
||||||
announcedCalls.add(key);
|
// que levantar la bandera: de la siguiente vuelta en adelante sí se anuncia.
|
||||||
queueAnnouncement({ _key: key, codigo: t.codigo, destino: t.destino, paciente: nomVoz, color: c });
|
if (_firstLoad) _firstLoad = false;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (anuncioNuevo) renderLlamados();
|
if (anuncioNuevo) renderLlamados();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user