- |
+ |
{{#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) {
|