コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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());
        }
コード例 #3
0
            /// <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);
            }