diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ba745ba5d..deca99c0b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,5 +49,22 @@ * Se corrige la ruta de Swagger para que sea accesible con la Vapp. * Documentación para swagger. +## [3.4.0] - 2018-08-06 + +#### Changed +* Modificación en visualización de punto de inicio de turnos: la información de los datos de los turnos de un paciente se agrupan en tres pestañas: historial de turnos, listado de turnos a futuro, carpeta del paciente (donde se puede realizar la edición de la carpeta). + +#### Added +* Historial de turnos asignados a un paciente con fecha anterior a la fecha actual. +* Verificación de asistencia a través del concepto snomed (https://github.com/andes/app/pull/628) +* Controles para el login de profesionales (https://github.com/andes/api/pull/379) +* Job para ingresar la información del consolidado de PECAS (https://github.com/andes/api/pull/374) +* Job para importar los números de carpetas de sistemas Legacy, SIPS central.(https://github.com/andes/api/pull/364) + +#### Fixed +* Procedimientos repetidos en resultados del buscador de RUP (https://github.com/andes/app/pull/616) + + + diff --git a/auth/permisos.ts b/auth/permisos.ts index 02e97d1b0b..a8a0cbbd75 100644 --- a/auth/permisos.ts +++ b/auth/permisos.ts @@ -77,6 +77,7 @@ export default [ { key: 'solicitud', title: 'Registrar solicitud', type: 'boolean' }, { key: 'autocitado', title: 'Registrar Autocitación', type: 'boolean' }, { key: 'darTurnos', title: 'Dar turnos desde punto inicio', type: 'boolean' }, + { key: 'puedeEditarCarpeta', title: 'Editar número de carpeta', type: 'boolean' } ] } ] diff --git a/auth/routes/routes.ts b/auth/routes/routes.ts index 437e3601fa..ce2a368928 100644 --- a/auth/routes/routes.ts +++ b/auth/routes/routes.ts @@ -144,21 +144,27 @@ router.post('/login', function (req, res, next) { ) ]).then((data: any[]) => { // Verifica que el usuario sea valido y que tenga permisos asignados - if (!data[0] || data[0].length === 0) { + const user = data[0]; + const prof = data[1]; + if (!user || user.length === 0) { return next(403); } if (req.body.mobile) { - checkMobile(data[1]._id).then((account: any) => { - // Crea el token con los datos de sesión - res.json({ - token: Auth.generateUserToken(data[0], null, [], data[1], account._id), - user: account + if (prof && prof._id) { + checkMobile(prof._id).then((account: any) => { + // Crea el token con los datos de sesión + return res.json({ + token: Auth.generateUserToken(user, null, [], prof, account._id), + user: account + }); + }).catch((e) => { + return next(403); }); - - }); + } else { + return next(403); + } } else { // Crea el token con los datos de sesión - res.json({ token: Auth.generateUserToken(data[0], null, [], data[1]) }); @@ -180,26 +186,31 @@ router.post('/login', function (req, res, next) { especialidad: true }), ]).then((data: any[]) => { + const user = data[0]; + const prof = data[1]; // Verifica que el usuario sea valido y que tenga permisos asignados - if (!data[0] || data[0].length === 0) { + if (!user || user.length === 0) { return next(403); } - let nombre = data[0].nombre; - let apellido = data[0].apellido; - let profesional2 = data[1]; // Crea el token con los datos de sesión if (req.body.mobile) { - checkMobile(profesional2._id).then((account: any) => { - // Crea el token con los datos de sesión - res.json({ - token: Auth.generateUserToken(data[0], null, [], profesional2, account._id), - user: account + if (prof && prof._id) { + checkMobile(prof._id).then((account: any) => { + // Crea el token con los datos de sesión + return res.json({ + token: Auth.generateUserToken(user, null, [], prof, account._id), + user: account + }); + }).catch(() => { + return next(403); }); - }); + } else { + return next(403); + } } else { // Crea el token con los datos de sesión res.json({ - token: Auth.generateUserToken(data[0], null, [], profesional2) + token: Auth.generateUserToken(data[0], null, [], prof) }); } }); diff --git a/config.private.ts.example b/config.private.ts.example index 7bc0d66c25..f5cf15ed37 100644 --- a/config.private.ts.example +++ b/config.private.ts.example @@ -219,3 +219,12 @@ export const conSqlPecas = { database: '' } }; + +export const sqlCarpetasJob = { + user: '', + password: '', + server: '', + database: '', + requestTimeout: '', + stream: '', +}; diff --git a/config.ts b/config.ts index 01e9554fc5..fc9e92b82e 100644 --- a/config.ts +++ b/config.ts @@ -157,6 +157,12 @@ export const modules = { route: '/modules/prestamosCarpetas', middleware: appMiddleware }, + carpetas: { + active: true, + path: './modules/carpetas/routes', + route: '/modules/carpetas', + middleware: appMiddleware + } }; // Cotas de consumo de APIs diff --git a/core/log/schemas/logJobs.ts b/core/log/schemas/logJobs.ts new file mode 100644 index 0000000000..c49b2436d6 --- /dev/null +++ b/core/log/schemas/logJobs.ts @@ -0,0 +1,16 @@ +import * as mongoose from 'mongoose'; + +export let logJobsSchema = new mongoose.Schema({ + job: { + type: String, + enum: ['actualizar agendas', 'actualizar carpetas', 'actualizar turnos del dia', 'cda sips', 'farmacias', + 'integracion andes', 'integracion hpn', 'integracion sips', 'mpi corrector', 'mpi updater', 'recordar turnos', + 'recordatorio agenda', 'robo sender'] + }, + error: mongoose.Schema.Types.Mixed, + createdAt: Date, + createdBy: mongoose.Schema.Types.Mixed + +}); + +export let logJobs = mongoose.model('logJobs', logJobsSchema, 'logJobs'); diff --git a/core/mpi/controller/paciente.ts b/core/mpi/controller/paciente.ts index 04e29a66cc..6843541e84 100644 --- a/core/mpi/controller/paciente.ts +++ b/core/mpi/controller/paciente.ts @@ -92,7 +92,7 @@ export async function updateTurnosPaciente(pacienteModified) { horaInicio: moment(new Date()).startOf('day').toDate() as any } }; - let turnos: any = await turnosController.getTurno(req); + let turnos: any = await turnosController.getHistorialPaciente(req); if (turnos.length > 0) { turnos.forEach(element => { try { diff --git a/core/tm/schemas/organizacionCache.ts b/core/tm/schemas/organizacionCache.ts index 222fb5cb68..35ad273d28 100644 --- a/core/tm/schemas/organizacionCache.ts +++ b/core/tm/schemas/organizacionCache.ts @@ -48,7 +48,8 @@ let organizacionCacheSchema = new mongoose.Schema({ numero: Number, // 0299-4490800 tipo: String, // Conmutador }, - tipologia: String // Establecimiento de salud con internación general + tipologia: String, // Establecimiento de salud con internación general + integracionActiva: Boolean }, { validateBeforeSave: true }); export let organizacionCache = mongoose.model('organizacionCache', organizacionCacheSchema, 'organizacionCache'); diff --git a/jobs/actualizarCarpetasJob.ts b/jobs/actualizarCarpetasJob.ts new file mode 100644 index 0000000000..afad312fa1 --- /dev/null +++ b/jobs/actualizarCarpetasJob.ts @@ -0,0 +1,8 @@ + +import * as carpetasCtrl from './../modules/turnos/controller/carpetasController/carpetasController'; + +function run() { + carpetasCtrl.migrar(); +} + +export = run; diff --git a/jobs/pecasConsolidadoJob.ts b/jobs/pecasConsolidadoJob.ts index a34a70e6aa..724934a06d 100644 --- a/jobs/pecasConsolidadoJob.ts +++ b/jobs/pecasConsolidadoJob.ts @@ -1,7 +1,10 @@ import * as pecasCtrl from './../modules/estadistica/pecas/controller/agenda'; +import * as moment from 'moment'; function run() { - pecasCtrl.consultaPecas(); + let start = moment(new Date().setHours(0, 0, 0, 0)).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss'); + let end = moment(new Date().setHours(23, 59, 0, 0)).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss'); + pecasCtrl.consultaPecas(start, end); } export = run; diff --git a/modules/turnos/routes/carpetaPaciente.ts b/modules/carpetas/routes/carpetaPaciente.ts similarity index 100% rename from modules/turnos/routes/carpetaPaciente.ts rename to modules/carpetas/routes/carpetaPaciente.ts diff --git a/modules/carpetas/routes/ultimaCarpeta.ts b/modules/carpetas/routes/ultimaCarpeta.ts new file mode 100644 index 0000000000..bdaf684cce --- /dev/null +++ b/modules/carpetas/routes/ultimaCarpeta.ts @@ -0,0 +1,50 @@ +import * as express from 'express'; +import * as ultimaCarpeta from '../schemas/ultimaCarpeta'; +import { mongooseDebugMode } from '../../../config.private'; +import * as mongoose from 'mongoose'; + +let router = express.Router(); + +router.get('/ultimaCarpeta', function (req: any, res, next) { + if (req.user.organizacion && req.user.organizacion.id) { + + let idOrganizacion = new mongoose.Types.ObjectId(req.user.organizacion.id); + ultimaCarpeta.findOne({ idEfector: idOrganizacion }, function (err, data: any) { + if (err) { + return next(err); + } + if (data) { + data.ultimaCarpeta = data.ultimaCarpeta + 1; + res.json(data.ultimaCarpeta); + } else { + res.json(0); + } + }); + } +}); + +router.post('/incrementarCuenta', function (req: any, res, next) { + if (req.user.organizacion && req.user.organizacion.id) { + let idOrganizacion = new mongoose.Types.ObjectId(req.user.organizacion.id); + ultimaCarpeta.findOne({ idEfector: idOrganizacion }, function (err, data: any) { + if (err) { + return next(err); + } + if (data) { + let update = { + ultimaCarpeta: data.ultimaCarpeta + 1 + }; + ultimaCarpeta.update({ idEfector: idOrganizacion }, { $set: update }, { new: true }, function (errUpdate, dataUpdate) { + if (err) { + return next(errUpdate); + } + res.json(dataUpdate); + }); + } else { + res.json(); + } + }); + } +}); + +export = router; diff --git a/modules/turnos/schemas/carpetaPaciente.ts b/modules/carpetas/schemas/carpetaPaciente.ts similarity index 100% rename from modules/turnos/schemas/carpetaPaciente.ts rename to modules/carpetas/schemas/carpetaPaciente.ts diff --git a/modules/carpetas/schemas/ultimaCarpeta.ts b/modules/carpetas/schemas/ultimaCarpeta.ts new file mode 100644 index 0000000000..b16aecf602 --- /dev/null +++ b/modules/carpetas/schemas/ultimaCarpeta.ts @@ -0,0 +1,10 @@ +import * as mongoose from 'mongoose'; + +let ultimaCarpetaSchema = new mongoose.Schema({ + idEfector: String, + ultimaCarpeta: Number + +}); + +let ultimaCarpeta = mongoose.model('ultimaCarpeta', ultimaCarpetaSchema, 'ultimaCarpeta'); +export = ultimaCarpeta; diff --git a/modules/estadistica/pecas/controller/agenda.ts b/modules/estadistica/pecas/controller/agenda.ts index 5da6f2d1b0..0c9e56e98a 100644 --- a/modules/estadistica/pecas/controller/agenda.ts +++ b/modules/estadistica/pecas/controller/agenda.ts @@ -1,6 +1,6 @@ +import fs = require('fs'); import async = require('async'); import * as agendaModel from '../../../turnos/schemas/agenda'; -import { toArray } from '../../../../utils/utils'; import * as mongoose from 'mongoose'; import * as moment from 'moment'; import { model as organizacion } from '../../../../core/tm/schemas/organizacion'; @@ -17,6 +17,10 @@ let config = { connectionTimeout: 10000, requestTimeout: 45000 }; +const type = 'PECAS-' + (new Date()).toISOString(); +const outputFile = type + '.json'; + +let total = 0; /** * Actualiza la tabla pecas_consolidado de la BD Andes @@ -24,246 +28,355 @@ let config = { * @export consultaPecas() * @returns resultado */ -export async function consultaPecas() { +export async function consultaPecas(start, end) { + // console.log('consultaPecas'); try { poolTurnos = await new sql.ConnectionPool(config).connect(); } catch (ex) { + // console.log('ex', ex); return (ex); } const query_limit = 10000000000; let match = { - 'horaInicio': { - $gt: new Date('2018-05-01T00:00:00.000-03:00') - }, - 'horaFin': { - $lt: new Date('2018-05-31T23:59:00.000-03:00') - }, + '$and': [ + // { updatedAt: { $gt: new Date('2018-07-02T00:00:00.000-03:00') } }, + // { updatedAt: { $lt: new Date('2018-07-02T23:00:00.000-03:00') } } + { updatedAt: { $gt: new Date(start) } }, + { updatedAt: { $lt: new Date(end) } } + ], 'bloques': { $ne: null }, 'bloques.turnos': { $ne: null }, - // 'estado': { - // $eq: 'auditada' - // } - '$or': [{ - estado: { - $ne: 'suspendida' - } - }, { - estado: { - $ne: 'planificacion' - } - }, { - estado: { - $ne: 'pausada' - } - }], + '$or': [ + { + estado: { + $ne: 'planificacion' + } + }, + { + estado: { + $ne: 'pausada' + } + }, + { + estado: { + $ne: 'borrada' + } + }], }; try { let agendas = agendaModel.aggregate([ { $match: match }, { $limit: query_limit } - ]).cursor({ async: true }).exec( - async function (error, cursor) { - if (error) { - return(error); - } - agendas = await toArray(cursor); - agendas.forEach((a) => { - // En cada agenda se recorren los bloques - async.every(a.bloques, (b) => { - // RESTA REALIZAR LO MISMO PARA LOS SOBRETURNOS - async.every((b as any).turnos, async (t: any) => { - auxiliar(a, t); - }); - }); - async.every((a as any).sobreturnos, async (t: any) => { - auxiliar(a, t); - }); + ]).cursor({ batchSize: 10000000000 }).exec(); + agendas.eachAsync((a, error) => { + if (error) { + // console.log('error ', error); + return (error); + } + // Se recorren los turnos dentro de los bloques + async.every(a.bloques, (b, indexB) => { + async.every((b as any).turnos, async (t: any, indexT) => { + auxiliar(a, b, t); }); }); + // Se recorren los sobreturnos + async.every((a as any).sobreturnos, async (t: any, indexT) => { + auxiliar(a, null, t); + }); + }); } catch (error) { - return(error); + return (error); } } -async function auxiliar(a: any, t: any) { +// castea cada turno asignado y lo inserta en la tabla Sql +async function auxiliar(a: any, b: any, t: any) { let turno: any = {}; - if (t.estado === 'asignado' && t.paciente && t.asistencia && t.asistencia === 'asistio' && t.diagnostico.codificaciones - && t.diagnostico.codificaciones.length > 0 && t.diagnostico.codificaciones[0].codificacionAuditoria - && t.diagnostico.codificaciones[0].codificacionAuditoria.codigo) { - let efector = await getEfector(a.organizacion._id) as any; - let idEfector = efector.codigo; - let tipoEfector = efector.tipoEfector; - turno.idEfector = parseInt(idEfector, 10); - turno.Organizacion = a.organizacion.nombre; - turno.idTurno = String(t._id); - turno.FechaConsulta = moment(t.horaInicio).format('YYYYMMDD'); - turno.HoraTurno = moment(t.horaInicio).format('HH:mm').toString(); - turno.Periodo = parseInt(moment(t.horaInicio).format('YYYYMM').toString(), 10); - turno.DNI = Number(t.paciente.documento); - turno.Apellido = t.paciente.apellido; - turno.Nombres = t.paciente.nombre; - let carpetas = t.paciente.carpetaEfectores.filter(x => String(x.organizacion._id) === String(a.organizacion._id)); - if (Array(carpetas).length > 0) { - turno.HC = carpetas[0] ? (carpetas[0] as any).nroCarpeta : null; - } else { - turno.HC = null; - } - turno.codSexo = String(t.paciente.sexo) === 'femenino' ? String(2) : String(1); - turno.Sexo = t.paciente.sexo; - turno.FechaNacimiento = (t.paciente.fechaNacimiento ? moment(t.paciente.fechaNacimiento).format('YYYYMMDD') : '-'); - let objectoEdad = calcularEdad(t.paciente.fechaNacimiento); - - turno.Edad = objectoEdad.valor; - turno.uniEdad = objectoEdad.unidad; - turno.CodRangoEdad = objectoEdad.CodRangoEdad; - turno.RangoEdad = objectoEdad.RangoEdad; - turno.Peso = null; - turno.Talla = null; - turno.TAS = null; - turno.TAD = null; - turno.IMC = null; - turno.RCVG = null; - - // Diagnóstico 1 - if (t.diagnostico && t.diagnostico.codificaciones - && t.diagnostico.codificaciones.length > 0 - && t.diagnostico.codificaciones[0].codificacionAuditoria - && t.diagnostico.codificaciones[0].codificacionAuditoria.codigo) { - turno.Diag1Codigo = t.diagnostico.codificaciones[0].codificacionAuditoria.codigo; - turno.Diag1Capitulo = await getCapitulo(turno.Diag1Codigo); - turno.Desc1Diag = t.diagnostico.codificaciones[0].codificacionAuditoria.nombre; - turno.ConsC2 = t.diagnostico.codificaciones[0].codificacionAuditoria.c2 ? 'SI' : 'NO'; - turno.Tipodeconsulta = t.diagnostico.codificaciones[0].primeraVez ? 'Primera vez' : 'Ulterior'; - turno.Principal = 1; - turno.Diag1Grupo = ''; - if (t.diagnostico.codificaciones[0].codificacionProfesional && t.diagnostico.codificaciones[0].codificacionProfesional.codigo) { - turno.codifica = 'PROFESIONAL'; - } else { - turno.codifica = 'NO PROFESIONAL'; - } + let turnoConPaciente = t.estado === 'asignado' && t.paciente && t.asistencia; + // if (t.estado === 'asignado' && t.paciente && t.asistencia) { + let efector = await getEfector(a.organizacion._id) as any; + let idEfector = efector ? efector.codigo : null; + let tipoEfector = efector ? efector.tipoEfector : null; + turno.tipoPrestacion = (turnoConPaciente && t.tipoPrestacion && t.tipoPrestacion.term) ? t.tipoPrestacion.term : null; + turno.idEfector = parseInt(idEfector, 10); + turno.Organizacion = a.organizacion.nombre; + turno.idAgenda = a._id; + turno.FechaAgenda = moment(a.horaInicio).format('YYYYMMDD'); + turno.HoraAgenda = moment(a.horaInicio).format('HH:mm').toString(); + turno.estadoAgenda = a.estado; + turno.accesoDirectoProgramado = (b && b.accesoDirectoProgramado) ? b.accesoDirectoProgramado : null; + turno.reservadoProfesional = (b && b.reservadoProfesional) ? b.reservadoProfesional : null; + turno.reservadoGestion = (b && b.reservadoGestion) ? b.reservadoGestion : null; + turno.accesoDirectoDelDia = (b && b.accesoDirectoDelDia) ? b.accesoDirectoDelDia : null; + turno.idTurno = String(t._id); + turno.FechaConsulta = moment(t.horaInicio).format('YYYYMMDD'); + turno.HoraTurno = moment(t.horaInicio).format('HH:mm').toString(); + turno.Periodo = parseInt(moment(t.horaInicio).format('YYYYMM').toString(), 10); + turno.DNI = turnoConPaciente ? Number(t.paciente.documento) : null; + turno.Apellido = turnoConPaciente ? t.paciente.apellido : null; + turno.Apellido = turnoConPaciente ? turno.Apellido.toString().replace('\'', '\'\'') : null; + turno.Nombres = turnoConPaciente ? t.paciente.nombre : null; + let carpetas = turnoConPaciente ? t.paciente.carpetaEfectores.filter(x => String(x.organizacion._id) === String(a.organizacion._id)) : []; + if (Array(carpetas).length > 0) { + turno.HC = carpetas[0] ? (carpetas[0] as any).nroCarpeta : null; + } else { + turno.HC = null; + } + turno.codSexo = turnoConPaciente ? String(t.paciente.sexo) === 'femenino' ? String(2) : String(1) : null; + turno.Sexo = turnoConPaciente ? t.paciente.sexo : null; + turno.FechaNacimiento = (turnoConPaciente && t.paciente.fechaNacimiento ? moment(t.paciente.fechaNacimiento).format('YYYYMMDD') : ''); + let objectoEdad = (t.paciente && turno.FechaNacimiento) ? calcularEdad(t.paciente.fechaNacimiento) : null; - } else { - turno.Diag1Codigo = null; - turno.Diag1Capitulo = null; - turno.Desc1Diag = null; - turno.Diag1Grupo = null; - turno.ConsC2 = null; - turno.Tipodeconsulta = null; - turno.Principal = 0; - turno.codifica = null; + turno.Edad = t.paciente && turno.fechaNacimiento ? objectoEdad.valor : null; + turno.uniEdad = t.paciente && turno.fechaNacimiento ? objectoEdad.unidad : null; + turno.CodRangoEdad = t.paciente && turno.fechaNacimiento ? objectoEdad.CodRangoEdad : null; + turno.RangoEdad = t.paciente && turno.fechaNacimiento ? objectoEdad.RangoEdad : null; + turno.Peso = null; + turno.Talla = null; + turno.TAS = null; + turno.TAD = null; + turno.IMC = null; + turno.RCVG = null; + turno.codifica = null; + turno.Diag1CodigoOriginal = null; + turno.Desc1DiagOriginal = null; + turno.Diag1CodigoAuditado = null; + turno.Desc1DiagAuditado = null; + turno.conceptId1 = null; + turno.term1 = null; + turno.Principal = 0; + turno.Tipodeconsulta = null; + turno.ConsC2 = null; + turno.asistencia = turnoConPaciente && t.asistencia ? t.asistencia : null; + turno.reasignado = turnoConPaciente && t.reasignado && t.reasignado.siguiente ? 'SI' : 'NO'; + // Diagnóstico 1 ORIGINAL + if (t.diagnostico.codificaciones.length > 0 && t.diagnostico.codificaciones[0] && t.diagnostico.codificaciones[0].primeraVez !== undefined) { + turno.primeraVez1 = (t.diagnostico.codificaciones[0].primeraVez === true) ? 1 : 0; + } else { + turno.primeraVez1 = null; + } + if (t.diagnostico.codificaciones.length > 0 && t.diagnostico.codificaciones[0].codificacionProfesional) { + turno.codifica = 'PROFESIONAL'; + if (t.diagnostico.codificaciones[0].codificacionProfesional.cie10 && t.diagnostico.codificaciones[0].codificacionProfesional.cie10.codigo) { + turno.Diag1CodigoOriginal = t.diagnostico.codificaciones[0].codificacionProfesional.cie10.codigo; + turno.Desc1DiagOriginal = t.diagnostico.codificaciones[0].codificacionProfesional.cie10.nombre; } - - // Diagnóstico 2 - if (t.diagnostico && t.diagnostico.codificaciones - && t.diagnostico.codificaciones.length > 1 - && t.diagnostico.codificaciones[1].codificacionAuditoria - && t.diagnostico.codificaciones[1].codificacionAuditoria.codigo) { - turno.Diag2Codigo = t.diagnostico.codificaciones[1].codificacionAuditoria.codigo; - turno.Diag2Capitulo = await getCapitulo(turno.Diag2Codigo); - turno.Desc2Diag = t.diagnostico.codificaciones[1].codificacionAuditoria.nombre; - turno.Diag2Grupo = ''; - } else { - turno.Diag2Codigo = null; - turno.Diag2Capitulo = null; - turno.Desc2Diag = null; - turno.Diag2Grupo = null; + if (t.diagnostico.codificaciones[0].codificacionProfesional.snomed && t.diagnostico.codificaciones[0].codificacionProfesional.snomed.conceptId) { + turno.conceptId1 = t.diagnostico.codificaciones[0].codificacionProfesional.snomed.conceptId; + turno.term1 = t.diagnostico.codificaciones[0].codificacionProfesional.snomed.term; } + } else { + turno.codifica = 'NO PROFESIONAL'; + } + // Diagnóstico 1 AUDITADO + if (t.diagnostico.codificaciones.length > 0 && t.diagnostico.codificaciones[0].codificacionAuditoria && t.diagnostico.codificaciones[0].codificacionAuditoria.codigo) { + turno.Diag1CodigoAuditado = t.diagnostico.codificaciones[0].codificacionAuditoria.codigo; + turno.Desc1DiagAuditado = t.diagnostico.codificaciones[0].codificacionAuditoria.nombre; + turno.ConsC2 = t.diagnostico.codificaciones[0].codificacionAuditoria.c2 ? 'SI' : 'NO'; + turno.Tipodeconsulta = t.diagnostico.codificaciones[0].primeraVez ? 'Primera vez' : 'Ulterior'; + turno.Principal = 1; + } - // Diagnóstico 3 - if (t.diagnostico && t.diagnostico.codificaciones - && t.diagnostico.codificaciones.length > 2 - && t.diagnostico.codificaciones[2].codificacionAuditoria - && t.diagnostico.codificaciones[2].codificacionAuditoria.codigo) { - turno.Diag3Codigo = t.diagnostico.codificaciones[2].codificacionAuditoria.codigo; - turno.Diag3Capitulo = await getCapitulo(turno.Diag2Codigo); - turno.Desc3Diag = t.diagnostico.codificaciones[2].codificacionAuditoria.nombre; - turno.Diag3Grupo = ''; - } else { - turno.Diag3Codigo = null; - turno.Diag3Capitulo = null; - turno.Desc3Diag = null; - turno.Diag3Grupo = null; + // Diagnóstico 2 ORIGINAL + turno.Diag2CodigoOriginal = null; + turno.Desc2DiagOriginal = null; + turno.Diag2CodigoAuditado = null; + turno.Desc2DiagAuditado = null; + turno.conceptId2 = null; + turno.term2 = null; + if (t.diagnostico.codificaciones.length > 1 && t.diagnostico.codificaciones[1] && t.diagnostico.codificaciones[1].primeraVez !== undefined) { + turno.primeraVez2 = (t.diagnostico.codificaciones[1].primeraVez === true) ? 1 : 0; + } else { + turno.primeraVez2 = null; + } + if (t.diagnostico.codificaciones.length > 1 && t.diagnostico.codificaciones[1].codificacionProfesional) { + if (t.diagnostico.codificaciones[1].codificacionProfesional.cie10 && t.diagnostico.codificaciones[1].codificacionProfesional.cie10.codigo) { + turno.Diag2CodigoOriginal = t.diagnostico.codificaciones[1].codificacionProfesional.cie10.codigo; + turno.Desc2DiagOriginal = t.diagnostico.codificaciones[1].codificacionProfesional.cie10.nombre; + } + if (t.diagnostico.codificaciones[1].codificacionProfesional.snomed && t.diagnostico.codificaciones[1].codificacionProfesional.snomed.conceptId) { + turno.conceptId2 = t.diagnostico.codificaciones[1].codificacionProfesional.snomed.conceptId; + turno.term2 = t.diagnostico.codificaciones[1].codificacionProfesional.snomed.term; } - turno.Profesional = (a.profesionales && a.profesionales[0] && a.profesionales.length > 0 ? a.profesionales.map(pr => pr.apellido + ', ' + pr.nombre).join('; ') : 'Sin profesionales'); - turno.TipoProfesional = null; - turno.CodigoEspecialidad = null; - turno.Especialidad = null; - turno.CodigoServicio = null; - turno.Servicio = (a.espacioFisico && a.espacioFisico.servicio ? a.espacioFisico.servicio.nombre : 'Sin servicio'); - turno.IdBarrio = null; - turno.Barrio = null; - turno.IdLocalidad = null; - turno.Localidad = null; - turno.IdDpto = null; - turno.Departamento = null; - turno.IdPcia = null; - turno.Provincia = null; - turno.IdNacionalidad = null; - turno.Nacionalidad = null; - turno.Calle = null; - turno.Altura = null; - turno.Piso = null; - turno.Depto = null; - turno.Manzana = null; - turno.ConsObst = t.tipoPrestacion.term.includes('obstetricia') ? 'SI' : 'NO'; - turno.TipoConsultorio = null; - turno.IdObraSocial = (t.paciente.obraSocial && t.paciente.obraSocial.codigo) ? t.paciente.obraSocial.codigo : null; - turno.ObraSocial = (t.paciente.obraSocial && t.paciente.obraSocial.nombre) ? t.paciente.obraSocial.nombre : null; - if (tipoEfector && tipoEfector === 'Centro de Salud') { - turno.TipoEfector = '1'; + } + // Diagnóstico 2 AUDITADO + if (t.diagnostico.codificaciones.length > 1 && t.diagnostico.codificaciones[1].codificacionAuditoria && t.diagnostico.codificaciones[1].codificacionAuditoria.codigo) { + turno.Diag2CodigoAuditado = t.diagnostico.codificaciones[1].codificacionAuditoria.codigo; + turno.Desc2DiagAuditado = t.diagnostico.codificaciones[1].codificacionAuditoria.nombre; + } + // Diagnóstico 3 ORIGINAL + turno.Diag3CodigoOriginal = null; + turno.Desc3DiagOriginal = null; + turno.Diag3CodigoAuditado = null; + turno.Desc3DiagAuditado = null; + turno.conceptId3 = null; + turno.term3 = null; + if (t.diagnostico.codificaciones.length > 2 && t.diagnostico.codificaciones[2] && t.diagnostico.codificaciones[2].primeraVez !== undefined) { + turno.primeraVez3 = (t.diagnostico.codificaciones[2].primeraVez === true) ? 1 : 0; + } else { + turno.primeraVez3 = null; + } + if (t.diagnostico.codificaciones.length > 2 && t.diagnostico.codificaciones[2].codificacionProfesional) { + if (t.diagnostico.codificaciones[2].codificacionProfesional.cie10 && t.diagnostico.codificaciones[2].codificacionProfesional.cie10.codigo) { + turno.Diag3CodigoOriginal = t.diagnostico.codificaciones[2].codificacionProfesional.cie10.codigo; + turno.Desc3DiagOriginal = t.diagnostico.codificaciones[2].codificacionProfesional.cie10.nombre; } - if (tipoEfector && tipoEfector === 'Hospital') { - turno.TipoEfector = '2'; + if (t.diagnostico.codificaciones[2].codificacionProfesional.snomed && t.diagnostico.codificaciones[2].codificacionProfesional.snomed.conceptId) { + turno.conceptId3 = t.diagnostico.codificaciones[2].codificacionProfesional.snomed.conceptId; + turno.term3 = t.diagnostico.codificaciones[2].codificacionProfesional.snomed.term; } - turno.DescTipoEfector = tipoEfector; - turno.IdZona = null; - turno.Zona = null; - turno.SubZona = null; - turno.idEfectorSuperior = null; - turno.EfectorSuperior = null; - turno.AreaPrograma = null; + } + // Diagnóstico 3 AUDITADO + if (t.diagnostico.codificaciones.length > 2 && t.diagnostico.codificaciones[2].codificacionAuditoria && t.diagnostico.codificaciones[2].codificacionAuditoria.codigo) { + turno.Diag3CodigoAuditado = t.diagnostico.codificaciones[2].codificacionAuditoria.codigo; + turno.Desc3DiagAuditado = t.diagnostico.codificaciones[2].codificacionAuditoria.nombre; + } - turno.IdPaciente = String(t.paciente.id); - turno.Longitud = ''; - turno.Latitud = ''; - turno.Cantidad = 1; - turno.idproceso = 0; - turno.telefono = t.paciente && t.paciente.telefono ? t.paciente.telefono : ''; - try { - let query = 'INSERT INTO dbo.Pecas_consolidado ( idEfector, Efector, idTurno, FechaConsulta, HoraTurno, Periodo, DNI, Apellido, Nombres, HC, CodSexo, Sexo, ' + - 'FechaNacimiento, Edad, UniEdad, CodRangoEdad, RangoEdad, Peso, Talla, TAS, TAD, IMC, RCVG, Diag1Codigo, Diag1Capitulo, Desc1Diag, Diag1Grupo, Diag2Codigo, ' + - 'Diag2Capitulo, Desc2Diag, Diag2Grupo, Diag3Codigo, Diag3Capitulo, Desc3Diag, Diag3Grupo, Profesional, TipoProfesional, CodigoEspecialidad, Especialidad, ' + - 'CodigoServicio, Servicio, IdBarrio, Barrio, IdLocalidad, Localidad, IdDpto, Departamento, IdPcia, Provincia, IdNacionalidad, Nacionalidad, Calle, Altura, ' + - 'Piso, Depto, Manzana, ConsC2, ConsObst, Tipodeconsulta, Principal, TipoConsultorio, IdObraSocial, ObraSocial, TipoEfector, DescTipoEfector, IdZona, Zona, ' + - 'SubZona, idEfectorSuperior, EfectorSuperior, AreaPrograma, IdPaciente, Longitud, Latitud, Cantidad, idproceso, codifica, telefono) ' + - 'VALUES ( ' + turno.idEfector + ',\'' + turno.Organizacion + '\',\'' + turno.idTurno + '\',\'' + turno.FechaConsulta + '\',\'' + turno.HoraTurno + - '\',' + turno.Periodo + ',' + turno.DNI + ',\'' + turno.Apellido + '\',\'' + turno.Nombres + '\',\'' + turno.HC + '\',\'' + turno.codSexo + - '\',\'' + turno.Sexo + '\',\'' + turno.FechaNacimiento + '\',' + turno.Edad + ',\'' + turno.uniEdad + '\',\'' + turno.CodRangoEdad + - '\',\'' + turno.RangoEdad + '\' ,' + turno.Peso + ',' + turno.Talla + ',\'' + turno.TAS + '\',\'' + turno.TAD + '\',\'' + turno.IMC + - '\',\'' + turno.RCVG + '\',\'' + turno.Diag1Codigo + '\',\'' + turno.Diag1Capitulo + '\',\'' + turno.Desc1Diag + '\',\'' + turno.Diag1Grupo + - '\',\'' + turno.Diag2Codigo + '\',\'' + turno.Diag2Capitulo + '\',\'' + turno.Desc2Diag + '\',\'' + turno.Diag2Grupo + - '\',\'' + turno.Diag3Codigo + '\',\'' + turno.Diag3Capitulo + '\',\'' + turno.Desc3Diag + '\',\'' + turno.Diag3Grupo + - '\',\'' + turno.Profesional + '\',\'' + turno.TipoProfesional + '\',' + turno.CodigoEspecialidad + ',\'' + turno.Especialidad + - '\',' + turno.CodigoServicio + ',\'' + turno.Servicio + '\',' + turno.IdBarrio + ',\'' + turno.Barrio + '\',' + turno.IdLocalidad + - ',\'' + turno.Localidad + '\',' + turno.IdDpto + ',\'' + turno.Departamento + '\',' + turno.IdPcia + ',\'' + turno.Provincia + - '\',' + turno.IdNacionalidad + ',\'' + turno.Nacionalidad + '\',\'' + turno.Calle + '\',\'' + turno.Altura + '\',\'' + turno.Piso + - '\',\'' + turno.Depto + '\',\'' + turno.Manzana + '\',\'' + turno.ConsC2 + '\',\'' + turno.ConsObst + '\',\'' + turno.Tipodeconsulta + - '\',\'' + turno.Principal + '\',\'' + turno.TipoConsultorio + '\',' + turno.IdObraSocial + ',\'' + turno.ObraSocial + '\',\'' + turno.TipoEfector + - '\',\'' + turno.DescTipoEfector + '\',' + turno.IdZona + ',\'' + turno.Zona + '\',\'' + turno.SubZona + '\',' + turno.idEfectorSuperior + - ',\'' + turno.EfectorSuperior + '\',\'' + turno.AreaPrograma + '\',\'' + turno.IdPaciente + '\',\'' + turno.Longitud + '\',\'' + turno.Latitud + - '\',' + turno.Cantidad + ',' + turno.idproceso + ',\'' + turno.codifica + '\',\'' + turno.telefono + '\') '; - // console.log('query ', query); - await executeQuery(query); - } catch (error) { - return (error); + turno.Profesional = (a.profesionales && a.profesionales[0] && a.profesionales.length > 0 ? a.profesionales.map(pr => String(pr.apellido) + ', ' + String(pr.nombre)).join('; ') : 'Sin profesionales'); + turno.Profesional = turno.Profesional.toString().replace('\'', '\'\''); + turno.TipoProfesional = null; + turno.CodigoEspecialidad = null; + turno.Especialidad = null; + turno.CodigoServicio = null; + turno.Servicio = (a.espacioFisico && a.espacioFisico.servicio ? a.espacioFisico.servicio.nombre : 'Sin servicio'); + turno.IdBarrio = null; + turno.Barrio = null; + turno.IdLocalidad = null; + turno.Localidad = null; + turno.IdDpto = null; + turno.Departamento = null; + turno.IdPcia = null; + turno.Provincia = null; + turno.IdNacionalidad = null; + turno.Nacionalidad = null; + turno.Calle = null; + turno.Altura = null; + turno.Piso = null; + turno.Depto = null; + turno.Manzana = null; + turno.ConsObst = t.tipoPrestacion && t.tipoPrestacion.term.includes('obstetricia') ? 'SI' : 'NO'; + turno.IdObraSocial = (turnoConPaciente && t.paciente.obraSocial && t.paciente.obraSocial.codigo) ? t.paciente.obraSocial.codigo : null; + turno.ObraSocial = (turnoConPaciente && t.paciente.obraSocial && t.paciente.obraSocial.nombre) ? t.paciente.obraSocial.nombre : null; + if (tipoEfector && tipoEfector === 'Centro de Salud') { + turno.TipoEfector = '1'; + } + if (tipoEfector && tipoEfector === 'Hospital') { + turno.TipoEfector = '2'; + } + if (tipoEfector && tipoEfector === 'Puesto Sanitario') { + turno.TipoEfector = '3'; + } + if (tipoEfector && tipoEfector === 'ONG') { + turno.TipoEfector = '6'; + } + turno.DescTipoEfector = tipoEfector; + turno.IdZona = null; + turno.Zona = null; + turno.SubZona = null; + turno.idEfectorSuperior = null; + turno.EfectorSuperior = null; + turno.AreaPrograma = null; + + turno.IdPaciente = (t.paciente) ? String(t.paciente.id) : null; + turno.Longitud = ''; + turno.Latitud = ''; + turno.telefono = t.paciente && t.paciente.telefono ? t.paciente.telefono : ''; + turno.estadoAgenda = a.estado; + try { + // Chequear si el turno existe en sql PECAS y depeniendo de eso hacer un insert o un update + + // se verifica si existe el turno en sqñ + let queryInsert = 'INSERT INTO dbo.Pecas_consolidado_1' + + '(idEfector, Efector, TipoEfector, DescTipoEfector, IdZona, Zona, SubZona, idEfectorSuperior, EfectorSuperior, AreaPrograma, ' + + 'idAgenda, FechaAgenda, HoraAgenda, estadoAgenda, turnosProgramados, turnosProfesional, turnosLlaves, turnosDelDia, ' + + 'idTurno, FechaConsulta, HoraTurno, Periodo, Tipodeconsulta, Principal, ConsC2, ConsObst, tipoPrestacion, ' + + 'DNI, Apellido, Nombres, HC, CodSexo, Sexo, FechaNacimiento, Edad, UniEdad, CodRangoEdad, RangoEdad, IdObraSocial, ObraSocial, IdPaciente, telefono, ' + + 'IdBarrio, Barrio, IdLocalidad, Localidad, IdDpto, Departamento, IdPcia, Provincia, IdNacionalidad, Nacionalidad, ' + + 'Calle, Altura, Piso, Depto, Manzana, Longitud, Latitud, ' + + 'Peso, Talla, TAS, TAD, IMC, RCVG, asistencia, reasignado, ' + + 'Diag1CodigoOriginal, Desc1DiagOriginal, Diag1CodigoAuditado, Desc1DiagAuditado, SnomedConcept1, SnomedTerm1, primeraVez1, ' + + 'Diag2CodigoOriginal, Desc2DiagOriginal, Diag2CodigoAuditado, Desc2DiagAuditado, SnomedConcept2, SnomedTerm2, primeraVez2, ' + + 'Diag3CodigoOriginal, Desc3DiagOriginal, Diag3CodigoAuditado, Desc3DiagAuditado, SnomedConcept3, SnomedTerm3, primeraVez3, ' + + 'Profesional, TipoProfesional, CodigoEspecialidad, Especialidad, CodigoServicio, Servicio, ' + + 'codifica) ' + + 'VALUES ( ' + turno.idEfector + ',\'' + turno.Organizacion + '\',\'' + turno.TipoEfector + '\',\'' + turno.DescTipoEfector + + '\',' + turno.IdZona + ',\'' + turno.Zona + '\',\'' + turno.SubZona + '\',' + turno.idEfectorSuperior + ',\'' + turno.EfectorSuperior + '\',\'' + turno.AreaPrograma + + '\',\'' + turno.idAgenda + '\',\'' + turno.FechaAgenda + '\',\'' + turno.HoraAgenda + '\',\'' + turno.estadoAgenda + + '\',' + turno.accesoDirectoProgramado + ',' + turno.reservadoProfesional + ',' + turno.reservadoGestion + ',' + turno.accesoDirectoDelDia + + ',\'' + turno.idTurno + '\',\'' + turno.FechaConsulta + '\',\'' + turno.HoraTurno + '\',' + turno.Periodo + ',\'' + turno.Tipodeconsulta + '\',\'' + turno.Principal + + '\',\'' + turno.ConsC2 + '\',\'' + turno.ConsObst + '\',\'' + turno.tipoPrestacion + + // DATOS PACIENTE + '\',' + turno.DNI + ',\'' + turno.Apellido + '\',\'' + turno.Nombres + '\',\'' + turno.HC + '\',\'' + turno.codSexo + + '\',\'' + turno.Sexo + '\',\'' + turno.FechaNacimiento + '\',' + turno.Edad + ',\'' + turno.uniEdad + '\',\'' + turno.CodRangoEdad + + '\',\'' + turno.RangoEdad + '\',' + turno.IdObraSocial + ',\'' + turno.ObraSocial + '\',\'' + turno.IdPaciente + '\',\'' + turno.telefono + + '\',' + turno.IdBarrio + ',\'' + turno.Barrio + '\',' + turno.IdLocalidad + + ',\'' + turno.Localidad + '\',' + turno.IdDpto + ',\'' + turno.Departamento + '\',' + turno.IdPcia + ',\'' + turno.Provincia + + '\',' + turno.IdNacionalidad + ',\'' + turno.Nacionalidad + '\',\'' + turno.Calle + '\',\'' + turno.Altura + '\',\'' + turno.Piso + + '\',\'' + turno.Depto + '\',\'' + turno.Manzana + '\',\'' + turno.Longitud + '\',\'' + turno.Latitud + + '\',' + turno.Peso + ',' + turno.Talla + ',\'' + turno.TAS + '\',\'' + turno.TAD + '\',\'' + turno.IMC + '\',\'' + turno.RCVG + + // DATOS CONSULTA + '\',\'' + turno.asistencia + '\',\'' + turno.reasignado + + '\',\'' + turno.Diag1CodigoOriginal + '\',\'' + turno.Desc1DiagOriginal + '\',\'' + turno.Diag1CodigoAuditado + '\',\'' + turno.Desc1DiagAuditado + + '\',\'' + turno.conceptId1 + '\',\'' + turno.term1 + '\',' + turno.primeraVez1 + + ',\'' + turno.Diag2CodigoOriginal + '\',\'' + turno.Desc2DiagOriginal + '\',\'' + turno.Diag2CodigoAuditado + '\',\'' + turno.Desc2DiagAuditado + + '\',\'' + turno.conceptId2 + '\',\'' + turno.term2 + '\',' + turno.primeraVez2 + + ',\'' + turno.Diag3CodigoOriginal + '\',\'' + turno.Desc3DiagOriginal + '\',\'' + turno.Diag3CodigoAuditado + '\',\'' + turno.Desc3DiagAuditado + + '\',\'' + turno.conceptId3 + '\',\'' + turno.term3 + '\',' + turno.primeraVez3 + + ',\'' + turno.Profesional + '\',\'' + turno.TipoProfesional + '\',' + turno.CodigoEspecialidad + ',\'' + turno.Especialidad + + '\',' + turno.CodigoServicio + ',\'' + turno.Servicio + '\',\'' + turno.codifica + '\') '; + let rta = await existeTurnoPecas(turno.idTurno); + if (rta.recordset.length > 0 && rta.recordset[0].idTurno) { + let queryDel = await eliminaTurnoPecas(turno.idTurno); + if (queryDel.rowsAffected[0] > 0) { + await executeQuery(queryInsert); + } + } else { + await executeQuery(queryInsert); } + } catch (error) { + // console.log('error ', error); + return (error); } } +// function getEspecialidad(conceptId, idOrganizacion: string) { +// return new Promise((resolve, reject) => { +// var especialidad = ''; +// configPrestacion.find({ +// 'tipoPrestacion.conceptId': conceptId, +// 'organizacionesSips._id': mongoose.Types.ObjectId(idOrganizacion) +// }).exec().then(configuraciones => { +// if (configuraciones.length > 0) { +// let organizacionesSips = configuraciones[0]['organizacionesSips']; +// if (organizacionesSips && organizacionesSips.length > 0) { +// var datos = organizacionesSips.filter((elem) => String(elem._id) === String(idOrganizacion)); +// if (datos && datos.length > 0) { +// especialidad = datos[0].nombreEspecialidad; +// } +// } +// } +// resolve(especialidad); +// }); +// }); +// } + +async function existeTurnoPecas(turno: any) { + let result = await new sql.Request(poolTurnos) + .input('idTurno', sql.VarChar(50), turno) + .query('SELECT idTurno FROM dbo.Pecas_consolidado_1 WHERE idTurno = @idTurno'); + return result; +} + +async function eliminaTurnoPecas(turno: any) { + let result = await new sql.Request(poolTurnos) + .input('idTurno', sql.VarChar(50), turno) + .query('DELETE FROM dbo.Pecas_consolidado_1 WHERE idTurno = @idTurno'); + return result; +} function getEfector(idOrganizacion: any) { return new Promise((resolve, reject) => { @@ -276,16 +389,16 @@ function getEfector(idOrganizacion: any) { if ((data as any).codigo) { let codigoSips = (data as any).codigo as any; let efector = { - codigo: codigoSips.sips, + codigo: codigoSips.sips ? codigoSips.sips : null, tipoEfector: (data as any).tipoEstablecimiento.nombre }; if (codigoSips) { resolve(efector); } else { - resolve(''); + resolve(null); } } else { - resolve(''); + resolve(null); } }); }); @@ -367,6 +480,11 @@ async function executeQuery(query: any) { return result.recordset[0].id; } } catch (err) { + // console.log('err ', err); + // console.log('query ', query); + let jsonWrite = fs.appendFileSync(outputFile, query + '\r', { + encoding: 'utf8' + }); return (err); } } diff --git a/modules/obraSocial/routes/obraSocial.ts b/modules/obraSocial/routes/obraSocial.ts index d78b70e2e2..f3e79d51f4 100644 --- a/modules/obraSocial/routes/obraSocial.ts +++ b/modules/obraSocial/routes/obraSocial.ts @@ -1,5 +1,6 @@ import * as express from 'express'; import { puco } from '../schemas/puco'; +import { obraSocial } from '../schemas/obraSocial'; let router = express.Router(); @@ -10,12 +11,24 @@ let router = express.Router(); * @returns */ router.get('/puco/', async function (req, res, next) { + if (req.query.dni) { puco.find({ dni: Number.parseInt(req.query.dni) }, function (err, data) { if (err) { return next(err); } - res.json(data); + if (data && data.length > 0) { + let primerOS: any = data[0]; + obraSocial.findOne({ codigoPuco: primerOS.codigoFinanciador }, function (err1, data1: any) { + if (err1) { + return next(err1); + } + primerOS['financiador'] = data1.nombre; + res.json(primerOS); + }); + } else { + res.json(null); + } }); } else { res.status(400).json({ msg: 'Parámetros incorrectos' }); diff --git a/modules/turnos/controller/agenda.ts b/modules/turnos/controller/agenda.ts index 5b09a1f2a9..09728e97ea 100644 --- a/modules/turnos/controller/agenda.ts +++ b/modules/turnos/controller/agenda.ts @@ -858,32 +858,39 @@ export function updatePaciente(pacienteModified, turno) { return next(err); } let bloques: any = data.bloques; - let indiceTurno = 0; - let i = 0; - let j = 0; - let band = true; - while (i < bloques.length && band) { - j = 0; - while (j < bloques[i].turnos.length && band) { - if (bloques[i].turnos[j]._id.toString() === turno._id.toString()) { - indiceTurno = j; - band = false; + let indiceTurno = -1; + + for (let bloque of bloques) { + indiceTurno = bloque.turnos.findIndex(elem => elem._id.toString() === turno._id.toString()); + + if (indiceTurno > 0) { // encontro el turno en este bloque? + bloque.turnos[indiceTurno].paciente.nombre = pacienteModified.nombre; + bloque.turnos[indiceTurno].paciente.apellido = pacienteModified.apellido; + bloque.turnos[indiceTurno].paciente.documento = pacienteModified.documento; + if (pacienteModified.contacto && pacienteModified.contacto[0]) { + bloque.turnos[indiceTurno].paciente.telefono = pacienteModified.contacto[0].valor; } - j++; + bloque.turnos[indiceTurno].paciente.carpetaEfectores = pacienteModified.carpetaEfectores; + bloque.turnos[indiceTurno].paciente.fechaNacimiento = pacienteModified.fechaNacimiento; } - if (!band) { - bloques[i].turnos[indiceTurno].paciente.nombre = pacienteModified.nombre; - bloques[i].turnos[indiceTurno].paciente.apellido = pacienteModified.apellido; - bloques[i].turnos[indiceTurno].paciente.documento = pacienteModified.documento; + } + + if (indiceTurno < 0) { // no se encontro el turno en los bloques de turnos? + indiceTurno = data.sobreturnos.findIndex(elem => elem._id.toString() === turno._id.toString()); + + if (indiceTurno > 0) { // esta el turno entre los sobreturnos? + data.sobreturnos[indiceTurno].paciente.nombre = pacienteModified.nombre; + data.sobreturnos[indiceTurno].paciente.apellido = pacienteModified.apellido; + data.sobreturnos[indiceTurno].paciente.documento = pacienteModified.documento; if (pacienteModified.contacto && pacienteModified.contacto[0]) { - bloques[i].turnos[indiceTurno].paciente.telefono = pacienteModified.contacto[0].valor; + data.sobreturnos[indiceTurno].paciente.telefono = pacienteModified.contacto[0].valor; } - bloques[i].turnos[indiceTurno].paciente.carpetaEfectores = pacienteModified.carpetaEfectores; - bloques[i].turnos[indiceTurno].paciente.fechaNacimiento = pacienteModified.fechaNacimiento; + data.sobreturnos[indiceTurno].paciente.carpetaEfectores = pacienteModified.carpetaEfectores; + data.sobreturnos[indiceTurno].paciente.fechaNacimiento = pacienteModified.fechaNacimiento; } - i++; } - if (!band) { + + if (indiceTurno > 0) { try { Auth.audit(data, (userScheduler as any)); saveAgenda(data); diff --git a/modules/turnos/controller/carpetasController/carpetasController.ts b/modules/turnos/controller/carpetasController/carpetasController.ts new file mode 100644 index 0000000000..ac15df5fd2 --- /dev/null +++ b/modules/turnos/controller/carpetasController/carpetasController.ts @@ -0,0 +1,149 @@ +import * as mongoose from 'mongoose'; +import * as utils from './utils'; +import * as config from './config'; +import * as sql from 'mssql'; +import { model as Organizaciones } from '../../../../core/tm/schemas/organizacion'; +import * as carpetaPaciente from '../../../carpetas/schemas/carpetaPaciente'; +import * as configPrivate from '../../../../config.private'; +import { LoggerJobs } from '../../../../utils/loggerJobs'; + +import * as debug from 'debug'; +let logger = debug('carpetasJob'); + +let db; +let organizacion; +const connection = { + user: configPrivate.conSql.auth.user, + password: configPrivate.conSql.auth.password, + server: configPrivate.conSql.serverSql.server, + database: configPrivate.conSql.serverSql.database +}; +const findUpdateCarpeta = async (paciente) => { + let documentoPaciente = paciente['numeroDocumento']; + let condicion = { documento: documentoPaciente }; + let carpetaNueva = { + organizacion: { + _id: organizacion._id, + nombre: organizacion.nombre + }, + idPaciente: paciente['idPaciente'], + nroCarpeta: paciente['historiaClinica'] + }; + // buscamos en carpetaPaciente los pacientes con documentoPaciente + try { + let lista = await carpetaPaciente.find(condicion).exec(); + if (lista && lista.length) { + let carpeta: any = lista[0]; + + let carpetas = carpeta.carpetaEfectores.filter(c => { + // logger('c.organizacion: ', c.organizacion._id, 'organizacion._id: ', organizacion._id); + return (String(c.organizacion._id) === String(organizacion._id)); + }); + // logger('CARPETAS', carpetas.length); + if (carpetas && carpetas.length) { + carpeta.carpetaEfectores.map(c => { + if (c.organizacion._id === organizacion._id) { + return c.nroCarpeta = paciente['historiaClinica']; + } + }); + } else { + carpeta.carpetaEfectores.push(carpetaNueva); + } + + if (carpeta._id) { + // logger('actualizo', documentoPaciente); + carpetaPaciente.update({ '_id': carpeta._id }, { + $set: + { 'carpetaEfectores': carpeta.carpetaEfectores } + }).exec(); + } + } else { + // El dni no existe en la colección carpetaPaciente + // Se guarda el documento en la colección carpetaPaciente + let nuevo = new carpetaPaciente({ + 'documento': documentoPaciente, + 'carpetaEfectores': [carpetaNueva] + }); + nuevo.save(); + } + } catch (err) { + logger('Error en findUpdateCarpeta', err); + LoggerJobs.log('actualizar carpetas', 'Error en findUpdateCarpeta: ' + err); + } +}; + + +export async function migrar() { + try { + let efectores: any = await Organizaciones.find({ 'integracionActiva': true }).exec(); + if (efectores && efectores.length > 0) { + + logger('Efectores---->', efectores); + // ejecutamos la migracion para cada efector en paralelo. + for (let efector of efectores) { + await migrarEfector(efector); + } + + } else { + logger('Código de organización inválido, verifica el codigo Sisa ingresado'); + } + } catch (err) { + logger('Error al obtener la organización', err); + LoggerJobs.log('actualizar carpetas', 'Error al obtener la organización: ' + err); + } + + async function migrarEfector(element: any) { + + logger('Migrando carpetas de pacientes en: ', element.nombre); + let idSips = await getIdSips(element); + logger('codigo ', element.codigo.sisa); + let q_limites = `select MIN(PAC.idPaciente) as min, COUNT(PAC.idPaciente) as max from dbo.sys_paciente as PAC inner + join dbo.Sys_RelHistoriaClinicaEfector AS rhe ON rhe.idPaciente = pac.idPaciente + WHERE PAC.activo = 1` + ' AND rhe.idEfector=' + idSips; + logger('Se actualizarán las carpetas de los pacientes desde SIPS de ', element.nombre); + organizacion = element; + if (idSips) { + try { + // let consulta = config.consultaPacienteSipsHC + ' AND efector.idEfector=' + element.codigo.idSips + ' AND PAC.idPaciente between @offset and @limit'; + let consulta = config.consultaCarpetaPacienteSips + ' AND rhe.idEfector=' + idSips.idEfector; + logger('EFECTOR', idSips, organizacion.nombre); + let connectionPool = await sql.connect(connection); + sql.on('error', err => { + logger('Error SQL---->', err); + }); + await utils.migrar(consulta, q_limites, 10000, findUpdateCarpeta, connectionPool); + sql.close(); + logger('Migracion de datos completa desde ', organizacion.nombre); + } catch (err) { + logger('Error migrando en efector' + organizacion.nombre, err); + LoggerJobs.log('actualizar carpetas', 'Error migrando en efector' + organizacion.nombre + ': ' + err); + } + } else { + logger('ID sips inválido'); + } + + } + + async function getIdSips(efector) { + + try { + const connectionPool = await sql.connect(connection); + sql.on('error', err => { + logger('Error SQL---->', err); + }); + + let querySips = `select idEfector from dbo.sys_Efector as efector WHERE codigoSisa=` + `'` + String(efector.codigo.sisa) + `'`; + let resultado = await connectionPool.request() + .query(querySips); + resultado = resultado.recordset[0]; + logger('IDSIPS', resultado); + sql.close(); + return resultado; + } catch (err) { + logger('Error obteniendo ID sips', err); + LoggerJobs.log('actualizar carpetas', 'Error obteniendo ID sips: ' + err); + } + } +} + + diff --git a/modules/turnos/controller/carpetasController/config.ts b/modules/turnos/controller/carpetasController/config.ts new file mode 100644 index 0000000000..10cb184210 --- /dev/null +++ b/modules/turnos/controller/carpetasController/config.ts @@ -0,0 +1,92 @@ + +export const consultaPaciente = 'SELECT PAC.idPaciente,PAC.nombre, PAC.apellido, convert(varchar(20),PAC.numeroDocumento) as numeroDocumento,idsexo,convert(varchar(10),PAC.fechaNacimiento,103) AS fechaNacimiento, ' + + 'PAC.calle, PAC.numero, PAC.piso, PAC.departamento, PAC.manzana, PAC.lote, PAC.parcela, L.idLocalidad,' + + 'L.nombre AS nombreLocalidad, L.codigoPostal, PROVINCIA.nombre as nombreProvincia,PAC.idProvinciaDomicilio, PAIS.nombre as nombrePais, PAC.idPais, ' + + 'PAC.informacionContacto, convert(varchar(10),PAC.fechaAlta,103) AS fechaAlta, convert(varchar(10),PAC.fechaDefuncion,103) AS fechaDefuncion, convert(varchar(10),PAC.fechaUltimaActualizacion,103) AS fechaUltimaActualizacion, PAC.telefonofijo, ' + + 'PAC.telefonocelular, PAC.email, ESTCIVIL.idEstadoCivil, MOTNI.idMotivoNI, MOTNI.nombre AS nombreMotivo ' + + 'FROM sys_paciente AS PAC ' + + 'LEFT JOIN dbo.Sys_EstadoCivil AS ESTCIVIL ON (ESTCIVIL.idEstadoCivil = PAC.idEstadoCivil) ' + + 'LEFT JOIN dbo.Sys_MotivoNI AS MOTNI ON (MOTNI.idMotivoNI = PAC.idMotivoNI) ' + + 'INNER JOIN sys_pais AS PAIS ON (PAIS.idPais = PAC.idPais) ' + + 'LEFT JOIN dbo.Sys_Provincia AS PROVINCIA ON (PROVINCIA.idProvincia = PAC.idProvinciaDomicilio) ' + + 'LEFT JOIN dbo.Sys_Localidad AS L ON (L.idLocalidad=Pac.idLocalidad) ' + + 'WHERE PAC.activo = 1 '; + +export const consultaPacienteSipsHC = `SELECT PAC.idPaciente,PAC.nombre, PAC.apellido, convert(varchar(20),PAC.numeroDocumento) as numeroDocumento,idsexo,convert(varchar(10),PAC.fechaNacimiento,103) AS fechaNacimiento, + PAC.calle, rhe.historiaClinica as historiaClinica, efector.nombre as efector, efector.idEfector as efectorId, PAC.piso, PAC.departamento, PAC.manzana, PAC.lote, PAC.parcela, L.idLocalidad, + L.nombre AS nombreLocalidad, L.codigoPostal, PROVINCIA.nombre as nombreProvincia,PAC.idProvinciaDomicilio, PAIS.nombre as nombrePais, PAC.idPais, + PAC.informacionContacto, convert(varchar(10),PAC.fechaAlta,103) AS fechaAlta, convert(varchar(10),PAC.fechaDefuncion,103) AS fechaDefuncion, convert(varchar(10),PAC.fechaUltimaActualizacion,103) AS fechaUltimaActualizacion, PAC.telefonofijo, + PAC.telefonocelular, PAC.email, ESTCIVIL.idEstadoCivil, MOTNI.idMotivoNI, MOTNI.nombre AS nombreMotivo + FROM dbo.sys_paciente AS PAC + inner join dbo.Sys_RelHistoriaClinicaEfector AS rhe ON rhe.idPaciente = pac.idPaciente + inner join dbo.Sys_Efector as efector on rhe.idefector = efector.idEfector + LEFT JOIN dbo.Sys_EstadoCivil AS ESTCIVIL ON (ESTCIVIL.idEstadoCivil = PAC.idEstadoCivil) + LEFT JOIN dbo.Sys_MotivoNI AS MOTNI ON (MOTNI.idMotivoNI = PAC.idMotivoNI) + INNER JOIN sys_pais AS PAIS ON (PAIS.idPais = PAC.idPais) + LEFT JOIN dbo.Sys_Provincia AS PROVINCIA ON (PROVINCIA.idProvincia = PAC.idProvinciaDomicilio) + LEFT JOIN dbo.Sys_Localidad AS L ON (L.idLocalidad=Pac.idLocalidad) + WHERE PAC.activo = 1`; + +export const consultaCarpetaPacienteSips = `SELECT PAC.idPaciente,PAC.nombre, PAC.apellido, convert(varchar(20),PAC.numeroDocumento) as numeroDocumento,idsexo,convert(varchar(10),PAC.fechaNacimiento,103) AS fechaNacimiento, + PAC.calle, rhe.historiaClinica as historiaClinica FROM dbo.sys_paciente AS PAC + inner join dbo.Sys_RelHistoriaClinicaEfector AS rhe ON rhe.idPaciente = pac.idPaciente + WHERE PAC.activo = 1`; + +export const consultaPacienteHeller = 'SELECT * ' + + 'FROM PacientesHeller '; + +export const consultaPacienteHPN = 'SELECT TOP 10 PHPN.*, PD.domicilio,PD.detalle,PD.audit_datetime as fechaDomicilio ' + + 'FROM PacientesHPN PHPN ' + + 'LEFT JOIN Pacientes_Domicilios PD ON (PHPN.id = PD.idPaciente) ' + + 'LEFT JOIN Pacientes_Contactos PC ON (PHPN.id = PC.idPaciente)'; + +export const consultaPacienteHC = `SELECT * FROM Historias_Clinicas HC + LEFT JOIN Pacientes PHPN ON (PHPN.legacy_idHistoriaClinica = HC.Codigo) + LEFT JOIN Localidades L ON (HC.HC_Direccion_Localidad =L.Loc_Codigo) + LEFT JOIN Provincias P ON (L.Loc_Provincia= P.Prov_Codigo) + WHERE HC_Dado_de_baja='" + "false'`; + +export const consultaPacCluster = 'SELECT PAC.idPaciente,PAC.nombre, PAC.apellido, PAC.numeroDocumento,idsexo,convert(varchar(10),PAC.fechaNacimiento,103) AS fechaNacimiento, ' + + 'PAC.calle, PAC.numero, PAC.piso, PAC.departamento, PAC.manzana, PAC.lote, PAC.parcela, L.idLocalidad,' + + 'L.nombre AS nombreLocalidad, L.codigoPostal, PROVINCIA.nombre as nombreProvincia,PAC.idProvinciaDomicilio, PAIS.nombre as nombrePais, PAC.idPais, ' + + 'PAC.informacionContacto, convert(varchar(10),PAC.fechaAlta,103) AS fechaAlta, convert(varchar(10),PAC.fechaDefuncion,103) AS fechaDefuncion, convert(varchar(10),PAC.fechaUltimaActualizacion,103) AS fechaUltimaActualizacion, PAC.telefonofijo, ' + + 'PAC.telefonocelular, PAC.email, ESTCIVIL.idEstadoCivil, MOTNI.idMotivoNI, MOTNI.nombre AS nombreMotivo, CP.cluster_id ' + + 'FROM sys_paciente AS PAC ' + + 'LEFT JOIN dbo.Sys_EstadoCivil AS ESTCIVIL ON (ESTCIVIL.idEstadoCivil = PAC.idEstadoCivil) ' + + 'LEFT JOIN dbo.Sys_MotivoNI AS MOTNI ON (MOTNI.idMotivoNI = PAC.idMotivoNI) ' + + 'INNER JOIN sys_pais AS PAIS ON (PAIS.idPais = PAC.idPais) ' + + 'LEFT JOIN dbo.Sys_Provincia AS PROVINCIA ON (PROVINCIA.idProvincia = PAC.idProvinciaDomicilio) ' + + 'LEFT JOIN dbo.Sys_Localidad AS L ON (L.idLocalidad=Pac.idLocalidad) ' + + 'LEFT JOIN dbo.clusterPacientes2 AS CP ON (CP.record_id = Pac.idPaciente) ' + + 'WHERE PAC.activo = 1 and (PAC.idPaciente>=@inicio and PAC.idPaciente<=@fin)'; + +export const consultaRelaciones = 'SELECT P.idPaciente, ' + + 'PAR.NumeroDocumento AS DocumentoRel, Par.Apellido AS ApellidoRel,Par.Nombre AS NombreRel, ' + + 'Par.tipoParentesco AS TipoParentesco ' + + 'FROM Sys_Parentesco AS Par ' + + 'LEFT JOIN Sys_Paciente AS P ON (Par.idPaciente = P.idPaciente) ' + + 'WHERE ((P.activo =1) AND (Par.idParentesco>0) AND (Par.numeroDocumento > 0))'; + +export const consultaCie10 = 'SELECT * FROM Sys_CIE10 order by ID ' + + 'offset @offset rows fetch next @limit rows only'; + +export const weights = { + identity: 0.55, + name: 0.10, + gender: 0.3, + birthDate: 0.05 +}; + +export const organizacionSips = { + // progreso + // codigoSisa: '50580352167107', + // idSips: '217' + // mariano moreno + // codigoSisa: '50580352167101', + // idSips: '208' + // villa farrel + codigoSisa: '50580352167126', + idSips: '207' +}; + + diff --git a/modules/turnos/controller/carpetasController/utils.ts b/modules/turnos/controller/carpetasController/utils.ts new file mode 100644 index 0000000000..5778f46ec5 --- /dev/null +++ b/modules/turnos/controller/carpetasController/utils.ts @@ -0,0 +1,52 @@ +import * as config from '../../../../config.private'; +import * as sql from 'mssql'; +import * as debug from 'debug'; +import { LoggerJobs } from '../../../../utils/loggerJobs'; +const logger = debug('carpetasJob'); + +export function migrar(q_objeto, q_limites, page_size, addNuevoObjeto, connectionPool) { + let max; + const connection = { + user: config.sqlCarpetasJob.user, + password: config.sqlCarpetasJob.password, + server: config.sqlCarpetasJob.server, + database: config.sqlCarpetasJob.database, + requestTimeout: config.sqlCarpetasJob.requestTimeout + }; + + async function navegar(pool, index) { + if (index < max) { + let offset = index + page_size; + return pool.request() + .query(q_objeto) + .then(objetos => { + if (objetos.recordset && objetos.recordset.length) { + let nuevosObjetos = objetos.recordset.map(o => addNuevoObjeto(o)); + return Promise.all(nuevosObjetos).then(res => + navegar(pool, offset + 1) + ); + } else { return navegar(pool, offset + 1); } + }); + } else { + pool.close(); + } + } + + async function runQuery() { + try { + logger('RunQuery...'); + if (connectionPool.pool.max) { + logger(connectionPool.pool.min + ' - ' + connectionPool.pool.max); + let min = connectionPool.pool.min; + max = connectionPool.pool.max; + return navegar(connectionPool, min); + } + } catch (err) { + logger('Catched error en runQuery() ---->', err); + LoggerJobs.log('actualizar carpetas', 'Error catched en runQuery(): ' + err); + + } + } + + return runQuery(); +} diff --git a/modules/turnos/controller/turnosController.ts b/modules/turnos/controller/turnosController.ts index 5f5802807a..2c747f9bcf 100644 --- a/modules/turnos/controller/turnosController.ts +++ b/modules/turnos/controller/turnosController.ts @@ -133,3 +133,151 @@ export function getTurno(req) { }); } + + +export function getHistorialPaciente(req) { + return new Promise(async (resolve, reject) => { + if (req.query && req.query.pacienteId) { + try { + let pipelineTurno = []; + let turnos = []; + let turno; + pipelineTurno = [ + + { + '$match': { + 'estado': { + '$in': [ + 'publicada', + 'pendienteAsistencia', + 'pendienteAuditoria', + 'auditada', + 'disponible', + 'pausada' + ] + }, + 'bloques.turnos.paciente.id': mongoose.Types.ObjectId(req.query.pacienteId) + } + }, + { + '$unwind': { + 'path': '$bloques' + } + }, + { + '$unwind': { + 'path': '$bloques.turnos' + } + }, + { + '$match': { + 'bloques.turnos.paciente.id': mongoose.Types.ObjectId(req.query.pacienteId) + } + }, + { + '$group': { + '_id': { + 'id': '$_id', + 'turnoId': '$bloques.turnos._id' + }, + 'agenda_id': { + '$first': '$_id' + }, + 'bloque_id': { '$first': '$bloques._id' }, + 'organizacion': { + '$first': '$organizacion' + }, + 'profesionales': { + '$first': '$profesionales' + }, + 'turno': { + '$first': '$bloques.turnos' + } + } + }, + { + '$sort': { + 'turno.horaInicio': -1.0 + } + } + + ]; + + let pipelineSobreturno = []; + pipelineSobreturno = [ + + { + '$match': { + 'estado': { + '$in': [ + 'publicada', + 'pendienteAsistencia', + 'pendienteAuditoria', + 'auditada', + 'disponible', + 'pausada' + ] + }, + 'sobreturnos.paciente.id': mongoose.Types.ObjectId(req.query.pacienteId) + } + }, + { + '$unwind': { + 'path': '$sobreturnos' + } + }, + { + '$match': { + 'sobreturnos.paciente.id': mongoose.Types.ObjectId(req.query.pacienteId) + } + }, + { + '$group': { + '_id': { + 'id': '$_id', + 'turnoId': '$sobreturnos._id' + }, + 'agenda_id': { + '$first': '$_id' + }, + 'organizacion': { + '$first': '$organizacion' + }, + 'profesionales': { + '$first': '$profesionales' + }, + 'turno': { + '$first': '$sobreturnos' + } + } + }, + { + '$sort': { + 'turno.horaInicio': -1.0 + } + } + + ]; + let data2 = await agenda.aggregate(pipelineTurno).exec(); + let sobreturnos = await agenda.aggregate(pipelineSobreturno).exec(); + data2 = data2.concat(sobreturnos); + data2.forEach(elem => { + turno = elem.turno; + turno.id = turno._id; + turno.agenda_id = elem.agenda_id; + turno.bloque_id = (elem.bloque_id) ? elem.bloque_id : null; + turno.organizacion = elem.organizacion; + turno.profesionales = elem.profesionales; + turno.paciente = elem.turno.paciente; + turnos.push(turno); + }); + resolve(turnos); + } catch (error) { + reject(error); + } + } else { + reject('Datos insuficientes'); + } + }); + +} diff --git a/modules/turnos/routes/turno.ts b/modules/turnos/routes/turno.ts index 489a04900f..ee33a8037a 100644 --- a/modules/turnos/routes/turno.ts +++ b/modules/turnos/routes/turno.ts @@ -26,6 +26,15 @@ router.get('/turno/:id*?', async function (req, res, next) { } }); +router.get('/historial', async function (req, res, next) { + try { + let resultado = await turnosController.getHistorialPaciente(req); + res.json(resultado); + } catch (err) { + return next(err); + } + +}); /** @@ -230,22 +239,36 @@ router.patch('/turno/:idTurno/:idBloque/:idAgenda', function (req, res, next) { if (err) { return next(err); } - let indexBloque = (data as any).bloques.findIndex(bloq => { - return (bloq.id === req.params.idBloque); - }); - let indexTurno = (data as any).bloques[indexBloque].turnos.findIndex(t => { - return (t.id === req.params.idTurno); - }); let update = {}; - if (req.body.avisoSuspension) { - let etiquetaAvisoSuspension: string = 'bloques.' + indexBloque + '.turnos.' + indexTurno + '.avisoSuspension'; - update[etiquetaAvisoSuspension] = req.body.avisoSuspension; - } - if (req.body.motivoConsulta) { - let etiquetaMotivoConsulta: string = 'bloques.' + indexBloque + '.turnos.' + indexTurno + '.motivoConsulta'; - update[etiquetaMotivoConsulta] = req.body.motivoConsulta; + if (req.params.idBloque !== '-1') { + let indexBloque = (data as any).bloques.findIndex(bloq => { + return (bloq.id === req.params.idBloque); + }); + let indexTurno = (data as any).bloques[indexBloque].turnos.findIndex(t => { + return (t.id === req.params.idTurno); + }); + if (req.body.avisoSuspension) { + let etiquetaAvisoSuspension: string = 'bloques.' + indexBloque + '.turnos.' + indexTurno + '.avisoSuspension'; + update[etiquetaAvisoSuspension] = req.body.avisoSuspension; + } + if (req.body.motivoConsulta) { + let etiquetaMotivoConsulta: string = 'bloques.' + indexBloque + '.turnos.' + indexTurno + '.motivoConsulta'; + update[etiquetaMotivoConsulta] = req.body.motivoConsulta; + } + } else { + let indexTurno = (data as any).sobreturnos.findIndex(sobreturno => Object.is(req.params.idTurno, String(sobreturno._id))); + + if (req.body.avisoSuspension) { + let etiquetaAvisoSuspension: string = 'sobreturnos.' + indexTurno + '.avisoSuspension'; + update[etiquetaAvisoSuspension] = req.body.avisoSuspension; + } + if (req.body.motivoConsulta) { + let etiquetaMotivoConsulta: string = 'sobreturnos.' + indexTurno + '.motivoConsulta'; + update[etiquetaMotivoConsulta] = req.body.motivoConsulta; + } } + let query = { _id: req.params.idAgenda, }; diff --git a/package-lock.json b/package-lock.json index 62238a97b7..ff040f3cd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "api", - "version": "3.3.2", + "version": "3.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index f105cd7cbc..c3eb6add0b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "api", - "version": "3.3.2", + "version": "3.4.0", "description": "API para ANDES", "main": "index.js", "dependencies": { diff --git a/utils/loggerJobs.ts b/utils/loggerJobs.ts new file mode 100644 index 0000000000..f2f380be12 --- /dev/null +++ b/utils/loggerJobs.ts @@ -0,0 +1,14 @@ +import { logJobs } from '../core/log/schemas/logJobs'; + +export class LoggerJobs { + + public static log(job, msg, callback?): any { + let newLogJobs = new logJobs({ + job: job, + error: msg, + createdAt: new Date(), + }); + newLogJobs.save(callback); + return newLogJobs; + } +}