Skip to content

Commit

Permalink
fix(IN): visualizacion de registros en sidebar (#2973)
Browse files Browse the repository at this point in the history
  • Loading branch information
negro89 authored and aldoEMatamala committed Feb 6, 2024
1 parent 9d3caf0 commit fb32b8c
Show file tree
Hide file tree
Showing 11 changed files with 827 additions and 216 deletions.
6 changes: 3 additions & 3 deletions angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
],
"buildOptimizer": false,
"sourceMap": true,
"optimization": true,
"optimization": false,
"aot": true
},
"test": {
Expand All @@ -71,9 +71,9 @@
]
},
"production": {
"optimization": true,
"optimization": false,
"outputHashing": "all",
"sourceMap": false,
"sourceMap": true,
"extractCss": true,
"namedChunks": false,
"aot": true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@

<form #formulario="ngForm">
<plex-grid type="full" cols="2" class="mt-0">
<plex-datetime label="Desde" name="desde" type="date" [(ngModel)]="desde" [min]="min$ | async" [debounce]="600"
(change)="onChangeFecha()">
<plex-datetime label="Desde" name="desde" type="date" [(ngModel)]="desde" [min]="min" [max]="hasta"
[debounce]="600" (change)="onChangeFecha()">
</plex-datetime>
<plex-datetime label="Hasta" name="haste" type="date" [(ngModel)]="hasta" [max]="max$ | async" [debounce]="600"
(change)="onChangeFecha()">
<plex-datetime label="Hasta" name="haste" type="date" [(ngModel)]="hasta" [min]="desde" [max]="max"
[debounce]="600" (change)="onChangeFecha()">
</plex-datetime>
<plex-select label="Prestación" name="tipoPrestacion" [(ngModel)]="tipoPrestacion" idField="conceptId"
labelField="term" [data]="prestacionesList$ | async" (change)="onChangeTipoPrestacion()" span="2">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Component, EventEmitter, OnInit, Output, ViewChild } from '@angular/cor
import { NgForm } from '@angular/forms';
import { Router } from '@angular/router';
import { BehaviorSubject, Observable, combineLatest } from 'rxjs';
import { catchError, concatMap, map, pluck, switchMap, tap } from 'rxjs/operators';
import { catchError, concatMap, map, switchMap } from 'rxjs/operators';
import { HUDSService } from 'src/app/modules/rup/services/huds.service';
import { IPaciente } from '../../../../../core/mpi/interfaces/IPaciente';
import { ModalMotivoAccesoHudsService } from '../../../../../modules/rup/components/huds/modal-motivo-acceso-huds.service';
Expand All @@ -23,14 +23,14 @@ export class RegistrosHudsDetalleComponent implements OnInit {

public historial$: Observable<any>;
public historialFiltrado$: Observable<any>;
private historialInternacion$: Observable<any>;

public desde: Date;
public hasta: Date;
public tipoPrestacion;
public inProgress = true;
public prestacionesEliminadas = [];
idOrganizacion = this.auth.organizacion.id;
public idOrganizacion = this.auth.organizacion.id;
private admisionHospitalariaConceptId = '32485007';

public refreshFecha$ = new BehaviorSubject(null);
public tipoPrestacion$ = new BehaviorSubject(null);
Expand All @@ -40,8 +40,8 @@ export class RegistrosHudsDetalleComponent implements OnInit {
public estadoCama$: Observable<IMAQEstado>;
public accionesEstado$: Observable<any>;
public prestacionesList$: Observable<any>;
public min$: Observable<Date>;
public max$: Observable<Date>;
public min: Date;
public max: Date;
public paciente;

@Output() accion = new EventEmitter();
Expand All @@ -59,28 +59,37 @@ export class RegistrosHudsDetalleComponent implements OnInit {
) { }

ngOnInit() {
this.desde = moment(this.mapaCamasService.fecha).subtract(7, 'd').toDate();
this.hasta = moment(this.mapaCamasService.fecha).toDate();

this.historialInternacion$ = this.mapaCamasService.historialInternacion$.pipe(cache());

this.puedeVerHuds = this.auth.check('huds:visualizacionHuds');
let estaPrestacionId; // id de prestacion correspondiente a la internacion actual
this.historial$ = combineLatest([
this.cama$,
this.mapaCamasService.historialInternacion$,
this.mapaCamasService.selectedPrestacion,
this.mapaCamasService.resumenInternacion$,
]).pipe(
switchMap(([cama, prestacion, resumen]) => {
if (resumen) {
switchMap(([cama, movimientos, prestacion, resumen]) => {
if (prestacion?.id) { // listado
this.desde = prestacion.ejecucion.fecha;
this.hasta = prestacion.ejecucion.registros[1]?.valor.InformeEgreso.fechaEgreso || new Date();
} else if (resumen?.id) { // listado
this.desde = resumen.fechaIngreso;
this.hasta = resumen.fechaEgreso || moment().toDate();
this.hasta = resumen.fechaEgreso || new Date();
} else { // mapa de camas
this.desde = movimientos.find(m => m.extras && m.extras.ingreso).fecha;
this.hasta = movimientos.find(m => m.extras && m.extras.egreso)?.fecha || new Date();
}
estaPrestacionId = prestacion?.id ? prestacion.id : this.mapaCamasService.capa === 'estadistica' ? cama.idInternacion : resumen.idPrestacion;
const paciente = cama?.paciente || (prestacion?.paciente || resumen?.paciente);
this.paciente = paciente;
if (paciente) {
return this.motivoAccesoService.getAccessoHUDS(paciente as IPaciente);
this.min = moment(this.desde).startOf('day').toDate();
this.max = moment(this.hasta).endOf('day').toDate();

if (this.mapaCamasService.capa === 'estadistica') {
estaPrestacionId = cama.idInternacion || prestacion.id;
} else {
estaPrestacionId = cama.idInternacion || resumen.id;
}
this.paciente = cama.paciente || prestacion.paciente || resumen.paciente;

if (this.paciente) {
return this.motivoAccesoService.getAccessoHUDS(this.paciente as IPaciente);
}
return [];
}),
Expand All @@ -98,77 +107,41 @@ export class RegistrosHudsDetalleComponent implements OnInit {
cache()
);

this.min$ = this.historialInternacion$.pipe(
map(movimientos => {
if (movimientos.length > 0) {
const lastIndex = movimientos.length - 1;
return moment(movimientos[lastIndex].fecha).startOf('day').toDate();
}
return new Date();
}),
tap((date) => {
if (moment(this.desde).isSameOrBefore(moment(date))) {
this.desde = date;
this.onChangeFecha();
}
})
);

this.max$ = this.historialInternacion$.pipe(
map(movimientos => {
const egreso = movimientos.find(m => m.extras && m.extras.egreso);
if (egreso) {
this.hasta = egreso.fecha;
this.onChangeFecha();
return egreso.fecha;
}
return null;
})
);

this.historialFiltrado$ = combineLatest([
this.historial$,
this.refreshFecha$,
this.tipoPrestacion$,
this.min$,
this.id$
]).pipe(
map(([prestaciones, refreshFecha, tipoPrestacion, min, idPrestacion]) => {
map(([prestaciones, refreshFecha, tipoPrestacion, idPrestacion]) => {
if (idPrestacion) {

this.prestacionesEliminadas.push(idPrestacion);
}
if (!this.desde) {
this.desde = moment().subtract(7, 'd').toDate();
}
if (this.desde instanceof Date) {
this.desde = this.desde.getTime() < min.getTime() ? moment(min).toDate() : this.desde;
} else if (moment.isMoment(this.desde)) {
this.desde = moment(this.desde).toDate().getTime() < min.getTime() ? moment(min).toDate() : this.desde;
}
this.inProgress = false;
return prestaciones.filter((registro) => {
const fecha = moment(registro.ejecucion?.fecha || registro.fecha);
const conceptId = registro.solicitud?.tipoPrestacion.conceptId || registro.prestacion.snomed.conceptId;
const tipoPrestacionValida = !tipoPrestacion || tipoPrestacion.conceptId === conceptId;
const noEsInternacion = conceptId !== this.admisionHospitalariaConceptId;
const fechaValida = fecha.isSameOrBefore(this.hasta, 'd') && fecha.isSameOrAfter(this.desde, 'd');
const organizacion = registro.solicitud?.organizacion || registro.prestacion.organizacion;

if (this.mapaCamasService.capa === 'estadistica') {
const organizacionValida = organizacion?.id === this.idOrganizacion;
return fechaValida && tipoPrestacionValida && organizacionValida && !this.prestacionesEliminadas.some(id => id === registro.id);
return fechaValida && noEsInternacion && tipoPrestacionValida && organizacionValida && !this.prestacionesEliminadas.some(id => id === registro.id);
} else {
return fechaValida && tipoPrestacionValida && !this.prestacionesEliminadas.some(id => id === registro.id);
return fechaValida && noEsInternacion && tipoPrestacionValida && !this.prestacionesEliminadas.some(id => id === registro.id);
}
});
})
}),
cache()
);

this.estadoCama$ = this.cama$.pipe(switchMap(cama => this.mapaCamasService.getEstadoCama(cama)));
this.accionesEstado$ = this.estadoCama$.pipe(
notNull(),
pluck('acciones'),
map(acciones => acciones.filter(acc => acc.tipo === 'nuevo-registro'))
map(estado => estado.acciones.filter(acc => acc.tipo === 'nuevo-registro'))
);

this.prestacionesList$ = this.historial$.pipe(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<plex-wrapper>
<plex-text (change)="filtrar()" [(ngModel)]="filtros.paciente" label="Sector">
</plex-text>
<plex-datetime type="date" (change)="filtrarFecha()" [(ngModel)]="filtros.fechaIngresoDesde"
name="fechaIngresoDesde" label="Fecha desde" [max]="filtros.fechaIngresoHasta" [debounce]="600">
</plex-datetime>
<plex-datetime type="date" [(ngModel)]="filtros.fechaIngresoHasta" name='fechaIngresoHasta' label="Fecha hasta"
(change)="filtrarFecha()" [min]="filtros.fechaIngresoDesde" [debounce]="600">
</plex-datetime>
<!-- <plex-datetime type="date" (change)="filtrarFecha()" [(ngModel)]="filtros.fechaEgresoDesde" name="fechaIngresoDesde"
label="Egreso desde" [max]="filtros.fechaEgresoHasta" [debounce]="600">
</plex-datetime>
<plex-datetime type="date" [(ngModel)]="filtros.fechaEgresoHasta" name='fechaEgresoHasta' label="Egreso hasta"
(change)="filtrarFecha()" [min]="filtros.fechaEgresoDesde" [debounce]="600">
</plex-datetime> -->
</plex-wrapper>
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { Component, OnInit } from '@angular/core';
import * as enumerados from '../../../../../../utils/enumerados';
import { PermisosMapaCamasService } from '../../../services/permisos-mapa-camas.service';
import { ListadoInternacionCapasService } from '../listado-internacion-capas.service';

@Component({
selector: 'app-filtros-medicamentos',
templateUrl: './filtros-medicamentos.component.html',
})

export class FiltrosMedicamentosComponent implements OnInit {
filtros: any = {
fechaIngresoDesde: moment().subtract(1, 'months').toDate(),
fechaIngresoHasta: moment().toDate(),
fechaEgresoDesde: null,
fechaEgresoHasta: null
};
estadosInternacion;
requestInProgress: boolean;

constructor(
private listadoInternacionService: ListadoInternacionCapasService,
public permisosMapaCamasService: PermisosMapaCamasService,
) { }

ngOnInit() {
this.resetFiltros();
this.estadosInternacion = enumerados.getObjEstadoInternacion();
}

resetFiltros() {
this.listadoInternacionService.pacienteText.next(null);
this.listadoInternacionService.estado.next(null);
this.filtrarFecha();
}

filtrar() {
this.listadoInternacionService.pacienteText.next(this.filtros.paciente);
if (this.filtros.estado) {
this.listadoInternacionService.estado.next(this.filtros.estado.id);
} else {
this.listadoInternacionService.estado.next(null);
}
}

filtrarFecha() {
this.listadoInternacionService.fechaIngresoDesde.next(this.filtros.fechaIngresoDesde);
this.listadoInternacionService.fechaIngresoHasta.next(this.filtros.fechaIngresoHasta);
this.listadoInternacionService.fechaEgresoDesde.next(this.filtros.fechaEgresoDesde);
this.listadoInternacionService.fechaEgresoHasta.next(this.filtros.fechaEgresoHasta);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<plex-layout-main *ngIf="mainView$ | async as mainView">
<header *ngIf="mainView === 'principal'">
<plex-title titulo="Listado de medicamentos">
<plex-button label="VOLVER" type="danger" (click)="volver()"></plex-button>
</plex-title>
</header>
<!-- <app-filtros-medicamentos></app-filtros-medicamentos> -->
<plex-wrapper>
<!-- <plex-text (change)="filtrar()" [(ngModel)]="filtros.paciente" label="Sector">
</plex-text> -->
<plex-datetime type="date" (change)="filtrar()" [(ngModel)]="fechaDesdeEntrada" name="fechaIngresoDesde"
label="Fecha desde" [max]="fechaHastaEntrada" [debounce]="600">
</plex-datetime>
<plex-datetime type="date" [(ngModel)]="fechaHastaIngreso" name='fechaIngresoHasta' label="Fecha hasta"
(change)="filtrar()" [min]="fechaDesdeEntrada" [debounce]="600">
</plex-datetime>
<!-- <plex-datetime type="date" (change)="filtrarFecha()" [(ngModel)]="filtros.fechaEgresoDesde" name="fechaIngresoDesde"
label="Egreso desde" [max]="filtros.fechaEgresoHasta" [debounce]="600">
</plex-datetime>
<plex-datetime type="date" [(ngModel)]="filtros.fechaEgresoHasta" name='fechaEgresoHasta' label="Egreso hasta"
(change)="filtrarFecha()" [min]="filtros.fechaEgresoDesde" [debounce]="600">
</plex-datetime> -->
</plex-wrapper>
<ng-container *ngIf="mainView === 'principal'">
<!-- <div *ngIf="listadoInternacionCapasService.missingFilters$ | async" justify="center" class="mt-5">
<plex-label class="flex-column" icon="magnify" type="info" size="xl" direction="column"
titulo="No hay resultados"
subtitulo="Debe ingresar un rango valido de fechas de ingreso o egreso">
</plex-label>
</div> -->
<ng-container>
<!-- <div justify="center" class="mt-5">
<plex-label class="flex-column" icon="magnify" type="info" size="xl" direction="column"
titulo="No hay resultados"
subtitulo="No hay resultados que coincidan con los filtros de búsqueda">
</plex-label>
</div> -->
<plex-table [columns]="columns" #table="plTable" (scroll)="onScroll()">
<plex-table-columns>
</plex-table-columns>

<!-- <tr *ngFor="let internacion of (listaMedicamentos$)" class="selectable" (click)="onSelect(internacion)"> -->
<tr *ngFor="let internacion of (listaMedicamentos$| plSort:table| async)">

<td></td>
<td *plTableCol="'organizacion'">
{{internacion.organizacion.nombre }}
</td>
<td *plTableCol="'nombre'">
{{internacion.paciente | nombre }}
</td>
<td *plTableCol="'documento'">
{{ internacion.paciente | documento }}
</td>
<td *plTableCol="'diagnostico'">
<span *ngIf="internacion.valor.nombre || internacion.valor.medicamento?.term">
{{ internacion.valor.nombre || internacion.valor.medicamento?.term}}
</span>
</td>
<td *plTableCol="'estado'">
<span *ngIf="internacion.estadoActual?.verificacion?.estado">
{{ internacion.estadoActual?.verificacion?.estado}}
</span>
</td>
<td *plTableCol="'fecha'">
<span *ngIf="internacion.fechaInicio">
{{ internacion.fechaInicio | fecha}}
</span>
</td>
<td *plTableCol="'fechaEstado'">
<span *ngIf="internacion.estadoActual?.fecha">
{{ internacion.estadoActual?.fecha | fecha}}
</span>
</td>

</tr>
</plex-table>
</ng-container>
</ng-container>
Loading

0 comments on commit fb32b8c

Please sign in to comment.