Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions sip-plus-perinatal/controller/sip-plus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import { IPaciente } from '../schemas/paciente';
import { getMatching } from '../service/matchPerinatal';
import { getOrganizacionAndes } from '../service/organizacion';
import { IPerinatal, ISnomedConcept } from 'sip-plus-perinatal/schemas/perinatal';
import { fakeRequest } from '../config.private';
import { log } from '@andes/log';
import { fakeRequest, MONGO_HOST } from '../config.private';
import { msSipPlusPerinatalLog } from '../logger/msSipPlusPerinatal';
const log = msSipPlusPerinatalLog.startTrace();


/**
* Obtenemos todos los registros de la prestación
Expand Down Expand Up @@ -136,7 +138,7 @@ export async function completePacienteSP(pacienteSP: IPaciente, paciente: IPacie
}
}
} catch (error) {
log(fakeRequest, 'microservices:integration:sip-plus', { pacienteSP, paciente, registros, fecha, organizacion }, 'sip-plus:completePacienteSP', null, null, error);
log.error('completePacienteSP:error', pacienteSP, error, fakeRequest);
}
return newPaciente;

Expand Down Expand Up @@ -228,7 +230,7 @@ async function completePaciente(pacienteSP: any, paciente: IPaciente) {

datosPaciente = await completeData(paciente, datosPaciente, newData);
} catch (error) {

log.error('completePacienteSP:error', paciente, error, fakeRequest);
}
return datosPaciente;
}
Expand Down Expand Up @@ -258,6 +260,7 @@ async function completeData(allData, dataInit = {}, newData) {
}
});
} catch (error) {
log.error('completeData:error', allData, error, fakeRequest);
}

return datos;
Expand Down Expand Up @@ -385,7 +388,7 @@ async function createMatchControl(registros: any[], embActual, newDatosEmb, fech
}
}
} catch (error) {

log.error('createMatchControl:error', registros, error, fakeRequest);
}
return newDatosEmb;
}
Expand Down
15 changes: 15 additions & 0 deletions sip-plus-perinatal/logger/msSipPlusPerinatal.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { logDatabase } from '../config.private';
import { Logger } from '@andes/log';
import * as mongoose from 'mongoose';

let logs: mongoose.Connection = mongoose.createConnection();
logs = mongoose.createConnection(logDatabase.log.host, logDatabase.log.options);
export const msSipPlusPerinatalLog = new Logger({
connection: logs,
type: 'msSipPlusPerinatal',
module: 'perinatal',
application: 'andes',
bucketBy: 'h',
bucketSize: 100,
expiredAt: '3 M'
});
18 changes: 11 additions & 7 deletions sip-plus-perinatal/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion sip-plus-perinatal/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"license": "ISC",
"dependencies": {
"@andes/bootstrap": "file:../bootstrap",
"@andes/log": "^1.0.11",
"@andes/log": "^2.2.5",
"@andes/match": "^1.1.12",
"async": "^2.6.3",
"html-entities": "^1.2.1",
Expand Down
64 changes: 39 additions & 25 deletions sip-plus-perinatal/service/matchPerinatal.ts
Original file line number Diff line number Diff line change
@@ -1,48 +1,62 @@
import { IPerinatal } from '../schemas/perinatal';
import { QueryMapping } from '../schemas/query_mapping';

import { fakeRequest, MONGO_HOST } from '../config.private';
import { log } from '@andes/log';

import * as mongoose from 'mongoose';
import { msSipPlusPerinatalLog } from '../logger/msSipPlusPerinatal';
const log = msSipPlusPerinatalLog.startTrace();

mongoose.connect(MONGO_HOST, { useUnifiedTopology: true, useNewUrlParser: true }).
then(() => console.log('Conexion Exitosa BD Mongo'))
.catch(err => {
log(fakeRequest, 'microservices:integration:sip-plus', MONGO_HOST, 'Mongo Conexión:error', `${err.message}`);
log.error('Mongo Conexión:error', MONGO_HOST, `${err.message}`, fakeRequest);
});


export async function getMatching(tipoMatch = null) {
const tipo: string = tipoMatch || 'paciente';
const source = `andes:${tipo}`;

try {
const dataMapped = await QueryMapping.find({ source, target: "sip+" });
const results = dataMapped
.map(elemMap => createDataMap(elemMap, tipo))
.filter(Boolean);

return dataMapped.map(elemMap => {
return results;
} catch (error) {
log.error('getMatching:error', source, error, fakeRequest);
return [];
}
}

let sipPlus = {
code: elemMap['targetValue']['code'],
type: elemMap['targetValue']['type']
}
const key = (tipo.includes('snomed')) ? elemMap['sourceValue']['key'] : elemMap['sourceValue'];

let dataMap: IPerinatal = { key, sipPlus, tipoMatch };
// si el tipo de mapeo contiene conceptos Snomed, entonces se obtienen sus datos
if (tipo.includes('snomed')) {
dataMap.concepto = elemMap['sourceValue']['concepto'];
if (elemMap['sourceValue']['valor']) {
dataMap.sipPlus.valor = elemMap['targetValue']['valor'];
}
if (elemMap['targetValue']['extra']) {
dataMap.sipPlus.extra = elemMap['targetValue']['extra'];
}
function createDataMap(elemMap: any, tipo: string): IPerinatal | null {

try {
const sipPlus = {
code: elemMap['targetValue']['code'],
type: elemMap['targetValue']['type']
};

const key = tipo.includes('snomed')
? elemMap['sourceValue']['key']
: elemMap['sourceValue'];

const dataMap: IPerinatal = { key, sipPlus, tipoMatch: tipo };

if (tipo.includes('snomed')) {
dataMap.concepto = elemMap['sourceValue']['concepto'];

if (elemMap['sourceValue']['valor']) {
dataMap.sipPlus.valor = elemMap['targetValue']['valor'];
}
return dataMap;
});

if (elemMap['targetValue']['extra']) {
dataMap.sipPlus.extra = elemMap['targetValue']['extra'];
}
}
return dataMap;
} catch (error) {
log(fakeRequest, 'microservices:integration:sip-plus', source, 'getMatching:error', error);
log.error('createDataMap:error', { elemMap, tipo }, error, fakeRequest);
return null;
}
return [];
}
17 changes: 8 additions & 9 deletions sip-plus-perinatal/service/organizacion.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ANDES_HOST, ANDES_KEY, fakeRequest } from '../config.private';
import { msSipPlusPerinatalLog } from '../logger/msSipPlusPerinatal';
const log = msSipPlusPerinatalLog.startTrace();
const fetch = require('node-fetch');

import { log } from '@andes/log';

export async function getOrganizacionAndes(idOrganizacion) {
const url = `${ANDES_HOST}/core/tm/organizaciones?ids=${idOrganizacion}`;
const options = {
Expand All @@ -12,15 +12,14 @@ export async function getOrganizacionAndes(idOrganizacion) {
Authorization: `JWT ${ANDES_KEY}`
}
};
try {
let response = await fetch(url, options);

try {
const response = await fetch(url, options);
const responseJson = await response.json();

return responseJson[0] || null;
}
catch (error) {
log(fakeRequest, 'microservices:integration:sip-plus', idOrganizacion, 'getOrganizacionAndes:error', error);
} catch (error) {
log.error('getOrganizacionAndes:error', { idOrganizacion, options }, error, fakeRequest);
return null;
}

}
}
32 changes: 20 additions & 12 deletions sip-plus-perinatal/service/paciente.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ANDES_HOST, ANDES_KEY, fakeRequest } from '../config.private';
import { msSipPlusPerinatalLog } from '../logger/msSipPlusPerinatal';
const log = msSipPlusPerinatalLog.startTrace();
const fetch = require('node-fetch');

import { log } from '@andes/log';

export async function getPaciente(idPaciente) {
const url = `${ANDES_HOST}/core-v2/mpi/pacientes/${idPaciente}`;
const options = {
Expand All @@ -13,16 +13,24 @@ export async function getPaciente(idPaciente) {
}
};
try {
let response = await fetch(url, options);
const responseJson = await response.json();
if (responseJson._id) {
return responseJson;
} else {
return null;
const response = await fetch(url, options);

if (!response.ok) {
throw new Error(`HTTP ${response.status} - ${response.statusText}`);
}
}
catch (error) {
log(fakeRequest, 'microservices:integration:sip-plus', idPaciente, 'getPaciente:error', error);

const responseJson = await response.json();

return responseJson?._id ? responseJson : null;

} catch (error) {
log.error(
'getPaciente:error',
{ idPaciente, options, url },
error,
fakeRequest
);
return null;
}

}
}
65 changes: 38 additions & 27 deletions sip-plus-perinatal/service/sip-plus.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { SIP_PLUS, fakeRequest } from '../config.private';
import { msSipPlusPerinatalLog } from '../logger/msSipPlusPerinatal';
const log = msSipPlusPerinatalLog.startTrace();
const fetch = require('node-fetch');
import { log } from '@andes/log';


const url = `${SIP_PLUS.host}/record/AR/DNI/`;

Expand Down Expand Up @@ -29,32 +31,37 @@ const options = (method = 'GET', body = null) => {

export async function getPacienteSP(paciente: any) {
const documento = paciente.documento || '';
if (documento) {
try {
let response = await fetch(`${url}${documento}`, options('GET'));

if (response.status >= 200 && response.status < 300) {
let responseJson = await response.json();
if (!documento) {
return { paciente: null };
}

const keyResponse = Object.keys(responseJson).length || null;
if (keyResponse) {
return { paciente: responseJson };
}
else {
return { paciente: null };
try {
const response = await fetch(`${url}${documento}`, options('GET'));

}
}
if (!response.ok) {
if (response.status === 404) {
// paciente no encontrado
// Paciente no encontrado
return { paciente: null };
}

} catch (error) {
log(fakeRequest, 'microservices:integration:sip-plus', paciente, 'getPacienteSP:error', error);
throw new Error(`HTTP ${response.status}`);
}

const responseJson = await response.json();

return responseJson && Object.keys(responseJson).length
? { paciente: responseJson }
: { paciente: null };

} catch (error) {
log.error(
'getPacienteSP:error',
{ documento, url },
error,
fakeRequest
);
return { paciente: null };
}
return null;
}

export async function postPacienteSP(documento: string = '', pacienteSP) {
Expand All @@ -63,17 +70,21 @@ export async function postPacienteSP(documento: string = '', pacienteSP) {
const body = JSON.stringify(pacienteSP);
let optionsPost: any = options('POST', body);
let response: any = await fetch(`${url}${documento}`, optionsPost);
if (response.status >= 200 && response.status < 300) {
return { paciente: optionsPost.body };
}
if (response.status === 404) {
// paciente no encontrado
return { paciente: null };

if (!response.ok) {
if (response.status === 404) {
// Paciente no encontrado
return { paciente: null };
}

throw new Error(`HTTP ${response.status}`);
}

return { paciente: optionsPost.body };

} catch (error) {
log(fakeRequest, 'microservices:integration:sip-plus', pacienteSP, 'postPacienteSP:error', error);
log.error('postPacienteSP:error', { pacienteSP }, error, fakeRequest);
}
}
return null;
}
}