Skip to content

Commit

Permalink
fix(RUP-395): Receta - modificar molécula-2vuelta
Browse files Browse the repository at this point in the history
  • Loading branch information
aldoEMatamala committed Oct 14, 2024
1 parent 2c25013 commit 91026d4
Show file tree
Hide file tree
Showing 3 changed files with 153 additions and 47 deletions.
83 changes: 72 additions & 11 deletions src/app/modules/rup/components/elementos/recetaMedica.component.ts
Original file line number Diff line number Diff line change
@@ -1,45 +1,71 @@
import { Component, Output, Input, EventEmitter, OnInit } from '@angular/core';
import { Component, Output, Input, EventEmitter, OnInit, AfterViewInit, ViewChild, ElementRef } from '@angular/core';
import { RUPComponent } from '../core/rup.component';
import { RupElement } from '.';
import { forkJoin } from 'rxjs';
import { getRegistros, populateRelaciones, unPopulateRelaciones } from '../../operators/populate-relaciones';
import { Unsubscribe } from '@andes/shared';
import { NgForm } from '@angular/forms';
@Component({
selector: 'rup-recetaMedica',
templateUrl: 'recetaMedica.html'
templateUrl: 'recetaMedica.html',
styleUrls: ['recetaMedica.scss'],
})


@RupElement('RecetaMedicaComponent')
export class RecetaMedicaComponent extends RUPComponent implements OnInit {

@ViewChild('formMedicamento') formMedicamento: NgForm;

public medicamento: any = {
generico: null,
presentacion: null,
unidades: null,
cantidad: null,
diagnostico: '',
tipoReceta: 'simple',
tipoReceta: null,
tratamientoProlongado: false,
tiempoTratamiento: null,
dosisDiaria: {
cantidad: null,
dias: null
dias: null,
notaMedica: null
}
};
public collapse = false;

public diagnosticos = [];
public unidades = [];
public genericos = [];
public registros = [];
public comprimidosEditados = false;
public opcionesTipoReceta = [
{ id: 'simple', label: 'Simple' },
{ id: 'duplicado', label: 'Duplicado' },
{ id: 'triplicado', label: 'Triplicado' }
];
public tiemposTratamiento = [
{ id: '3meses', nombre: '3 meses' },
{ id: '6meses', nombre: '6 meses' }
];
ngOnInit() {
if (!this.registro.valor) {
this.registro.valor = {};
}
if (!this.registro.valor.medicamentos) {
this.registro.valor.medicamentos = [];
}
this.registros = this.prestacion.ejecucion.registros.filter(reg => {
reg.nombre !== 'receta';
}
).map(reg => { if (reg.nombre !== 'receta') { return { id: reg.id, nombre: reg.nombre, elementoRUP: reg.elementoRUP }; } });


}


@Unsubscribe()
loadMedicamentoGenerico(event) {
this.comprimidosEditados = false;
const input = event.query;
if (input && input.length > 2) {
const query: any = {
Expand All @@ -51,6 +77,31 @@ export class RecetaMedicaComponent extends RUPComponent implements OnInit {
event.callback([]);
}
}
loadRegistros() {
this.registros = this.prestacion.ejecucion.registros
.filter(reg => reg.nombre !== 'receta')
.map(reg => {
return {
id: reg.id,
nombre: reg.nombre,
elementoRUP: reg.elementoRUP
};
});

};
editarComprimidos() {
if (!this.comprimidosEditados) {
this.plex.confirm('La cantidad recetada no se encuentra en ninguna presentación comercial ¿Desea continuar?', 'Atención').then(confirmacion => {
if (confirmacion) {
this.medicamento.unidades = 0;
this.comprimidosEditados = true;
}
});
} else {
this.comprimidosEditados = false;
}

}

loadPresentaciones() {
this.medicamento.unidades = null;
Expand All @@ -67,8 +118,9 @@ export class RecetaMedicaComponent extends RUPComponent implements OnInit {
search: ''
};
forkJoin(
[this.snomedService.get(queryPresentacion),
this.snomedService.get(queryUnidades)]
[
this.snomedService.get(queryPresentacion),
this.snomedService.get(queryUnidades)]
).subscribe(([resultado, presentaciones]) => {
this.medicamento.presentacion = resultado[0];
this.unidades = presentaciones.map(elto => {
Expand All @@ -78,10 +130,11 @@ export class RecetaMedicaComponent extends RUPComponent implements OnInit {
}
}


agregarMedicamento(form) {
if (form.formValid) {
if (this.registro.valor.medicamentos.length < this.params.limiteMedicamentos) {
if (this.medicamento.unidades.valor) {
if (this.medicamento.unidades?.valor) {
this.medicamento.unidades = Number(this.medicamento.unidades.valor);
}
this.registro.valor.medicamentos.push(this.medicamento);
Expand All @@ -92,19 +145,23 @@ export class RecetaMedicaComponent extends RUPComponent implements OnInit {
unidades: null,
cantidad: null,
diagnostico: '',
tipoReceta: 'simple',
tipoReceta: null,
tratamientoProlongado: false,
tiempoTratamiento: null,
dosisDiaria: {
cantidad: null,
dias: null
dias: null,
notaMedica: null
}
};
this.formMedicamento.reset();
this.formMedicamento.form.markAsPristine();
this.formMedicamento.form.markAsUntouched();
} else {
this.plex.toast('warning', `No se permite cargar más de ${this.params.limiteMedicamentos} medicamentos.`);
}
}
}

borrarMedicamento(medicamento) {
this.plex.confirm('¿Está seguro que desea eliminar el medicamento de la receta?').then((resultado) => {
if (resultado) {
Expand All @@ -113,4 +170,8 @@ export class RecetaMedicaComponent extends RUPComponent implements OnInit {
}
});
}
colapsar() {
this.collapse = !this.collapse;
}

}
112 changes: 76 additions & 36 deletions src/app/modules/rup/components/elementos/recetaMedica.html
Original file line number Diff line number Diff line change
@@ -1,53 +1,93 @@
<ng-container *ngIf="!soloValores">
<form #formMedicamento="ngForm">
<plex-wrapper>
<plex-select [(ngModel)]="medicamento.diagnostico" label="Diagnóstico" [data]="registros" name="diagnostico"
multiline="true" (click)="loadRegistros()" [required]="true">
</plex-select>
<plex-grid cols="2">

<plex-select [(ngModel)]="medicamento.generico" name="generico" (getData)="loadMedicamentoGenerico($event)"
placeholder="Medicamento genérico" label="Medicamento" idField="conceptId" labelField="term"
(change)="loadPresentaciones()" required="true">
</plex-select>
<plex-select name="unidades" *ngIf="unidades.length > 0" [(ngModel)]="medicamento.unidades"
[data]="unidades" placeholder="Seleccione una opción" label="Unidades por presentación"
labelField="valor" required="true">
</plex-select>
<plex-int name="unidades" label="Unidades por presentación" [(ngModel)]="medicamento.unidades"
*ngIf="unidades.length == 0" required="true" min="1" max="90">
</plex-int>
<plex-int name="envases" label="Envases" [(ngModel)]="medicamento.cantidad" required="true" min="1"
max="90">

<div>
<plex-select class="formEditar" name="unidades" *ngIf="unidades.length > 0 && !comprimidosEditados"
[(ngModel)]="medicamento.unidades" [data]="unidades" placeholder="Seleccione una opción"
label="Cantidad de comprimidos" labelField="valor" required="true">
</plex-select>
<plex-int class="formEditar" name="comprimidos" *ngIf="unidades.length == 0 || comprimidosEditados"
label="Cantidad de comprimidos" [(ngModel)]="medicamento.unidades" required="true" min="1"
max="90">
</plex-int>
<plex-button class="d-inline-flex" name="editar" type="warning" icon="pencil" tooltip="Editar cantidad"
size="md" (click)="editarComprimidos()">
</plex-button>
</div>
</plex-grid>
<plex-grid cols="2">

<plex-int name="envases" label="Cantidad de envases" [(ngModel)]="medicamento.cantidad" required="true"
min="1" max="90">
</plex-int>
<plex-text [(ngModel)]="medicamento.diagnostico" label="Diagnóstico" name="motivo" multiline="true"
grow="full">
</plex-text>
<plex-radio [(ngModel)]="medicamento.tipoReceta" label="Tipo de receta" type="horizontal"
[data]="opcionesTipoReceta" name="tipoReceta">

<plex-grid cols="2" style="margin-top: 2rem;grid-gap: 0;">
<plex-bool [(ngModel)]="medicamento.tratamientoProlongado" name="tratamientoProlongado" type="slide"
label="Tratamiento prolongado">
</plex-bool>
<plex-select *ngIf="medicamento.tratamientoProlongado" [(ngModel)]="medicamento.tiempoTratamiento"
name="tiempoTratamiento" [data]="tiemposTratamiento" required="true">
</plex-select>
</plex-grid>
</plex-grid>

<div class="mt-2">
<plex-title name="tipoReceta" titulo="Tipo de receta" size="sm"></plex-title>

<plex-radio class="m-2" [(ngModel)]="medicamento.tipoReceta" [data]="opcionesTipoReceta" name="tipoReceta">
</plex-radio>
<plex-bool [(ngModel)]="medicamento.tratamientoProlongado" label="Tratamiento prolongado"
name="tratamientoProlongado">
</plex-bool>
</plex-wrapper>
<plex-title titulo="Dosis diaria" size="sm"></plex-title>
</div>

<plex-title titulo="Indicaciones" size="sm">
<plex-button name="botonCollapse" class="collapse-button" type="primary" size="sm"
icon="{{ collapse ? 'chevron-down' : 'chevron-up'}}"
title="{{ collapse ? 'Expandir' : 'Colapsar'}}" titlePosition="left" (click)="colapsar()">
</plex-button>
</plex-title>
<plex-wrapper>
<plex-int name="cantidadDiaria" label="Dosis" [(ngModel)]="medicamento.dosisDiaria.cantidad"
required="false" min="1" max="90">
</plex-int>
<plex-int name="duracion" label="Cantidad de días" [(ngModel)]="medicamento.dosisDiaria.dias"
required="false" min="1" max="90">
</plex-int>

<div [hidden]="collapse" class="w-100">
<div class="d-flex">

<plex-int name="Frecuencia" label="Frecuencia" [(ngModel)]="medicamento.dosisDiaria.cantidad"
required="false" min="1" max="90">
</plex-int>
<plex-int name="Duracion" label="Duración" [(ngModel)]="medicamento.dosisDiaria.dias"
required="false" min="1" max="90">
</plex-int>
<plex-text name="notaMedica" label="Notas médicas" [(ngModel)]="medicamento.dosisDiaria.notaMedica"
required="false" min="1" max="90">
</plex-text>
</div>
</div>
</plex-wrapper>
<plex-button type="success" [disabled]="!formMedicamento.valid" (click)="agregarMedicamento($event)"
[validateForm]="formMedicamento">Agregar
</plex-button>
<div class="d-flex justify-content-end">
<plex-button name="botonAgregar" type="info" [disabled]="!formMedicamento.valid"
(click)="agregarMedicamento($event)" [validateForm]="formMedicamento">
Agregar
</plex-button>
</div>
</form>
<plex-list size="sm" *ngIf="registro.valor.medicamentos" class="mt-3">
<plex-item *ngFor="let item of registro.valor.medicamentos">
<plex-icon size="md" *ngIf="true" name="pildoras" class="icon icon--border--producto mr-2">
</plex-icon>
<plex-label [tituloBold]="true" titulo="{{ item.generico.term }}" subtitulo="{{ item.unidades }} {{item.presentacion.term }}(s) por {{ item.cantidad }} envase(s) o {{ item.dosisDiaria.cantidad }} {{item.presentacion.term }}(s) por {{ item.dosisDiaria.dias }} días
"></plex-label>
<plex-badge *ngIf="item.diagnostico" type="warning" hint="{{item.diagnostico}}" hintIcon="informacion"
hintType="warning">Diagnóstico
<plex-badge *ngIf="item.diagnostico" type="warning" hintType="warning">{{item.diagnostico.nombre}}
</plex-badge>
<plex-badge *ngIf="item.tratamientoProlongado" type="info">Tratamiento prolongado
</plex-badge>
<plex-badge type="info">{{item.tipoReceta}}
<plex-badge *ngIf="item.tipoReceta" type="info">{{item.tipoReceta}}
</plex-badge>
<plex-button type="danger" size="sm" (click)="borrarMedicamento(item)" icon="delete"></plex-button>
</plex-item>
Expand All @@ -58,12 +98,12 @@
<plex-item *ngFor="let item of registro.valor.medicamentos">
<plex-label [tituloBold]="true" titulo="{{ item.generico.term }}" subtitulo="{{ item.unidades }} {{item.presentacion.term }}(s) por {{ item.cantidad }} envase(s) o {{ item.dosisDiaria.cantidad }} {{item.presentacion.term }}(s) por {{ item.dosisDiaria.dias }} días
"></plex-label>
<plex-badge *ngIf="item.diagnostico" type="warning" hint="{{item.diagnostico}}" hintIcon="informacion"
hintType="warning"> Diagnóstico</plex-badge>
<plex-badge *ngIf="item.diagnostico" type="warning" hintType="warning">
{{item.diagnostico.nombre}}</plex-badge>
<plex-badge *ngIf="item.tratamientoProlongado" type="info">Tratamiento prolongado
</plex-badge>
<plex-badge type="info">{{item.tipoReceta}}
<plex-badge *ngIf="item.tipoReceta" type="info">{{item.tipoReceta}}
</plex-badge>
</plex-item>
</plex-list>
</div>
</div>
5 changes: 5 additions & 0 deletions src/app/modules/rup/components/elementos/recetaMedica.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.formEditar {
margin-right: 0;
display: inline-block;
width: 85%;
}

0 comments on commit 91026d4

Please sign in to comment.