From e1120309ac6eea564d9d204650ea022590a579fb Mon Sep 17 00:00:00 2001 From: aldoEMatamala Date: Wed, 13 May 2026 12:45:18 -0300 Subject: [PATCH] =?UTF-8?q?fix(REC-236):=20fix=20Receta=20Andes:=20creaci?= =?UTF-8?q?=C3=B3n=20de=20receta=20con=20cantidad=20otro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/recetas/recetasController.ts | 31 ++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/modules/recetas/recetasController.ts b/modules/recetas/recetasController.ts index f6f61df783..d78d91766c 100644 --- a/modules/recetas/recetasController.ts +++ b/modules/recetas/recetasController.ts @@ -609,11 +609,17 @@ export async function crearReceta(dataReceta, req) { receta.idRegistro = dataReceta.idRegistro; const diag = medicamento.diagnostico; receta.diagnostico = (typeof diag === 'string') ? { descripcion: diag } : diag; + + let cantidadSanitizada = Number(medicamento.cantidad); + if (isNaN(cantidadSanitizada)) { + cantidadSanitizada = null; + } + receta.medicamento = { concepto: medicamento.concepto || medicamento.generico, presentacion: medicamento.presentacion?.term || medicamento.presentacion, unidades: medicamento.unidades, - cantidad: medicamento.cantidad, + cantidad: cantidadSanitizada, cantEnvases: medicamento.cantEnvases, dosisDiaria: { dosis: medicamento.dosisDiaria.dosis, @@ -646,7 +652,28 @@ export async function crearReceta(dataReceta, req) { } else { receta.audit(req); } - await receta.save(); + + let lastErr; + let saved = false; + for (let attempt = 0; attempt < 3; attempt++) { + try { + await receta.save(); + saved = true; + break; + } catch (saveErr: any) { + lastErr = saveErr; + // No reintentar si es un error de validación del esquema de Mongoose + if (saveErr.name === 'ValidationError') { + break; + } + // Esperar antes del próximo intento (backoff exponencial: 500ms, 1000ms) + await new Promise(resolve => setTimeout(resolve, 500 * Math.pow(2, attempt))); + } + } + if (!saved) { + throw lastErr; + } + recetas.push(receta); } catch (err) { createLog.error('crearReceta', { dataReceta, receta }, err, req);