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 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',
|
||||||
|
|||||||
Reference in New Issue
Block a user