From d4634eccad3b635b53d3b239234429917f93ecc5 Mon Sep 17 00:00:00 2001 From: Fabio-Ramirez Date: Mon, 7 Sep 2026 09:22:47 -0300 Subject: [PATCH] =?UTF-8?q?HUDS=20-=20Visualizaci=C3=B3n=20PDF=20recetas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acciones-envio-informe.component.ts | 14 + .../rup/components/huds/vistaReceta.html | 464 +++++++++--------- .../rup/components/huds/vistaReceta.scss | 8 + .../rup/components/huds/vistaReceta.ts | 42 +- src/app/services/documentos.service.ts | 6 + 5 files changed, 305 insertions(+), 229 deletions(-) diff --git a/src/app/modules/rup/components/ejecucion/acciones-envio-informe/acciones-envio-informe.component.ts b/src/app/modules/rup/components/ejecucion/acciones-envio-informe/acciones-envio-informe.component.ts index fe1ebb9c00..1b316d31c9 100644 --- a/src/app/modules/rup/components/ejecucion/acciones-envio-informe/acciones-envio-informe.component.ts +++ b/src/app/modules/rup/components/ejecucion/acciones-envio-informe/acciones-envio-informe.component.ts @@ -155,6 +155,13 @@ export class RUPAccionesEnvioInformeComponent { + private isRecetaRegistro(registro: any): boolean { + if (!registro) { return false; } + const concepto = registro.concepto?.conceptId; + // 33633005 = prescripción de medicamento, 182836005 = alternativa registrada en componente RUP; incluye insumos + return concepto === '33633005' || concepto === '182836005' || !!registro.valor?.medicamentos || !!registro.valor?.insumos || !!registro.valor?.insumo; + } + async descargarInforme() { this.requestInProgress = true; let term; @@ -170,6 +177,13 @@ export class RUPAccionesEnvioInformeComponent { term = this.prestacion.solicitud.tipoPrestacion.term; } + if (this.registro && this.isRecetaRegistro(this.registro)) { + this.servicioDocumentos.descargarReceta(informe, term).subscribe( + () => this.requestInProgress = false, + () => this.requestInProgress = false + ); + return; + } this.servicioDocumentos.descargarInformeRUP(informe, term).subscribe( () => { diff --git a/src/app/modules/rup/components/huds/vistaReceta.html b/src/app/modules/rup/components/huds/vistaReceta.html index d5e6805ccf..9e027666bf 100644 --- a/src/app/modules/rup/components/huds/vistaReceta.html +++ b/src/app/modules/rup/components/huds/vistaReceta.html @@ -25,276 +25,284 @@ Fórmula Magistral +
+ + +
{{ recetaPrincipal?.medicamento?.concepto?.term || recetaPrincipal?.insumo?.nombre || recetaPrincipal?.medicamento?.nombre }}
-

- {{ 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) +

-

- {{ recetaPrincipal.insumo.cantidad }} {{ recetaPrincipal.insumo.presentacion || 'unidad(es)' }} -

+

+ {{ recetaPrincipal.insumo.cantidad }} {{ recetaPrincipal.insumo.presentacion || 'unidad(es)' }} +

-

{{ - '|' + (recetaPrincipal.medicamento.dosisDiaria?.dias ? recetaPrincipal.medicamento.dosisDiaria?.dias - + ' día(s)' : '') }} {{ - recetaPrincipal.medicamento.dosisDiaria?.dosis }} {{ - recetaPrincipal.medicamento.presentacion }} cada {{ - recetaPrincipal.medicamento.dosisDiaria?.intervalo?.nombre }} -

- - -
-
- Fecha -

{{recetaPrincipal?.fechaRegistro | date:'dd/MM/yyyy HH:mm'}}

-
-
- Profesional -

{{recetaPrincipal?.profesional?.apellido}}, - {{recetaPrincipal?.profesional?.nombre}}

-
-
- Diagnóstico -

{{recetaPrincipal?.diagnostico?.term || recetaPrincipal?.diagnostico?.descripcion}} -

-
-
- Indicación para el paciente -

{{recetaPrincipal.medicamento.dosisDiaria.notaMedica}}

-
-
- Indicación para la farmacia -

{{recetaPrincipal.medicamento.dosisDiaria.notaFarmacia}}

+

{{ + '|' + (recetaPrincipal.medicamento.dosisDiaria?.dias ? + recetaPrincipal.medicamento.dosisDiaria?.dias + + ' día(s)' : '') }} {{ + recetaPrincipal.medicamento.dosisDiaria?.dosis }} {{ + recetaPrincipal.medicamento.presentacion }} cada {{ + recetaPrincipal.medicamento.dosisDiaria?.intervalo?.nombre }} +

+
- +
- Serie -

{{recetaPrincipal.medicamento?.serie}}

+ Fecha +

{{recetaPrincipal?.fechaRegistro | date:'dd/MM/yyyy HH:mm'}}

- Número -

{{recetaPrincipal.medicamento?.numero}}

+ Profesional +

{{recetaPrincipal?.profesional?.apellido}}, + {{recetaPrincipal?.profesional?.nombre}}

- +
+ Diagnóstico +

{{recetaPrincipal?.diagnostico?.term || + recetaPrincipal?.diagnostico?.descripcion}} +

+
+
+ Indicación para el paciente +

{{recetaPrincipal.medicamento.dosisDiaria.notaMedica}}

+
+
+ Indicación para la farmacia +

{{recetaPrincipal.medicamento.dosisDiaria.notaFarmacia}}

+
+ +
+ Serie +

{{recetaPrincipal.medicamento?.serie}}

+
+
+ Número +

{{recetaPrincipal.medicamento?.numero}}

+
+
-
-
-
- Tratamiento Prolongado -

- {{recetaPrincipal.medicamento?.tiempoTratamiento?.nombre}} - orden: {{ - recetaPrincipal.medicamento?.ordenTratamiento + 1 }} de - {{recetaPrincipal.medicamento?.tiempoTratamiento?.id}} -

-

- {{recetaPrincipal.insumo?.tiempoTratamiento?.nombre || 'Sí'}} - orden: {{ - (recetaPrincipal.insumo?.ordenTratamiento || 0) + 1 }} -

-
-
- Es Magistral -

Sí

-
- - -
- -
-
-
- +
+
+ Tratamiento Prolongado +

+ {{recetaPrincipal.medicamento?.tiempoTratamiento?.nombre}} - orden: {{ + recetaPrincipal.medicamento?.ordenTratamiento + 1 }} de + {{recetaPrincipal.medicamento?.tiempoTratamiento?.id}} +

+

+ {{recetaPrincipal.insumo?.tiempoTratamiento?.nombre || 'Sí'}} - orden: {{ + (recetaPrincipal.insumo?.ordenTratamiento || 0) + 1 }} +

-
-
{{ receta.medicamento?.concepto?.term || receta.insumo?.nombre || - receta.medicamento?.nombre }}
-

Orden {{ ((receta.medicamento?.ordenTratamiento ?? - receta.insumo?.ordenTratamiento) || 0) + 1 }} de - {{ receta.medicamento?.tiempoTratamiento?.id || receta.insumo?.tiempoTratamiento?.id || '1' - }}

-
-
- - {{ receta.estadoActual?.tipo }} - - - {{ receta.estadoDispensaActual?.tipo?.replace('-', ' ') }} - - - {{ checkDispensaAnticipada(receta) }} - +
+ Es Magistral +

Sí

-
-
- -
-
-
FECHA
-
{{ labelColumnaDispensa }}
-
SISTEMA
-
ORGANIZACIÓN
-
ESTADO
-
-
- - -
-
{{ estadoDispensa.fecha | date: 'dd/MM/yyyy HH:mm' }}
-
{{ estadoDispensa.detalleMedicamento }}
-
{{ estadoDispensa.sistema }}
-
{{ estadoDispensa.organizacion }}
-
{{ estadoDispensa.tipo}}
-
- - dispensa duplicada +
+ +
+
+
+ +
+
+
{{ receta.medicamento?.concepto?.term || receta.insumo?.nombre || + receta.medicamento?.nombre }}
+

Orden {{ ((receta.medicamento?.ordenTratamiento ?? + receta.insumo?.ordenTratamiento) || 0) + 1 }} de + {{ receta.medicamento?.tiempoTratamiento?.id || receta.insumo?.tiempoTratamiento?.id || '1' + }}

+
+
+ + {{ receta.estadoActual?.tipo }} + + + {{ receta.estadoDispensaActual?.tipo?.replace('-', ' ') }} - - dispensa cancelada {{(estadoDispensa.fechaCancelada | date: 'dd/MM/yyyy HH:mm')}} + + {{ checkDispensaAnticipada(receta) }}
- +
-
-
- -
-
-
-
- Fecha -

{{recetaPrincipal.estadoActual.createdAt | date:'dd/MM/yyyy HH:mm'}}

-
-
- Profesional -

- {{recetaPrincipal.estadoActual.profesional?.apellido}}, - {{recetaPrincipal.estadoActual.profesional?.nombre}}

-

- Sin profesional -

-
-
- Motivo -

{{recetaPrincipal.estadoActual.motivo || '- Sin especificar -'}}

+
+ +
+
+
FECHA
+
{{ labelColumnaDispensa }}
+
SISTEMA
+
ORGANIZACIÓN
+
ESTADO
+
+
+ + +
+
{{ estadoDispensa.fecha | date: 'dd/MM/yyyy HH:mm' }}
+
{{ estadoDispensa.detalleMedicamento }}
+
{{ estadoDispensa.sistema }}
+
{{ estadoDispensa.organizacion }}
+
{{ estadoDispensa.tipo}}
+
+ + dispensa duplicada + + + dispensa cancelada {{(estadoDispensa.fechaCancelada | date: 'dd/MM/yyyy HH:mm')}} + +
+
+
-
- Observación -

{{recetaPrincipal.estadoActual.observacion || "- Sin especificar -"}}

+
+
+ +
+ +
+
+
+ Fecha +

{{recetaPrincipal.estadoActual.createdAt | date:'dd/MM/yyyy HH:mm'}}

+
+
+ Profesional +

+ {{recetaPrincipal.estadoActual.profesional?.apellido}}, + {{recetaPrincipal.estadoActual.profesional?.nombre}}

+

- Sin profesional -

+
+
+ Motivo +

{{recetaPrincipal.estadoActual.motivo || '- Sin especificar -'}}

+
+
+ Observación +

{{recetaPrincipal.estadoActual.observacion || "- Sin especificar -"}}

+
-
-
- -
+
+ +
-
- - -
- - - - - - - - - + + +
+
{{col.label}}
+ + + + + + + + - - - - - - - - - - + + + + + + + + + - - -
{{col.label}}
- {{ item.fechaRegistro | date:'dd/MM/yyyy' }} - - {{ item.organizacion?.nombre }} - - {{ item.profesional?.nombre }} {{ item.profesional?.apellido }} - - {{ item.diagnostico?.term || item.diagnostico?.descripcion }} - -
- - {{ item.estadoActual?.tipo }} - - - {{ item.estadoDispensaActual?.tipo?.replace('-', ' ') }} - - - {{ checkDispensaAnticipada(item) }} - -
-
- - TRATAMIENTO PROLONGADO - - -
-
-
-
- -
-
-
{{ receta.medicamento?.concepto?.term || - receta.insumo?.nombre || receta.medicamento?.nombre }}
-

Orden {{ ((receta.medicamento?.ordenTratamiento ?? - receta.insumo?.ordenTratamiento) || 0) + 1 }} de - {{ receta.medicamento?.tiempoTratamiento?.id || - receta.insumo?.tiempoTratamiento?.id || '1' }}

-
-
+
+ {{ item.fechaRegistro | date:'dd/MM/yyyy' }} -
- - {{ receta.estadoActual?.tipo }} +
+ {{ item.organizacion?.nombre }} + + {{ item.profesional?.nombre }} {{ item.profesional?.apellido }} + + {{ item.diagnostico?.term || item.diagnostico?.descripcion }} + +
+ + {{ item.estadoActual?.tipo }} - - {{ receta.estadoDispensaActual?.tipo?.replace('-', ' ') }} + + {{ item.estadoDispensaActual?.tipo?.replace('-', ' ') }} - - {{ checkDispensaAnticipada(receta) }} + {{ checkDispensaAnticipada(item) }} + +
+
+ + TRATAMIENTO PROLONGADO +
+
+
+ +
+
+
{{ receta.medicamento?.concepto?.term || + receta.insumo?.nombre || receta.medicamento?.nombre }}
+

Orden {{ ((receta.medicamento?.ordenTratamiento ?? + receta.insumo?.ordenTratamiento) || 0) + 1 }} de + {{ receta.medicamento?.tiempoTratamiento?.id || + receta.insumo?.tiempoTratamiento?.id || '1' }}

+
+
+
+
+ + {{ receta.estadoActual?.tipo }} + + + {{ receta.estadoDispensaActual?.tipo?.replace('-', ' ') }} + + + {{ checkDispensaAnticipada(receta) }} + +
+
+ + +
-
\ No newline at end of file diff --git a/src/app/modules/rup/components/huds/vistaReceta.scss b/src/app/modules/rup/components/huds/vistaReceta.scss index 0b753f3f39..fbd2029830 100644 --- a/src/app/modules/rup/components/huds/vistaReceta.scss +++ b/src/app/modules/rup/components/huds/vistaReceta.scss @@ -25,6 +25,13 @@ display: flex; column-gap: 5px; align-items: center; + width: 100%; + } + + .descargar-pdf { + margin-left: auto; + margin-bottom: 10px; + margin-right: 10px } .registros { @@ -47,6 +54,7 @@ .info-registro { display: flex; flex-direction: column; + flex-grow: 1; plex-badge { margin-bottom: 10px; diff --git a/src/app/modules/rup/components/huds/vistaReceta.ts b/src/app/modules/rup/components/huds/vistaReceta.ts index 19d223f0ed..a37a9d22bf 100644 --- a/src/app/modules/rup/components/huds/vistaReceta.ts +++ b/src/app/modules/rup/components/huds/vistaReceta.ts @@ -3,6 +3,7 @@ import { IPaciente } from '../../../../core/mpi/interfaces/IPaciente'; import { HUDSService } from '../../services/huds.service'; import { RecetaService } from 'src/app/services/receta.service'; import { OrganizacionService } from 'src/app/services/organizacion.service'; +import { DocumentosService } from '../../../../services/documentos.service'; import moment from 'moment'; @Component({ @@ -105,12 +106,14 @@ export class VistaRecetaComponent implements OnInit { public recetas; public recetaPrincipal: any; public historialRecetas: any[]; + public requestInProgress = false; public recetasRestantes: any[] = []; constructor( public huds: HUDSService, public recetaService: RecetaService, - public organizacionesService: OrganizacionService + public organizacionesService: OrganizacionService, + private documentosService: DocumentosService ) { } ngOnInit() { @@ -302,4 +305,41 @@ export class VistaRecetaComponent implements OnInit { return null; } + puedeDescargarReceta(receta: any): boolean { + if (!receta) { return false; } + const estado = receta.estadoActual?.tipo; + const dispensa = receta.estadoDispensaActual?.tipo; + const esProlongado = receta.medicamento?.tratamientoProlongado || receta.insumo?.tratamientoProlongado; + if (esProlongado) { + return (estado === 'vigente' || estado === 'pendiente') && dispensa === 'sin-dispensa'; + } + return estado === 'vigente' && dispensa === 'sin-dispensa'; + } + + get recetasDescargables(): any[] { + if (!this.registro?.recetas) { return []; } + return this.registro.recetas.filter(r => this.puedeDescargarReceta(r)); + } + + verDescargarReceta(): boolean { + return this.recetasDescargables.length > 0; + } + + // Unificado: descarga todas las recetas seleccionadas (1 o N). Antes separado por caso prolongado (1 hoja vs N hojas). + descargarPdf() { + if (!this.recetasDescargables.length) { return; } + this.requestInProgress = true; + const primera = this.recetasDescargables[0]; + const nombre = primera.medicamento?.nombre || primera.medicamento?.concepto?.term || primera.insumo?.nombre || 'prescripción de medicamento'; + const informe: any = { + idPrestacion: primera.idPrestacion, + idRegistro: primera.idRegistro, + recetasIds: this.recetasDescargables.map(r => r.id || r._id) + }; + this.documentosService.descargarReceta(informe, nombre).subscribe( + () => this.requestInProgress = false, + () => this.requestInProgress = false + ); + } + } diff --git a/src/app/services/documentos.service.ts b/src/app/services/documentos.service.ts index 4aeb7a4d08..6c614f39d4 100644 --- a/src/app/services/documentos.service.ts +++ b/src/app/services/documentos.service.ts @@ -18,6 +18,12 @@ export class DocumentosService { ); } + descargarReceta(informe, nombreArchivo: string): Observable { + return this.download('recetas', informe).pipe( + saveAs(nombreArchivo, 'pdf') + ); + } + descargarLaboratorio(params, nombreArchivo: string): Observable { return this.download('laboratorio/pdf', params).pipe( saveAs(nombreArchivo, 'pdf')