-- ============================================
-- SCRIPT DE IMPLEMENTACIÓN DE FORMATOS MSP
-- Sistema Médico - Historias Clínicas
-- ============================================

-- 1. Verificar y crear columnas necesarias en tabla resultado
-- ============================================

-- Verificar si las columnas ya existen
SELECT 
    COLUMN_NAME, 
    DATA_TYPE, 
    IS_NULLABLE, 
    COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = DATABASE() 
    AND TABLE_NAME = 'resultado' 
    AND COLUMN_NAME IN ('tipo_formato', 'datos_clinicos');

-- Si no existen, crearlas (descomentar si es necesario):
/*
ALTER TABLE resultado 
ADD COLUMN IF NOT EXISTS tipo_formato VARCHAR(50) DEFAULT 'MSP_002' AFTER idatencion,
ADD COLUMN IF NOT EXISTS datos_clinicos TEXT AFTER plan;
*/

-- 2. Crear tabla para campos específicos de emergencia (MSP-003)
-- ============================================

CREATE TABLE IF NOT EXISTS emergencia_datos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    idatencion INT NOT NULL,
    hora_llegada TIME COMMENT 'Hora de llegada del paciente a emergencia',
    hora_atencion TIME COMMENT 'Hora en que fue atendido',
    clasificacion_triaje ENUM('ROJO', 'NARANJA', 'AMARILLO', 'VERDE', 'AZUL') COMMENT 'Clasificación de riesgo',
    glasgow_ocular INT DEFAULT NULL COMMENT 'Escala de Glasgow - Respuesta ocular (1-4)',
    glasgow_verbal INT DEFAULT NULL COMMENT 'Escala de Glasgow - Respuesta verbal (1-5)',
    glasgow_motor INT DEFAULT NULL COMMENT 'Escala de Glasgow - Respuesta motora (1-6)',
    glasgow_total INT DEFAULT NULL COMMENT 'Escala de Glasgow - Total (3-15)',
    destino_paciente ENUM('ALTA', 'HOSPITALIZACION', 'REFERENCIA', 'FALLECIDO', 'FUGA') COMMENT 'Destino del paciente al salir de emergencia',
    observaciones_emergencia TEXT COMMENT 'Observaciones adicionales de emergencia',
    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,
    INDEX idx_clasificacion (clasificacion_triaje),
    INDEX idx_destino (destino_paciente)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Datos específicos para atenciones de emergencia (MSP-003)';

-- 3. Crear tabla para datos de hospitalización (MSP-004)
-- ============================================

CREATE TABLE IF NOT EXISTS hospitalizacion_datos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    idatencion INT NOT NULL,
    fecha_ingreso DATE COMMENT 'Fecha de ingreso a hospitalización',
    hora_ingreso TIME COMMENT 'Hora de ingreso',
    cama VARCHAR(20) COMMENT 'Número de cama asignada',
    sala VARCHAR(50) COMMENT 'Sala o servicio de hospitalización',
    diagnostico_ingreso TEXT COMMENT 'Diagnóstico de ingreso',
    plan_manejo TEXT COMMENT 'Plan de manejo hospitalario',
    fecha_egreso DATE DEFAULT NULL COMMENT 'Fecha de egreso',
    hora_egreso TIME DEFAULT NULL COMMENT 'Hora de egreso',
    dias_estancia INT DEFAULT NULL COMMENT 'Días de estancia hospitalaria',
    condicion_egreso ENUM('MEJORADO', 'CURADO', 'REFERIDO', 'FALLECIDO', 'ALTA_VOLUNTARIA', 'FUGA') COMMENT 'Condición al egreso',
    epicrisis TEXT COMMENT 'Resumen de epicrisis',
    recomendaciones_alta TEXT COMMENT 'Recomendaciones al alta',
    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,
    INDEX idx_fecha_ingreso (fecha_ingreso),
    INDEX idx_sala (sala),
    INDEX idx_condicion_egreso (condicion_egreso)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Datos de hospitalización (MSP-004)';

-- 4. Crear tabla para evoluciones diarias (hospitalización)
-- ============================================

