── 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>
21 lines
1.0 KiB
SQL
21 lines
1.0 KiB
SQL
-- 20260823_tv_voz_log.sql
|
|
--
|
|
-- Bitácora de la voz del televisor. Los fallos son intermitentes ("a veces no
|
|
-- suena, a veces entrecortado") y nadie puede depurarlos mirando la pantalla:
|
|
-- hay que registrar cada intento de hablar CUANDO ocurre, con qué voz, si
|
|
-- arrancó, cuánto tardó y cómo terminó. Con esto, la próxima vez que reporten
|
|
-- "ayer a las 10 no sonó" se consulta esta tabla y se ve exactamente qué pasó.
|
|
--
|
|
-- La escribe modules/turnero/api/log_tv.php vía sendBeacon desde la pantalla.
|
|
|
|
CREATE TABLE IF NOT EXISTS turnero_tv_log (
|
|
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
evento VARCHAR(20) NOT NULL COMMENT 'start, end, error, sin_start, mudo',
|
|
detalle VARCHAR(500) NULL COMMENT 'JSON: código del turno, voz, ms, duración',
|
|
ip VARCHAR(45) NULL,
|
|
user_agent VARCHAR(255) NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id),
|
|
KEY idx_evento_fecha (evento, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|