From 5fcfa1f7eb8b3a5635d3bac4f1f368464415a710 Mon Sep 17 00:00:00 2001 From: nicolasarana <90768149+nicolasarana@users.noreply.github.com> Date: Tue, 24 Feb 2026 14:29:35 -0300 Subject: [PATCH 1/2] feat(TOP-176):"Poder configurar vencimiento de solicitudes" --- core/tm/schemas/tipoPrestacion.ts | 5 +++ modules/rup/controllers/prestacion.ts | 44 ++++++++++++++++++++------- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/core/tm/schemas/tipoPrestacion.ts b/core/tm/schemas/tipoPrestacion.ts index 3608009d11..8f81fe2f99 100644 --- a/core/tm/schemas/tipoPrestacion.ts +++ b/core/tm/schemas/tipoPrestacion.ts @@ -18,6 +18,7 @@ export interface ITipoPrestacion extends Document { queries: [Types.ObjectId]; agendaDinamica?: Boolean; teleConsulta?: Boolean; + tiempoVigencia?: number; } export const tipoPrestacionSchema = new Schema({ @@ -53,6 +54,10 @@ export const tipoPrestacionSchema = new Schema({ type: Boolean, required: false, default: false + }, + tiempoVigencia: { + type: Number, + required: false } }); diff --git a/modules/rup/controllers/prestacion.ts b/modules/rup/controllers/prestacion.ts index d68a85bc05..b6e6fd544a 100644 --- a/modules/rup/controllers/prestacion.ts +++ b/modules/rup/controllers/prestacion.ts @@ -8,7 +8,7 @@ import { SnomedCtr } from '../../../core/term/controller/snomed.controller'; import { Prestacion, PrestacionHistorial } from '../../rup/schemas/prestacion'; import { buscarEnHuds } from '../controllers/rup'; import moment = require('moment'); -import { ITipoPrestacion } from 'core/tm/schemas/tipoPrestacion'; +import { ITipoPrestacion, tipoPrestacion } from '../../../core/tm/schemas/tipoPrestacion'; import { IPrestacion, IPrestacionDoc } from '../prestaciones.interface'; import { Estados } from '../internacion/estados.schema'; @@ -200,24 +200,46 @@ export async function saveEnHistorial(prestacion, estado, req) { export async function vencimientoPrestacion(done) { try { - const fechaLimite = moment().subtract(1, 'years').toDate(); - let fechaInicio = moment().subtract(3, 'years').toDate(); - fechaInicio = moment(fechaInicio).subtract(2, 'months').toDate(); + + const tiposPrestacion = await tipoPrestacion.find({}, { conceptId: 1, tiempoVigencia: 1 }); + + const mapaVigencias = {}; + tiposPrestacion.forEach(tp => { + mapaVigencias[tp.conceptId] = tp.tiempoVigencia || 365; + }); + + const fechaInicio = moment().subtract(3, 'years').toDate(); + const query = { - createdAt: { $gte: fechaInicio, $lte: fechaLimite } - , + createdAt: { $gte: fechaInicio }, $or: [ - { 'estadoActual.tipo': 'pendiente', 'solicitud.turno': { $eq: null } }, + { 'estadoActual.tipo': 'pendiente', 'solicitud.turno': null }, { 'estadoActual.tipo': 'auditoria' } ] }; + const prestaciones: any = await Prestacion.find(query); + + const ahora = moment(); + const promises = prestaciones.map((p) => { - p.estados.push({ tipo: 'vencida' }); - Auth.audit(p, userScheduler as any); - p.save(); - }); + + const conceptId = p?.solicitud?.tipoPrestacion?.conceptId; + const vigenciaDias = mapaVigencias[conceptId] || 365; + + const fechaVencimiento = moment(p.createdAt).add(vigenciaDias, 'days'); + + if (fechaVencimiento.isBefore(ahora)) { + p.estados.push({ tipo: 'vencida' }); + Auth.audit(p, userScheduler as any); + return p.save(); + } + + return null; + }).filter(Boolean); + await Promise.all(promises); + } catch (error) { return error; } From 8c4eaabb31a96ad3e88163761f48f2e4cc0ef71a Mon Sep 17 00:00:00 2001 From: nicolasarana <90768149+nicolasarana@users.noreply.github.com> Date: Tue, 10 Mar 2026 15:19:35 -0300 Subject: [PATCH 2/2] =?UTF-8?q?perf(TOP):"Se=20sacan=20librer=C3=ADas=20qu?= =?UTF-8?q?e=20no=20se=20estan=20utilizando=20y=20se=20optimiza=20vencimie?= =?UTF-8?q?ntoPrestacion"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/rup/controllers/prestacion.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/rup/controllers/prestacion.ts b/modules/rup/controllers/prestacion.ts index b6e6fd544a..d0a250d74e 100644 --- a/modules/rup/controllers/prestacion.ts +++ b/modules/rup/controllers/prestacion.ts @@ -1,5 +1,5 @@ import { ObjectId } from '@andes/core'; -import { Mongoose, Types } from 'mongoose'; +import { Types } from 'mongoose'; import { Auth } from '../../../auth/auth.class'; import { userScheduler } from '../../../config.private'; import { AppCache } from '../../../connections'; @@ -8,9 +8,7 @@ import { SnomedCtr } from '../../../core/term/controller/snomed.controller'; import { Prestacion, PrestacionHistorial } from '../../rup/schemas/prestacion'; import { buscarEnHuds } from '../controllers/rup'; import moment = require('moment'); -import { ITipoPrestacion, tipoPrestacion } from '../../../core/tm/schemas/tipoPrestacion'; -import { IPrestacion, IPrestacionDoc } from '../prestaciones.interface'; -import { Estados } from '../internacion/estados.schema'; +import { tipoPrestacion } from '../../../core/tm/schemas/tipoPrestacion'; /**