From 4dec5c3e275851b52a0444f54bddd9c346565b8c Mon Sep 17 00:00:00 2001
From: nicolasarana <90768149+nicolasarana@users.noreply.github.com>
Date: Thu, 28 May 2026 15:14:55 -0300
Subject: [PATCH 1/2] RUP - Agregar la posibilidad de cargar plantillas a los
hallazgos
---
.../plantillas-rup.component.html | 3 +-
.../plantillas-rup.component.ts | 70 ++++++++++++++-----
.../prestacionEjecucion.component.ts | 4 +-
.../elementoDeRegistro.component.ts | 2 +-
.../rupers/seccionado/seccion.component.ts | 4 +-
5 files changed, 59 insertions(+), 24 deletions(-)
diff --git a/src/app/apps/rup/plantillas-rup/plantillas-rup.component.html b/src/app/apps/rup/plantillas-rup/plantillas-rup.component.html
index 3546491845..fedfac7208 100644
--- a/src/app/apps/rup/plantillas-rup/plantillas-rup.component.html
+++ b/src/app/apps/rup/plantillas-rup/plantillas-rup.component.html
@@ -64,8 +64,7 @@
-
+
diff --git a/src/app/apps/rup/plantillas-rup/plantillas-rup.component.ts b/src/app/apps/rup/plantillas-rup/plantillas-rup.component.ts
index fae88a13be..520a341cbc 100644
--- a/src/app/apps/rup/plantillas-rup/plantillas-rup.component.ts
+++ b/src/app/apps/rup/plantillas-rup/plantillas-rup.component.ts
@@ -1,11 +1,11 @@
-import { Component, OnInit, ViewEncapsulation } from '@angular/core';
+import { Component, OnInit, ViewEncapsulation, OnDestroy } from '@angular/core';
import { Plex } from '@andes/plex';
import { PlantillasService } from '../../../modules/rup/services/plantillas.service';
import { ISnomedConcept } from '../../../modules/rup/interfaces/snomed-concept.interface';
import { SnomedService } from '../../mitos';
import { Unsubscribe } from '@andes/shared';
-import { BehaviorSubject, Observable } from 'rxjs';
-import { take } from 'rxjs/operators';
+import { BehaviorSubject, Observable, Subject } from 'rxjs';
+import { take, takeUntil } from 'rxjs/operators';
import { PrestacionesService } from '../../../../app/modules/rup/services/prestaciones.service';
import { Auth } from '@andes/auth';
import { Router } from '@angular/router';
@@ -19,7 +19,7 @@ import { ElementosRUPService } from 'src/app/modules/rup/services/elementosRUP.s
],
encapsulation: ViewEncapsulation.None
})
-export class PlantillasRUPComponent implements OnInit {
+export class PlantillasRUPComponent implements OnInit, OnDestroy {
searchTerm: string;
busqueda: string;
@@ -36,6 +36,7 @@ export class PlantillasRUPComponent implements OnInit {
mostrarDescendientes = false;
public puedeCargarEditarPlantilla = false;
+ private destroy$ = new Subject();
addItems = [
{
label: 'Plantilla',
@@ -80,6 +81,11 @@ export class PlantillasRUPComponent implements OnInit {
}]);
}
+ ngOnDestroy() {
+ this.destroy$.next();
+ this.destroy$.complete();
+ }
+
redirect(pagina: string) {
this.router.navigate(['./' + pagina]);
return false;
@@ -125,31 +131,60 @@ export class PlantillasRUPComponent implements OnInit {
@Unsubscribe()
buscarProcedimiento() {
+ // Validar que no esté vacío
+ if (!this.searchTerm || !this.searchTerm.trim()) {
+ this.procedimientos = [];
+ this.loading = false;
+ return;
+ }
+ // Evitar búsquedas con patrón inválido
if (this.searchTerm.match(/<<\s{1,}/)) {
this.searchTerm = '';
+ this.procedimientos = [];
+ this.loading = false;
return;
}
- const search = this.searchTerm.trim();
+ // Evitar búsquedas concurrentes
+ if (this.loading) {
+ return;
+ }
- const query = {
- search: this.searchTerm,
- semanticTag: ['procedimiento', 'elemento de registro', 'régimen/tratamiento', 'situación']
+ this.loading = true;
+ const query = {
+ search: this.searchTerm.trim(),
+ semanticTag: ['procedimiento', 'elemento de registro', 'régimen/tratamiento', 'situación', 'hallazgo', 'evento']
};
-
- this.snomedService.get(query).subscribe((resultado: ISnomedConcept[]) => {
- this.procedimientos = resultado;
- });
+ this.snomedService.get(query)
+ .pipe(takeUntil(this.destroy$))
+ .subscribe(
+ (resultado: ISnomedConcept[]) => {
+ this.procedimientos = resultado;
+ this.loading = false;
+
+ if (!resultado || resultado.length === 0) {
+ this.plex.info(
+ 'warning',
+ `No se encontraron datos para: "${this.searchTerm.trim()}"`,
+ 'Atención'
+ );
+ }
+ },
+ (error) => {
+ this.loading = false;
+ this.procedimientos = [];
+ this.plex.toast('danger', 'Error al buscar procedimientos', 'Error');
+ }
+ );
}
- cargarPlantillas(procedimiento) {
-
+ cargarPlantillas(procedimiento: any) {
this.procedimiento = procedimiento;
- const elementoRUP = this.elementoRupService.buscarElemento(this.procedimiento);
+ const elementoRUP = this.elementoRupService.buscarElemento(procedimiento);
if (elementoRUP?.params?.habilitarPlantilla === false) {// null o true no ingresa
this.addItems = [
@@ -207,7 +242,7 @@ export class PlantillasRUPComponent implements OnInit {
return expression.indexOf('<<') === 0;
}
- verDescendientes(procedimiento) {
+ verDescendientes(procedimiento: ISnomedConcept) {
this.snomedService.getQuery({ expression: `<<${procedimiento.conceptId}`, semanticTag: ['procedimiento'] }).subscribe(result => {
this.descendientes = result;
@@ -246,7 +281,7 @@ export class PlantillasRUPComponent implements OnInit {
}
}
- agregarPlantilla(procedimiento, esLink) {
+ agregarPlantilla(procedimiento: ISnomedConcept | null, esLink: boolean) {
const miOrganizacion = this.auth.organizacion;
const plantilla = {
conceptos: [procedimiento],
@@ -270,4 +305,5 @@ export class PlantillasRUPComponent implements OnInit {
canDeletePlantilla(): boolean {
return this.procedimiento?.conceptId !== '33633005';
}
+
}
diff --git a/src/app/modules/rup/components/ejecucion/prestacionEjecucion.component.ts b/src/app/modules/rup/components/ejecucion/prestacionEjecucion.component.ts
index a9380d96ef..8a5eb05110 100644
--- a/src/app/modules/rup/components/ejecucion/prestacionEjecucion.component.ts
+++ b/src/app/modules/rup/components/ejecucion/prestacionEjecucion.component.ts
@@ -525,7 +525,7 @@ export class PrestacionEjecucionComponent implements OnInit, OnDestroy {
const elementoRUP = this.elementosRUPService.buscarElemento(snomedConcept, esSolicitud);
this.elementosRUPService.coleccionRetsetId[String(snomedConcept.conceptId)] = elementoRUP.params;
- if (snomedConcept.semanticTag === 'procedimiento' || snomedConcept.semanticTag === 'elemento de registro' || snomedConcept.semanticTag === 'régimen/tratamiento' || snomedConcept.semanticTag === 'situación') {
+ if (snomedConcept.semanticTag === 'procedimiento' || snomedConcept.semanticTag === 'elemento de registro' || snomedConcept.semanticTag === 'régimen/tratamiento' || snomedConcept.semanticTag === 'situación' || snomedConcept.semanticTag === 'hallazgo' || snomedConcept.semanticTag === 'evento') {
this.ps.get(snomedConcept.conceptId, esSolicitud).subscribe(() => { });
}
@@ -923,7 +923,7 @@ export class PrestacionEjecucionComponent implements OnInit, OnDestroy {
checkPlantilla(registro) {
- const checkSemtag = registro.concepto.semanticTag === 'procedimiento' || registro.concepto.semanticTag === 'elemento de registro' || registro.concepto.semanticTag === 'régimen/tratamiento' || registro.concepto.semanticTag === 'situación';
+ const checkSemtag = registro.concepto.semanticTag === 'procedimiento' || registro.concepto.semanticTag === 'elemento de registro' || registro.concepto.semanticTag === 'régimen/tratamiento' || registro.concepto.semanticTag === 'situación' || registro.concepto.semanticTag === 'hallazgo' || registro.concepto.semanticTag === 'evento';
return checkSemtag;
}
diff --git a/src/app/modules/rup/components/elementos/deprecated/elementoDeRegistro.component.ts b/src/app/modules/rup/components/elementos/deprecated/elementoDeRegistro.component.ts
index 465f8b53c2..24a2939e09 100644
--- a/src/app/modules/rup/components/elementos/deprecated/elementoDeRegistro.component.ts
+++ b/src/app/modules/rup/components/elementos/deprecated/elementoDeRegistro.component.ts
@@ -166,7 +166,7 @@ export class ElementoDeRegistroComponent extends RUPComponent implements OnInit,
nuevoRegistro.relacionadoCon = relaciones;
}
- if (snomedConcept.semanticTag === 'procedimiento' || snomedConcept.semanticTag === 'elemento de registro' || snomedConcept.semanticTag === 'régimen/tratamiento' || snomedConcept.semanticTag === 'situación') {
+ if (snomedConcept.semanticTag === 'procedimiento' || snomedConcept.semanticTag === 'elemento de registro' || snomedConcept.semanticTag === 'régimen/tratamiento' || snomedConcept.semanticTag === 'situación' || snomedConcept.semanticTag === 'hallazgo' || snomedConcept.semanticTag === 'evento') {
this.plantillasService.get(snomedConcept.conceptId, esSolicitud).subscribe(() => { });
}
this.registro.registros.push(nuevoRegistro);
diff --git a/src/app/modules/rup/components/elementos/rupers/seccionado/seccion.component.ts b/src/app/modules/rup/components/elementos/rupers/seccionado/seccion.component.ts
index 673575f7d1..53b0cbb084 100644
--- a/src/app/modules/rup/components/elementos/rupers/seccionado/seccion.component.ts
+++ b/src/app/modules/rup/components/elementos/rupers/seccionado/seccion.component.ts
@@ -211,7 +211,7 @@ export class SeccionComponent extends RUPComponent implements OnInit, OnDestroy,
nuevoRegistro.relacionadoCon = relaciones;
}
- if (snomedConcept.semanticTag === 'procedimiento' || snomedConcept.semanticTag === 'elemento de registro' || snomedConcept.semanticTag === 'régimen/tratamiento' || snomedConcept.semanticTag === 'situación') {
+ if (snomedConcept.semanticTag === 'procedimiento' || snomedConcept.semanticTag === 'elemento de registro' || snomedConcept.semanticTag === 'régimen/tratamiento' || snomedConcept.semanticTag === 'situación' || snomedConcept.semanticTag === 'hallazgo' || snomedConcept.semanticTag === 'evento') {
this.plantillasService.get(snomedConcept.conceptId, esSolicitud).subscribe(() => { });
}
this.registro.registros.push(nuevoRegistro);
@@ -390,7 +390,7 @@ export class SeccionComponent extends RUPComponent implements OnInit, OnDestroy,
}
checkPlantilla(registro) {
- const checkSemtag = registro.concepto.semanticTag === 'procedimiento' || registro.concepto.semanticTag === 'elemento de registro' || registro.concepto.semanticTag === 'régimen/tratamiento';
+ const checkSemtag = registro.concepto.semanticTag === 'procedimiento' || registro.concepto.semanticTag === 'elemento de registro' || registro.concepto.semanticTag === 'régimen/tratamiento' || registro.concepto.semanticTag === 'situación' || registro.concepto.semanticTag === 'hallazgo' || registro.concepto.semanticTag === 'evento';
return checkSemtag;
}
}
From d55499efb01cd67a0278be9929431a6053caea4a Mon Sep 17 00:00:00 2001
From: nicolasarana <90768149+nicolasarana@users.noreply.github.com>
Date: Fri, 29 May 2026 12:18:21 -0300
Subject: [PATCH 2/2] fix - Mejora en manejo de condiciones para conceptos de
plantillas
---
.../apps/rup/plantillas-rup/plantillas-rup.component.html | 2 +-
src/app/apps/rup/plantillas-rup/plantillas-rup.component.ts | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/app/apps/rup/plantillas-rup/plantillas-rup.component.html b/src/app/apps/rup/plantillas-rup/plantillas-rup.component.html
index fedfac7208..f7b3dbbd8a 100644
--- a/src/app/apps/rup/plantillas-rup/plantillas-rup.component.html
+++ b/src/app/apps/rup/plantillas-rup/plantillas-rup.component.html
@@ -64,7 +64,7 @@
-
+
diff --git a/src/app/apps/rup/plantillas-rup/plantillas-rup.component.ts b/src/app/apps/rup/plantillas-rup/plantillas-rup.component.ts
index 520a341cbc..7f31a3de20 100644
--- a/src/app/apps/rup/plantillas-rup/plantillas-rup.component.ts
+++ b/src/app/apps/rup/plantillas-rup/plantillas-rup.component.ts
@@ -306,4 +306,9 @@ export class PlantillasRUPComponent implements OnInit, OnDestroy {
return this.procedimiento?.conceptId !== '33633005';
}
+ get permiteSolicitud(): boolean {
+ const tagsPermitidos = ['procedimiento', 'régimen/tratamiento', 'situación', 'hallazgo', 'evento'];
+ return tagsPermitidos.includes(this.procedimiento?.semanticTag);
+ }
+
}