From 864fa4994c28b2a5f0d09d6252b6cf18a6995ce3 Mon Sep 17 00:00:00 2001 From: mcele Date: Thu, 26 Jun 2025 22:51:08 -0300 Subject: [PATCH] =?UTF-8?q?feat(INT):=20nuevo=20esquema=20internaci=C3=B3n?= =?UTF-8?q?=20estadistica?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internacion/informe-estadistica.schema.ts | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 modules/rup/internacion/informe-estadistica.schema.ts diff --git a/modules/rup/internacion/informe-estadistica.schema.ts b/modules/rup/internacion/informe-estadistica.schema.ts new file mode 100644 index 000000000..0f7fe587d --- /dev/null +++ b/modules/rup/internacion/informe-estadistica.schema.ts @@ -0,0 +1,116 @@ +import { Schema, model } from 'mongoose'; +import { SnomedConcept } from '../schemas/snomed-concept'; +import * as OrganizacionSchema from '../../../core/tm/schemas/nombre'; +import { AuditPlugin } from '@andes/mongoose-plugin-audit'; +import { ProfesionalSubSchema } from '../../../core/tm/schemas/profesional'; +import { ObraSocialSchema } from '../../obraSocial/schemas/obraSocial'; +import { PacienteSubSchema } from '../../../core-v2/mpi'; +import { schema as procQuirurgicosSchema } from '../../../core/tm/schemas/procedimientoQuirurgico'; +import { schema as Cie10 } from '../../../core/term/schemas/cie10'; +import { model as OcupacionSchema } from '../../../core/tm/schemas/ocupacion'; + +const InformeIngresoSchema = new Schema({ + fechaIngreso: { + type: Date, + required: true + }, + origen: { + tipo: String, // Origen hospitalización enumerado? + organizacionOrigen: OrganizacionSchema, // Organización origen - solo para "traslado" + otraOrganizacion: { // solo para "traslado" + type: String, + required: false + }, + }, + ocupacionHabitual: OcupacionSchema, + situacionLaboral: String, + nivelInstruccion: String, + especialidades: [SnomedConcept], + nroCarpeta: String, // evaluar continuidad de este dato + motivo: String, + + profesional: ProfesionalSubSchema, + paseAunidadOrganizativa: String, // verificar si se usa + cobertura: { + tipo: String, // ver que sea enumerado + obraSocial: { // Obra social, ver si corresponde + type: ObraSocialSchema, + required: false + }, + } + +}); + +const InformeEgresoSchema = new Schema({ + fechaEgreso: Date, + nacimientos: [Schema.Types.Mixed], // ver si se usa + procedimientosQuirurgicos: [ + { + procedimiento: { + // revisar no incluye campo nom: que es una concatenacion de nombre y codigo + type: procQuirurgicosSchema, requied: false + }, + fecha: Date, + } + ], + causaExterna: { + producidaPor: null, + lugar: null, + comoSeProdujo: null + }, + diasDeEstada: Number, + tipoEgreso: { + tipo: String, // ver si pasa a un enumerado: alta, traslado, defuncion + OrganizacionDestino: OrganizacionSchema, + otraOrganizacion: { // solo para "traslado" (ex UnidadOrganizativaDestino) + type: String, + required: false + } + }, + diagnosticos: { + principal: Cie10, // diagnosticoPrincipal + secundarios: [Cie10], // otrosDiagnosticos + otrasCircunstancias: Cie10, + diasEstadaOtrasCircunstancias: Number, + diasDePermisoDeSalida: Number + } +}); + +const InternacionEstadoSchema = new Schema({ + tipo: { + type: String, + enum: ['anulada', 'ejecucion', 'validada'], + required: true, + }, +}); + +export const InformeEstadisticaSchema = new Schema({ + organizacion: { + type: OrganizacionSchema, + required: true + }, + unidadOrganizativa: { + type: SnomedConcept, + required: true + }, + paciente: PacienteSubSchema, + informeIngreso: { + type: InformeIngresoSchema, + required: true + }, + informeEgreso: { + type: InformeEgresoSchema, + required: true + }, + periodosCensables: [{ desde: Date, hasta: Date }], + estados: [InternacionEstadoSchema], + estadoActual: InternacionEstadoSchema, + +}); + +InternacionEstadoSchema.plugin(AuditPlugin); +InformeEstadisticaSchema.plugin(AuditPlugin); +InformeIngresoSchema.plugin(AuditPlugin); +InformeEgresoSchema.plugin(AuditPlugin); + +export const InformeEstadistica = model('internacionFormEstadistica', InformeEstadisticaSchema, 'internacionFormEstadistica');