-- Base de datos y tablas para el proyecto "casos_medicos"
CREATE DATABASE IF NOT EXISTS casos_medicos;
USE casos_medicos;
-- Tabla usuarios
CREATE TABLE IF NOT EXISTS usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100),
usuario VARCHAR(50) UNIQUE,
clave VARCHAR(255),
perfil ENUM('Administrador','Medico','Auxiliar') DEFAULT 'Auxiliar'
);
-- Tablas maestras
CREATE TABLE IF NOT EXISTS afp (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100));
CREATE TABLE IF NOT EXISTS eps (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100));
CREATE TABLE IF NOT EXISTS arl (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100));
CREATE TABLE IF NOT EXISTS empresa (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100));
CREATE TABLE IF NOT EXISTS planta (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100),
id_empresa INT,
FOREIGN KEY (id_empresa) REFERENCES empresa(id)
);
CREATE TABLE IF NOT EXISTS diagnostico (id INT AUTO_INCREMENT PRIMARY KEY, codigo VARCHAR(20), descripcion VARCHAR(255));
CREATE TABLE IF NOT EXISTS estado (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(50));
-- Hoja de vida
CREATE TABLE IF NOT EXISTS hoja_vida (
id INT AUTO_INCREMENT PRIMARY KEY,
cedula VARCHAR(20) UNIQUE,
nombre VARCHAR(150),
foto VARCHAR(255),
fecha_nacimiento DATE,
edad INT,
id_afp INT,
id_eps INT,
id_arl INT,
tipo_contrato VARCHAR(50),
id_empresa INT,
id_planta INT,
regional VARCHAR(100),
centro_trabajo VARCHAR(100),
cargo_inicial VARCHAR(100),
fecha_inicio DATE,
tipo_rehabilitacion VARCHAR(100),
cargo_reubicado VARCHAR(100),
productividad DECIMAL(5,2),
semanas_cotizacion INT,
id_estado INT,
FOREIGN KEY (id_afp) REFERENCES afp(id),
FOREIGN KEY (id_eps) REFERENCES eps(id),
FOREIGN KEY (id_arl) REFERENCES arl(id),
FOREIGN KEY (id_empresa) REFERENCES empresa(id),
FOREIGN KEY (id_planta) REFERENCES planta(id),
FOREIGN KEY (id_estado) REFERENCES estado(id)
);
-- Diagnóstico
CREATE TABLE IF NOT EXISTS diagnostico_paciente (
id INT AUTO_INCREMENT PRIMARY KEY,
cedula VARCHAR(20),
peso DECIMAL(5,2),
id_diagnostico INT,
talla DECIMAL(5,2),
origen VARCHAR(100),
calificacion VARCHAR(100),
fecha DATE,
imc DECIMAL(5,2),
estado VARCHAR(50),
tipo_reintegro VARCHAR(100),
tipo_recomendacion VARCHAR(100),
FOREIGN KEY (id_diagnostico) REFERENCES diagnostico(id)
);
-- Historiales
CREATE TABLE IF NOT EXISTS historial_recomendaciones (
id INT AUTO_INCREMENT PRIMARY KEY,
cedula VARCHAR(20),
fecha_inicio DATE,
fecha_fin DATE,
recomendacion TEXT,
tiempo INT GENERATED ALWAYS AS (DATEDIFF(fecha_fin, fecha_inicio)) STORED
);
CREATE TABLE IF NOT EXISTS historial_incapacidades (
id INT AUTO_INCREMENT PRIMARY KEY,
cedula VARCHAR(20),
fecha_inicio DATE,
fecha_fin DATE,
id_diagnostico INT,
tiempo INT GENERATED ALWAYS AS (DATEDIFF(fecha_fin, fecha_inicio)) STORED,
FOREIGN KEY (id_diagnostico) REFERENCES diagnostico(id)
);
CREATE TABLE IF NOT EXISTS seguimiento (
id INT AUTO_INCREMENT PRIMARY KEY,
cedula VARCHAR(20),
fecha DATE,
observaciones TEXT,
responsable VARCHAR(100)
);
CREATE TABLE IF NOT EXISTS calificaciones (
id INT AUTO_INCREMENT PRIMARY KEY,
cedula VARCHAR(20),
fecha DATE,
entidad VARCHAR(100),
porcentaje DECIMAL(5,2),
origen VARCHAR(100),
observaciones TEXT,
responsable VARCHAR(100)
);
CREATE TABLE IF NOT EXISTS observaciones_mesas (
id INT AUTO_INCREMENT PRIMARY KEY,
cedula VARCHAR(20),
fecha DATE,
observaciones TEXT,
responsable VARCHAR(100),
estado VARCHAR(50)
);
-- Insertar usuario administrador por defecto (clave: admin123 -> hashed)
INSERT INTO usuarios (nombre, usuario, clave, perfil)
SELECT 'Administrador','admin', '$2y$10$m3Yb7bQ8z3vQ1b8m3nVqKeYH1s3hK1b8q8lq9Qz1pQ0b6M1yK6eG', 'Administrador'
WHERE NOT EXISTS(SELECT 1 FROM usuarios WHERE usuario='admin');
-- Nota: la contraseña 'admin123' hasheada con password_hash en PHP resulta en el valor insertado arriba (puede regenerarse).