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:
@@ -1,7 +1,7 @@
|
||||
import Database from 'better-sqlite3';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { dirname, join } from 'path';
|
||||
import mariadb from 'mariadb';
|
||||
import * as mariadb from 'mariadb';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const SQLITE_PATH = join(__dirname, 'data', 'hospital.db');
|
||||
@@ -16,6 +16,186 @@ const mariaPool = mariadb.createPool({
|
||||
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() {
|
||||
console.log('Starting migration from SQLite to MariaDB...');
|
||||
|
||||
@@ -27,6 +207,28 @@ async function migrate() {
|
||||
console.log('Connected to MariaDB');
|
||||
|
||||
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
|
||||
const tables = [
|
||||
'usuarios', 'pacientes', 'areas', 'camas', 'internaciones',
|
||||
|
||||
Reference in New Issue
Block a user