-- ============================================================ -- Migration: 05_terms_acceptance -- Sistema de aceptación de términos y condiciones -- ============================================================ -- Tabla de versiones de términos (cada vez que cambia el documento) CREATE TABLE IF NOT EXISTS `terms_versions` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `version` VARCHAR(50) NOT NULL COMMENT 'Ej: 1.0, 2.0, 2026-03', `documento_url` VARCHAR(500) DEFAULT NULL COMMENT 'URL pública del documento PDF', `documento_nombre` VARCHAR(255) DEFAULT NULL COMMENT 'Nombre original del archivo', `mensaje_aceptacion` TEXT NOT NULL COMMENT 'Mensaje que se envía al usuario para aceptar', `mensaje_rechazo` TEXT NOT NULL COMMENT 'Mensaje que se envía si el usuario rechaza', `forzar_reenvio` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = reenviar a todos los usuarios aunque ya aceptaron', `activa` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1 = es la versión vigente', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_activa` (`activa`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Tabla de aceptaciones de usuarios CREATE TABLE IF NOT EXISTS `terms_acceptance` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `user_id` INT(11) NOT NULL COMMENT 'FK a users.id', `terms_version_id` INT(11) NOT NULL COMMENT 'FK a terms_versions.id', `phone_number` VARCHAR(20) NOT NULL COMMENT 'Copia desnormalizada para auditoría', `estado` ENUM('pendiente','aceptado','rechazado') NOT NULL DEFAULT 'pendiente', `fecha_envio` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Cuando se envió el mensaje de términos', `fecha_respuesta` TIMESTAMP NULL DEFAULT NULL COMMENT 'Cuando el usuario respondió', `ip_referencia` VARCHAR(45) DEFAULT NULL COMMENT 'IP del webhook si disponible', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_user_version` (`user_id`, `terms_version_id`), KEY `idx_estado` (`estado`), KEY `idx_phone` (`phone_number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Columna en users para saber si está esperando respuesta de términos ALTER TABLE `users` ADD COLUMN IF NOT EXISTS `terms_pending` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = se enviaron términos y se espera respuesta' AFTER `welcome_sent_at`, ADD COLUMN IF NOT EXISTS `terms_accepted_at` TIMESTAMP NULL DEFAULT NULL COMMENT 'Última vez que aceptó los términos vigentes' AFTER `terms_pending`, ADD COLUMN IF NOT EXISTS `terms_version_id` INT(11) NULL DEFAULT NULL COMMENT 'Versión de términos que aceptó' AFTER `terms_accepted_at`;