Skip to content

Commit

Permalink
feat(elemento-rup): filtro por sexo en requeridos
Browse files Browse the repository at this point in the history
  • Loading branch information
liquid36 committed Aug 5, 2020
1 parent a1d1764 commit d99f729
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 45 deletions.
15 changes: 15 additions & 0 deletions src/app/modules/rup/components/core/rup.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -284,4 +284,19 @@ export class RUPComponent implements OnInit, AfterViewInit {
const hasValue = !!this.registro.valor;
return !hasValue;
}

/**
* Costrasta los requeridos contra los registros para determinar exactamente sobre que iterar.
*/
get requeridos() {
const requeridos = [];
for (let i = 0; i < this.registro.registros.length; i++) {
const concepto = this.registro.registros[i].concepto;
const requerido = this.elementoRUP.requeridos.find(r => r.concepto.conceptId === concepto.conceptId);
if (requerido) {
requeridos.push(requerido);
}
}
return requeridos;
}
}
4 changes: 2 additions & 2 deletions src/app/modules/rup/components/core/rup.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!-- Este es un elemento RUP -->

<!-- Moléculas -->
<ng-container *ngIf="elementoRUP.requeridos && elementoRUP.requeridos.length">
<ng-container *ngIf="requeridos && requeridos.length">
<div class="row" [ngClass]="{'d-flex justify-content-start': soloValores}">
<ng-container *ngFor="let item of elementoRUP.requeridos; let i = index">
<ng-container *ngFor="let item of requeridos; let i = index">
<div *ngIf="item.elementoRUP"
class="col-{{ item.style.columns }} mr-{{ item.style?.offset ? item.style.offset : '0' }}">
<rup [elementoRUP]="item.elementoRUP" [paciente]="paciente" [params]="item.params"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ export class PrestacionEjecucionComponent implements OnInit, OnDestroy {
}

// armamos el elemento data a agregar al array de registros
let nuevoRegistro = new IPrestacionRegistro(elementoRUP, snomedConcept);
const nuevoRegistro = new IPrestacionRegistro(elementoRUP, snomedConcept, this.prestacion);
this.itemsRegistros[nuevoRegistro.id] = { collapse: false, items: null };
nuevoRegistro['_id'] = nuevoRegistro.id;

Expand All @@ -493,7 +493,7 @@ export class PrestacionEjecucionComponent implements OnInit, OnDestroy {

if (this.prestacion && this.prestacion.ejecucion.registros && this.prestacion.ejecucion.registros.length) {
// TODO:: Por ahora la vinculacion automatica es solo con INFORME DEL ENCUENTRO
let registroRequerido = this.prestacion.ejecucion.registros.find(r => r.concepto.conceptId === PrestacionesService.InformeDelEncuentro);
const registroRequerido = this.prestacion.ejecucion.registros.find(r => r.concepto.conceptId === PrestacionesService.InformeDelEncuentro);
if (registroRequerido) {
nuevoRegistro.relacionadoCon.push(registroRequerido);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ export class ElementoDeRegistroComponent extends RUPComponent implements OnInit
// esSolicitud = this.esTurneable(snomedConcept);
let elementoRUP = this.elementosRUPService.buscarElemento(snomedConcept, esSolicitud);
// armamos el elemento data a agregar al array de registros
let nuevoRegistro = new IPrestacionRegistro(elementoRUP, snomedConcept);
let nuevoRegistro = new IPrestacionRegistro(elementoRUP, snomedConcept, this.prestacion);
this.itemsRegistros[nuevoRegistro.id] = { collapse: false, items: null };
nuevoRegistro['_id'] = nuevoRegistro.id;
// Verificamos si es un plan. Si es un plan seteamos esSolicitud en true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,6 @@ export class InformeEpicrisisComponent extends RUPComponent implements OnInit {
});
}

get requeridos() {
const requeridos = [];
for (let i = 0; i < this.registro.registros.length; i++) {
const concepto = this.registro.registros[i].concepto;
const requerido = this.elementoRUP.requeridos.find(r => r.concepto.conceptId === concepto.conceptId);
if (requerido) {
requeridos.push(requerido);
}
}
return requeridos;
}


