-- ============================================
-- IMPLEMENTACIÓN COMPLETA DE FORMATOS MSP
-- Versión "Safe Mode" (Sin permisos de admin requeridos)
-- ============================================

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";

-- ============================================
-- 0. ACTUALIZACIÓN DE TABLA RESULTADO
-- ============================================

-- INSTRUCCIÓN IMPORTANTE: Si las columnas 'tipo_formato' o 'datos_clinicos'
-- ya existen, las siguientes líneas pueden dar error de "Duplicate column".
-- Si eso sucede, continúe con el resto del script, ya que significa que
-- la tabla ya está actualizada.

-- Agregar columnas necesarias si no existen (Ejecutar una por una si falla)
-- ALTER TABLE `resultado` ADD `tipo_formato` VARCHAR(50) DEFAULT 'MSP_002' AFTER `idatencion`;
-- ALTER TABLE `resultado` ADD `datos_clinicos` TEXT AFTER `plan`;

-- Intentamos actualizar datos existentes de forma segura
UPDATE `resultado` SET `tipo_formato` = 'MSP_002' WHERE `tipo_formato` IS NULL OR `tipo_formato` = '';

-- ============================================
-- 1. MSP-001: ADMISIÓN Y ALTA-EGRESO
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_001_admision` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL COMMENT 'Referencia a la atención',
  `tipo_admision` ENUM('PRIMERA_VEZ', 'SUBSECUENTE', 'REFERIDO') DEFAULT 'PRIMERA_VEZ',
  `establecimiento_origen` VARCHAR(200),
  `numero_historia_clinica` VARCHAR(50),
  `grupo_etnico` VARCHAR(100),
  `pueblo_nacionalidad` VARCHAR(100),
  `nivel_instruccion` VARCHAR(100),
  `ocupacion_actual` VARCHAR(150),
  `empresa_trabajo` VARCHAR(200),
  `seguro_salud` VARCHAR(100),
  `tipo_vivienda` VARCHAR(100),
  `servicios_basicos` TEXT,
  `animales_domesticos` VARCHAR(200),
  `fecha_egreso` DATE,
  `hora_egreso` TIME,
  `dias_estancia` INT,
  `condicion_egreso` ENUM('VIVO', 'FALLECIDO', 'REFERIDO'),
  `destino_egreso` VARCHAR(200),
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 2. MSP-003: HOSPITALIZACIÓN (Estructura Corregida)
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_003_hospitalizacion` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL COMMENT 'Referencia a la atención',
  
  -- Datos de Ingreso
  `fecha_ingreso` DATE COMMENT 'Fecha de ingreso a hospitalización',
  `hora_ingreso` TIME COMMENT 'Hora de ingreso',
  `servicio_ingreso` VARCHAR(100) COMMENT 'Servicio donde ingresa',
  `cama` VARCHAR(20) COMMENT 'Número de cama asignada',
  `sala` VARCHAR(50) COMMENT 'Sala de hospitalización',
  
  -- Anamnesis
  `motivo_consulta` TEXT COMMENT 'Motivo de consulta/ingreso',
  `antecedentes_personales` TEXT COMMENT 'Antecedentes patológicos personales',
  `antecedentes_familiares` TEXT COMMENT 'Antecedentes familiares',
  `alergias` VARCHAR(255) COMMENT 'Alergias',
  `enfermedad_actual` TEXT COMMENT 'Enfermedad actual',
  
  -- Revisión por Sistemas
  `rev_sentidos` VARCHAR(50),
  `rev_respiratorio` VARCHAR(50),
  `rev_cardio_vascular` VARCHAR(50),
  `rev_digestivo` VARCHAR(50),
  `rev_genito_urinario` VARCHAR(50),
  `rev_musculo_esqueletico` VARCHAR(50),
  `rev_endocrino` VARCHAR(50),
  `rev_nervioso` VARCHAR(50),
  `rev_hemo_linfatico` VARCHAR(50),
  
  -- Examen Físico Regional
  `ef_cabeza_cuello` TEXT,
  `ef_torax` TEXT,
  `ef_abdomen` TEXT,
  `ef_pelvis` TEXT,
  `ef_extremidades` TEXT,
  
  -- Plan
  `plan_tratamiento` TEXT,
  
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 3. MSP-006: EPICRISIS
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_006_epicrisis` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL,
  `motivo_ingreso_resumen` TEXT,
  `resumen_evolucion` TEXT,
  `examenes_realizados` TEXT,
  `procedimientos_realizados` TEXT,
  `diagnostico_principal` VARCHAR(200),
  `diagnosticos_secundarios` TEXT,
  `complicaciones` TEXT,
  `fecha_egreso` DATE,
  `condicion_egreso` ENUM('MEJORADO', 'CURADO', 'IGUAL', 'AGRAVADO', 'FALLECIDO'),
  `pronostico` VARCHAR(100),
  `tratamiento_egreso` TEXT,
  `recomendaciones_generales` TEXT,
  `citas_control` TEXT,
  `signos_alarma` TEXT,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 4. MSP-007: INTERCONSULTA
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_007_interconsulta` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL,
  `servicio_solicitante` VARCHAR(100) NOT NULL,
  `medico_solicitante` INT NOT NULL,
  `fecha_solicitud` DATE NOT NULL,
  `hora_solicitud` TIME NOT NULL,
  `motivo_interconsulta` TEXT NOT NULL,
  `resumen_clinico` TEXT,
  `pregunta_especifica` TEXT,
  `servicio_respondiente` VARCHAR(100),
  `medico_respondiente` INT,
  `fecha_respuesta` DATE,
  `hora_respuesta` TIME,
  `hallazgos` TEXT,
  `diagnostico_especialista` TEXT,
  `recomendaciones` TEXT,
  `requiere_seguimiento` BOOLEAN DEFAULT FALSE,
  `estado` ENUM('PENDIENTE', 'EN_PROCESO', 'RESPONDIDA', 'CANCELADA') DEFAULT 'PENDIENTE',
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE,
  FOREIGN KEY (`medico_solicitante`) REFERENCES `persona`(`idpersona`),
  FOREIGN KEY (`medico_respondiente`) REFERENCES `persona`(`idpersona`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 5. MSP-008: EMERGENCIA
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_008_emergencia` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL,
  `fecha_ingreso` DATE NOT NULL,
  `hora_ingreso` TIME NOT NULL,
  `medio_llegada` ENUM('AMBULANCIA', 'VEHICULO_PROPIO', 'POLICIA', 'OTRO'),
  `acompañante` VARCHAR(200),
  `clasificacion_triaje` ENUM('ROJO', 'NARANJA', 'AMARILLO', 'VERDE', 'AZUL') NOT NULL,
  `prioridad` INT,
  `motivo_consulta_emergencia` TEXT NOT NULL,
  `sintomas_principales` TEXT,
  `tiempo_evolucion` VARCHAR(100),
  `pa_emergencia` VARCHAR(20),
  `fc_emergencia` VARCHAR(20),
  `fr_emergencia` VARCHAR(20),
  `temp_emergencia` VARCHAR(20),
  `sat_o2_emergencia` VARCHAR(20),
  `glasgow_total` INT,
  `glasgow_ocular` INT,
  `glasgow_verbal` INT,
  `glasgow_motor` INT,
  `diagnostico_emergencia` TEXT,
  `tratamiento_emergencia` TEXT,
  `procedimientos_emergencia` TEXT,
  `destino` ENUM('ALTA', 'HOSPITALIZACION', 'UCI', 'QUIROFANO', 'REFERENCIA', 'FALLECIDO', 'FUGA'),
  `observaciones_destino` TEXT,
  `fecha_salida_emergencia` DATE,
  `hora_salida_emergencia` TIME,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 6. EVOLUCIONES DIARIAS (MSP-005 / Evolución)
-- ============================================

CREATE TABLE IF NOT EXISTS `evolucion_diaria` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL,
  `fecha_evolucion` DATE,
  `hora_evolucion` TIME,
  `nota_evolucion` TEXT, 
  `evolucion_subjetiva` TEXT,
  `evolucion_objetiva` TEXT,
  `evolucion_analisis` TEXT,
  `evolucion_plan` TEXT,
  `cambios_tratamiento` TEXT,
  `signos_vitales_dia` TEXT,
  `ordenes_medicas` TEXT,
  `examenes_solicitados` TEXT,
  `idempleado` INT NOT NULL DEFAULT 1, -- Por defecto 1 si no se especifica
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 7. MSP-020: SIGNOS VITALES
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_020_signos_vitales` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL,
  `fecha_registro` DATE NOT NULL,
  `hora_registro` TIME NOT NULL,
  `presion_arterial` VARCHAR(20),
  `frecuencia_cardiaca` INT,
  `frecuencia_respiratoria` INT,
  `temperatura` DECIMAL(4,2),
  `saturacion_oxigeno` INT,
  `peso` DECIMAL(6,2),
  `talla` DECIMAL(5,2),
  `imc` DECIMAL(5,2),
  `perimetro_cefalico` DECIMAL(5,2),
  `perimetro_abdominal` DECIMAL(5,2),
  `glicemia` INT,
  `observaciones` TEXT,
  `registrado_por` INT,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE,
  FOREIGN KEY (`registrado_por`) REFERENCES `persona`(`idpersona`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 8. MSP-024: CONSENTIMIENTO INFORMADO
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_024_consentimiento` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL,
  `tipo_procedimiento` VARCHAR(200) NOT NULL,
  `descripcion_procedimiento` TEXT,
  `riesgos` TEXT,
  `beneficios` TEXT,
  `alternativas` TEXT,
  `paciente_acepta` BOOLEAN DEFAULT FALSE,
  `representante_legal` VARCHAR(200),
  `parentesco_representante` VARCHAR(100),
  `documento_representante` VARCHAR(20),
  `fecha_consentimiento` DATE NOT NULL,
  `hora_consentimiento` TIME NOT NULL,
  `firma_paciente` VARCHAR(255),
  `firma_medico` VARCHAR(255),
  `firma_testigo1` VARCHAR(255),
  `firma_testigo2` VARCHAR(255),
  `idempleado` INT NOT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE,
  FOREIGN KEY (`idempleado`) REFERENCES `persona`(`idpersona`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 9. MSP-010: LABORATORIO CLÍNICO
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_010_laboratorio` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL,
  `fecha_solicitud` DATE NOT NULL,
  `hora_solicitud` TIME NOT NULL,
  `prioridad` ENUM('RUTINA', 'URGENTE') DEFAULT 'RUTINA',
  `hematologia` TEXT,
  `quimica_sanguinea` TEXT,
  `uroanalisis` TEXT,
  `coprologico` TEXT,
  `otros_examenes` TEXT,
  `diagnostico_presuntivo` TEXT,
  `muestras_tomadas` BOOLEAN DEFAULT FALSE,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 10. MSP-012: IMAGENOLOGÍA
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_012_imagenologia` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL,
  `fecha_solicitud` DATE NOT NULL,
  `tipo_estudio` VARCHAR(100),
  `region_anatomica` VARCHAR(200),
  `motivo_solicitud` TEXT,
  `datos_clinicos_relevantes` TEXT,
  `puede_movilizarse` BOOLEAN DEFAULT TRUE,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- 11. ANEXOS (Prehospitalaria y Ficha Familiar)
-- ============================================

CREATE TABLE IF NOT EXISTS `msp_anexo2_prehospitalaria` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idatencion` INT NOT NULL,
  `fecha_atencion` DATE NOT NULL,
  `hora_despacho` TIME,
  `hora_llegada_escena` TIME,
  `hora_salida_escena` TIME,
  `hora_llegada_hospital` TIME,
  `motivo_llamada` TEXT,
  `escenario` TEXT,
  `evaluacion_primaria` TEXT,
  `signos_vitales_escena` TEXT,
  `procedimientos_realizados` TEXT,
  `medicamentos_administrados` TEXT,
  FOREIGN KEY (`idatencion`) REFERENCES `atencion`(`idatencion`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `msp_anexo1_ficha_familiar` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `idpersona_cabeza` INT NOT NULL COMMENT 'Jefe de familia',
  `direccion` TEXT,
  `referencia` TEXT,
  `tipo_familia` VARCHAR(100),
  `ciclo_vital_familiar` VARCHAR(100),
  `riesgos_biologicos` TEXT,
  `riesgos_socioeconomicos` TEXT,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

COMMIT;