CREATE TABLE IF NOT EXISTS evolucion_diaria (
    id INT AUTO_INCREMENT PRIMARY KEY,
    idatencion INT NOT NULL COMMENT 'Atención de hospitalización',
    fecha DATE NOT NULL COMMENT 'Fecha de la evolución',
    hora TIME NOT NULL COMMENT 'Hora de la evolución',
    nota_evolucion TEXT NOT NULL COMMENT 'Nota de evolución clínica',
    signos_vitales TEXT COMMENT 'Signos vitales del día',
    ordenes_medicas TEXT COMMENT 'Órdenes médicas del día',
    examenes_solicitados TEXT COMMENT 'Exámenes solicitados',
    idempleado INT NOT NULL COMMENT 'Médico que realiza la evolución',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (idatencion) REFERENCES atencion(idatencion) ON DELETE CASCADE,
    FOREIGN KEY (idempleado) REFERENCES persona(idpersona),
    INDEX idx_fecha (fecha),
    INDEX idx_atencion_fecha (idatencion, fecha)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Evoluciones diarias de pacientes hospitalizados';

-- 5. Crear tabla para interconsultas (MSP-006)
-- ============================================

CREATE TABLE IF NOT EXISTS interconsulta (
    id INT AUTO_INCREMENT PRIMARY KEY,
    idatencion INT NOT NULL COMMENT 'Atención que genera la interconsulta',
    servicio_solicitante VARCHAR(100) NOT NULL COMMENT 'Servicio que solicita',
    servicio_destino VARCHAR(100) NOT NULL COMMENT 'Servicio al que se interconsulta',
    fecha_solicitud DATE NOT NULL COMMENT 'Fecha de solicitud',
    hora_solicitud TIME NOT NULL COMMENT 'Hora de solicitud',
    motivo_interconsulta TEXT NOT NULL COMMENT 'Motivo de la interconsulta',
    resumen_clinico TEXT COMMENT 'Resumen clínico del paciente',
    pregunta_especifica TEXT COMMENT 'Pregunta específica al especialista',
    fecha_respuesta DATE DEFAULT NULL COMMENT 'Fecha de respuesta',
    hora_respuesta TIME DEFAULT NULL COMMENT 'Hora de respuesta',
    respuesta TEXT COMMENT 'Respuesta del especialista',
    recomendaciones TEXT COMMENT 'Recomendaciones del especialista',
    estado ENUM('PENDIENTE', 'RESPONDIDA', 'CANCELADA') DEFAULT 'PENDIENTE',
    idempleado_solicitante INT NOT NULL COMMENT 'Médico que solicita',
    idempleado_respondiente INT DEFAULT NULL COMMENT 'Médico que responde',
    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 (idempleado_solicitante) REFERENCES persona(idpersona),
    FOREIGN KEY (idempleado_respondiente) REFERENCES persona(idpersona),
    INDEX idx_estado (estado),
    INDEX idx_fecha_solicitud (fecha_solicitud),
    INDEX idx_servicio_destino (servicio_destino)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Interconsultas médicas (MSP-006)';

-- 6. Crear tabla para campos adicionales de primera consulta (MSP-001)
-- ============================================

CREATE TABLE IF NOT EXISTS primera_consulta_datos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    idatencion INT NOT NULL,
    antecedentes_familiares TEXT COMMENT 'Antecedentes familiares detallados',
    habitos TEXT COMMENT 'Hábitos y condiciones de vida',
    revision_sistemas TEXT COMMENT 'Revisión por sistemas',
    examen_fisico_completo TEXT COMMENT 'Examen físico completo por sistemas',
    impresion_diagnostica TEXT COMMENT 'Impresión diagnóstica inicial',
    plan_inicial TEXT COMMENT 'Plan de manejo inicial',
    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
COMMENT='Datos adicionales para primera consulta (MSP-001)';

-- 7. Actualizar datos existentes con formato por defecto
-- ============================================

UPDATE resultado 
SET tipo_formato = 'MSP_002' 
WHERE tipo_formato IS NULL OR tipo_formato = '';

-- 8. Crear índices para mejorar rendimiento
-- ============================================

-- Índice en tipo_formato para búsquedas rápidas
CREATE INDEX IF NOT EXISTS idx_tipo_formato ON resultado(tipo_formato);

-- Índices en tablas de relación
CREATE INDEX IF NOT EXISTS idx_emergencia_atencion ON emergencia_datos(idatencion);
CREATE INDEX IF NOT EXISTS idx_hospitalizacion_atencion ON hospitalizacion_datos(idatencion);
CREATE INDEX IF NOT EXISTS idx_interconsulta_atencion ON interconsulta(idatencion);
CREATE INDEX IF NOT EXISTS idx_primera_consulta_atencion ON primera_consulta_datos(idatencion);

-- 9. Verificar estructura final
-- ============================================

SELECT 
    TABLE_NAME,
    TABLE_COMMENT,
    TABLE_ROWS
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
    AND TABLE_NAME IN (
        'resultado',
        'emergencia_datos',
        'hospitalizacion_datos',
        'evolucion_diaria',
        'interconsulta',
        'primera_consulta_datos'
    )
ORDER BY TABLE_NAME;

-- ============================================
-- FIN DEL SCRIPT
-- ============================================

-- NOTAS DE IMPLEMENTACIÓN:
-- 1. Ejecutar este script en phpMyAdmin
-- 2. Verificar que todas las tablas se crearon correctamente
-- 3. Revisar que los índices estén activos
-- 4. Hacer backup de la base de datos antes de ejecutar en producción
