Skip to content

Commit

Permalink
feat(mpi): Eventos de linkeo y deslinkeo y actualización de la inform…
Browse files Browse the repository at this point in the history
…ación de pacientes en las prestaciones médicas (#1376)

* feat(vacunacion): Actualiza la información interna del paciente al realizar update o linkeo con paciente validado

* feat(mpi): Se agrega nueva ruta para vincular

* feat(mpi): link and unlink events and controllers

* fix(mpi): link and unlink controller

* fix(mpi): refactor de control de vinculación de pacientes

Co-authored-by: mcele <MCele>
Co-authored-by: condorpiedra <natalia.huenchuman@gmail.com>
  • Loading branch information
Sychus and condorpiedra authored Jun 1, 2021
1 parent 4e2fd09 commit f514b3f
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 20 deletions.
16 changes: 13 additions & 3 deletions core-v2/mpi/paciente/paciente.events.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { EventCore } from '@andes/event-bus';
import { IPacienteDoc } from './paciente.interface';
import { logPaciente } from '../../../core/log/schemas/logPaciente';
import { LoggerPaciente } from '../../../utils/loggerPaciente';
import { linkPacientesDuplicados, updateGeoreferencia } from './paciente.controller';
import { updatePrestacionPatient } from './../../../modules/rup/controllers/prestacion';
import { findById, linkPacientesDuplicados, updateGeoreferencia } from './paciente.controller';
import { IPacienteDoc } from './paciente.interface';

// TODO: Handlear errores
EventCore.on('mpi:pacientes:create', async (paciente: IPacienteDoc) => {
Expand Down Expand Up @@ -36,10 +37,18 @@ EventCore.on('mpi:pacientes:update', async (paciente: any, changeFields: string[
body: paciente
};
const addressChanged = changeFields.includes('direccion');

if (addressChanged) {
await updateGeoreferencia(paciente);
}
// Verifica si se realizó alguna operación de vinculación de pacientes
const vinculado = changeFields.includes('idPacientePrincipal');
if (vinculado && paciente.idPacientePrincipal) {
const pacienteVinculado = await findById(paciente.idPacientePrincipal);
await updatePrestacionPatient(pacienteVinculado, paciente.id, paciente.idPacientePrincipal);
}
if (vinculado && paciente.idPacientePrincipal === null && paciente.activo) {
await updatePrestacionPatient(paciente, paciente.id, null);
}
if (paciente.estado === 'validado') {
// si el paciente tiene algun reporte de error, verificamos que sea nuevo
if (paciente.reportarError) {
Expand All @@ -50,3 +59,4 @@ EventCore.on('mpi:pacientes:update', async (paciente: any, changeFields: string[
}
}
});

1 change: 1 addition & 0 deletions core-v2/mpi/paciente/paciente.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ export interface IPaciente {
contacto?: IContacto[];
direccion?: IDireccion[];
scan?: String;
idPacientePrincipal?: Schema.Types.ObjectId;
}

export interface IPacienteDoc extends Document, IPaciente {
Expand Down
3 changes: 2 additions & 1 deletion core-v2/mpi/paciente/paciente.schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ export const PacienteSchema: mongoose.Schema = new mongoose.Schema({
id: String,
label: String
}
}]
}],
idPacientePrincipal: mongoose.Schema.Types.ObjectId
}, { versionKey: false });

PacienteSchema.pre('save', function (next) {
Expand Down
36 changes: 31 additions & 5 deletions modules/rup/controllers/prestacion.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { Prestacion } from '../../rup/schemas/prestacion';
import { ObjectId } from '@andes/core';
import * as mongoose from 'mongoose';
import { Auth } from '../../../auth/auth.class';
import { Types } from 'mongoose';
import moment = require('moment');
import { buscarEnHuds } from '../controllers/rup';
import { Auth } from '../../../auth/auth.class';
import { userScheduler } from '../../../config.private';
import { SnomedCtr } from '../../../core/term/controller/snomed.controller';
import { ObjectId } from '@andes/core';
import { PacienteCtr } from '../../../core-v2/mpi/paciente/paciente.routes';
import { Prestacion } from '../../rup/schemas/prestacion';
import { buscarEnHuds } from '../controllers/rup';
import moment = require('moment');

/**
* Libera la referencia al turno dentro de la solicitud
Expand Down Expand Up @@ -140,3 +141,28 @@ export async function hudsPaciente(pacienteID: ObjectId, expresion: string, idPr
}
return huds;
}

export async function updatePrestacionPatient(sourcePatient, idPaciente, idPacientePrincipal) {
try {
const query = { 'estadoActual.tipo': 'validada', 'paciente.id': idPaciente };
let prestaciones: any = await Prestacion.find(query);
let promises = prestaciones.map((p) => {
p.paciente = {
id: p.paciente.id,
nombre: sourcePatient.nombre,
apellido: sourcePatient.apellido,
documento: sourcePatient.documento,
sexo: sourcePatient.sexo,
fechaNacimiento: sourcePatient.fechaNacimiento,
obraSocial: sourcePatient.financiador.length > 0 ? sourcePatient.financiador[0] : null,
idPacienteValidado: idPacientePrincipal
};
Auth.audit(p, userScheduler as any);
p.save();
});
await Promise.all(promises);

} catch (error) {
return error;
}
}
3 changes: 1 addition & 2 deletions modules/rup/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import * as express from 'express';
import { ElementoRUPRouter } from './elementos-rup.controller';
import { EstadosRouter, CamasRouter, CensosRouter, InternacionRouter, SalaComunRouter, InternacionResumenRouter } from './internacion';

import { CamasRouter, CensosRouter, EstadosRouter, InternacionResumenRouter, InternacionRouter, SalaComunRouter } from './internacion';
export function setup(app: express.Application) {
app.use('/api/modules/rup', ElementoRUPRouter);
app.use('/api/modules/rup/internacion', CamasRouter);
Expand Down
5 changes: 3 additions & 2 deletions modules/rup/prestaciones.interface.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ObjectId } from '@andes/core';
import { Document } from 'mongoose';
import { IFinanciador } from '../../core-v2/mpi/financiador';
import { IOrganizacion } from '../../core/tm/interfaces/IOrganizacion';
import { ISnomedConcept } from './schemas/snomed-concept';
import { Document } from 'mongoose';

export interface IPrestacion {
id: ObjectId;
Expand All @@ -14,7 +14,8 @@ export interface IPrestacion {
telefono: string;
sexo: string;
fechaNacimiento: Date;
obraSocial: IFinanciador
obraSocial: IFinanciador,
idPacienteValidado?: ObjectId
};
inicio: 'top' | 'agenda' | 'fuera-agenda' | 'internacion';
noNominalizada: boolean;
Expand Down
16 changes: 9 additions & 7 deletions modules/rup/schemas/prestacion.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { SchemaTypes, Schema, model, Types } from 'mongoose';
import * as registro from './prestacion.registro';
import { SemanticTag } from './semantic-tag';
import { PrestacionSolicitudHistorialschema } from './prestacion.solicitud.historial';
import { PrestacionEstadoSchema } from './prestacion.estado';
import { iterate, convertToObjectId } from '../controllers/rup';
import { AuditPlugin } from '@andes/mongoose-plugin-audit';
import { model, Schema, SchemaTypes, Types } from 'mongoose';
import { ObraSocialSchema } from '../../obraSocial/schemas/obraSocial';
import { SnomedConcept } from '../../../modules/rup/schemas/snomed-concept';
import { convertToObjectId, iterate } from '../controllers/rup';
import { PrestacionEstadoSchema } from './prestacion.estado';
import * as registro from './prestacion.registro';
import { PrestacionSolicitudHistorialschema } from './prestacion.solicitud.historial';
import { SemanticTag } from './semantic-tag';


export const PrestacionSchema = new Schema({
trackId: { required: false, type: Schema.Types.ObjectId },
Expand All @@ -24,7 +25,8 @@ export const PrestacionSchema = new Schema({
telefono: String,
sexo: String,
fechaNacimiento: Date,
obraSocial: ObraSocialSchema
obraSocial: ObraSocialSchema,
idPacienteValidado: Schema.Types.ObjectId
},
noNominalizada: {
type: Boolean,
Expand Down

0 comments on commit f514b3f

Please sign in to comment.