Skip to content

Commit

Permalink
feat(HUDS): implementa mockups de prestaciones
Browse files Browse the repository at this point in the history
  • Loading branch information
ma7payne committed Jan 23, 2024
1 parent dcb85e1 commit 3a5ed10
Show file tree
Hide file tree
Showing 41 changed files with 2,160 additions and 595 deletions.
41 changes: 20 additions & 21 deletions src/app/modules/rup/components/core/_rup.scss
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,9 @@ $rotate: -90deg;
}

&.#{$tag} {

&:hover,
&.active {
box-shadow: 1px 1px 20px 1px rgba($color, 0.22);

.rup-header {
.icon-rup {
background: $color;
Expand All @@ -83,6 +82,9 @@ $rotate: -90deg;
.icon-rup {
border: 2px solid $color;
background: white;
display: flex;
justify-content: center;
align-items: center;

i {
color: $color;
Expand All @@ -97,17 +99,16 @@ $rotate: -90deg;
&.#{$tag}:not(.mini) {
&:hover {
border: 2px solid $color;
box-shadow: 1px 1px 20px 1px rgba($color, 0.22);
}

> .rup-header,
> .rup-header .icon-rup,
>.rup-header,
>.rup-header .icon-rup,
.rup-body .legend,
.rup-footer .type {
background: $color !important;
}

> .rup-header .icon-rup {
>.rup-header .icon-rup {
border-bottom: 1px solid $color;
background: $color !important;
mix-blend-mode: hard-light;
Expand Down Expand Up @@ -241,15 +242,15 @@ $rotate: -90deg;
border: 0;
}

> .rup-header,
> .rup-header .icon-rup,
>.rup-header,
>.rup-header .icon-rup,
.rup-body .legend,
.rup-footer .type {
background: transparent !important;
color: white;
}

> .rup-header .icon-rup {
>.rup-header .icon-rup {
border-bottom: 1px solid $color;
background: transparent !important;
}
Expand Down Expand Up @@ -439,7 +440,7 @@ $rotate: -90deg;
font-weight: normal;
text-transform: uppercase;
color: $color;
border: 1px solid $color;
border: 1px solid $color;

&:focus {
outline: 0;
Expand Down Expand Up @@ -471,7 +472,6 @@ $rotate: -90deg;

i:hover {
border: 2px solid $color;
box-shadow: 1px 1px 20px 1px rgba($color, 0.22);
}
}

Expand All @@ -491,7 +491,7 @@ $rotate: -90deg;
}

.form-group {
& > label {
&>label {
margin-bottom: 0 !important;
}
}
Expand Down Expand Up @@ -532,7 +532,8 @@ $rotate: -90deg;
.grid-envolvente {
display: grid;
grid-template-rows: auto 1fr;
> .prestacion-offset {

>.prestacion-offset {
padding: 10px;

h4 {
Expand All @@ -542,11 +543,8 @@ $rotate: -90deg;
}
}

@mixin grid-columnas(
$cols: (
1fr 1fr,
)
) {
@mixin grid-columnas($cols: (1fr 1fr,
)) {
display: grid;
grid-template-columns: $cols;
grid-column-gap: 40px;
Expand Down Expand Up @@ -753,15 +751,16 @@ observaciones {
// Adaptación Rup-card
plex-layout [type="invert"] {
.rup-card .rup-header {

.title {
background: transparent;
}

.actions {
background: transparent;

plex-badge {
& > span {
&>span {
color: white;
}
}
Expand Down
134 changes: 125 additions & 9 deletions src/app/modules/rup/components/ejecucion/hudsBusqueda.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { AfterContentInit, Component, EventEmitter, Input, Optional, Output, Vie
import * as moment from 'moment';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
import { InternacionResumenHTTP } from 'src/app/apps/rup/mapa-camas/services/resumen-internacion.http';
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';
Expand All @@ -15,12 +16,10 @@ import { EmitConcepto, RupEjecucionService } from '../../services/ejecucion.serv
import { HUDSService } from '../../services/huds.service';
import { PrestacionesService } from './../../services/prestaciones.service';


@Component({
selector: 'rup-hudsBusqueda',
templateUrl: 'hudsBusqueda.html',
styleUrls: ['hudsBusqueda.scss', 'buscador.scss'],
// Use to disable CSS Encapsulation for this component
encapsulation: ViewEncapsulation.None
})
export class HudsBusquedaComponent implements AfterContentInit {
Expand Down Expand Up @@ -64,9 +63,12 @@ export class HudsBusquedaComponent implements AfterContentInit {
public prestacionSeleccionada = [];
private _prestaciones: any = [];
private prestacionesCopia: any = [];
private internaciones;

get prestaciones() {
return this._prestaciones;
}

set prestaciones(value) {
this._prestaciones = value.sort((a, b) => {
return moment(b.fecha).diff(a.fecha);
Expand All @@ -83,8 +85,8 @@ export class HudsBusquedaComponent implements AfterContentInit {
public hallazgosCronicos: any = [];

/**
* Listado de todos los hallazgos no activos
*/
* Listado de todos los hallazgos no activos
*/
public hallazgosNoActivos: any = [];
public fechaInicio;
public fechaFin;
Expand Down Expand Up @@ -127,13 +129,33 @@ export class HudsBusquedaComponent implements AfterContentInit {
public txtABuscar;

public efectorRestringido = this.auth.check('huds:soloEfectorActual');
public indiceInternaciones;
public otrasPrestaciones;

/**
* Ids correspondientes a Prescripción de Medicamentos y Seguimiento Hídrico respectivamente
*/
public condicionRegistros = ['33633005', '430147008'];

public filtros = [
{ key: 'planes', titulo: 'prestaciones', icono: 'clipboard-check-outline' },
{ key: 'solicitudes', titulo: 'solicitudes', icono: 'mano-corazon' },
{ key: 'hallazgo', titulo: 'hallazgos', icono: 'hallazgo' },
{ key: 'trastorno', titulo: 'trastornos', icono: 'trastorno' },
{ key: 'procedimiento', titulo: 'procedimientos', icono: 'termometro' },
{ key: 'producto', titulo: 'productos', icono: 'pildoras' },
{ key: 'laboratorios', titulo: 'laboratorios', icono: 'recipiente' },
{ key: 'vacunas', titulo: 'vacunas', icono: 'vacuna' },
{ key: 'dominios', titulo: 'dominios nacionales', icono: 'hospital' },
];

constructor(
public servicioPrestacion: PrestacionesService,
public plex: Plex,
public auth: Auth,
public huds: HUDSService,
private formEpidemiologiaService: FormsEpidemiologiaService,
private resumenHTTP: InternacionResumenHTTP,
public ipsService: IPSService,
@Optional() private ejecucionService: RupEjecucionService
) {
Expand All @@ -146,6 +168,7 @@ export class HudsBusquedaComponent implements AfterContentInit {
*/
ngAfterContentInit() {
if (this.paciente) {
this.listarInternaciones();
this.listarPrestaciones();
this.listarConceptos();
this.listarDominios();
Expand All @@ -158,6 +181,10 @@ export class HudsBusquedaComponent implements AfterContentInit {
}, 1000 * 30);
}

getTitulo(filtroactual) {
return this.filtros.find(filtro => filtro.key === filtroactual).titulo;
}

dragStart(e) {
this._onDragStart.emit(e);
}
Expand Down Expand Up @@ -254,13 +281,26 @@ export class HudsBusquedaComponent implements AfterContentInit {
registro.class = 'plan';
registro.params = params;
break;
case 'internacion':
gtag('huds-open', 'rup', 'internacion', index);
registro.id = registro.id;
registro.tipo = 'internacion';
registro.index = index;
break;
}

this.huds.toogle(registro, tipo);
}

listarPrestaciones() {
listarInternaciones() {
this.resumenHTTP.search({
organizacion: this.auth.organizacion.id,
ingreso: this.resumenHTTP.queryDateParams(this.fechaInicio, this.fechaFin),
paciente: this.paciente.id,
}).subscribe((internaciones) => this.internaciones = internaciones);
}

listarPrestaciones() {
function groupBy(prestaciones: IPrestacion[]) {
const resultado = [];
const diccionario = {};
Expand All @@ -279,7 +319,6 @@ export class HudsBusquedaComponent implements AfterContentInit {
Object.values(diccionario).forEach(dc => resultado.push(dc));

return resultado;

}


Expand Down Expand Up @@ -364,6 +403,8 @@ export class HudsBusquedaComponent implements AfterContentInit {
this.cargarSolicitudesMezcladas();
});
});


});
}

Expand All @@ -385,11 +426,8 @@ export class HudsBusquedaComponent implements AfterContentInit {
});
}



// Trae los cdas registrados para el paciente
buscarCDAPacientes(token) {

this.servicioPrestacion.getCDAByPaciente(this.paciente.id, token).subscribe(registros => {
this.cdas = registros.map(cda => {
cda.id = cda.cda_id;
Expand Down Expand Up @@ -506,6 +544,80 @@ export class HudsBusquedaComponent implements AfterContentInit {
return filtro;
}

filtrarOtrasPrestaciones(prestaciones, prestacionesEnInternacion) {
const filtroPrestaciones = prestaciones.filter(prestacion =>
!prestacionesEnInternacion.some(filtro => filtro.data.id === prestacion.data.id));

const registros = filtroPrestaciones.flatMap((prestacion) => prestacion.data.ejecucion.registros);

const indiceRegistros = registros.reduce((grupo, registro) => {
const { concepto: { conceptId, term }, id, idPrestacion, createdAt: fecha } = registro;
const data = { conceptId, term, id, idPrestacion, fecha };

if (this.condicionRegistros.includes(data.conceptId)) {
return ({
indices: { ...grupo.indices, [data.conceptId]: data },
registros: { ...grupo.registros, [data.conceptId]: { ...grupo.registros[data.conceptId], [data.conceptId]: registro } }
});
}

return ({ indices: { ...grupo.indices, ['otras']: { ...grupo.indices['otras'], [data.conceptId]: data } }, registros: { ...grupo.registros, ['otras']: { ...grupo.registros['otras'], [data.conceptId]: registro } } });
}, { indices: {}, registros: {} });

const fechas = registros.map((registro) => registro.createdAt);
const fechaDesde = fechas[fechas.length - 1];
const fechaHasta = fechas[0];

this.otrasPrestaciones = { fechaDesde, fechaHasta, indices: Object.values(indiceRegistros.indices), registros: Object.values(indiceRegistros.registros) };
}

filtrarPorInternacion(prestaciones) {
const prestacionesEnInternacion = [];

const internaciones = this.internaciones
.map(internacion => {
const prestacionesPorInternacion = prestaciones.filter(prestacion => {
const fechaIngresoValida = moment(prestacion.fecha).isSameOrAfter(internacion.fechaIngreso);
const fechaEgresoValida = internacion.fechaEgreso ? moment(prestacion.fecha).isSameOrBefore(internacion.fechaEgreso) : moment(prestacion.fecha).isSameOrBefore(moment().toDate());
const organizacionValida = internacion.organizacion.id === prestacion.organizacion;

if (fechaIngresoValida && fechaEgresoValida && organizacionValida) {
prestacionesEnInternacion.push(prestacion);

return prestacion;
} else { return null; }
});

const indicePrestaciones = prestacionesPorInternacion.reduce((grupo, prestacion, index) => {
return ({ ...grupo, [prestacion.data.id]: prestacion });
}, {});

const registros = prestacionesPorInternacion.flatMap((prestacion) => prestacion.data.ejecucion.registros);

const grupoRegistros = registros.reduce((grupo, registro) => {
const dataRegistro = { conceptId: registro.concepto.conceptId, term: registro.concepto.term, id: registro.id, idPrestacion: registro.idPrestacion };

if (this.condicionRegistros.includes(registro.concepto.conceptId)) {
return ({ ...grupo, [registro.concepto.conceptId]: dataRegistro });
}

return ({ ...grupo, ['otras']: { ...grupo['otras'], [registro.idPrestacion]: { ...indicePrestaciones[registro.idPrestacion] } } });
}, {});

return {
id: internacion.id,
fechaIngreso: internacion.fechaIngreso,
fechaEgreso: internacion.fechaEgreso,
organizacion: internacion.organizacion.nombre,
registros: Object.values(grupoRegistros)
};
})
.filter(grupo => grupo.registros.length);

this.indiceInternaciones = internaciones.reverse();

this.filtrarOtrasPrestaciones(prestaciones, prestacionesEnInternacion);
}

filtrar() {
this.prestaciones = this.prestacionesCopia.slice();
Expand All @@ -523,6 +635,10 @@ export class HudsBusquedaComponent implements AfterContentInit {

if (this.ambitoOrigen) {
this.prestaciones = this.prestaciones.filter(p => p.ambito === this.ambitoOrigen);

if (this.ambitoOrigen === 'internacion') {
this.filtrarPorInternacion(this.prestaciones);
}
}

if (this.organizacionSeleccionada) {
Expand Down
Loading

0 comments on commit 3a5ed10

Please sign in to comment.