diff --git a/server/server.js b/server/server.js index e4cab96..040fab8 100644 --- a/server/server.js +++ b/server/server.js @@ -208,6 +208,35 @@ try { console.log('Error tabla atb:', e.message); } +try { + const existingIndicaciones = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='indicaciones'").get(); + if (!existingIndicaciones) { + db.exec(` + CREATE TABLE indicaciones ( + id TEXT PRIMARY KEY, + internacionId TEXT NOT NULL, + tipo TEXT NOT NULL, + droga TEXT, + dosis TEXT, + frecuenciaHoras INTEGER, + via TEXT, + descripcion TEXT, + tipoPlan TEXT, + cantidadMl INTEGER, + tiempoHoras INTEGER, + estado TEXT DEFAULT 'Activa', + medicoCrea TEXT, + fechaCrea TEXT, + medicoSuspende TEXT, + fechaSuspension TEXT + ) + `); + console.log('Tabla indicaciones creada'); + } +} catch (e) { + console.log('Error tabla indicaciones:', e.message); +} + const app = express(); app.use(cors()); app.use(express.json({ limit: '50mb' })); @@ -259,6 +288,7 @@ app.get('/api/state', (req, res) => { estudiosComplementarios: queryAll('SELECT * FROM estudiosComplementarios'), interconsultas: queryAll('SELECT * FROM interconsultas').map(ic => ({ ...ic, realizada: !!ic.realizada })), atb: queryAll('SELECT * FROM atb'), + indicaciones: queryAll('SELECT * FROM indicaciones'), vistaActual: 'dashboard', currentInternacionId: null }; @@ -357,6 +387,14 @@ 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, cantidadMl, tiempoHoras, estado, medicoCrea, fechaCrea, medicoSuspende, fechaSuspension) 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.cantidadMl || null, ind.tiempoHoras || null, ind.estado, ind.medicoCrea, ind.fechaCrea, ind.medicoSuspende || null, ind.fechaSuspension || null); + } + } + res.json({ ok: true }); }); diff --git a/src/hooks/useHospitalStore.ts b/src/hooks/useHospitalStore.ts index 6374fc9..d10af0c 100644 --- a/src/hooks/useHospitalStore.ts +++ b/src/hooks/useHospitalStore.ts @@ -11,6 +11,7 @@ import type { EstudioComplementario, Interconsulta, ATB, + Indicacion, Vista } from '@/types'; @@ -39,6 +40,7 @@ interface HospitalState { estudiosComplementarios: EstudioComplementario[]; interconsultas: Interconsulta[]; atb: ATB[]; + indicadores: Indicacion[]; vistaActual: Vista; currentInternacionId?: string | null; } @@ -58,6 +60,7 @@ const defaultState = (): HospitalState => ({ interconsultas: [], atb: [], vistaActual: 'dashboard', + indicadores: [], camas: [] }); diff --git a/src/types/index.ts b/src/types/index.ts index 561af55..29d349e 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -172,4 +172,27 @@ export interface ATB { fechaFinalizacion?: string; } +export type IndicacionTipo = 'Farmacologica' | 'NoFarmacologica' | 'Hidratacion'; +export type ViaAdministracion = 'Oral' | 'EV' | 'IM' | 'SC' | 'PorGGT' | 'PorSNG'; +export type TipoPlanHidratacion = 'SolucionFisiologica09' | 'Dextrosa5' | 'Dextrosa10' | 'Dextrosa25' | 'RingerLactato'; + +export interface Indicacion { + id: string; + internacionId: string; + tipo: IndicacionTipo; + droga?: string; + dosis?: string; + frecuenciaHoras?: number; + via?: ViaAdministracion; + descripcion?: string; + tipoPlan?: TipoPlanHidratacion; + cantidadMl?: number; + tiempoHoras?: number; + estado: 'Activa' | 'Suspendida'; + medicoCrea: string; + fechaCrea: string; + medicoSuspende?: string; + fechaSuspension?: string; +} + export type Vista = 'dashboard' | 'camas' | 'pacientes' | 'internaciones' | 'evoluciones' | 'laboratorios' | 'acidobase' | 'cultivos' | 'historiaclinica' | 'nuevoingreso' | 'editaringreso';