accordionSeleccionado(i, concepto: any) {
if (this.accordionActive === i) {
this.accordionActive = -1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ export class SeccionComponent extends RUPComponent implements OnInit, OnDestroy
const esSolicitud = this.esTurneable(snomedConcept) || solicitudDesdeBuscador;

const elementoRUP = this.elementosRUPService.buscarElemento(snomedConcept, esSolicitud);
const nuevoRegistro = new IPrestacionRegistro(elementoRUP, snomedConcept);
const nuevoRegistro = new IPrestacionRegistro(elementoRUP, snomedConcept, this.prestacion);

this.itemsRegistros[nuevoRegistro.id] = { collapse: false, items: null };
nuevoRegistro['_id'] = nuevoRegistro.id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,6 @@ export class SeccionadoComponent extends RUPComponent implements OnInit {
this.accordionSeleccionado(0, this.registro.registros[0].concepto);
}

get requeridos() {
const requeridos = [];
for (let i = 0; i < this.registro.registros.length; i++) {
const concepto = this.registro.registros[i].concepto;
const requerido = this.elementoRUP.requeridos.find(r => r.concepto.conceptId === concepto.conceptId);
if (requerido) {
requeridos.push(requerido);
}
}
return requeridos;
}

get btnToogleLabel() {
return this.desplegarTodo ? 'Colapsar Todos' : 'Desplegar Todos';
}
Expand Down
25 changes: 14 additions & 11 deletions src/app/modules/rup/interfaces/elementoRUP.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,23 @@ export interface IElementoRUP {
conceptosBuscar: ISnomedConcept[];
// Elementos RUP requeridos para la ejecución.
// Por ejemplo, en "Control de Niño sano" es obligatorio ejecutar "Toma de peso"
requeridos: [{
elementoRUP: IElementoRUP,
concepto: ISnomedConcept,
// Indica estilos para la instancia del elementoRUP
style: {
columns: Number,
cssClass: String
},
// Indica parámetros para la instancia del elementoRUP en formato {key: value}
params: any
}];
requeridos: IElementoRUPRequeridos[];
// Elementos RUP más frecuentes para la ejecución.
// Por ejemplo, en "Consulta de medicina general" se puede sugerir ejecutar "Signos vitales"
frecuentes: ISnomedConcept[];

inactiveAt?: Date;
}

export interface IElementoRUPRequeridos {
elementoRUP: IElementoRUP;
concepto: ISnomedConcept;
// Indica estilos para la instancia del elementoRUP
style: {
columns: Number,
cssClass: String
};
// Indica parámetros para la instancia del elementoRUP en formato {key: value}
params: { [key: string]: any };
sexo: string;
}
16 changes: 13 additions & 3 deletions src/app/modules/rup/interfaces/prestacion.registro.interface.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { IElementoRUP } from './elementoRUP.interface';
import { IElementoRUP, IElementoRUPRequeridos } from './elementoRUP.interface';
import { ISnomedConcept } from './snomed-concept.interface';
import { ObjectID } from 'bson';
import { IPaciente } from '../../../core/mpi/interfaces/IPaciente';
import { IPrestacion } from './prestacion.interface';

export class IRegistroPrivacy {
scope: string;
Expand Down Expand Up @@ -48,7 +49,7 @@ export class IPrestacionRegistro {
// Virtuales 🤷
paciente: IPaciente;

constructor(elementoRUP: IElementoRUP, snomedConcept: ISnomedConcept) {
constructor(elementoRUP: IElementoRUP, snomedConcept: ISnomedConcept, prestacion?: IPrestacion) {
this.id = (new ObjectID()).toString();
this.elementoRUP = elementoRUP ? elementoRUP.id : null;
this.nombre = snomedConcept.term;
Expand All @@ -63,9 +64,18 @@ export class IPrestacionRegistro {
this.noIndex = false;
if (elementoRUP && elementoRUP.requeridos) {
elementoRUP.requeridos.forEach((item) => {
this.registros.push(new IPrestacionRegistro(item.elementoRUP, item.concepto));
const canAdd = this.checkSexRule(prestacion, item);
if (canAdd) {
this.registros.push(new IPrestacionRegistro(item.elementoRUP, item.concepto, prestacion));
}
});
}

}

private checkSexRule(prestacion: IPrestacion, requerido: IElementoRUPRequeridos) {
const sexo = prestacion && prestacion.paciente && prestacion.paciente.sexo;
const sexoFilter = requerido && requerido.sexo;
return !sexo || !sexoFilter || sexo === sexoFilter;
}
}

0 comments on commit d99f729

Please sign in to comment.