diff --git a/core/tm/controller/profesional.ts b/core/tm/controller/profesional.ts index d7773febc2..32d5fec0b6 100644 --- a/core/tm/controller/profesional.ts +++ b/core/tm/controller/profesional.ts @@ -10,6 +10,7 @@ import { makeFsFirma } from '../schemas/firmaProf'; import { Profesional } from '../schemas/profesional'; import { Auth } from './../../../auth/auth.class'; import { findUsersByUsername } from './../../../auth/auth.controller'; +import { IProfesional } from '../interfaces/profesional.interface'; /** @@ -152,9 +153,48 @@ export async function search(filter, fields) { return await Profesional.aggregate(aggregate); } - +export async function searchMatriculaVigente(profesionalId: string) { + const _profesional: IProfesional = await Profesional.findById(profesionalId); + if (!_profesional) { + return null; + } + const filterFormaciones = (e) => { + const ultimaMatriculacion = e.matriculacion?.[e.matriculacion.length - 1]; + return e.matriculado && + ultimaMatriculacion && + !ultimaMatriculacion.baja?.fecha && + moment(ultimaMatriculacion.fin).isAfter(moment()); + }; + const formacionGrado = _profesional.formacionGrado ? + _profesional.formacionGrado + .filter(filterFormaciones) + .map(e => { + const ultimaMatriculacion = e.matriculacion[e.matriculacion.length - 1]; + return { + numero: ultimaMatriculacion.matriculaNumero, + fin: moment(ultimaMatriculacion.fin).valueOf() + }; + }) + .sort((a, b) => b.fin - a.fin) : []; + return formacionGrado.length ? formacionGrado[0].numero : searchUltimaMatricula(_profesional); +} +export function searchUltimaMatricula(profesional: IProfesional) { + let ultimaFechaFin: number | null = null; + let matriculaNumero: number | null = null; + + profesional.formacionGrado?.forEach((fg) => { + fg.matriculacion?.forEach(m => { + const fechaFin = moment(m.fin).valueOf(); + if (!ultimaFechaFin || fechaFin > ultimaFechaFin) { + ultimaFechaFin = fechaFin; + matriculaNumero = m.matriculaNumero; + } + }); + }); + return matriculaNumero; +} export async function searchMatriculas(profesionalId) { - const _profesional: any = await Profesional.findById(profesionalId); + const _profesional: IProfesional = await Profesional.findById(profesionalId); const filterFormaciones = (e) => { return e.matriculacion && e.matriculacion.length && !e.matriculacion[e.matriculacion.length - 1].baja.fecha && moment(e.matriculacion[e.matriculacion.length - 1].fin).isAfter(new Date()); }; diff --git a/core/tm/interfaces/profesional.interface.ts b/core/tm/interfaces/profesional.interface.ts index 6efe90fb08..ab99d5a3de 100644 --- a/core/tm/interfaces/profesional.interface.ts +++ b/core/tm/interfaces/profesional.interface.ts @@ -5,4 +5,9 @@ export interface IProfesional { fechaNacimiento: Date; sexo: string; genero: string; + profesionExterna?: any; + matriculaExterna?: string; + formacionPosgrado?: any; + formacionGrado?: any; + profesionalMatriculado?: boolean; } diff --git a/modules/huds/hudsAccesos.routes.ts b/modules/huds/hudsAccesos.routes.ts index e196b468cd..d6429e21de 100644 --- a/modules/huds/hudsAccesos.routes.ts +++ b/modules/huds/hudsAccesos.routes.ts @@ -3,7 +3,7 @@ import { Auth } from '../../auth/auth.class'; import { asyncHandler } from '@andes/api-tool'; import { logAcceso } from './hudsAccesos'; import { HudsAccesosCtr } from './hudsAccesos.controller'; -import { search } from './../../core/tm/controller/profesional'; +import { search, searchMatriculaVigente } from './../../core/tm/controller/profesional'; const router = express.Router(); @@ -27,8 +27,7 @@ router.post('/accesos/token', asyncHandler(async (req: any, res) => { const idProfesional = profesional ? profesional.id : null; let matricula = null; if (idProfesional) { - const datosProfesional: any = await search({ id: idProfesional }, { matricula: 1 }); - matricula = (datosProfesional.length && datosProfesional[0].matricula && datosProfesional[0].matricula.length) ? datosProfesional[0].matricula[0] : null; + matricula = await searchMatriculaVigente(idProfesional); } logAcceso(req, req.body.paciente.id, matricula, req.body.motivo, req.body.idTurno, req.body.idPrestacion, req.body.detalleMotivo); return res.json({ token: Auth.generateHudsToken(req.body.usuario, organizacionId, req.body.paciente) });