64 lines
3.7 KiB
SQL
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';
|