diff --git a/src/app/modules/rup/components/ejecucion/hudsBusqueda.component.ts b/src/app/modules/rup/components/ejecucion/hudsBusqueda.component.ts index 991625e2e6..b1a7aacaad 100644 --- a/src/app/modules/rup/components/ejecucion/hudsBusqueda.component.ts +++ b/src/app/modules/rup/components/ejecucion/hudsBusqueda.component.ts @@ -2,8 +2,6 @@ import { Auth } from '@andes/auth'; import { Plex } from '@andes/plex'; import { AfterContentInit, Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Optional, Output, SimpleChanges, ViewEncapsulation } from '@angular/core'; import * as moment from 'moment'; -import { LaboratorioService } from 'src/app/services/laboratorio.service'; -import { RecetaService } from 'src/app/services/receta.service'; import { Observable, forkJoin } from 'rxjs'; import { switchMap } from 'rxjs/operators'; import { InternacionResumenHTTP } from 'src/app/apps/rup/mapa-camas/services/resumen-internacion.http'; @@ -12,7 +10,9 @@ import { PacienteService } from 'src/app/core/mpi/services/paciente.service'; import { SECCION_CLASIFICACION } from 'src/app/modules/epidemiologia/constantes'; import { FormsEpidemiologiaService } from 'src/app/modules/epidemiologia/services/ficha-epidemiologia.service'; import { ConceptosTurneablesService } from 'src/app/services/conceptos-turneables.service'; +import { LaboratorioService } from 'src/app/services/laboratorio.service'; import { ProfesionalService } from 'src/app/services/profesional.service'; +import { RecetaService } from 'src/app/services/receta.service'; import { gtag } from '../../../../shared/services/analytics.service'; import { IPrestacion } from '../../interfaces/prestacion.interface'; import { getSemanticClass } from '../../pipes/semantic-class.pipes'; @@ -86,6 +86,7 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro }); } + public todos: any = []; public solicitudes: any = []; public solicitudesTOP: any = []; @@ -147,6 +148,7 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro public filtroRecetas; public searchRecetas; public busquedaRecetas; + public busquedaRecetasOriginal; public motivosSuspension; public motivoSuspensionSelector; public seleccionRecetas = []; @@ -243,6 +245,10 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro this.permisosVac ? 'vacunas' : 'recetas'; this.pacienteSelected = this.paciente; + + if (this.filtroActual === 'recetas') { + this.showFiltros = true; + } } ngOnChanges(changes: SimpleChanges) { @@ -273,11 +279,26 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro this._onDragEnd.emit(e); } + public tiposPrescripcion = [ + { id: 'medicamento', nombre: 'Medicamento' }, + { id: 'insumo', nombre: 'Dispositivos / Insumos' }, + { id: 'alimentacion', nombre: 'Alimentación' }, + { id: 'magistral', nombre: 'Magistrales' } + ]; + public tipoPrescripcionSeleccionado = this.tiposPrescripcion[0]; + public fechaInicioRecetas; + public fechaFinRecetas; + toogleFiltros() { this.showFiltros = !this.showFiltros; if (!this.showFiltros) { this.fechaInicio = this.fechaFin = this.prestacionSeleccionada = null; + this.fechaInicioRecetas = this.fechaFinRecetas = null; + this.tipoPrescripcionSeleccionado = this.tiposPrescripcion[0]; this.filtrar(); + if (this.filtroActual === 'recetas') { + this.filtrarRecetas(); + } } } @@ -756,7 +777,7 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro case 'solicitudes': return this.solicitudesMezcladas.length; case 'recetas': - return this.busquedaRecetas?.length; + return this.busquedaRecetasOriginal?.length; case 'registro': return this.registrosTotalesCopia.registro.length; } @@ -768,6 +789,9 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro if (key === 'planes') { this.setAmbitoOrigen('ambulatorio'); } + if (key === 'recetas') { + this.showFiltros = true; + } } mostrarItem(item) { @@ -945,12 +969,12 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro filtrarRecetas() { const searchTerm = this.searchRecetas?.toLowerCase() || ''; - if (!searchTerm && !this.filtroRecetas) { - this.groupRecetas(); + if (!searchTerm && !this.filtroRecetas && !this.tipoPrescripcionSeleccionado && !this.fechaInicioRecetas && !this.fechaFinRecetas) { + this.busquedaRecetas = this.busquedaRecetasOriginal; return; } - let filteredRecetas = this.busquedaRecetas; + let filteredRecetas = this.busquedaRecetasOriginal; if (searchTerm) { filteredRecetas = filteredRecetas.filter(group => { @@ -958,9 +982,51 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro }); } + if (this.fechaInicioRecetas || this.fechaFinRecetas) { + const fechaInicio = this.fechaInicioRecetas ? moment(this.fechaInicioRecetas).startOf('day') : null; + const fechaFin = this.fechaFinRecetas ? moment(this.fechaFinRecetas).endOf('day') : null; + + filteredRecetas = filteredRecetas.filter(group => { + const fecha = moment(group.recetaVisible.fechaRegistro); + if (fechaInicio && fecha.isBefore(fechaInicio)) { + return false; + } + if (fechaFin && fecha.isAfter(fechaFin)) { + return false; + } + return true; + }); + } + + if (this.tipoPrescripcionSeleccionado) { + const tipo = this.tipoPrescripcionSeleccionado.id; + filteredRecetas = filteredRecetas.filter(group => { + const medicamento = group.recetaVisible.medicamento; + const concept = medicamento.concepto; + const semanticTag = concept.semanticTag; + const term = concept.term.toLowerCase(); + + switch (tipo) { + case 'medicamento': + return true; + case 'insumo': + return (semanticTag === 'objeto físico' || semanticTag === 'producto') && !term.includes('alimentacion') && !term.includes('fórmula'); + case 'alimentacion': + // Assuming semantic tag is 'producto' but checking term for 'alimentacion' as heuristic + return semanticTag === 'producto' && (term.includes('alimentacion') || term.includes('fórmula') || term.includes('leche')); + case 'magistral': + // Check if properties indicate magistral, currently no explicit property known, might be in concept term + return term.includes('magistral'); + default: + return true; + } + }); + } + if (this.filtroRecetas) { filteredRecetas = filteredRecetas.reduce((acc, receta) => { const vigenteRecetas = receta.recetas.filter(r => r.estadoActual.tipo === 'vigente'); + if (vigenteRecetas.length > 0) { acc.push({ conceptId: receta.conceptId, @@ -1005,6 +1071,7 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro })) ); + this.busquedaRecetasOriginal = this.busquedaRecetas; }); } @@ -1103,4 +1170,20 @@ export class HudsBusquedaComponent implements AfterContentInit, OnInit, OnDestro return 'info'; } } + + checkDispensaAnticipada(receta) { + if (receta.estadoDispensaActual && receta.estadoDispensaActual.fecha) { + const fechaDispensa = moment(receta.estadoDispensaActual.fecha); + const fechaRegistro = moment(receta.fechaRegistro); + + if (fechaDispensa.isBefore(fechaRegistro)) { + if (receta.estadoActual.tipo === 'finalizada') { + return 'dispensa anticipada'; + } else if (receta.estadoActual.tipo === 'pendiente') { + return 'dispensa parcial anticipada'; + } + } + } + return null; + } } diff --git a/src/app/modules/rup/components/ejecucion/hudsBusqueda.html b/src/app/modules/rup/components/ejecucion/hudsBusqueda.html index 4d97df6385..4ba285ff96 100644 --- a/src/app/modules/rup/components/ejecucion/hudsBusqueda.html +++ b/src/app/modules/rup/components/ejecucion/hudsBusqueda.html @@ -6,9 +6,9 @@