From 02915b21240e148bcb378596cf8f99e976824935 Mon Sep 17 00:00:00 2001 From: nicolasarana <90768149+nicolasarana@users.noreply.github.com> Date: Thu, 22 Jan 2026 11:56:56 -0300 Subject: [PATCH] feat(MPI):"Cambiar objeto en relaciones por ID" --- projects/shared/src/lib/pipes/nombre.pipe.ts | 13 ++-- .../mpi/components/datos-basicos.component.ts | 41 ++---------- .../core/mpi/components/paciente.component.ts | 47 +++++++++----- .../relaciones-pacientes.component.ts | 64 ++++++------------- .../mpi/components/relaciones-pacientes.html | 14 ++-- src/app/core/mpi/interfaces/IPaciente.ts | 2 +- .../components/paciente-detalle.component.ts | 14 ++-- .../components/paciente-panel.component.ts | 6 +- .../mpi/components/paciente-panel.html | 17 ++--- .../paciente-relaciones.component.ts | 5 +- .../mpi/components/paciente-relaciones.html | 14 ++-- .../interfaces/IPacienteRelacion.inteface.ts | 12 ++-- 12 files changed, 113 insertions(+), 136 deletions(-) diff --git a/projects/shared/src/lib/pipes/nombre.pipe.ts b/projects/shared/src/lib/pipes/nombre.pipe.ts index 238999159e..cdfaffaa6a 100644 --- a/projects/shared/src/lib/pipes/nombre.pipe.ts +++ b/projects/shared/src/lib/pipes/nombre.pipe.ts @@ -6,13 +6,16 @@ export class NombrePipe implements PipeTransform { transform(value: any): any { if (!value) { return null; - } else if (value.alias) { - return value.apellido + ', ' + value.alias; + } + const data = (value.referencia && typeof value.referencia === 'object' && (value.referencia.nombre || value.referencia.apellido)) + ? value.referencia : value; + if (data.alias) { + return data.apellido + ', ' + data.alias; } else { - if (value.apellido && value.nombre) { - return value.apellido + ', ' + value.nombre; + if (data.apellido && data.nombre) { + return data.apellido + ', ' + data.nombre; } else { - return (value.apellido ? value.apellido : value.nombre); + return (data.apellido ? data.apellido : data.nombre); } } } diff --git a/src/app/core/mpi/components/datos-basicos.component.ts b/src/app/core/mpi/components/datos-basicos.component.ts index 4361ada8e2..989c068d96 100644 --- a/src/app/core/mpi/components/datos-basicos.component.ts +++ b/src/app/core/mpi/components/datos-basicos.component.ts @@ -55,24 +55,9 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit, showBuscador = true; searchClear = true; relacionBebe: IPacienteRelacion = { - id: null, - relacion: { - id: '', - nombre: '', - opuesto: '' - }, + relacion: null, referencia: '', - nombre: '', - alias: '', - genero: '', - numeroIdentificacion: '', - apellido: '', - documento: '', - fechaNacimiento: null, - fechaFallecimiento: null, - sexo: '', - foto: null, - fotoId: null + activo: true }; pacienteFallecido: any; fechaFallecimientoTemporal: Date = null; @@ -291,23 +276,11 @@ export class DatosBasicosComponent implements OnInit, OnChanges, AfterViewInit, if (pacienteSelected) { this.pacienteService.getById(pacienteSelected.id).subscribe(paciente => { // Relacionamos al bebe con su progenitor/a - this.relacionBebe.apellido = paciente.apellido; - this.relacionBebe.nombre = paciente.nombre; - this.relacionBebe.alias = paciente.alias; - this.relacionBebe.genero = paciente.genero; - this.relacionBebe.documento = paciente.documento; - this.relacionBebe.numeroIdentificacion = paciente.numeroIdentificacion; - this.relacionBebe.fechaNacimiento = paciente.fechaNacimiento; - this.relacionBebe.fechaFallecimiento = paciente.fechaFallecimiento; - this.relacionBebe.sexo = paciente.sexo; - this.relacionBebe.fotoId = paciente.fotoId ? paciente.fotoId : null; - this.relacionBebe.referencia = paciente.id; - const rel = this.parentescoModel.find((elem) => { - if (elem.nombre === 'progenitor/a') { - return elem; - } - }); - this.relacionBebe.relacion = rel; + this.relacionBebe = { + referencia: paciente, + relacion: this.parentescoModel.find(elem => elem.nombre === 'progenitor/a'), + activo: true + }; this.paciente.relaciones = [this.relacionBebe]; /* Si no se cargó ninguna dirección, tomamos el dato de la madre/padre/tutor */ diff --git a/src/app/core/mpi/components/paciente.component.ts b/src/app/core/mpi/components/paciente.component.ts index ebdb0efff9..e0befdd928 100644 --- a/src/app/core/mpi/components/paciente.component.ts +++ b/src/app/core/mpi/components/paciente.component.ts @@ -333,6 +333,15 @@ export class PacienteComponent implements OnInit { return elem; }); + if (pacienteGuardar.relaciones) { + pacienteGuardar.relaciones = pacienteGuardar.relaciones.map(rel => { + if (rel.referencia && typeof rel.referencia === 'object' && (rel.referencia.nombre || rel.referencia.apellido)) { + return { ...rel, referencia: rel.referencia.id || rel.referencia._id }; + } + return rel; + }); + } + return pacienteGuardar; } @@ -485,13 +494,21 @@ export class PacienteComponent implements OnInit { if (unPacienteSave) { // Borramos relaciones this.relacionesBorradas.forEach(rel => { - if (rel.referencia) { - this.pacienteService.getById(rel.referencia).pipe( + const idReferencia = rel.referencia?.id || rel.referencia?._id || rel.referencia; + if (idReferencia) { + this.pacienteService.getById(idReferencia).pipe( map(pac => { - const index = pac.relaciones?.findIndex((unaRel: any) => unaRel.referencia === unPacienteSave.id); + const index = pac.relaciones?.findIndex((unaRel: any) => (unaRel.referencia?.id || unaRel.referencia?._id || unaRel.referencia) === unPacienteSave.id); if (index >= 0) { pac.relaciones.splice(index, 1); } + // Limpiamos referencias por si están populadas + pac.relaciones = pac.relaciones?.map(r => { + if (r.referencia && typeof r.referencia === 'object' && (r.referencia.nombre || r.referencia.apellido)) { + return { ...r, referencia: r.referencia.id || r.referencia._id }; + } + return r; + }); return pac; }), mergeMap(pac => { @@ -509,27 +526,27 @@ export class PacienteComponent implements OnInit { }); relacionOpuesta['esConviviente'] = rel.relacion.esConviviente ? rel.relacion.esConviviente : false; const dto = { - id: null, - activo: unPacienteSave.activo, relacion: relacionOpuesta, referencia: unPacienteSave.id, - nombre: unPacienteSave.nombre, - apellido: unPacienteSave.apellido, - fechaNacimiento: unPacienteSave.fechaNacimiento, - documento: (unPacienteSave.documento) ? unPacienteSave.documento : null, - numeroIdentificacion: (unPacienteSave.numeroIdentificacion) ? unPacienteSave.numeroIdentificacion : null, - foto: unPacienteSave.foto ? unPacienteSave.foto : null, - fotoId: unPacienteSave.fotoId ? unPacienteSave.fotoId : null + activo: unPacienteSave.activo, }; - if (dto.referencia) { - this.pacienteService.getById(rel.referencia).pipe( + const idReferencia = rel.referencia?.id || rel.referencia?._id || rel.referencia; + if (idReferencia) { + this.pacienteService.getById(idReferencia).pipe( map(pac => { - const index = pac.relaciones?.findIndex((unaRel: any) => unaRel.referencia === unPacienteSave.id); + const index = pac.relaciones?.findIndex((unaRel: any) => (unaRel.referencia?.id || unaRel.referencia?._id || unaRel.referencia) === unPacienteSave.id); if (index >= 0) { pac.relaciones[index] = dto; } else { pac.relaciones?.length ? pac.relaciones.push(dto) : pac.relaciones = [dto]; } + // Limpiamos referencias por si están populadas + pac.relaciones = pac.relaciones?.map(r => { + if (r.referencia && typeof r.referencia === 'object' && (r.referencia.nombre || r.referencia.apellido)) { + return { ...r, referencia: r.referencia.id || r.referencia._id }; + } + return r; + }); return pac; }), mergeMap(pac => { diff --git a/src/app/core/mpi/components/relaciones-pacientes.component.ts b/src/app/core/mpi/components/relaciones-pacientes.component.ts index 5e789b7a3c..f4e467fef3 100644 --- a/src/app/core/mpi/components/relaciones-pacientes.component.ts +++ b/src/app/core/mpi/components/relaciones-pacientes.component.ts @@ -23,7 +23,7 @@ export class RelacionesPacientesComponent implements OnInit { if (valor.relaciones) { this.relacionesIniciales = valor.relaciones.slice(0, valor.relaciones.length); this.idPacientesRelacionados = this.relacionesIniciales.map(rel => { - return { id: rel.referencia }; + return { id: rel.referencia?.id || rel.referencia?._id || rel.referencia }; }); } } @@ -90,7 +90,7 @@ export class RelacionesPacientesComponent implements OnInit { // Se eliminan de los resultados de la búsqueda los pacientes ya relacionados if (this.paciente.relaciones && this.paciente.relaciones.length) { for (let i = 0; i < this.paciente.relaciones.length; i++) { - listaPacientes = listaPacientes.filter(p => p.id !== this.paciente.relaciones[i].referencia); + listaPacientes = listaPacientes.filter(p => p.id !== (this.paciente.relaciones[i].referencia?.id || this.paciente.relaciones[i].referencia?._id || this.paciente.relaciones[i].referencia)); } } this.posiblesRelaciones = listaPacientes; @@ -109,53 +109,24 @@ export class RelacionesPacientesComponent implements OnInit { addRelacion(unaRelacion) { // Es una relacion existente? + const idReferencia = unaRelacion.referencia?.id || unaRelacion.referencia?._id || unaRelacion.referencia; if (unaRelacion.referencia) { unaRelacion.relacion.esConviviente !== undefined ? unaRelacion.relacion.esConviviente = this.esConviviente : unaRelacion.relacion['esConviviente'] = this.esConviviente; // Se la agrega al array de relaciones nuevas/editadas - let index = this.relacionesEdit.findIndex(rel => rel.referencia === unaRelacion.referencia); + let index = this.relacionesEdit.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === idReferencia); index >= 0 ? this.relacionesEdit[index] = unaRelacion : this.relacionesEdit.push(unaRelacion); // Se actualiza el array de relaciones del paciente para que impacte en las vistas - index = this.paciente.relaciones.findIndex(rel => rel.referencia === unaRelacion.referencia); + index = this.paciente.relaciones.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === idReferencia); this.paciente.relaciones[index] = unaRelacion; } else { // relacion inexistente, construimos una nueva this.buscarPacRel = ''; - const nuevaRelacion: IPacienteRelacion = Object.assign({}, { - id: null, - relacion: null, - referencia: null, - nombre: '', - apellido: '', - documento: '', - fechaNacimiento: null, - fechaFallecimiento: null, - numeroIdentificacion: '', - foto: null, - fotoId: null, - activo: true, - }); - - // Se completan los campos de la nueva relación - nuevaRelacion.referencia = unaRelacion.id; - nuevaRelacion.apellido = unaRelacion.apellido; - nuevaRelacion.nombre = unaRelacion.nombre; - nuevaRelacion.relacion = unaRelacion.relacion; + const nuevaRelacion: IPacienteRelacion = { + referencia: unaRelacion, + relacion: unaRelacion.relacion, + activo: true + }; nuevaRelacion.relacion['esConviviente'] = this.esConviviente; - if (unaRelacion.documento) { - nuevaRelacion.documento = unaRelacion.documento; - } - if (unaRelacion.numeroIdentificacion) { - nuevaRelacion.numeroIdentificacion = unaRelacion.numeroIdentificacion; - } - if (unaRelacion.fotoId) { - nuevaRelacion.fotoId = unaRelacion.fotoId; - } - if (unaRelacion.fechaNacimiento) { - nuevaRelacion.fechaNacimiento = unaRelacion.fechaNacimiento; - } - if (unaRelacion.fechaFallecimiento) { - nuevaRelacion.fechaFallecimiento = unaRelacion.fechaFallecimiento; - } // Se inserta nueva relación en array de relaciones del paciente if (this.paciente.relaciones && this.paciente.relaciones.length) { @@ -164,12 +135,12 @@ export class RelacionesPacientesComponent implements OnInit { this.paciente.relaciones = [nuevaRelacion]; } // Se inserta en el array de relaciones nuevas/editadas - let index = this.relacionesEdit.findIndex(rel => rel.referencia === nuevaRelacion.referencia); - index >= 0 ? this.relacionesEdit[index] = unaRelacion : this.relacionesEdit.push(nuevaRelacion); - this.idPacientesRelacionados.push({ id: nuevaRelacion.referencia }); + let index = this.relacionesEdit.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === (nuevaRelacion.referencia?.id || nuevaRelacion.referencia?._id || nuevaRelacion.referencia)); + index >= 0 ? this.relacionesEdit[index] = nuevaRelacion : this.relacionesEdit.push(nuevaRelacion); + this.idPacientesRelacionados.push({ id: nuevaRelacion.referencia.id || nuevaRelacion.referencia }); // Si esta relación fue borrada anteriormente en esta edición, se quita del arreglo 'relacionesBorradas' - index = this.relacionesBorradas.findIndex(rel => rel.referencia === nuevaRelacion.referencia); + index = this.relacionesBorradas.findIndex(rel => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === (nuevaRelacion.referencia?.id || nuevaRelacion.referencia?._id || nuevaRelacion.referencia)); if (index >= 0) { this.relacionesBorradas.splice(index, 1); } @@ -189,13 +160,14 @@ export class RelacionesPacientesComponent implements OnInit { removeRelacion(i) { if (i >= 0) { // si la relacion borrada ya se encotraba almacenada en la DB - const index = this.relacionesIniciales.findIndex(unaRel => unaRel.referencia === this.paciente.relaciones[i].referencia); + const idReferenciaBorrar = this.paciente.relaciones[i].referencia?.id || this.paciente.relaciones[i].referencia?._id || this.paciente.relaciones[i].referencia; + const index = this.relacionesIniciales.findIndex(unaRel => (unaRel.referencia?.id || unaRel.referencia?._id || unaRel.referencia) === idReferenciaBorrar); if (index >= 0) { this.relacionesBorradas.push(this.paciente.relaciones[i]); } this.paciente.relaciones.splice(i, 1); this.idPacientesRelacionados = this.paciente.relaciones.map(rel => { - return { id: rel.referencia }; + return { id: rel.referencia?.id || rel.referencia?._id || rel.referencia }; }); // notificamos cambios this.actualizar.emit({ @@ -207,7 +179,7 @@ export class RelacionesPacientesComponent implements OnInit { public onChange(data) { - const index = this.paciente.relaciones.findIndex((rel: any) => rel.referencia === data.idRelacionado); + const index = this.paciente.relaciones.findIndex((rel: any) => (rel.referencia?.id || rel.referencia?._id || rel.referencia) === data.idRelacionado); if (index >= 0) { if (data.operacion === 'edit') { // se muestra en panel principal para su edicion diff --git a/src/app/core/mpi/components/relaciones-pacientes.html b/src/app/core/mpi/components/relaciones-pacientes.html index 3d645bebf3..70aa9cb22c 100644 --- a/src/app/core/mpi/components/relaciones-pacientes.html +++ b/src/app/core/mpi/components/relaciones-pacientes.html @@ -20,24 +20,28 @@ - + - + - + + diff --git a/src/app/core/mpi/interfaces/IPaciente.ts b/src/app/core/mpi/interfaces/IPaciente.ts index 6e247217e5..ef52a1cf39 100755 --- a/src/app/core/mpi/interfaces/IPaciente.ts +++ b/src/app/core/mpi/interfaces/IPaciente.ts @@ -32,7 +32,7 @@ export interface IPaciente { fotoId: string; foto: string; createdBy: ICreatedBy; - relaciones: [IPacienteRelacion]; + relaciones: IPacienteRelacion[]; financiador: [{ codigoPuco: Number; diff --git a/src/app/modules/mpi/components/paciente-detalle.component.ts b/src/app/modules/mpi/components/paciente-detalle.component.ts index 9c9c6899b2..f108ed5feb 100644 --- a/src/app/modules/mpi/components/paciente-detalle.component.ts +++ b/src/app/modules/mpi/components/paciente-detalle.component.ts @@ -160,14 +160,16 @@ export class PacienteDetalleComponent implements OnInit, OnChanges { private doRelaciones() { if (this.paciente?.relaciones?.length) { this.relaciones = this.paciente.relaciones.map(rel => { + const referencia = rel.referencia; + const isPopulated = referencia?.id || referencia?._id; return { - id: rel.referencia, - apellido: rel.apellido, - nombre: rel.nombre, - documento: rel.documento, - numeroIdentificacion: rel.numeroIdentificacion, + id: isPopulated ? (referencia.id || referencia._id) : referencia, + apellido: isPopulated ? referencia.apellido : rel.apellido, + nombre: isPopulated ? referencia.nombre : rel.nombre, + documento: isPopulated ? referencia.documento : rel.documento, + numeroIdentificacion: isPopulated ? referencia.numeroIdentificacion : rel.numeroIdentificacion, parentesco: (rel.relacion) ? rel.relacion.nombre : 'Relación S/D', - fotoId: rel.fotoId + fotoId: isPopulated ? referencia.fotoId : rel.fotoId }; }); } else { diff --git a/src/app/modules/mpi/components/paciente-panel.component.ts b/src/app/modules/mpi/components/paciente-panel.component.ts index 7c6d45fa62..1a4bd60152 100644 --- a/src/app/modules/mpi/components/paciente-panel.component.ts +++ b/src/app/modules/mpi/components/paciente-panel.component.ts @@ -55,10 +55,12 @@ export class PacientePanelComponent { } public editRelacion(relacion: any) { - this.changeRelacion.emit({ operacion: 'edit', idRelacionado: relacion.referencia }); + const idRelacionado = relacion.referencia?.id || relacion.referencia?._id || relacion.referencia; + this.changeRelacion.emit({ operacion: 'edit', idRelacionado }); } public removeRelacion(relacion: any) { - this.changeRelacion.emit({ operacion: 'remove', idRelacionado: relacion.referencia }); + const idRelacionado = relacion.referencia?.id || relacion.referencia?._id || relacion.referencia; + this.changeRelacion.emit({ operacion: 'remove', idRelacionado }); } } diff --git a/src/app/modules/mpi/components/paciente-panel.html b/src/app/modules/mpi/components/paciente-panel.html index d6ee32a23a..97996fb6ae 100644 --- a/src/app/modules/mpi/components/paciente-panel.html +++ b/src/app/modules/mpi/components/paciente-panel.html @@ -56,20 +56,21 @@ - + - + - + - + {{ relacionado?.relacion?.nombre }} - Fallecido diff --git a/src/app/modules/mpi/components/paciente-relaciones.component.ts b/src/app/modules/mpi/components/paciente-relaciones.component.ts index 5feb69f054..62a6fb4b23 100644 --- a/src/app/modules/mpi/components/paciente-relaciones.component.ts +++ b/src/app/modules/mpi/components/paciente-relaciones.component.ts @@ -47,9 +47,10 @@ export class PacienteRelacionesComponent { ) { } public seleccionarRelacion(relacionado: IPacienteRelacion) { - if (relacionado.referencia) { + const id = relacionado.referencia?.id || relacionado.referencia?._id || relacionado.referencia; + if (id) { let pacienteRel: IPaciente; - this.pacienteService.getById(relacionado.referencia).subscribe(result => { + this.pacienteService.getById(id).subscribe(result => { pacienteRel = result; (pacienteRel) ? this.selected.emit(pacienteRel) : this.selected.emit(null); }); diff --git a/src/app/modules/mpi/components/paciente-relaciones.html b/src/app/modules/mpi/components/paciente-relaciones.html index 06ac38b8be..63ffa4781b 100644 --- a/src/app/modules/mpi/components/paciente-relaciones.html +++ b/src/app/modules/mpi/components/paciente-relaciones.html @@ -1,13 +1,15 @@ - + - + - + {{ relacionado.relacion?.nombre || 'S/D' }} diff --git a/src/app/modules/mpi/interfaces/IPacienteRelacion.inteface.ts b/src/app/modules/mpi/interfaces/IPacienteRelacion.inteface.ts index a7693e87cb..45e998777a 100644 --- a/src/app/modules/mpi/interfaces/IPacienteRelacion.inteface.ts +++ b/src/app/modules/mpi/interfaces/IPacienteRelacion.inteface.ts @@ -7,16 +7,16 @@ export interface IPacienteRelacion { opuesto: string; esConviviente?: boolean; }; - referencia: string; - nombre: string; - apellido: string; - documento: string; + referencia: any; + nombre?: string; + apellido?: string; + documento?: string; numeroIdentificacion?: string; fechaNacimiento?: Date; fechaFallecimiento?: Date; sexo?: string; - foto: any; - fotoId: any; + foto?: any; + fotoId?: any; activo?: boolean; alias?: string; genero?: string;