-- 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);