diff --git a/modules/descargas/informe-rup/elementos-rup/receta-medica.component.ts b/modules/descargas/informe-rup/elementos-rup/receta-medica.component.ts index 58f8d8d324..f4921aee98 100644 --- a/modules/descargas/informe-rup/elementos-rup/receta-medica.component.ts +++ b/modules/descargas/informe-rup/elementos-rup/receta-medica.component.ts @@ -44,10 +44,10 @@ export class RecetaMedicaComponent extends HTMLComponent { Medicamento - Presentación Cantidad Dosis diaria Diagnóstico + Obra Social @@ -61,9 +61,6 @@ export class RecetaMedicaComponent extends HTMLComponent { {{/if}} - {{ unidades }} {{presentacion.term }}(s) - - {{ cantEnvases}} envase(s) de {{ cantidad }} {{presentacion.term }}(s) @@ -78,10 +75,20 @@ export class RecetaMedicaComponent extends HTMLComponent { {{ diagnostico.term }} + + {{#if obraSocial}} + {{obraSocial.nombre}} + {{#if obraSocial.numeroAfiliado}} +
Af. {{obraSocial.numeroAfiliado}} + {{/if}} + {{else}} + Sin obra social + {{/if}} + {{/each}} - + {{#if esReceta}} Esta receta fue creada por emisor inscripto y valido en el Registro de Recetarios Electrónicos del Ministerio de Salud de la Nación - RL-2025-24026558-APN-SSVEIYES#MS @@ -140,8 +147,49 @@ del Ministerio de Salud de la Nación - RL-2025-24026558-APN-SSVEIYES#MS const finalIdReceta = idReceta || this.registro.id; + let obraSocial = this.prestacion.paciente?.obraSocial || null; + if (Array.isArray(obraSocial)) { + obraSocial = obraSocial[0]; + } + let obraSocialObj = null; + if (obraSocial) { + const nombreOS = typeof obraSocial === 'string' ? obraSocial : (obraSocial.nombre || obraSocial.financiador || ''); + if (nombreOS && nombreOS !== 'Sin obra social') { + obraSocialObj = { + nombre: nombreOS, + numeroAfiliado: typeof obraSocial === 'object' ? (obraSocial.numeroAfiliado || '') : '' + }; + } + } + + const registroClone = this.registro.toObject ? this.registro.toObject() : JSON.parse(JSON.stringify(this.registro)); + if (registroClone.valor?.medicamentos) { + registroClone.valor.medicamentos = registroClone.valor.medicamentos.map(med => { + let medOS = null; + if (med.obraSocial && typeof med.obraSocial === 'object') { + const nombreMedOS = med.obraSocial.nombre || med.obraSocial.financiador || ''; + if (nombreMedOS && nombreMedOS !== 'Sin obra social') { + medOS = { + nombre: nombreMedOS, + numeroAfiliado: med.obraSocial.numeroAfiliado || '' + }; + } + } else if (med.obraSocial === undefined && obraSocialObj) { + medOS = { + nombre: obraSocialObj.nombre, + numeroAfiliado: obraSocialObj.numeroAfiliado + }; + } + + return { + ...med, + obraSocial: medOS + }; + }); + } + this.data = { - registro: this.registro, + registro: registroClone, esReceta: this.depth ? 1 : 0, // Si es 0 no muestra el código de barras idReceta: finalIdReceta, estadoReceta, diff --git a/modules/recetas/receta-schema.ts b/modules/recetas/receta-schema.ts index e9d1a9a35c..e8831a57e8 100644 --- a/modules/recetas/receta-schema.ts +++ b/modules/recetas/receta-schema.ts @@ -146,6 +146,10 @@ const medicamentoSubschema = new mongoose.Schema({ numero: { type: Number, required: false + }, + obraSocial: { + type: mongoose.SchemaTypes.Mixed, + required: false } }, { toJSON: { virtuals: true }, diff --git a/modules/recetas/recetasController.ts b/modules/recetas/recetasController.ts index a24851309a..21f3e6bdae 100644 --- a/modules/recetas/recetasController.ts +++ b/modules/recetas/recetasController.ts @@ -688,7 +688,7 @@ export async function create(req) { pacienteAndes.fechaNacimiento = fechaNacimientoReceta; await pacienteAndes.save(); } - pacienteAndes.obraSocial = (!pacienteRecetar.obraSocial) ? null : + pacienteAndes.obraSocial = (!pacienteRecetar.obraSocial || pacienteRecetar.obraSocial.nombre === 'Sin obra social') ? null : { origen: pacienteRecetar.obraSocial.otraOS ? 'RECETAR' : 'PUCO', nombre: pacienteRecetar.obraSocial.nombre, @@ -740,6 +740,8 @@ export async function crearReceta(dataReceta, req) { const diag = medicamento.diagnostico; receta.diagnostico = (typeof diag === 'string') ? { descripcion: diag } : diag; const esMagistral = !!medicamento.esMagistral; + const obraSocialAux = (medicamento.obraSocial !== undefined) ? medicamento.obraSocial : (dataReceta.paciente?.obraSocial || null); + const obraSocialFinal = (obraSocialAux && obraSocialAux.nombre !== 'Sin obra social') ? obraSocialAux : null; receta.medicamento = { concepto: esMagistral ? null : (medicamento.concepto || medicamento.generico), presentacion: medicamento.presentacion?.term || medicamento.presentacion, @@ -760,11 +762,14 @@ export async function crearReceta(dataReceta, req) { tipoReceta: medicamento.tipoReceta?.id || medicamento.tipoReceta || 'simple', serie: medicamento.serie, numero: medicamento.numero, + obraSocial: obraSocialFinal }; receta.estados = i < 1 ? [{ tipo: 'vigente' }] : [{ tipo: 'pendiente' }]; receta.estadosDispensa = [{ tipo: 'sin-dispensa', fecha: moment().toDate() }]; - receta.paciente = dataReceta.paciente; - receta.paciente.obraSocial = dataReceta.paciente.obraSocial; + + const pacienteClone = dataReceta.paciente.toObject ? dataReceta.paciente.toObject() : JSON.parse(JSON.stringify(dataReceta.paciente)); + receta.paciente = pacienteClone; + receta.paciente.obraSocial = null; receta.paciente.id = dataReceta.paciente.id || dataReceta.paciente._id; receta.profesional = dataReceta.profesional; receta.profesional._id = dataReceta.profesional.id || dataReceta.profesional._id; // revisar como se generan ids en ambos casos diff --git a/modules/rup/controllers/rup.events.ts b/modules/rup/controllers/rup.events.ts index 42ff8bc3be..5adf2debf5 100644 --- a/modules/rup/controllers/rup.events.ts +++ b/modules/rup/controllers/rup.events.ts @@ -56,10 +56,16 @@ EventCore.on('prestacion:receta:create', async ({ prestacion, registro }) => { diagnostico: null, }; dataRecetaBase.paciente.cuil = pacienteCUIL; + if (dataRecetaBase.paciente?.obraSocial?.nombre === 'Sin obra social') { + dataRecetaBase.paciente.obraSocial = null; + } for (const medicamento of registro.valor.medicamentos) { try { const esMagistral = !!medicamento?.esMagistral; + if (medicamento.obraSocial?.nombre === 'Sin obra social') { + medicamento.obraSocial = null; + } const conceptId = medicamento?.concepto?.conceptId || medicamento?.generico?.conceptId; if (!conceptId && !esMagistral) {