fix: display global sonaba 3 veces con 3 escritorios de recepción
Cuando recepcion_desk_id es NULL, el mismo turno aparecía en los 3 escritorios de recepción con claves distintas (incluían el nombre del escritorio). Eso generaba 3 entradas nuevas en lastSeenKeys → 3 anuncios. Fix: añadir announcedCalls Set con clave id|llamado_at (sin destino). El sonido/anuncio solo se encola una vez por evento de llamada, independientemente de cuántos escritorios devuelvan el mismo turno. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
4058cfe929
commit
92adee6285
@@ -590,9 +590,10 @@ function showAnnouncement({ codigo, destino, paciente, color }) {
|
||||
}
|
||||
|
||||
/* ── State ── */
|
||||
let lastSeenKeys = new Set();
|
||||
let llamados = [];
|
||||
let _firstLoad = true;
|
||||
let lastSeenKeys = new Set();
|
||||
let announcedCalls = new Set(); // dedup por id+llamado_at, evita anunciar mismo turno desde varios escritorios
|
||||
let llamados = [];
|
||||
let _firstLoad = true;
|
||||
|
||||
function renderSnapshot(snap) {
|
||||
const codEl = document.getElementById('codigo-activo');
|
||||
@@ -614,14 +615,15 @@ function renderSnapshot(snap) {
|
||||
const currentKeys = new Set();
|
||||
let anuncioNuevo = false;
|
||||
allTurnos.forEach(t => {
|
||||
const key = t.codigo + '|' + t.destino + '|' + (t.llamado_at || '');
|
||||
const key = t.codigo + '|' + t.destino + '|' + (t.llamado_at || '');
|
||||
// Clave única por evento de llamada (id+llamado_at), independiente del escritorio
|
||||
const callKey = (t.id || t.codigo) + '|' + (t.llamado_at || '');
|
||||
currentKeys.add(key);
|
||||
if (!lastSeenKeys.has(key)) {
|
||||
const c = t.prioridad_color || '<?= $_labColor ?>';
|
||||
// Solo decir el nombre en voz si el paciente está registrado en lab_pacientes
|
||||
const nomVoz = t.paciente_id ? t.paciente_nombre : null;
|
||||
// En primera carga silenciar todos; el más reciente se anuncia abajo
|
||||
if (!_firstLoad) {
|
||||
if (!_firstLoad && !announcedCalls.has(callKey)) {
|
||||
announcedCalls.add(callKey);
|
||||
queueAnnouncement({ _key: key, codigo: t.codigo, destino: t.destino, paciente: nomVoz, color: c });
|
||||
}
|
||||
llamados.unshift({ codigo: t.codigo, destino: t.destino, paciente: t.paciente_nombre, color: c });
|
||||
@@ -635,10 +637,12 @@ function renderSnapshot(snap) {
|
||||
_firstLoad = false;
|
||||
const sorted = allTurnos.slice().sort((a, b) => new Date(b.llamado_at || 0) - new Date(a.llamado_at || 0));
|
||||
if (sorted.length > 0) {
|
||||
const t = sorted[0];
|
||||
const c = t.prioridad_color || '<?= $_labColor ?>';
|
||||
const key = t.codigo + '|' + t.destino + '|' + (t.llamado_at || '');
|
||||
const nomVoz = t.paciente_id ? t.paciente_nombre : null;
|
||||
const t = sorted[0];
|
||||
const c = t.prioridad_color || '<?= $_labColor ?>';
|
||||
const key = t.codigo + '|' + t.destino + '|' + (t.llamado_at || '');
|
||||
const callKey = (t.id || t.codigo) + '|' + (t.llamado_at || '');
|
||||
const nomVoz = t.paciente_id ? t.paciente_nombre : null;
|
||||
announcedCalls.add(callKey);
|
||||
queueAnnouncement({ _key: key, codigo: t.codigo, destino: t.destino, paciente: nomVoz, color: c });
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user