diff --git a/modules/rup/internacion/cama-estados.controller.ts b/modules/rup/internacion/cama-estados.controller.ts index 5fb0f91293..ab02bddbd8 100644 --- a/modules/rup/internacion/cama-estados.controller.ts +++ b/modules/rup/internacion/cama-estados.controller.ts @@ -207,8 +207,12 @@ export async function snapshotEstados({ fecha, organizacion, ambito, capa }, fil fechaIngreso: '$estado_internacion.fechaIngreso', fechaAtencion: '$estado_internacion.fechaAtencion', prioridad: '$estado_internacion.prioridad', + registros: '$estado_internacion.registros', } }); + aggregate.push({ + $unset: 'estado_internacion' + }); } return await CamaEstados.aggregate(aggregate); diff --git a/modules/rup/internacion/resumen/internacion-resumen.hook.ts b/modules/rup/internacion/resumen/internacion-resumen.hook.ts index f86a8a1339..76e4f670f9 100644 --- a/modules/rup/internacion/resumen/internacion-resumen.hook.ts +++ b/modules/rup/internacion/resumen/internacion-resumen.hook.ts @@ -1,11 +1,9 @@ import { EventCore } from '@andes/event-bus'; import { Types } from 'mongoose'; import { InternacionResumen } from './internacion-resumen.schema'; - EventCore.on('mapa-camas:paciente:undo', async movimiento => { if (movimiento.capa && movimiento.capa === 'estadistica') { return; } - await InternacionResumen.updateOne( { _id: Types.ObjectId(movimiento.idInternacion) }, { @@ -18,10 +16,8 @@ EventCore.on('mapa-camas:paciente:undo', async movimiento => { EventCore.on('mapa-camas:paciente:triage', async ({ prestacion, registro }) => { if (prestacion.trackId && prestacion.solicitud.ambitoOrigen === 'guardia') { - const resumen = await InternacionResumen.findById(prestacion.trackId); - switch (registro.valor.conceptId) { case '394848005': resumen.prioridad = { id: 1, label: 'BAJA', type: 'success' }; @@ -33,11 +29,47 @@ EventCore.on('mapa-camas:paciente:triage', async ({ prestacion, registro }) => { resumen.prioridad = { id: 100, label: 'ALTA', type: 'danger' }; break; } - resumen.fechaAtencion = prestacion.ejecucion.fecha; - await resumen.save(); + } +}); + +EventCore.on('internacion:respirador:registro', async ({ prestacion, registro }) => { + if (prestacion.trackId && prestacion.solicitud.ambitoOrigen === 'internacion') { + const registroDispositivo = prestacion.ejecucion.registros.find(c => c.concepto.conceptId === '266700009'); + await InternacionResumen.updateOne( + { _id: Types.ObjectId(prestacion.trackId) }, + { + $push: { + registros: { + concepto: registro.concepto, + tipo: 'respirador', + valor: { + fechaDesde: new Date(), + fechaHasta: null + } + } + } + } + ); + } +}); +EventCore.on('internacion:respirador:destete', async ({ prestacion, registro }) => { + if (prestacion.trackId && prestacion.solicitud.ambitoOrigen === 'internacion') { + const r = await InternacionResumen.updateOne( + { _id: Types.ObjectId(prestacion.trackId) }, + { + $set: { + 'registros.$[registro].valor.fechaHasta': new Date() + } + }, + { + arrayFilters: [{ + 'registro.valor.fechaHasta': { $eq: null } + }] + } + ); } }); @@ -49,7 +81,7 @@ EventCore.on('rup:internacion:valoracion-inicial', async (prestacion) => { const resumen = await InternacionResumen.findOne(query); if (registrosDiagnostico.registros.length) { - resumen.registros = resumen.registros || []; + (resumen.registros as any) = resumen.registros || []; const registros = registrosDiagnostico.registros.map(r => { return { @@ -74,7 +106,7 @@ EventCore.on('rup:internacion:epicrisis', async (prestacion) => { const resumen = await InternacionResumen.findOne(query); if (registrosDiagnostico.registros.length) { - resumen.registros = resumen.registros || []; + (resumen.registros as any) = resumen.registros || []; const registros = registrosDiagnostico.registros.map(r => { return { diff --git a/modules/rup/internacion/resumen/internacion-resumen.schema.ts b/modules/rup/internacion/resumen/internacion-resumen.schema.ts index 0121ce6bad..4498e34e6a 100644 --- a/modules/rup/internacion/resumen/internacion-resumen.schema.ts +++ b/modules/rup/internacion/resumen/internacion-resumen.schema.ts @@ -23,7 +23,6 @@ export interface IInternacionResumen { fechaAtencion?: Date; tipo_egreso?: string; deletedAt?: Date; - ingreso: { elementoRUP?: ObjectId; registros?: [any]; @@ -33,13 +32,13 @@ export interface IInternacionResumen { label: string; type: string; }; - registros: { - tipo: string; - idPrestacion: Types.ObjectId; + registros: [{ + tipo?: string; + idPrestacion?: Types.ObjectId; concepto: ISnomedConcept; - valor: any; - esDiagnosticoPrincipal: boolean; - }[]; + valor: Object; + esDiagnosticoPrincipal?: boolean; + }]; } export type IInternacionResumenDoc = AndesDoc; @@ -64,7 +63,6 @@ export const InternacionResumenSchema = new Schema({ fechaAtencion: Date, tipo_egreso: { type: String, required: false }, deletedAt: { type: Date, required: false }, - prioridad: new Schema({ id: Number, label: String, @@ -84,7 +82,7 @@ export const InternacionResumenSchema = new Schema({ concepto: SnomedConcept, valor: SchemaTypes.Mixed, esDiagnosticoPrincipal: Boolean - }], + }] }); diff --git a/modules/rup/routes/prestacion.ts b/modules/rup/routes/prestacion.ts index 95cc3cb9c0..99aab4e977 100755 --- a/modules/rup/routes/prestacion.ts +++ b/modules/rup/routes/prestacion.ts @@ -21,6 +21,7 @@ import { IPrestacionDoc } from '../prestaciones.interface'; import { Prestacion } from '../schemas/prestacion'; import { Auth } from './../../../auth/auth.class'; import { parseDate } from './../../../shared/parse'; +import { IInternacionResumen } from '../internacion/resumen/internacion-resumen.schema'; const router = express.Router();