Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 111 additions & 35 deletions src/app/modules/rup/components/huds/vistaReceta.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
<div class="info-registro">
<div class="vista-badges">
<plex-badge *ngIf="recetaPrincipal.estadoActual" size="sm"
[type]="estadoReceta[recetaPrincipal.estadoActual.tipo]">
[type]="estadoReceta[recetaPrincipal.estadoActual.tipo]">
{{ recetaPrincipal.estadoActual.tipo.replace('-', ' ') }}
</plex-badge>
<plex-badge *ngIf="recetaPrincipal.estadoDispensaActual" size="sm"
[type]="estadoDispensa[recetaPrincipal.estadoDispensaActual.tipo]">
[type]="estadoDispensa[recetaPrincipal.estadoDispensaActual.tipo]">
{{ recetaPrincipal.estadoDispensaActual.tipo.replace('-', ' ') }}
</plex-badge>
<plex-badge *ngIf="recetaPrincipal.medicamento" size="sm" type="default">
Expand All @@ -18,9 +18,10 @@
</div>
<div case="capitalize"><b>{{ recetaPrincipal.medicamento.concepto.term }}</b></div>
<p *ngIf="recetaPrincipal.medicamento.cantidad && recetaPrincipal.medicamento.cantEnvases "><small>
{{ recetaPrincipal.medicamento.cantEnvases}} envase(s) de {{ recetaPrincipal.medicamento.cantidad}} {{recetaPrincipal.medicamento.presentacion }}(s)
{{ recetaPrincipal.medicamento.cantEnvases}} envase(s) de {{
recetaPrincipal.medicamento.cantidad}} {{recetaPrincipal.medicamento.presentacion }}(s)

