Files
whatsapp/database/05_terms_acceptance.sql
T
2026-03-10 18:42:51 -05:00

50 lines
3.1 KiB
SQL

-- ============================================================
-- 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`;