Lizandro GuarnizoandClaude Fable 5 a28ae82402 Voz del televisor y demora de RIPS: análisis de fondo de los dos "a veces"
── Voz que a veces no suena o se corta ──

Dos causas nuevas, ambas intermitentes por naturaleza:

1. Defecto conocido de Chrome: si nada referencia la SpeechSynthesisUtterance,
   el recolector de basura puede llevársela A MITAD DE FRASE. El audio se corta
   en seco y 'end' no llega. Depende de cuándo pase el recolector, así que
   nunca se reproduce a voluntad. Cada locución queda anclada en un Set hasta
   terminar (_uttAncladas).

2. Tras un cancel(), en Windows y ChromeOS el motor puede quedar en pausa:
   speak() encola y jamás suena, sin error alguno. resume() antes de cada
   speak() lo destranca, y sobre un motor sano no hace nada.

Y porque lo intermitente no se depura mirando la pantalla, queda una bitácora:
cada intento de hablar registra voz elegida, si es local, cuánto tardó en
arrancar y cómo terminó — en localStorage.tvVozLog (últimos 200) y en la tabla
turnero_tv_log vía sendBeacon (endpoint log_tv.php, insert-only, eventos de
lista cerrada). La próxima vez que reporten "ayer a las 10 no sonó", se
consulta la tabla y se ve qué pasó exactamente.

── Servicios de RIPS que "se demoran" ──

Medido en datos, no en hipótesis: la facturación en el sistema del laboratorio
ocurre MIENTRAS la recepcionista atiende. La consulta a RIPS se hacía UNA sola
vez, al vincular al paciente — y en 7 días, 547 de 549 registros llegaron
DESPUÉS de esa única consulta. Nadie volvía a preguntar: eso es lo que se
percibía como lentitud de RIPS. (El scheduler en sí tarda segundos; de paso:
el reloj del equipo legado está ~1 hora atrasado, visible en hora_recepcion.)

Ahora la ficha sondea cada 10 s hasta 10 minutos y se detiene al encontrar,
al limpiar la ficha o al agotar los intentos. Si la recepcionista ya marcó
exámenes a mano, no se le pisan: se le ofrece el banner en vez de autocargar.

── Pruebas (22, todas contra el código real extraído de las vistas) ──

  scripts/test_tv_voz.js        9  anclaje GC, resume(), bloqueo, voz lenta, bitácora
  scripts/test_rips_sondeo.js   7  reintentos, paradas, tope, sin duplicar
  scripts/test_rips_ventana.php 6  ventana SQL en tabla TEMPORARY, sin tocar datos

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-23 11:11:40 -05:00
up
2026-01-24 00:55:33 -05:00
up
2026-01-27 14:51:41 -05:00
up
2026-01-28 03:09:52 -05:00
up
2026-03-10 18:42:51 -05:00
up
2026-01-27 23:56:49 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-04-16 22:23:33 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
2026-01-12 15:54:04 -05:00
2026-01-12 15:54:04 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-03-10 18:42:51 -05:00
up
2026-02-03 21:30:55 -05:00
2026-01-12 15:54:04 -05:00
up
2026-02-20 10:01:44 -05:00
up
2026-01-27 23:56:49 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
2026-01-21 08:28:54 -05:00
2026-06-13 08:22:25 -05:00
up
2026-01-28 02:23:36 -05:00
2026-01-21 08:28:54 -05:00
2026-01-13 00:48:57 -05:00
up
2026-02-03 22:21:35 -05:00
2026-05-11 12:21:56 -05:00
up
2026-03-10 18:42:51 -05:00
up
2026-03-10 18:42:51 -05:00
up
2026-03-10 18:42:51 -05:00
2026-01-21 08:28:54 -05:00
2026-01-12 15:54:04 -05:00
up
2026-02-03 21:30:55 -05:00
w
2025-11-18 20:26:36 -05:00
up
2026-01-27 23:56:49 -05:00
up
2026-01-28 02:23:36 -05:00
up
2026-02-03 21:30:55 -05:00
up
2026-02-03 21:30:55 -05:00
up
2026-06-09 16:44:39 -05:00
2026-01-12 16:13:41 -05:00
2026-01-12 16:13:41 -05:00
2026-01-12 16:13:41 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-04-16 22:23:33 -05:00
2026-01-13 00:48:57 -05:00
up
2026-02-21 07:37:36 -05:00
2026-01-12 16:13:41 -05:00
up
2026-03-16 20:46:54 -05:00
up
2026-02-03 22:21:35 -05:00
2026-02-03 22:12:12 -05:00
up
2026-01-28 02:23:36 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-27 23:56:49 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-02-03 21:30:55 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-28 03:33:35 -05:00
up
2026-01-27 23:56:49 -05:00
up
2026-04-16 23:45:58 -05:00
up
2026-04-16 23:45:58 -05:00
up
2026-04-16 23:45:58 -05:00
up
2026-04-16 23:45:58 -05:00
up
2026-04-16 23:45:58 -05:00
up
2026-04-16 23:45:58 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-02-03 21:30:55 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-04-18 23:41:01 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
w
2025-11-18 20:26:36 -05:00
2026-04-19 21:14:45 -05:00
up
2026-04-18 23:41:01 -05:00
p
2026-05-27 10:30:47 -05:00
up
2026-04-21 21:13:35 -05:00
up
2026-06-16 16:35:12 -05:00
up
2026-06-16 12:06:26 -05:00
up
2026-06-16 13:04:59 -05:00
2026-02-03 22:21:40 -05:00
up
2026-03-10 18:42:51 -05:00
p
2026-05-27 10:30:47 -05:00
up
2026-02-03 21:30:55 -05:00
2026-01-21 08:28:54 -05:00
2026-01-12 22:58:19 -05:00
2026-01-13 01:48:33 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-27 23:56:49 -05:00
2026-01-21 08:28:54 -05:00
up
2026-02-21 07:37:36 -05:00
up
2026-02-21 07:37:36 -05:00
up
2026-02-21 07:37:36 -05:00
up
2026-03-10 18:42:51 -05:00
2026-01-21 08:28:54 -05:00
up
2026-01-21 10:38:01 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-01-12 11:06:43 -05:00
up
2026-03-10 18:42:51 -05:00
up
2026-01-20 22:13:02 -05:00
up
2026-01-27 23:56:49 -05:00
S
Description
No description provided
6 MiB
Languages
PHP 84.8%
JavaScript 6.4%
HTML 5.9%
Shell 1.4%
CSS 0.9%
Other 0.5%