diff --git a/migrations/20260803_turnero_trazabilidad_y_tv_playlist.sql b/migrations/20260803_turnero_trazabilidad_y_tv_playlist.sql new file mode 100644 index 0000000..d82df12 --- /dev/null +++ b/migrations/20260803_turnero_trazabilidad_y_tv_playlist.sql @@ -0,0 +1,44 @@ +-- 20260803 — Cambios de esquema del turnero aplicados el 2026-08-03 +-- Ya ejecutados en producción; este archivo los deja registrados para +-- reconstruir el esquema desde cero o replicarlo en otro entorno. +-- Todos usan IF NOT EXISTS para ser idempotentes. + +-- 1. Cédula del profesional firmante (antes solo existía para enfermeros +-- vía lab_enfermeras; bacteriólogos y recepcionistas no tenían dónde). +ALTER TABLE admin_users + ADD COLUMN IF NOT EXISTS cedula VARCHAR(30) NULL AFTER cargo; + +-- Poblar desde el username cuando es numérico (así estaban registrados +-- bacteriólogos, recepcionistas y superadmin). +UPDATE admin_users SET cedula = username + WHERE cedula IS NULL AND username REGEXP '^[0-9]{5,15}$' AND is_active = 1; + +-- 2. Quién generó cada consentimiento del turnero. Sin esto el pie +-- "Enviado por" mostraba al usuario que estuviera viendo el documento. +ALTER TABLE turnero_consentimientos + ADD COLUMN IF NOT EXISTS creado_por INT NULL AFTER estado; + +-- 3. En qué turno se recibió una muestra que quedó pendiente de otra visita. +-- El turno original no se modifica; esto solo permite vincularlos. +ALTER TABLE turnero_muestras + ADD COLUMN IF NOT EXISTS recibida_en_turno_id INT UNSIGNED NULL AFTER recibida_at; + +-- 4. Playlist de la Pantalla TV (reemplaza la clave única turnero_tv_video +-- de lab_config por una lista ordenable de videos e imágenes). +CREATE TABLE IF NOT EXISTS turnero_tv_media ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + tipo ENUM('video','imagen') NOT NULL, + url VARCHAR(500) NOT NULL, + orden INT NOT NULL DEFAULT 0, + duracion_segundos INT NOT NULL DEFAULT 8, + activo TINYINT(1) NOT NULL DEFAULT 1, + creado_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + KEY idx_orden (activo, orden) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- Migrar el video único que existía en lab_config como primer ítem. +INSERT INTO turnero_tv_media (tipo, url, orden, duracion_segundos, activo) +SELECT 'video', valor, 0, 8, 1 FROM lab_config + WHERE clave = 'turnero_tv_video' AND valor <> '' + AND NOT EXISTS (SELECT 1 FROM turnero_tv_media);