/// <summary> /// Devuelve los últimos resultados de la encuesta de síntomas de una ficha médica /// </summary> /// <param name="idFichaMedica">Identificador de la ficha médica</param> /// <returns></returns> public (ResultadoEncuestaSintomas Fiebre, ResultadoEncuestaSintomas Otros, ResultadoEncuestaSintomas Contacto) GetLastResultadoEncuesta(List <ResultadoEncuestaSintomas> ultimaEncuesta) { ResultadoEncuestaSintomas utiDeclFiebre = ultimaEncuesta?.SingleOrDefault(re => re.IdTipoSintomaNavigation.Nombre == TipoSintomas.ParameterTypes.Fiebre.ToString()); ResultadoEncuestaSintomas utiDeclOtros = ultimaEncuesta?.SingleOrDefault(re => re.IdTipoSintomaNavigation.Nombre == TipoSintomas.ParameterTypes.OtrosSintomas.ToString()); ResultadoEncuestaSintomas utiDeclContato = ultimaEncuesta?.SingleOrDefault(re => re.IdTipoSintomaNavigation.Nombre == TipoSintomas.ParameterTypes.Contacto.ToString()); return(utiDeclFiebre, utiDeclOtros, utiDeclContato); }
/// <summary> /// Crea un nuevo pasaporte para el empleadoa partir de su información actual e histórica. /// </summary> /// <param name="empleado">Empleado.</param> /// <param name="localDateOfRegistry">Fecha.</param> /// <param name="estados">Estados</param> /// <param name="currentEstadoPasaporte">Estado actual del pasaporte</param> /// <param name="pcrList">Listado de resultados PCR</param> /// <param name="lastAnalitIgG">Último resultado de a´nalítica IgG</param> /// <param name="lastTestRapido">Último test rápido</param> /// <param name="lastFiebre">Última valoración de fiebre</param> /// <param name="utiDeclFiebre">Última declaració de fiebre</param> /// <param name="utiDeclOtros">Última declaración de otros síntomas</param> /// <param name="utiDeclContato">Última declaración de contacto</param> public void CreateWithStatedCalculated(Empleado empleado, DateTimeOffset localDateOfRegistry, Dictionary <string, EstadoPasaporte> estados, EstadoPasaporte currentEstadoPasaporte, List <ResultadoTestPcr> pcrList, ValoracionParametroMedico lastAnalitIgG, ValoracionParametroMedico lastAnalitIgM, ResultadoTestMedico lastTestRapido, ValoracionParametroMedico lastFiebre, ResultadoEncuestaSintomas utiDeclFiebre, ResultadoEncuestaSintomas utiDeclOtros, ResultadoEncuestaSintomas utiDeclContato) { StateMatrizData matriz = new StateMatrizData(pcrList, lastAnalitIgG, lastAnalitIgM, lastTestRapido, lastFiebre, utiDeclFiebre, utiDeclOtros, utiDeclContato); EstadoPasaporte newEstadoPasaporte = matriz.Calculate(estados); // lanzo evento OnCalculateNewStateEvent(new CalculateNewStateEventArgs() { Matrix = matriz }); /// En una transición calculada no se puede ir a mejor según las prioridades de estado if ((currentEstadoPasaporte?.IdColorEstadoNavigation?.Prioridad ?? 9999) < newEstadoPasaporte.IdColorEstadoNavigation.Prioridad) { // Mejora el color ---> viejo estado CreateFromChoosenState(empleado, localDateOfRegistry, currentEstadoPasaporte, false); OnAddOldPassportEventt(new EventArgs()); return; } if ((currentEstadoPasaporte?.IdTipoEstadoNavigation?.Prioridad ?? 9999) < newEstadoPasaporte.IdTipoEstadoNavigation.Prioridad) { // Mejora el tipo de estado ---> viejo estado CreateFromChoosenState(empleado, localDateOfRegistry, currentEstadoPasaporte, false); OnAddOldPassportEventt(new EventArgs()); return; } // Empeora el color -> nuevo estado // Se mantiene el color, empeora tipo de estado -> nuevo estado // Se mantiene el color, se mantiene le tipo de estado -> nuevo estado CreateFromChoosenState(empleado, localDateOfRegistry, newEstadoPasaporte, false); OnAddNewPassportEvent(new EventArgs()); }
/// <summary> /// Handle /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public override async Task <bool> Handle(RegisterSymptomInquiryResultRequest request, CancellationToken cancellationToken) { idEmpleado = request.IdEmployee; Empleado empleado = await ValidacionEmpleado(request.IdEmployee).ConfigureAwait(false); if (empleado == null || empleado.IdFichaMedica == null) // Si no hay ficha médica no está bien registrado. { throw new MultiMessageValidationException(new ErrorMessage() { Code = "NOT_FOUND", Message = string.Format(ValidatorsMessages.NOT_FOUND, ValidatorFields.Empleado) }); } var symptoms = await repositorySintomas.GetAll().ToDictionaryAsync(e => e.Id).ConfigureAwait(false); if (request.Values.Any(rf => !symptoms.ContainsKey(rf.Id))) { throw new MultiMessageValidationException(new ErrorMessage() { Code = "NOT_FOUND", Message = string.Format(ValidatorsMessages.NOT_FOUND, ValidatorFields.TipoSintoma) }); } var estados = await repositoryEstados.GetAll() .Include(c => c.IdTipoEstadoNavigation) .Include(c => c.IdColorEstadoNavigation) .ToDictionaryAsync(e => e.Nombre).ConfigureAwait(false); Guid grupoRespuestas = Guid.NewGuid(); List <ResultadoEncuestaSintomas> resultados = request.Values.Select(s => new ResultadoEncuestaSintomas() { IdFichaMedica = empleado.IdFichaMedica.Value, IdTipoSintomaNavigation = symptoms[s.Id], Valor = s.Value, GrupoRespuestas = grupoRespuestas }).ToList(); this.repositoryEncuesta.AddRange(resultados); await repositoryEncuesta.SaveChangesAsync().ConfigureAwait(false); //------------------------------------------------------------------------------------------- Pasaporte currentPassport = await GetLastPassportAsync(empleado.Id).ConfigureAwait(false); List <ResultadoTestPcr> pcrList = await GetAllResultadoPcrAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastAnalitIgG = await GetLastAnalisticIgG(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastAnalitIgM = await GetLastAnalisticIgM(empleado.IdFichaMedica.Value).ConfigureAwait(false); ResultadoTestMedico lastTestRapido = await GetLastTestRapidoAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); //ValoracionParametroMedico lastFiebre = await GetLastFiebreAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); ResultadoEncuestaSintomas fiebre = resultados.FirstOrDefault(c => c.IdTipoSintoma == symptoms.FirstOrDefault(d => d.Value.Nombre == "Fiebre").Value.Id); ResultadoEncuestaSintomas otros = resultados.FirstOrDefault(c => c.IdTipoSintoma == symptoms.FirstOrDefault(d => d.Value.Nombre == "OtrosSintomas").Value.Id); ResultadoEncuestaSintomas contacto = resultados.FirstOrDefault(c => c.IdTipoSintoma == symptoms.FirstOrDefault(d => d.Value.Nombre == "Contacto").Value.Id); createPassportService.CreateWithStatedCalculated(empleado, request.CurrentDeviceDateTime, estados, currentPassport?.IdEstadoPasaporteNavigation, pcrList, lastAnalitIgG, lastAnalitIgM, lastTestRapido, null, fiebre, otros, contacto); //------------------------------------------------------------------------------------------- await repositoryEmpleado.SaveChangesAsync().ConfigureAwait(false); return(true); }