feat: implement tracking for medical indication changes with a new database table and management hooks

This commit is contained in:
2026-04-21 22:18:51 -03:00
parent b7d207bf01
commit e1b2e907ca
6 changed files with 216 additions and 69 deletions
+38 -8
View File
@@ -251,33 +251,54 @@ try {
// column may already exist
}
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN fechaModificacion TEXT");
db.exec("ALTER TABLE indicaciones ADD COLUMN fechaModificacion TEXT");
} catch (e) {
// column may already exist
}
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN tipoInsulina TEXT");
db.exec("ALTER TABLE indicaciones ADD COLUMN tipoInsulina TEXT");
} catch (e) {
// column may already exist
}
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN unidadesDesayuno INTEGER");
db.exec("ALTER TABLE indicaciones ADD COLUMN unidadesDesayuno INTEGER");
} catch (e) {
// column may already exist
}
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN unidadesAlmuerzo INTEGER");
db.exec("ALTER TABLE indicaciones ADD COLUMN unidadesAlmuerzo INTEGER");
} catch (e) {
// column may already exist
}
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN unidadesNoche INTEGER");
db.exec("ALTER TABLE indicaciones ADD COLUMN unidadesNoche INTEGER");
} catch (e) {
// column may already exist
}
}
} catch (e) {
console.log('Error tabla recomendaciones:', e.message);
console.log('Error tabla indicaciones:', e.message);
}
try {
const exists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='movimientos_indicaciones'").get();
if (!exists) {
db.exec(`
CREATE TABLE movimientos_indicaciones (
id TEXT PRIMARY KEY,
indicacionId TEXT NOT NULL,
internacionId TEXT NOT NULL,
tipo TEXT NOT NULL,
fecha TEXT NOT NULL,
profesional TEXT NOT NULL,
indicacionPrevia TEXT,
indicacionNueva TEXT
)
`);
console.log('Tabla movimientos_indicaciones creada');
}
} catch (e) {
console.log('Tabla movimientos_indicaciones:', e.message);
}
const app = express();
@@ -332,6 +353,7 @@ app.get('/api/state', (req, res) => {
interconsultas: queryAll('SELECT * FROM interconsultas').map(ic => ({ ...ic, realizada: !!ic.realizada })),
atb: queryAll('SELECT * FROM atb'),
indicaciones: queryAll('SELECT * FROM indicaciones'),
movimientosIndicaciones: queryAll('SELECT * FROM movimientos_indicaciones'),
vistaActual: 'dashboard',
currentInternacionId: null
};
@@ -432,9 +454,17 @@ if (state.laboratorios?.length) {
run('DELETE FROM indicaciones');
if (state.indicaciones?.length) {
const stmt = db.prepare('INSERT INTO indicaciones (id, internacionId, tipo, droga, dosis, frecuenciaHoras, via, descripcion, tipoPlan, tipoPlan2, cantidadMl, cantidadMl2, tiempoHoras, estado, medicoCrea, fechaCrea, medicoModifica, fechaModificacion, medicoSuspende, fechaSuspension) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
const stmt = db.prepare('INSERT INTO recomendaciones (id, internacionId, tipo, droga, dosis, frecuenciaHoras, via, descripcion, tipoPlan, tipoPlan2, cantidadMl, cantidadMl2, tiempoHoras, estado, medicoCrea, fechaCrea, medicoModifica, medicoSuspende, fechaSuspension, tipoInsulina, unidadesDesayuno, unidadesAlmuerzo, unidadesNoche) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
for (const ind of state.indicaciones) {
stmt.run(ind.id, ind.internacionId, ind.tipo, ind.droga || null, ind.dosis || null, ind.frecuenciaHoras || null, ind.via || null, ind.descripcion || null, ind.tipoPlan || null, ind.tipoPlan2 || null, ind.cantidadMl || null, ind.cantidadMl2 || null, ind.tiempoHoras || null, ind.estado, ind.medicoCrea, ind.fechaCrea, ind.medicoModifica || null, ind.fechaModificacion || null, ind.medicoSuspende || null, ind.fechaSuspension || null);
stmt.run(ind.id, ind.internacionId, ind.tipo, ind.droga || null, ind.dosis || null, ind.frecuenciaHoras || null, ind.via || null, ind.descripcion || null, ind.tipoPlan || null, ind.tipoPlan2 || null, ind.cantidadMl || null, ind.cantidadMl2 || null, ind.tiempoHoras || null, ind.estado, ind.medicoCrea, ind.fechaCrea, ind.medicoModifica || null, ind.medicoSuspende || null, ind.fechaSuspension || null, ind.tipoInsulina || null, ind.unidadesDesayuno || null, ind.unidadesAlmuerzo || null, ind.unidadesNoche || null);
}
}
run('DELETE FROM movimientos_indicaciones');
if (state.movimientosIndicaciones?.length) {
const stmt = db.prepare('INSERT INTO movimientos_indicaciones (id, indicacionId, internacionId, tipo, fecha, profesional, indicacionPrevia, indicacionNueva) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
for (const mov of state.movimientosIndicaciones) {
stmt.run(mov.id, mov.indicacionId, mov.internacionId, mov.tipo, mov.fecha, mov.profesional, mov.indicacionPrevia || null, mov.indicacionNueva || null);
}
}