</small></p>
</small></p>
<p *ngIf="recetaPrincipal.medicamento.dosisDiaria.dosis"><small>{{
'|' +recetaPrincipal.medicamento.dosisDiaria.dias ? recetaPrincipal.medicamento.dosisDiaria.dias
+ ' día(s)' : '' }} {{
Expand Down Expand Up @@ -67,6 +68,31 @@
</div>
</div>


<div class="mt-4 mb-3 d-flex flex-column" *ngIf="recetasRestantes.length > 0">
<plex-title titulo="Tratamiento prolongado" size="sm" class="text-uppercase"></plex-title>
<div class="border mt-2 border-bottom-0 d-flex flex-column" style="gap: 5px;">
<div *ngFor="let receta of recetasRestantes; let last = last" class="tratamiento-item">
<div class="icon-wrapper">
<plex-icon name="listado-receta" class="icon-info-detalle" size="md"></plex-icon>
</div>
<div style="flex-grow: 1;">
<div case="capitalize"><b>{{ receta.medicamento.concepto.term }}</b></div>
<p class="m-0"><small>Orden {{receta.medicamento.ordenTratamiento + 1}} de
{{receta.medicamento.tiempoTratamiento?.id}}</small></p>
</div>
<div class="vista-badges ml-3 d-flex align-items-center justify-content-end" style="min-width: 20%">
<plex-badge size="sm" [type]="estadoReceta[receta.estadoActual.tipo]" outline="true">
{{ receta.estadoActual.tipo }}
</plex-badge>
<plex-badge size="sm" [type]="estadoDispensa[receta.estadoDispensaActual.tipo]" outline="true">
{{ receta.estadoDispensaActual.tipo.replace('-', ' ') }}
</plex-badge>
</div>
</div>
</div>
</div>

<div class="mt-2 mb-2" *ngIf="listadoDispensas.length > 0">
<plex-title titulo="Detalle dispensa" size="sm"></plex-title>
<div class="info-solicitud dispensada mt-2" *ngIf="recetaPrincipal.estadosDispensa.length > 0">
Expand All @@ -88,7 +114,7 @@
<plex-badge *ngIf="estadoDispensa.dispensaDuplicada" size="sm" [type]="'warning'">
dispensa duplicada
</plex-badge>
<plex-badge *ngIf="estadoDispensa.cancelada" size="sm" [type]="'danger'" >
<plex-badge *ngIf="estadoDispensa.cancelada" size="sm" [type]="'danger'">
dispensa cancelada {{(estadoDispensa.fechaCancelada | date: 'dd/MM/yyyy HH:mm')}}
</plex-badge>
</div>
Expand Down Expand Up @@ -130,36 +156,86 @@

<div class="mt-4 mb-3 historial-recetas">
<plex-label *ngIf="!historialRecetas.length" size="sm" justify="center" icon="adi adi-listado-receta"
titulo="No hay elementos registrados">
titulo="No hay elementos registrados">
</plex-label>
<plex-table *ngIf="historialRecetas.length" [columns]="columns" #table="plTable">
<plex-table-columns>
</plex-table-columns>
<tr *ngFor="let receta of historialRecetas"
[ngClass]="{'suspendida': receta.estadoActual.tipo === 'suspendida'}">
<td *plTableCol="'fecha'">
{{ receta.fechaRegistro | date:'dd/MM/yyyy HH:mm' }}
</td>
<td *plTableCol="'organizacion'">
{{ receta.organizacion.nombre }}
</td>
<td *plTableCol="'profesional'">
{{ receta.profesional.nombre }} {{ receta.profesional.apellido }}
</td>
<td *plTableCol="'diagnostico'">
{{ receta.diagnostico.term || receta.diagnostico.descripcion }}
</td>
<td *plTableCol="'estado'">
<div class="vista-badges">
<plex-badge size="sm" [type]="estadoReceta[receta.estadoActual.tipo]">
{{ receta.estadoActual.tipo }}
</plex-badge>
<plex-badge size="sm" [type]="estadoDispensa[receta.estadoDispensaActual.tipo]">
{{ receta.estadoDispensaActual.tipo.replace('-', ' ') }}
</plex-badge>
</div>
</td>
</tr>
</plex-table>
<div class="table-responsive" *ngIf="historialRecetas.length">
<table class="table table-striped table-historial">
<thead>
<tr>
<th *ngFor="let col of columns">{{col.label}}</th>
</tr>
</thead>
<tbody>
<ng-container *ngFor="let item of historialRecetas">
<tr [ngClass]="{
'suspendida': !item.esGrupo && item.estadoActual?.tipo === 'suspendida',
'grupo-header-expanded': item.esGrupo && item.expandido
}">
<td>
{{ item.fechaRegistro | date:'dd/MM/yyyy' }}
</td>
<td>
{{ item.organizacion?.nombre }}
</td>
<td>
{{ item.profesional?.nombre }} {{ item.profesional?.apellido }}
</td>
<td>
{{ item.diagnostico?.term || item.diagnostico?.descripcion }}
</td>
<td>
<div class="vista-badges" *ngIf="!item.esGrupo">
<plex-badge size="sm" [type]="estadoReceta[item.estadoActual.tipo]" outline="true">
{{ item.estadoActual.tipo }}
</plex-badge>
<plex-badge size="sm" [type]="estadoDispensa[item.estadoDispensaActual.tipo]"
outline="true">
{{ item.estadoDispensaActual.tipo.replace('-', ' ') }}
</plex-badge>
</div>
<div class="d-flex justify-content-end align-items-center w-100" *ngIf="item.esGrupo">
<plex-badge type="info" size="sm" outline="true">
TRATAMIENTO PROLONGADO
<plex-button [icon]="item.expandido ? 'chevron-up' : 'chevron-down'" type="info"
(click)="item.expandido = !item.expandido"></plex-button>
</plex-badge>
</div>
</td>
</tr>
<ng-container *ngIf="item.esGrupo && item.expandido">
<tr *ngFor="let receta of item.recetas; let last = last; let first = first"
class="grupo-detalle-expanded"
[ngClass]="{'ultimo-detalle': last, 'primer-detalle': first}">
<td colspan="4" class="align-middle">
<div class="d-flex align-items-center">
<div class="icon-wrapper">
<plex-icon name="listado-receta" class="icon-info-detalle"
size="md"></plex-icon>
</div>
<div style="flex-grow: 1;">
<div case="capitalize"><b>{{ receta.medicamento.concepto.term }}</b></div>
<p class="m-0"><small>Orden {{receta.medicamento.ordenTratamiento + 1}} de
{{receta.medicamento.tiempoTratamiento?.id}}</small></p>
</div>
</div>
</td>
<td class="align-middle">
<div class="vista-badges justify-content-end">
<plex-badge size="sm" [type]="estadoReceta[receta.estadoActual.tipo]"
outline="true">
{{ receta.estadoActual.tipo }}
</plex-badge>
<plex-badge size="sm" [type]="estadoDispensa[receta.estadoDispensaActual.tipo]"
outline="true">
{{ receta.estadoDispensaActual.tipo.replace('-', ' ') }}
</plex-badge>
</div>
</td>
</tr>
</ng-container>
</ng-container>
</tbody>
</table>
</div>
</div>
</div>
87 changes: 87 additions & 0 deletions src/app/modules/rup/components/huds/vistaReceta.scss
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,13 @@
.detalle-dispensa {
margin-right: 1;
}

.tratamiento-item {
display: flex;
padding: 10px 10px 10px 0px;
align-items: center;
border: 1px solid #999;
}
}

.historial-recetas {
Expand Down Expand Up @@ -244,4 +251,84 @@
}
}
}
}

