Fix: corregir script de migración MariaDB

- Agregar creación de tablas antes de insertar datos
- Corregir sintaxis de comillas en SQL para tabla kv
- Eliminar tablas existentes antes de recrear para evitar errores
- Migración ejecutada exitosamente: 2 usuarios, 3 pacientes, 5 areas, 69 camas, 6 internaciones, etc.
This commit is contained in:
2026-04-24 03:02:28 -03:00
parent 828b56b15c
commit 175e2d285a
+203 -1
View File
@@ -1,7 +1,7 @@
import Database from 'better-sqlite3'; import Database from 'better-sqlite3';
import { fileURLToPath } from 'url'; import { fileURLToPath } from 'url';
import { dirname, join } from 'path'; import { dirname, join } from 'path';
import mariadb from 'mariadb'; import * as mariadb from 'mariadb';
const __dirname = dirname(fileURLToPath(import.meta.url)); const __dirname = dirname(fileURLToPath(import.meta.url));
const SQLITE_PATH = join(__dirname, 'data', 'hospital.db'); const SQLITE_PATH = join(__dirname, 'data', 'hospital.db');
@@ -16,6 +16,186 @@ const mariaPool = mariadb.createPool({
connectionLimit: 5, connectionLimit: 5,
}); });
// Table definitions for MariaDB
const CREATE_TABLES = [
`CREATE TABLE IF NOT EXISTS usuarios (
id VARCHAR(36) PRIMARY KEY,
apellido VARCHAR(255) NOT NULL,
nombre VARCHAR(255) NOT NULL,
dni VARCHAR(20) NOT NULL UNIQUE,
fechaNacimiento VARCHAR(10),
email VARCHAR(255),
rol VARCHAR(50),
matriculaProfesional VARCHAR(100),
passwordHash VARCHAR(255),
areaId VARCHAR(36),
fechaCreacion VARCHAR(10)
)`,
`CREATE TABLE IF NOT EXISTS pacientes (
id VARCHAR(36) PRIMARY KEY,
apellido VARCHAR(255) NOT NULL,
nombre VARCHAR(255) NOT NULL,
dni VARCHAR(20) NOT NULL UNIQUE,
fechaNacimiento VARCHAR(10),
sexo VARCHAR(10),
telefono VARCHAR(50),
email VARCHAR(255),
direccion TEXT,
obraSocial VARCHAR(100),
nacionalidad VARCHAR(100),
medicacionHabitual TEXT,
antecedentes TEXT,
alergias TEXT,
grupoSanguineo VARCHAR(10),
historiaClinica TEXT
)`,
`CREATE TABLE IF NOT EXISTS areas (
id VARCHAR(36) PRIMARY KEY,
nombre VARCHAR(255) NOT NULL UNIQUE
)`,
`CREATE TABLE IF NOT EXISTS camas (
id VARCHAR(36) PRIMARY KEY,
numero VARCHAR(20) NOT NULL,
areaId VARCHAR(36),
tipo VARCHAR(50) DEFAULT 'Estándar',
estado VARCHAR(20) DEFAULT 'Disponible',
pacienteId VARCHAR(36),
internacionId VARCHAR(36)
)`,
`CREATE TABLE IF NOT EXISTS internaciones (
id VARCHAR(36) PRIMARY KEY,
pacienteId VARCHAR(36) NOT NULL,
camaId VARCHAR(36),
areaId VARCHAR(36),
fechaIngresoHospital VARCHAR(10),
fechaIngresoClinica VARCHAR(10),
fechaEgreso VARCHAR(10),
diagnosticoIngreso TEXT,
motivoConsulta TEXT,
enfermedadActual TEXT,
antecedentesEnfermedadActual TEXT,
diagnosticoEgreso TEXT,
medicoIngresante VARCHAR(255),
motivoEgreso VARCHAR(50),
activa TINYINT DEFAULT 1,
apache TEXT,
derivacion TEXT
)`,
`CREATE TABLE IF NOT EXISTS evoluciones (
id VARCHAR(36) PRIMARY KEY,
internacionId VARCHAR(36) NOT NULL,
fecha VARCHAR(10) NOT NULL,
hora VARCHAR(5),
medico VARCHAR(255),
signosVitales TEXT,
examenFisico TEXT,
novedades TEXT,
comentarios TEXT,
pendientes TEXT
)`,
`CREATE TABLE IF NOT EXISTS laboratorios (
id VARCHAR(36) PRIMARY KEY,
pacienteId VARCHAR(36) NOT NULL,
internacionId VARCHAR(36),
fecha VARCHAR(10) NOT NULL,
hora VARCHAR(5),
tipo VARCHAR(50),
resultados TEXT,
observaciones TEXT,
medicoSolicitante VARCHAR(255)
)`,
`CREATE TABLE IF NOT EXISTS acidosbase (
id VARCHAR(36) PRIMARY KEY,
pacienteId VARCHAR(36) NOT NULL,
internacionId VARCHAR(36),
fecha VARCHAR(10) NOT NULL,
hora VARCHAR(5),
ph DECIMAL(4,2),
pco2 DECIMAL(6,2),
po2 DECIMAL(6,2),
hco3 DECIMAL(6,2),
be DECIMAL(6,2),
sato2 DECIMAL(6,2),
lactato DECIMAL(6,2),
interpretacion TEXT,
fio2 DECIMAL(6,2)
)`,
`CREATE TABLE IF NOT EXISTS cultivos (
id VARCHAR(36) PRIMARY KEY,
pacienteId VARCHAR(36) NOT NULL,
internacionId VARCHAR(36),
fechaToma VARCHAR(10),
protocolo VARCHAR(50),
fechaResultado VARCHAR(10),
tipoMuestra VARCHAR(100),
germen TEXT,
sensible TEXT,
resistente TEXT,
estado VARCHAR(50) DEFAULT 'NAF/Pendiente',
observaciones TEXT
)`,
`CREATE TABLE IF NOT EXISTS estudiosComplementarios (
id VARCHAR(36) PRIMARY KEY,
pacienteId VARCHAR(36) NOT NULL,
internacionId VARCHAR(36),
fecha VARCHAR(10),
tipo VARCHAR(100),
resultado TEXT
)`,
`CREATE TABLE IF NOT EXISTS interconsultas (
id VARCHAR(36) PRIMARY KEY,
pacienteId VARCHAR(36) NOT NULL,
internacionId VARCHAR(36) NOT NULL,
fecha VARCHAR(10),
servicioInterconsultado VARCHAR(255),
motivo TEXT,
respuestaInterconsulta TEXT,
respuestaFecha VARCHAR(10)
)`,
`CREATE TABLE IF NOT EXISTS atb (
id VARCHAR(36) PRIMARY KEY,
pacienteId VARCHAR(36) NOT NULL,
internacionId VARCHAR(36) NOT NULL,
antibiotico VARCHAR(255),
fechaInicio VARCHAR(10),
fechaFinalizacion VARCHAR(10)
)`,
`CREATE TABLE IF NOT EXISTS indicaciones (
id VARCHAR(36) PRIMARY KEY,
internacionId VARCHAR(36) NOT NULL,
tipo VARCHAR(50) NOT NULL,
droga VARCHAR(255),
dosis VARCHAR(100),
frecuenciaHoras INT,
via VARCHAR(50),
descripcion TEXT,
tipoPlan VARCHAR(50),
tipoPlan2 VARCHAR(50),
cantidadMl INT,
cantidadMl2 INT,
tiempoHoras INT,
estado VARCHAR(20) DEFAULT 'Activa',
medicoCrea VARCHAR(255),
fechaCrea VARCHAR(10),
tipoInsulina VARCHAR(50),
unidadesDesayuno INT,
unidadesAlmuerzo INT,
unidadesNoche INT,
indicacionNoFco TEXT
)`,
`CREATE TABLE IF NOT EXISTS movimientos_indicaciones (
id VARCHAR(36) PRIMARY KEY,
indicacionId VARCHAR(36) NOT NULL,
internacionId VARCHAR(36) NOT NULL,
tipo VARCHAR(50) NOT NULL,
fecha VARCHAR(10) NOT NULL,
profesional VARCHAR(255) NOT NULL,
indicacionPrevia TEXT,
indicacionNueva TEXT
)`,
'CREATE TABLE IF NOT EXISTS kv (\n `key` VARCHAR(255) PRIMARY KEY,\n value TEXT\n )'
];
async function migrate() { async function migrate() {
console.log('Starting migration from SQLite to MariaDB...'); console.log('Starting migration from SQLite to MariaDB...');
@@ -27,6 +207,28 @@ async function migrate() {
console.log('Connected to MariaDB'); console.log('Connected to MariaDB');
try { try {
// Drop tables in MariaDB first (reverse order due to foreign keys)
const tablesToDrop = [
'kv', 'movimientos_indicaciones', 'indicaciones', 'atb', 'interconsultas',
'estudiosComplementarios', 'cultivos', 'acidosbase', 'laboratorios',
'evoluciones', 'internaciones', 'camas', 'areas', 'pacientes', 'usuarios'
];
console.log('Dropping existing tables...');
for (const table of tablesToDrop) {
try {
await mariaConn.query(`DROP TABLE IF EXISTS ${table}`);
} catch (e) {
// Ignore errors
}
}
// Create tables in MariaDB
console.log('Creating tables in MariaDB...');
for (const sql of CREATE_TABLES) {
await mariaConn.query(sql);
}
console.log('Tables created successfully');
// Migrate each table // Migrate each table
const tables = [ const tables = [
'usuarios', 'pacientes', 'areas', 'camas', 'internaciones', 'usuarios', 'pacientes', 'areas', 'camas', 'internaciones',