Files
whatsapp/migrations/20260302_lab_09_formularios.sql
T
2026-03-10 18:42:51 -05:00

64 lines
3.7 KiB
SQL

-- ============================================================
-- Migration: 20260302_lab_09_formularios
-- Módulo Formularios: creador drag&drop, envío a clientes, firma
-- ============================================================
-- 1. Plantillas de formularios (diseñadas por admins)
CREATE TABLE IF NOT EXISTS `lab_formularios` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(150) NOT NULL,
`descripcion` TEXT DEFAULT NULL,
`categoria` ENUM(
'consentimiento',
'historia_clinica',
'autorizacion',
'encuesta',
'otro'
) NOT NULL DEFAULT 'otro',
`esquema` LONGTEXT NOT NULL COMMENT 'JSON con el array de campos del formulario',
`permite_firma` TINYINT(1) NOT NULL DEFAULT 1,
`requiere_firma` TINYINT(1) NOT NULL DEFAULT 0,
`version` SMALLINT NOT NULL DEFAULT 1,
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
`creado_por` INT(11) DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_form_activo` (`is_active`),
KEY `idx_form_categ` (`categoria`),
CONSTRAINT `fk_form_admin` FOREIGN KEY (`creado_por`)
REFERENCES `admin_users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Plantillas de formularios creadas por administradores';
-- 2. Envíos (instancias de un formulario enviado a un paciente)
CREATE TABLE IF NOT EXISTS `lab_form_envios` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`formulario_id` INT(11) NOT NULL,
`paciente_id` INT(11) DEFAULT NULL,
`domicilio_id` INT(11) DEFAULT NULL,
`token` CHAR(64) NOT NULL UNIQUE COMMENT 'Token público único para acceso del cliente',
`datos_prefilled` LONGTEXT DEFAULT NULL COMMENT 'JSON con datos pre-llenados por el enfermero',
`datos_cliente` LONGTEXT DEFAULT NULL COMMENT 'JSON con respuestas del cliente',
`firma_svg` LONGTEXT DEFAULT NULL COMMENT 'Firma del cliente como SVG/PNG base64',
`ip_cliente` VARCHAR(45) DEFAULT NULL,
`user_agent` VARCHAR(512) DEFAULT NULL,
`estado` ENUM('pendiente','completado','firmado','expirado') NOT NULL DEFAULT 'pendiente',
`enviado_por` INT(11) DEFAULT NULL COMMENT 'ID admin_users que envió el link',
`enviado_via` ENUM('whatsapp','email','link') DEFAULT 'whatsapp',
`expira_en` DATETIME DEFAULT NULL,
`completado_en` DATETIME DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_fenv_form` (`formulario_id`),
KEY `idx_fenv_paciente` (`paciente_id`),
KEY `idx_fenv_token` (`token`),
KEY `idx_fenv_estado` (`estado`),
CONSTRAINT `fk_fenv_form` FOREIGN KEY (`formulario_id`) REFERENCES `lab_formularios` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_fenv_paciente` FOREIGN KEY (`paciente_id`) REFERENCES `lab_pacientes` (`id`) ON DELETE SET NULL,
CONSTRAINT `fk_fenv_domicilio` FOREIGN KEY (`domicilio_id`) REFERENCES `lab_domicilios` (`id`) ON DELETE SET NULL,
CONSTRAINT `fk_fenv_enviado` FOREIGN KEY (`enviado_por`) REFERENCES `admin_users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Instancias de formularios enviados a pacientes';