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);