del-austral/migracion_v2.sql
2026-06-30 05:43:56 +00:00

87 lines
3.8 KiB
SQL

-- ============================================================
-- Del Austral — Migración de base de datos (versión 2)
-- ============================================================
-- Este script SUMA tablas y columnas nuevas a una base que ya
-- tiene tus pacientes cargados. No borra ni modifica los datos
-- existentes. Es seguro ejecutarlo aunque ya tengas legajos.
--
-- Cómo aplicarlo:
-- 1. Entrá a phpMyAdmin → tu base de datos.
-- 2. Pestaña "SQL" (no "Importar").
-- 3. Pegá todo este archivo y ejecutá.
-- ============================================================
SET NAMES utf8mb4;
-- ------------------------------------------------------------
-- 1) CITAS (agenda) — independiente de "sesiones"
-- Una cita es algo agendado (puede cumplirse, cancelarse o
-- quedar pendiente). Una sesión es un registro de algo que
-- YA pasó. Antes "proxima_cita" vivía adentro de sesiones;
-- ahora tiene su propia tabla para poder agendar, cancelar
-- y marcar asistencia de forma prolija.
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS citas (
id INT PRIMARY KEY AUTO_INCREMENT,
paciente_id INT NOT NULL,
fecha DATE NOT NULL,
hora TIME NULL,
motivo VARCHAR(255) NULL,
estado ENUM('pendiente', 'atendida', 'cancelada', 'ausente') NOT NULL DEFAULT 'pendiente',
notas TEXT NULL,
sesion_generada_id INT NULL,
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADE,
INDEX idx_citas_fecha (fecha, hora),
INDEX idx_citas_paciente (paciente_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Migrar las "próximas citas" que ya existan dentro de sesiones
-- hacia la nueva tabla citas, para no perder esa información.
INSERT INTO citas (paciente_id, fecha, motivo, estado)
SELECT s.paciente_id, s.proxima_cita, 'Migrada automáticamente desde sesión anterior', 'pendiente'
FROM sesiones s
WHERE s.proxima_cita IS NOT NULL
AND s.proxima_cita >= CURDATE()
AND NOT EXISTS (
SELECT 1 FROM citas c
WHERE c.paciente_id = s.paciente_id AND c.fecha = s.proxima_cita
);
-- ------------------------------------------------------------
-- 2) ARCHIVOS ADJUNTOS (PDF e imágenes ligados a un legajo
-- y, opcionalmente, a una sesión puntual)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS archivos_adjuntos (
id INT PRIMARY KEY AUTO_INCREMENT,
paciente_id INT NOT NULL,
sesion_id INT NULL,
nombre_original VARCHAR(255) NOT NULL,
nombre_archivo VARCHAR(255) NOT NULL,
tipo_mime VARCHAR(100) NOT NULL,
tamanio_bytes INT NOT NULL,
descripcion VARCHAR(255) NULL,
subido_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADE,
FOREIGN KEY (sesion_id) REFERENCES sesiones(id) ON DELETE SET NULL,
INDEX idx_adjuntos_paciente (paciente_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ------------------------------------------------------------
-- 3) PLANTILLAS DE EVOLUCIÓN (texto libre, reutilizable,
-- creadas por el profesional para agilizar las sesiones)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS plantillas_evolucion (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(120) NOT NULL,
contenido TEXT NOT NULL,
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
actualizado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ------------------------------------------------------------
-- 4) Comentario informativo: la columna pacientes.actualizado_en
-- ya existe desde el inicio y se sigue usando para "Editar legajo".
-- No se requieren columnas nuevas en pacientes ni sesiones.
-- ------------------------------------------------------------