feat(turnero): toma prolongada secuencial + bloqueo muestras/cierre

- ver_formulario_enviado: auto-fill médico (nombres/especialidad/código) en datos_prefilled desde solicitud
- ver_formulario_enviado: canvases de toma progresiva bloqueados secuencialmente — solo el turno activo es firmable, los siguientes aparecen al expirar el countdown
- ver_formulario_enviado: countdown prominente con reloj grande, color dinámico, sonido (Web Audio) y vibración al llegar la hora
- lugar: bloquear cierre del modal durante toma progresiva activa (botón X deshabilitado hasta mp_completar)
- lugar: bloquear Finalizar atención si hay muestras pendientes sin decisión (recibida/rechazada)
- lugar: _syncBtnFinalizar combina consentimientos + muestras para el aviso y estado del botón
- lugar: restricción de usuario a lugar específico via turnero_lugar_id (admin_users) + bloqueo JS en confirmarLugar()
- migrations: turnero_lugar_id en admin_users para restringir bacteriólogos por usuario

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-08 21:16:07 -05:00
co-authored by Claude Sonnet 4.6
parent 0e116359f8
commit f4da864db7
8 changed files with 208 additions and 55 deletions
@@ -0,0 +1,7 @@
-- Agrega número de orden visible a domicilios (formato D-YYYYMMDD-NNN)
ALTER TABLE lab_domicilios
ADD COLUMN numero_orden VARCHAR(20) NULL DEFAULT NULL
COMMENT 'Número de orden del domicilio. Formato D-YYYYMMDD-NNN'
AFTER paciente_id;
CREATE INDEX idx_lab_domicilios_numero_orden ON lab_domicilios (numero_orden);
@@ -0,0 +1,6 @@
-- Restricción de usuario a un lugar específico del turnero.
-- NULL = acceso libre (admin, recepcionista, etc.)
-- Valor = solo puede operar en ese lugar (ej. bacteriólogo asignado a Toma 1)
ALTER TABLE admin_users
ADD COLUMN IF NOT EXISTS turnero_lugar_id INT UNSIGNED DEFAULT NULL
COMMENT 'FK turnero_lugares.id — si != NULL el usuario solo opera en ese lugar';