From 7f140e4758a0a39e8382dbbd87fed7fa918ac6f0 Mon Sep 17 00:00:00 2001
From: nicolasarana <90768149+nicolasarana@users.noreply.github.com>
Date: Thu, 9 Apr 2026 09:59:09 -0300
Subject: [PATCH] TYP - Descarga de odontograma PDF
---
.../elementos-rup/odontograma.component.ts | 146 +++++++++---------
modules/descargas/informe-rup/informe-rup.ts | 12 +-
modules/descargas/routes/descargas.ts | 3 +-
3 files changed, 89 insertions(+), 72 deletions(-)
diff --git a/modules/descargas/informe-rup/elementos-rup/odontograma.component.ts b/modules/descargas/informe-rup/elementos-rup/odontograma.component.ts
index 7e6e9d3723..d5dd4cbc10 100644
--- a/modules/descargas/informe-rup/elementos-rup/odontograma.component.ts
+++ b/modules/descargas/informe-rup/elementos-rup/odontograma.component.ts
@@ -4,87 +4,93 @@ export class OdontogramaRefsetComponent extends HTMLComponent {
template = `
- {{ registro.concepto.term }}
+ {{ registro.concepto.term }}
{{#if registro.esDiagnosticoPrincipal}}(PROCEDIMIENTO / DIAGNÓSTICO PRINCIPAL){{/if}}
-
-
- {{#each valor.infDer}}
-
Cuadrante Inferior Derecho:
-
- pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
-
- {{/each}}
-
- {{#each valor.infDerT}}
-
Cuadrante Inferior Derecho Temporal:
-
- pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
-
- {{/each}}
-
- {{#each valor.infIzq}}
-
Cuadrante Inferior Izquierdo:
-
- pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
-
- {{/each}}
-
- {{#each valor.infIzqT}}
-
Cuadrante Inferior Izquierdo Temporal:
-
- pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
-
- {{/each}}
-
- {{#each valor.supDer}}
-
Cuadrante Superior Derecho:
-
- pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
-
- {{/each}}
-
- {{#each valor.supDerT}}
-
Cuadrante Superior Derecho Temporal:
-
- pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
-
- {{/each}}
-
- {{#each valor.supIzq}}
-
Cuadrante Superior Izquierdo:
-
- pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
-
- {{/each}}
-
- {{#each valor.supIzqT}}
-
Cuadrante Superior Izquierdo Temporal:
-
- pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
-
- {{/each}}
-
-
-
-
+
+
+ {{#if snapshot}}
+
+

+
+ {{/if}}
+
+
+ {{#each valor.infDer}}
+
Cuadrante Inferior Derecho:
+
+ pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
+
+ {{/each}}
+
+ {{#each valor.infDerT}}
+
Cuadrante Inferior Derecho Temporal:
+
+ pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
+
+ {{/each}}
+
+ {{#each valor.infIzq}}
+
Cuadrante Inferior Izquierdo:
+
+ pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
+
+ {{/each}}
+
+ {{#each valor.infIzqT}}
+
Cuadrante Inferior Izquierdo Temporal:
+
+ pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
+
+ {{/each}}
+
+ {{#each valor.supDer}}
+
Cuadrante Superior Derecho:
+
+ pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
+
+ {{/each}}
+
+ {{#each valor.supDerT}}
+
Cuadrante Superior Derecho Temporal:
+
+ pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
+
+ {{/each}}
+
+ {{#each valor.supIzq}}
+
Cuadrante Superior Izquierdo:
+
+ pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
+
+ {{/each}}
+
+ {{#each valor.supIzqT}}
+
Cuadrante Superior Izquierdo Temporal:
+
+ pieza N°{{ concepto.term }} | cara: {{ cara }} | cuadrante: {{ cuadrante }}
+
+ {{/each}}
+
+
`;
constructor(private prestacion, private registro, private params, private depth) {
super();
}
async process() {
- const infDer = this.registro.valor.odontograma.cuadranteInferiorDerecho.filter(diente => diente.cara);
- const infIzq = this.registro.valor.odontograma.cuadranteInferiorIzquierdo.filter(diente => diente.cara);
- const supDer = this.registro.valor.odontograma.cuadranteSuperiorDerecho.filter(diente => diente.cara);
- const supIzq = this.registro.valor.odontograma.cuadranteSuperiorIzquierdo.filter(diente => diente.cara);
+ const infDer = this.registro.valor.odontograma?.cuadranteInferiorDerecho.filter(diente => diente.cara) || [];
+ const infIzq = this.registro.valor.odontograma?.cuadranteInferiorIzquierdo.filter(diente => diente.cara) || [];
+ const supDer = this.registro.valor.odontograma?.cuadranteSuperiorDerecho.filter(diente => diente.cara) || [];
+ const supIzq = this.registro.valor.odontograma?.cuadranteSuperiorIzquierdo.filter(diente => diente.cara) || [];
- const infDerT = this.registro.valor.odontograma.cuadranteInferiorDerechoTemporal.filter(diente => diente.cara);
- const infIzqT = this.registro.valor.odontograma.cuadranteInferiorIzquierdoTemporal.filter(diente => diente.cara);
- const supDerT = this.registro.valor.odontograma.cuadranteSuperiorDerechoTemporal.filter(diente => diente.cara);
- const supIzqT = this.registro.valor.odontograma.cuadranteSuperiorIzquierdoTemporal.filter(diente => diente.cara);
+ const infDerT = this.registro.valor.odontograma?.cuadranteInferiorDerechoTemporal.filter(diente => diente.cara) || [];
+ const infIzqT = this.registro.valor.odontograma?.cuadranteInferiorIzquierdoTemporal.filter(diente => diente.cara) || [];
+ const supDerT = this.registro.valor.odontograma?.cuadranteSuperiorDerechoTemporal.filter(diente => diente.cara) || [];
+ const supIzqT = this.registro.valor.odontograma?.cuadranteSuperiorIzquierdoTemporal.filter(diente => diente.cara) || [];
this.data = {
registro: this.registro,
+ snapshot: this.registro.valor.snapshot,
valor: {
infDer,
infDerT,
diff --git a/modules/descargas/informe-rup/informe-rup.ts b/modules/descargas/informe-rup/informe-rup.ts
index 093bf7f488..85475bb284 100644
--- a/modules/descargas/informe-rup/informe-rup.ts
+++ b/modules/descargas/informe-rup/informe-rup.ts
@@ -11,7 +11,7 @@ import { findById } from '../../../core-v2/mpi/paciente/paciente.controller';
export class InformeRUP extends InformePDF {
- constructor(private prestacionId: string | Types.ObjectId, private registroId: string | Types.ObjectId = null, private usuario: any) {
+ constructor(private prestacionId: string | Types.ObjectId, private registroId: string | Types.ObjectId = null, private usuario: any, private snapshots: any = null) {
super();
}
@@ -21,6 +21,16 @@ export class InformeRUP extends InformePDF {
public async process() {
const prestacion: any = await Prestacion.findById(this.prestacionId);
+
+ if (this.snapshots) {
+ prestacion.ejecucion.registros.forEach(r => {
+ if (this.snapshots[r.id]) {
+ r.valor = r.valor || {};
+ r.valor.snapshot = this.snapshots[r.id];
+ }
+ });
+ }
+
const paciente = await findById(prestacion.paciente.id);
const organizacion = await Organizacion.findById(prestacion.ejecucion.organizacion.id);
const elementosRUPSet = await elementosRUPAsSet();
diff --git a/modules/descargas/routes/descargas.ts b/modules/descargas/routes/descargas.ts
index a5fc8782fd..76f04f0733 100644
--- a/modules/descargas/routes/descargas.ts
+++ b/modules/descargas/routes/descargas.ts
@@ -273,8 +273,9 @@ router.post('/:tipo?', Auth.authenticate(), async (req: any, res, next) => {
try {
const idPrestacion = req.body.idPrestacion;
const idRegistro = req.body.idRegistro;
+ const snapshots = req.body.snapshots;
- const informe = new InformeRUP(idPrestacion, idRegistro, req.user);
+ const informe = new InformeRUP(idPrestacion, idRegistro, req.user, snapshots);
const fileName = await informe.informe();
return res.download(fileName);