.table-historial {
border-collapse: collapse;

tr.grupo-header-expanded {
background-color: #f6fcff; // subtle blue background if needed

td {
border-top: 1px solid #00a8e0 !important;
box-shadow: inset 0 1px 0 0 #00a8e0;
border-bottom: none !important;

&:first-child {
border-left: 1px solid #00a8e0 !important;
box-shadow: inset 0 1px 0 0 #00a8e0, inset 1px 0 0 0 #00a8e0;
}

&:last-child {
border-right: 1px solid #00a8e0 !important;
box-shadow: inset 0 1px 0 0 #00a8e0, inset -1px 0 0 0 #00a8e0;
}
}
}

tr.grupo-detalle-expanded {
background-color: white;

td {
border-top: 1px solid #dee2e6 !important;
border-bottom: none !important;

&:first-child {
border-left: 1px solid #00a8e0 !important;
box-shadow: inset 1px 0 0 0 #00a8e0;
}

&:last-child {
border-right: 1px solid #00a8e0 !important;
box-shadow: inset -1px 0 0 0 #00a8e0;
}
}

&.ultimo-detalle td {
border-bottom: 1px solid #00a8e0 !important;
box-shadow: inset 0 -1px 0 0 #00a8e0;

&:first-child {
box-shadow: inset 1px -1px 0 0 #00a8e0;
}

&:last-child {
box-shadow: inset -1px -1px 0 0 #00a8e0;
}
}

/* ensure the first detail row does not have double top border since the header has a top border */
&.primer-detalle td {
border-top: none !important;
}
}
}

.icon-wrapper {
min-width: 80px;
display: flex;
justify-content: center;
}

.icon-info-detalle {
color: $recetas;
/* purple color mapped to $recetas */
padding: 8px;
border: 1px solid $recetas;
border-radius: 100%;
width: 45px;
height: 45px;
align-items: center;
display: flex;
justify-content: center;
}
62 changes: 60 additions & 2 deletions src/app/modules/rup/components/huds/vistaReceta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ export class VistaRecetaComponent implements OnInit {
public recetas;
public recetaPrincipal: any;
public historialRecetas: any[];
public recetasRestantes: any[] = [];

constructor(
public huds: HUDSService,
Expand All @@ -106,9 +107,66 @@ export class VistaRecetaComponent implements OnInit {
) { }

ngOnInit() {
this.recetaPrincipal = this.registro.recetas.length>1?this.recetaService.getRecetaPrincipal(this.registro.recetas): this.registro.recetas[0];
this.recetaPrincipal = this.registro.recetas.length > 1 ? this.recetaService.getRecetaPrincipal(this.registro.recetas) : this.registro.recetas[0];
this.combinarDispensas();
this.historialRecetas = this.registro.recetas.filter(receta => receta.id !== this.recetaPrincipal.id && receta.fechaRegistro <= this.recetaPrincipal.fechaRegistro && receta.estadoActual?.tipo !== 'eliminada');

const historialBase = this.registro.recetas.filter(receta => receta.id !== this.recetaPrincipal.id && receta.fechaRegistro <= this.recetaPrincipal.fechaRegistro && receta.estadoActual?.tipo !== 'eliminada');

this.recetasRestantes = this.registro.recetas.filter(r =>
r.id !== this.recetaPrincipal.id &&
r.idRegistro === this.recetaPrincipal.idRegistro &&
this.recetaPrincipal.medicamento.tratamientoProlongado &&
r.estadoActual?.tipo !== 'eliminada'
);
this.recetasRestantes.sort((a, b) => (a.medicamento.ordenTratamiento || 0) - (b.medicamento.ordenTratamiento || 0));

const historialExcluidoActual = historialBase.filter(r => {
if (this.recetaPrincipal.medicamento.tratamientoProlongado) {
if (r.idRegistro === this.recetaPrincipal.idRegistro) {
return false;
}
if (r.medicamento.tratamientoProlongado && r.medicamento.concepto.conceptId === this.recetaPrincipal.medicamento.concepto.conceptId) {
return false;
}
}
return true;
});

const grupos = {};
const result = [];

historialExcluidoActual.forEach(receta => {
if (receta.medicamento.tratamientoProlongado && receta.idRegistro) {
if (!grupos[receta.idRegistro]) {
grupos[receta.idRegistro] = [];
}
grupos[receta.idRegistro].push(receta);
} else {
result.push(receta);
}
});

Object.keys(grupos).forEach(key => {
const recetasGrupo = grupos[key];
const todasFinalizadas = recetasGrupo.every(r => r.estadoActual?.tipo !== 'vigente');
if (todasFinalizadas) {
recetasGrupo.sort((a, b) => a.medicamento.ordenTratamiento - b.medicamento.ordenTratamiento);
result.push({
esGrupo: true,
expandido: false,
fechaRegistro: recetasGrupo[0].fechaRegistro,
organizacion: recetasGrupo[0].organizacion,
profesional: recetasGrupo[0].profesional,
diagnostico: recetasGrupo[0].diagnostico,
recetas: recetasGrupo
});
} else {
result.push(...recetasGrupo);
}
});

result.sort((a, b) => new Date(b.fechaRegistro).getTime() - new Date(a.fechaRegistro).getTime());
this.historialRecetas = result;
}

combinarDispensas() {
Expand Down
Loading