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..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,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..7f31a3de20 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,10 @@ export class PlantillasRUPComponent implements OnInit { canDeletePlantilla(): boolean { return this.procedimiento?.conceptId !== '33633005'; } + + get permiteSolicitud(): boolean { + const tagsPermitidos = ['procedimiento', 'régimen/tratamiento', 'situación', 'hallazgo', 'evento']; + return tagsPermitidos.includes(this.procedimiento?.semanticTag); + } + } 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; } }